You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

299 lines
7.0 KiB

(function(a, b) {
var c = function(a, b, c) {
var d;
return function() {
function h() {
if (!c) a.apply(f, g);
d = null
}
var f = this,
g = arguments;
if (d) clearTimeout(d);
else if (c) a.apply(f, g);
d = setTimeout(h, b || 150)
}
};
jQuery.fn[b] = function(a) {
return a ? this.bind("resize", c(a)) : this.trigger(b)
}
})(jQuery, "smartresize"); (function(a) {
a.Gal = function(b, c) {
this.element = a(c);
this._init(b)
};
a.Gal.settings = {
selector: ".item",
width: 225,
gutter: 20,
animate: false,
animationOptions: {
speed: 200,
duration: 300,
effect: "fadeInOnAppear",
queue: true,
complete: function() {}
}
};
a.Gal.prototype = {
_init: function(b) {
var c = this;
this.name = this._setName(5);
this.gridArr = [];
this.gridArrAppend = [];
this.gridArrPrepend = [];
this.setArr = false;
this.setGrid = false;
this.setOptions;
this.cols = 0;
this.itemCount = 0;
this.prependCount = 0;
this.isPrepending = false;
this.appendCount = 0;
this.resetCount = true;
this.ifCallback = true;
this.box = this.element;
this.options = a.extend(true, {},
a.Gal.settings, b);
this.gridArr = a.makeArray(this.box.find(this.options.selector));
this.isResizing = false;
this.w = 0;
this.boxArr = [];
this._setCols();
this._renderGrid("append");
a(this.box).addClass("gridalicious");
a(window).smartresize(function() {
c.resize()
})
},
_setName: function(a, b) {
b = b ? b: "";
return a ? this._setName(--a, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt(Math.floor(Math.random() * 60)) + b) : b
},
_setCols: function() {
this.cols = Math.floor(this.box.width() / this.options.width);
diff = (this.box.width() - this.cols * this.options.width - this.options.gutter) / this.cols;
w = (this.options.width + diff) / this.box.width() * 100;
this.w = w;
for (var b = 0; b < this.cols; b++) {
var c = a("<div></div>").addClass("galcolumn").attr("id", "item" + b + this.name).css({
width: w + "%",
paddingLeft: this.options.gutter,
paddingBottom: this.options.gutter,
"float": "left",
"-webkit-box-sizing": "border-box",
"-moz-box-sizing": "border-box",
"-o-box-sizing": "border-box",
"box-sizing": "border-box"
});
this.box.append(c)
}
this.box.find(a("#clear" + this.name)).remove();
var d = a("<div></div>").css({
clear: "both",
height: "0",
width: "0",
display: "block"
}).attr("id", "clear" + this.name);
this.box.append(d)
},
_renderGrid: function(b, c, d, e) {
var f = [];
var g = [];
var h = [];
var i = 0;
var j = this.prependCount;
var k = this.appendCount;
var l = this.options.gutter;
var m = this.cols;
var n = this.name;
var o = 0;
var p = a(".galcolumn").width();
if (c) {
g = c;
if (b == "append") {
k += d;
i = this.appendCount
}
if (b == "prepend") {
this.isPrepending = true;
i = Math.round(d % m);
if (i <= 0) i = m
}
if (b == "renderAfterPrepend") {
k += d;
i = d
}
} else {
g = this.gridArr;
k = a(this.gridArr).size()
}
a.each(g,
function(c, d) {
var e = a(d);
var g = "100%";
if (e.hasClass("not-responsive")) {
g = "auto"
}
e.css({
marginBottom: l,
zoom: "1",
filter: "alpha(opacity=0)",
opacity: "0"
}).find("img, object, embed, iframe").css({
width: g,
height: "auto",
display: "block",
"margin-left": "auto",
"margin-right": "auto"
});
if (b == "prepend") {
i--;
a("#item" + i + n).prepend(e);
f.push(e);
if (i == 0) i = m
} else {
a("#item" + i + n).append(e);
f.push(e);
i++;
if (i >= m) i = 0;
if (k >= m) k = k - m
}
});
this.appendCount = k;
this.itemCount = i;
if (b == "append" || b == "prepend") {
if (b == "prepend") {
this._updateAfterPrepend(this.gridArr, g)
}
this._renderItem(f);
this.isPrepending = false
} else {
this._renderItem(this.gridArr)
}
},
_collectItems: function() {
var b = [];
a(this.box).find(this.options.selector).each(function(c) {
b.push(a(this))
});
return b
},
_renderItem: function(b) {
var c = this.options.animationOptions.speed;
var d = this.options.animationOptions.effect;
var e = this.options.animationOptions.duration;
var f = this.options.animationOptions.queue;
var g = this.options.animate;
var h = this.options.animationOptions.complete;
var i = 0;
var j = 0;
if (g === true && !this.isResizing) {
if (f === true && d == "fadeInOnAppear") {
if (this.isPrepending) b.reverse();
a.each(b,
function(d, f) {
setTimeout(function() {
a(f).animate({
opacity: "1.0"
},
e);
j++;
if (j == b.length) {
h.call(undefined, b)
}
},
i * c);
i++
})
} else if (f === false && d == "fadeInOnAppear") {
if (this.isPrepending) b.reverse();
a.each(b,
function(c, d) {
a(d).animate({
opacity: "1.0"
},
e);
j++;
if (j == b.length) {
if (this.ifCallback) {
h.call(undefined, b)
}
}
})
}
if (f === true && !d) {
a.each(b,
function(c, d) {
a(d).css({
opacity: "1",
filter: "alpha(opacity=1)"
});
j++;
if (j == b.length) {
if (this.ifCallback) {
h.call(undefined, b)
}
}
})
}
} else {
a.each(b,
function(b, c) {
a(c).css({
opacity: "1",
filter: "alpha(opacity=1)"
})
});
if (this.ifCallback) {
h.call(b)
}
}
},
_updateAfterPrepend: function(b, c) {
var d = this.gridArr;
a.each(c,
function(a, b) {
d.unshift(b)
});
this.gridArr = d
},
resize: function() {
this.box.find(a(".galcolumn")).remove();
this._setCols();
this.ifCallback = false;
this.isResizing = true;
this._renderGrid("append");
this.ifCallback = true;
this.isResizing = false
},
append: function(b) {
var c = this.gridArr;
var d = this.gridArrPrepend;
a.each(b,
function(a, b) {
c.push(b);
d.push(b)
});
this._renderGrid("append", b, a(b).size())
},
prepend: function(b) {
this.ifCallback = false;
this._renderGrid("prepend", b, a(b).size());
this.ifCallback = true
}
};
a.fn.gridalicious = function(b, c) {
if (typeof b === "string") {
this.each(function() {
var d = a.data(this, "gridalicious");
d[b].apply(d, [c])
})
} else {
this.each(function() {
a.data(this, "gridalicious", new a.Gal(b, this))
})
}
return this
}
})(jQuery);