summaryrefslogtreecommitdiff
path: root/_includes/scripts/lib/lazyload.js
diff options
context:
space:
mode:
Diffstat (limited to '_includes/scripts/lib/lazyload.js')
-rw-r--r--_includes/scripts/lib/lazyload.js143
1 files changed, 0 insertions, 143 deletions
diff --git a/_includes/scripts/lib/lazyload.js b/_includes/scripts/lib/lazyload.js
deleted file mode 100644
index 9911535..0000000
--- a/_includes/scripts/lib/lazyload.js
+++ /dev/null
@@ -1,143 +0,0 @@
-(function() {
- var Set = (function() {
- var add = function(item) {
- var i, data = this._data;
- for (i = 0; i < data.length; i++) {
- if (data[i] === item) {
- return;
- }
- }
- this.size ++;
- data.push(item);
- return data;
- };
-
- var Set = function(data) {
- this.size = 0;
- this._data = [];
- var i;
- if (data.length > 0) {
- for (i = 0; i < data.length; i++) {
- add.call(this, data[i]);
- }
- }
- };
- Set.prototype.add = add;
- Set.prototype.get = function(index) { return this._data[index]; };
- Set.prototype.has = function(item) {
- var i, data = this._data;
- for (i = 0; i < data.length; i++) {
- if (this.get(i) === item) {
- return true;
- }
- }
- return false;
- };
- Set.prototype.is = function(map) {
- if (map._data.length !== this._data.length) { return false; }
- var i, j, flag, tData = this._data, mData = map._data;
- for (i = 0; i < tData.length; i++) {
- for (flag = false, j = 0; j < mData.length; j++) {
- if (tData[i] === mData[j]) {
- flag = true;
- break;
- }
- }
- if (!flag) { return false; }
- }
- return true;
- };
- Set.prototype.values = function() {
- return this._data;
- };
- return Set;
- })();
-
- window.Lazyload = (function(doc) {
- var queue = {js: [], css: []}, sources = {js: {}, css: {}}, context = this;
- var createNode = function(name, attrs) {
- var node = doc.createElement(name), attr;
- for (attr in attrs) {
- if (attrs.hasOwnProperty(attr)) {
- node.setAttribute(attr, attrs[attr]);
- }
- }
- return node;
- };
- var end = function(type, url) {
- var s, q, qi, cbs, i, j, cur, val, flag;
- if (type === 'js' || type ==='css') {
- s = sources[type], q = queue[type];
- s[url] = true;
- for (i = 0; i < q.length; i++) {
- cur = q[i];
- if (cur.urls.has(url)) {
- qi = cur, val = qi.urls.values();
- qi && (cbs = qi.callbacks);
- for (flag = true, j = 0; j < val.length; j++) {
- cur = val[j];
- if (!s[cur]) {
- flag = false;
- }
- }
- if (flag && cbs && cbs.length > 0) {
- for (j = 0; j < cbs.length; j++) {
- cbs[j].call(context);
- }
- qi.load = true;
- }
- }
- }
- }
- };
- var load = function(type, urls, callback) {
- var s, q, qi, node, i, cur,
- _urls = typeof urls === 'string' ? new Set([urls]) : new Set(urls), val, url;
- if (type === 'js' || type ==='css') {
- s = sources[type], q = queue[type];
- for (i = 0; i < q.length; i++) {
- cur = q[i];
- if (_urls.is(cur.urls)) {
- qi = cur;
- break;
- }
- }
- val = _urls.values();
- if (qi) {
- callback && (qi.load || qi.callbacks.push(callback));
- callback && (qi.load && callback());
- } else {
- q.push({
- urls: _urls,
- callbacks: callback ? [callback] : [],
- load: false
- });
- for (i = 0; i < val.length; i++) {
- node = null, url = val[i];
- if (s[url] === undefined) {
- (type === 'js' ) && (node = createNode('script', { src: url }));
- (type === 'css') && (node = createNode('link', { rel: 'stylesheet', href: url }));
- if (node) {
- node.onload = (function(type, url) {
- return function() {
- end(type, url);
- };
- })(type, url);
- (doc.head || doc.body).appendChild(node);
- s[url] = false;
- }
- }
- }
- }
- }
- };
- return {
- js: function(url, callback) {
- load('js', url, callback);
- },
- css: function(url, callback) {
- load('css', url, callback);
- }
- };
- })(this.document);
-})();