ServiceInnovationLab/serviceinnovationlab.github.io

View on GitHub
assets/js/waypoints.min.js

Summary

Maintainability
D
2 days
Test Coverage
File `waypoints.min.js` has 479 lines of code (exceeds 250 allowed). Consider refactoring.
// Generated by CoffeeScript 1.6.2
/*
jQuery Waypoints - v2.0.3
Copyright (c) 2011-2013 Caleb Troughton
Dual licensed under the MIT license and GPL license.
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
*/
(function() {
var t =
[].indexOf ||
function(t) {
for (var e = 0, n = this.length; e < n; e++) {
if (e in this && this[e] === t) return e;
}
return -1;
},
e = [].slice;
(function(t, e) {
if (typeof define === 'function' && define.amd) {
return define('waypoints', ['jquery'], function(n) {
return e(n, t);
});
} else {
return e(t.jQuery, t);
}
})(this, function(n, r) {
var i, o, l, s, f, u, a, c, h, d, p, y, v, w, g, m;
i = n(r);
c = t.call(r, 'ontouchstart') >= 0;
s = { horizontal: {}, vertical: {} };
f = 1;
a = {};
u = 'waypoints-context-id';
p = 'resize.waypoints';
y = 'scroll.waypoints';
v = 1;
w = 'waypoints-waypoint-ids';
g = 'waypoint';
m = 'waypoints';
o = (function() {
Function `t` has 32 lines of code (exceeds 25 allowed). Consider refactoring.
function t(t) {
var e = this;
this.$element = t;
this.element = t[0];
this.didResize = false;
this.didScroll = false;
this.id = 'context' + f++;
this.oldScroll = { x: t.scrollLeft(), y: t.scrollTop() };
this.waypoints = { horizontal: {}, vertical: {} };
t.data(u, this.id);
a[this.id] = this;
t.bind(y, function() {
var t;
if (!(e.didScroll || c)) {
e.didScroll = true;
t = function() {
e.doScroll();
return (e.didScroll = false);
};
return r.setTimeout(t, n[m].settings.scrollThrottle);
}
});
t.bind(p, function() {
var t;
if (!e.didResize) {
e.didResize = true;
t = function() {
n[m]('refresh');
return (e.didResize = false);
};
return r.setTimeout(t, n[m].settings.resizeThrottle);
}
});
}
Function `doScroll` has 48 lines of code (exceeds 25 allowed). Consider refactoring.
t.prototype.doScroll = function() {
var t,
e = this;
t = {
Similar blocks of code found in 2 locations. Consider refactoring.
horizontal: {
newScroll: this.$element.scrollLeft(),
oldScroll: this.oldScroll.x,
forward: 'right',
backward: 'left',
},
Similar blocks of code found in 2 locations. Consider refactoring.
vertical: {
newScroll: this.$element.scrollTop(),
oldScroll: this.oldScroll.y,
forward: 'down',
backward: 'up',
},
};
if (c && (!t.vertical.oldScroll || !t.vertical.newScroll)) {
n[m]('refresh');
}
n.each(t, function(t, r) {
var i, o, l;
l = [];
o = r.newScroll > r.oldScroll;
i = o ? r.forward : r.backward;
n.each(e.waypoints[t], function(t, e) {
var n, i;
if (r.oldScroll < (n = e.offset) && n <= r.newScroll) {
return l.push(e);
} else if (r.newScroll < (i = e.offset) && i <= r.oldScroll) {
return l.push(e);
}
});
l.sort(function(t, e) {
return t.offset - e.offset;
});
if (!o) {
l.reverse();
}
return n.each(l, function(t, e) {
if (e.options.continuous || t === l.length - 1) {
return e.trigger([i]);
}
});
});
return (this.oldScroll = {
x: t.horizontal.newScroll,
y: t.vertical.newScroll,
});
};
Function `refresh` has 56 lines of code (exceeds 25 allowed). Consider refactoring.
t.prototype.refresh = function() {
var t,
e,
r,
i = this;
r = n.isWindow(this.element);
e = this.$element.offset();
this.doScroll();
t = {
horizontal: {
contextOffset: r ? 0 : e.left,
contextScroll: r ? 0 : this.oldScroll.x,
contextDimension: this.$element.width(),
oldScroll: this.oldScroll.x,
forward: 'right',
backward: 'left',
offsetProp: 'left',
},
vertical: {
contextOffset: r ? 0 : e.top,
contextScroll: r ? 0 : this.oldScroll.y,
contextDimension: r
? n[m]('viewportHeight')
: this.$element.height(),
oldScroll: this.oldScroll.y,
forward: 'down',
backward: 'up',
offsetProp: 'top',
},
};
return n.each(t, function(t, e) {
return n.each(i.waypoints[t], function(t, r) {
var i, o, l, s, f;
i = r.options.offset;
l = r.offset;
o = n.isWindow(r.element) ? 0 : r.$element.offset()[e.offsetProp];
if (n.isFunction(i)) {
i = i.apply(r.element);
} else if (typeof i === 'string') {
i = parseFloat(i);
if (r.options.offset.indexOf('%') > -1) {
i = Math.ceil((e.contextDimension * i) / 100);
}
}
r.offset = o - e.contextOffset + e.contextScroll - i;
if ((r.options.onlyOnScroll && l != null) || !r.enabled) {
return;
}
if (l !== null && l < (s = e.oldScroll) && s <= r.offset) {
return r.trigger([e.backward]);
} else if (l !== null && l > (f = e.oldScroll) && f >= r.offset) {
return r.trigger([e.forward]);
} else if (l === null && e.oldScroll >= r.offset) {
return r.trigger([e.forward]);
}
});
});
};
t.prototype.checkEmpty = function() {
if (
n.isEmptyObject(this.waypoints.horizontal) &&
n.isEmptyObject(this.waypoints.vertical)
) {
this.$element.unbind([p, y].join(' '));
return delete a[this.id];
}
};
return t;
})();
l = (function() {
Function `t` has 26 lines of code (exceeds 25 allowed). Consider refactoring.
function t(t, e, r) {
var i, o;
r = n.extend({}, n.fn[g].defaults, r);
if (r.offset === 'bottom-in-view') {
r.offset = function() {
var t;
t = n[m]('viewportHeight');
if (!n.isWindow(e.element)) {
t = e.$element.height();
}
return t - n(this).outerHeight();
};
}
this.$element = t;
this.element = t[0];
this.axis = r.horizontal ? 'horizontal' : 'vertical';
this.callback = r.handler;
this.context = e;
this.enabled = r.enabled;
this.id = 'waypoints' + v++;
this.offset = null;
this.options = r;
e.waypoints[this.axis][this.id] = this;
s[this.axis][this.id] = this;
i = (o = t.data(w)) != null ? o : [];
i.push(this.id);
t.data(w, i);
}
t.prototype.trigger = function(t) {
if (!this.enabled) {
return;
}
if (this.callback != null) {
this.callback.apply(this.element, t);
}
if (this.options.triggerOnce) {
return this.destroy();
}
};
t.prototype.disable = function() {
return (this.enabled = false);
};
t.prototype.enable = function() {
this.context.refresh();
return (this.enabled = true);
};
t.prototype.destroy = function() {
delete s[this.axis][this.id];
delete this.context.waypoints[this.axis][this.id];
return this.context.checkEmpty();
};
t.getWaypointsByElement = function(t) {
var e, r;
r = n(t).data(w);
if (!r) {
return [];
}
e = n.extend({}, s.horizontal, s.vertical);
return n.map(r, function(t) {
return e[t];
});
};
return t;
})();
d = {
init: function(t, e) {
var r;
if (e == null) {
e = {};
}
if ((r = e.handler) == null) {
e.handler = t;
}
this.each(function() {
var t, r, i, s;
t = n(this);
i = (s = e.context) != null ? s : n.fn[g].defaults.context;
if (!n.isWindow(i)) {
i = t.closest(i);
}
i = n(i);
r = a[i.data(u)];
if (!r) {
r = new o(i);
}
return new l(t, r, e);
});
n[m]('refresh');
return this;
},
disable: function() {
return d._invoke(this, 'disable');
},
enable: function() {
return d._invoke(this, 'enable');
},
destroy: function() {
return d._invoke(this, 'destroy');
},
prev: function(t, e) {
return d._traverse.call(this, t, e, function(t, e, n) {
if (e > 0) {
return t.push(n[e - 1]);
}
});
},
next: function(t, e) {
return d._traverse.call(this, t, e, function(t, e, n) {
if (e < n.length - 1) {
return t.push(n[e + 1]);
}
});
},
_traverse: function(t, e, i) {
var o, l;
if (t == null) {
t = 'vertical';
}
if (e == null) {
e = r;
}
l = h.aggregate(e);
o = [];
this.each(function() {
var e;
e = n.inArray(this, l[t]);
return i(o, e, l[t]);
});
return this.pushStack(o);
},
_invoke: function(t, e) {
t.each(function() {
var t;
t = l.getWaypointsByElement(this);
return n.each(t, function(t, n) {
n[e]();
return true;
});
});
return this;
},
};
n.fn[g] = function() {
var t, r;
(r = arguments[0]),
(t = 2 <= arguments.length ? e.call(arguments, 1) : []);
if (d[r]) {
return d[r].apply(this, t);
} else if (n.isFunction(r)) {
return d.init.apply(this, arguments);
} else if (n.isPlainObject(r)) {
return d.init.apply(this, [null, r]);
} else if (!r) {
return n.error(
'jQuery Waypoints needs a callback function or handler option.',
);
} else {
Avoid too many `return` statements within this function.
return n.error(
'The ' + r + ' method does not exist in jQuery Waypoints.',
);
}
};
n.fn[g].defaults = {
context: r,
continuous: true,
enabled: true,
horizontal: false,
offset: 0,
triggerOnce: false,
};
h = {
refresh: function() {
return n.each(a, function(t, e) {
return e.refresh();
});
},
viewportHeight: function() {
var t;
return (t = r.innerHeight) != null ? t : i.height();
},
aggregate: function(t) {
var e, r, i;
e = s;
if (t) {
e = (i = a[n(t).data(u)]) != null ? i.waypoints : void 0;
}
if (!e) {
return [];
}
r = { horizontal: [], vertical: [] };
n.each(r, function(t, i) {
n.each(e[t], function(t, e) {
return i.push(e);
});
i.sort(function(t, e) {
return t.offset - e.offset;
});
r[t] = n.map(i, function(t) {
return t.element;
});
return (r[t] = n.unique(r[t]));
});
return r;
},
Similar blocks of code found in 4 locations. Consider refactoring.
above: function(t) {
if (t == null) {
t = r;
}
return h._filter(t, 'vertical', function(t, e) {
return e.offset <= t.oldScroll.y;
});
},
Similar blocks of code found in 4 locations. Consider refactoring.
below: function(t) {
if (t == null) {
t = r;
}
return h._filter(t, 'vertical', function(t, e) {
return e.offset > t.oldScroll.y;
});
},
Similar blocks of code found in 4 locations. Consider refactoring.
left: function(t) {
if (t == null) {
t = r;
}
return h._filter(t, 'horizontal', function(t, e) {
return e.offset <= t.oldScroll.x;
});
},
Similar blocks of code found in 4 locations. Consider refactoring.
right: function(t) {
if (t == null) {
t = r;
}
return h._filter(t, 'horizontal', function(t, e) {
return e.offset > t.oldScroll.x;
});
},
enable: function() {
return h._invoke('enable');
},
disable: function() {
return h._invoke('disable');
},
destroy: function() {
return h._invoke('destroy');
},
extendFn: function(t, e) {
return (d[t] = e);
},
_invoke: function(t) {
var e;
e = n.extend({}, s.vertical, s.horizontal);
return n.each(e, function(e, n) {
n[t]();
return true;
});
},
_filter: function(t, e, r) {
var i, o;
i = a[n(t).data(u)];
if (!i) {
return [];
}
o = [];
n.each(i.waypoints[e], function(t, e) {
if (r(i, e)) {
return o.push(e);
}
});
o.sort(function(t, e) {
return t.offset - e.offset;
});
return n.map(o, function(t) {
return t.element;
});
},
};
n[m] = function() {
var t, n;
(n = arguments[0]),
(t = 2 <= arguments.length ? e.call(arguments, 1) : []);
if (h[n]) {
return h[n].apply(null, t);
} else {
return h.aggregate.call(null, n);
}
};
n[m].settings = { resizeThrottle: 100, scrollThrottle: 30 };
return i.load(function() {
return n[m]('refresh');
});
});
}.call(this));