summaryrefslogtreecommitdiffstats
path: root/afb-client/bower_components/tether/js/constraint.js
diff options
context:
space:
mode:
authorStephane Desneux <stephane.desneux@iot.bzh>2016-05-31 18:16:48 +0200
committerStephane Desneux <stephane.desneux@iot.bzh>2016-05-31 18:16:48 +0200
commit5b1e6cc132f44262a873fa8296a2a3e1017b0278 (patch)
tree43b2cd54e2e300b399ff3f2af4458a2c4ed8a144 /afb-client/bower_components/tether/js/constraint.js
parentf7d2f9ac4168ee5064580c666d508667a73cefc0 (diff)
parent85ace9c1ce9a98e9b8a22f045c7dd752b38d9129 (diff)
Merge afb-client
Diffstat (limited to 'afb-client/bower_components/tether/js/constraint.js')
-rw-r--r--afb-client/bower_components/tether/js/constraint.js308
1 files changed, 308 insertions, 0 deletions
diff --git a/afb-client/bower_components/tether/js/constraint.js b/afb-client/bower_components/tether/js/constraint.js
new file mode 100644
index 0000000..69a2bde
--- /dev/null
+++ b/afb-client/bower_components/tether/js/constraint.js
@@ -0,0 +1,308 @@
+(function() {
+ var BOUNDS_FORMAT, MIRROR_ATTACH, defer, extend, getBoundingRect, getBounds, getOuterSize, getSize, updateClasses, _ref,
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+ _ref = this.Tether.Utils, getOuterSize = _ref.getOuterSize, getBounds = _ref.getBounds, getSize = _ref.getSize, extend = _ref.extend, updateClasses = _ref.updateClasses, defer = _ref.defer;
+
+ MIRROR_ATTACH = {
+ left: 'right',
+ right: 'left',
+ top: 'bottom',
+ bottom: 'top',
+ middle: 'middle'
+ };
+
+ BOUNDS_FORMAT = ['left', 'top', 'right', 'bottom'];
+
+ getBoundingRect = function(tether, to) {
+ var i, pos, side, size, style, _i, _len;
+ if (to === 'scrollParent') {
+ to = tether.scrollParent;
+ } else if (to === 'window') {
+ to = [pageXOffset, pageYOffset, innerWidth + pageXOffset, innerHeight + pageYOffset];
+ }
+ if (to === document) {
+ to = to.documentElement;
+ }
+ if (to.nodeType != null) {
+ pos = size = getBounds(to);
+ style = getComputedStyle(to);
+ to = [pos.left, pos.top, size.width + pos.left, size.height + pos.top];
+ for (i = _i = 0, _len = BOUNDS_FORMAT.length; _i < _len; i = ++_i) {
+ side = BOUNDS_FORMAT[i];
+ side = side[0].toUpperCase() + side.substr(1);
+ if (side === 'Top' || side === 'Left') {
+ to[i] += parseFloat(style["border" + side + "Width"]);
+ } else {
+ to[i] -= parseFloat(style["border" + side + "Width"]);
+ }
+ }
+ }
+ return to;
+ };
+
+ this.Tether.modules.push({
+ position: function(_arg) {
+ var addClasses, allClasses, attachment, bounds, changeAttachX, changeAttachY, cls, constraint, eAttachment, height, left, oob, oobClass, p, pin, pinned, pinnedClass, removeClass, side, tAttachment, targetAttachment, targetHeight, targetSize, targetWidth, to, top, width, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8,
+ _this = this;
+ top = _arg.top, left = _arg.left, targetAttachment = _arg.targetAttachment;
+ if (!this.options.constraints) {
+ return true;
+ }
+ removeClass = function(prefix) {
+ var side, _i, _len, _results;
+ _this.removeClass(prefix);
+ _results = [];
+ for (_i = 0, _len = BOUNDS_FORMAT.length; _i < _len; _i++) {
+ side = BOUNDS_FORMAT[_i];
+ _results.push(_this.removeClass("" + prefix + "-" + side));
+ }
+ return _results;
+ };
+ _ref1 = this.cache('element-bounds', function() {
+ return getBounds(_this.element);
+ }), height = _ref1.height, width = _ref1.width;
+ if (width === 0 && height === 0 && (this.lastSize != null)) {
+ _ref2 = this.lastSize, width = _ref2.width, height = _ref2.height;
+ }
+ targetSize = this.cache('target-bounds', function() {
+ return _this.getTargetBounds();
+ });
+ targetHeight = targetSize.height;
+ targetWidth = targetSize.width;
+ tAttachment = {};
+ eAttachment = {};
+ allClasses = [this.getClass('pinned'), this.getClass('out-of-bounds')];
+ _ref3 = this.options.constraints;
+ for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
+ constraint = _ref3[_i];
+ if (constraint.outOfBoundsClass) {
+ allClasses.push(constraint.outOfBoundsClass);
+ }
+ if (constraint.pinnedClass) {
+ allClasses.push(constraint.pinnedClass);
+ }
+ }
+ for (_j = 0, _len1 = allClasses.length; _j < _len1; _j++) {
+ cls = allClasses[_j];
+ _ref4 = ['left', 'top', 'right', 'bottom'];
+ for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
+ side = _ref4[_k];
+ allClasses.push("" + cls + "-" + side);
+ }
+ }
+ addClasses = [];
+ tAttachment = extend({}, targetAttachment);
+ eAttachment = extend({}, this.attachment);
+ _ref5 = this.options.constraints;
+ for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
+ constraint = _ref5[_l];
+ to = constraint.to, attachment = constraint.attachment, pin = constraint.pin;
+ if (attachment == null) {
+ attachment = '';
+ }
+ if (__indexOf.call(attachment, ' ') >= 0) {
+ _ref6 = attachment.split(' '), changeAttachY = _ref6[0], changeAttachX = _ref6[1];
+ } else {
+ changeAttachX = changeAttachY = attachment;
+ }
+ bounds = getBoundingRect(this, to);
+ if (changeAttachY === 'target' || changeAttachY === 'both') {
+ if (top < bounds[1] && tAttachment.top === 'top') {
+ top += targetHeight;
+ tAttachment.top = 'bottom';
+ }
+ if (top + height > bounds[3] && tAttachment.top === 'bottom') {
+ top -= targetHeight;
+ tAttachment.top = 'top';
+ }
+ }
+ if (changeAttachY === 'together') {
+ if (top < bounds[1] && tAttachment.top === 'top') {
+ if (eAttachment.top === 'bottom') {
+ top += targetHeight;
+ tAttachment.top = 'bottom';
+ top += height;
+ eAttachment.top = 'top';
+ } else if (eAttachment.top === 'top') {
+ top += targetHeight;
+ tAttachment.top = 'bottom';
+ top -= height;
+ eAttachment.top = 'bottom';
+ }
+ }
+ if (top + height > bounds[3] && tAttachment.top === 'bottom') {
+ if (eAttachment.top === 'top') {
+ top -= targetHeight;
+ tAttachment.top = 'top';
+ top -= height;
+ eAttachment.top = 'bottom';
+ } else if (eAttachment.top === 'bottom') {
+ top -= targetHeight;
+ tAttachment.top = 'top';
+ top += height;
+ eAttachment.top = 'top';
+ }
+ }
+ if (tAttachment.top === 'middle') {
+ if (top + height > bounds[3] && eAttachment.top === 'top') {
+ top -= height;
+ eAttachment.top = 'bottom';
+ } else if (top < bounds[1] && eAttachment.top === 'bottom') {
+ top += height;
+ eAttachment.top = 'top';
+ }
+ }
+ }
+ if (changeAttachX === 'target' || changeAttachX === 'both') {
+ if (left < bounds[0] && tAttachment.left === 'left') {
+ left += targetWidth;
+ tAttachment.left = 'right';
+ }
+ if (left + width > bounds[2] && tAttachment.left === 'right') {
+ left -= targetWidth;
+ tAttachment.left = 'left';
+ }
+ }
+ if (changeAttachX === 'together') {
+ if (left < bounds[0] && tAttachment.left === 'left') {
+ if (eAttachment.left === 'right') {
+ left += targetWidth;
+ tAttachment.left = 'right';
+ left += width;
+ eAttachment.left = 'left';
+ } else if (eAttachment.left === 'left') {
+ left += targetWidth;
+ tAttachment.left = 'right';
+ left -= width;
+ eAttachment.left = 'right';
+ }
+ } else if (left + width > bounds[2] && tAttachment.left === 'right') {
+ if (eAttachment.left === 'left') {
+ left -= targetWidth;
+ tAttachment.left = 'left';
+ left -= width;
+ eAttachment.left = 'right';
+ } else if (eAttachment.left === 'right') {
+ left -= targetWidth;
+ tAttachment.left = 'left';
+ left += width;
+ eAttachment.left = 'left';
+ }
+ } else if (tAttachment.left === 'center') {
+ if (left + width > bounds[2] && eAttachment.left === 'left') {
+ left -= width;
+ eAttachment.left = 'right';
+ } else if (left < bounds[0] && eAttachment.left === 'right') {
+ left += width;
+ eAttachment.left = 'left';
+ }
+ }
+ }
+ if (changeAttachY === 'element' || changeAttachY === 'both') {
+ if (top < bounds[1] && eAttachment.top === 'bottom') {
+ top += height;
+ eAttachment.top = 'top';
+ }
+ if (top + height > bounds[3] && eAttachment.top === 'top') {
+ top -= height;
+ eAttachment.top = 'bottom';
+ }
+ }
+ if (changeAttachX === 'element' || changeAttachX === 'both') {
+ if (left < bounds[0] && eAttachment.left === 'right') {
+ left += width;
+ eAttachment.left = 'left';
+ }
+ if (left + width > bounds[2] && eAttachment.left === 'left') {
+ left -= width;
+ eAttachment.left = 'right';
+ }
+ }
+ if (typeof pin === 'string') {
+ pin = (function() {
+ var _len4, _m, _ref7, _results;
+ _ref7 = pin.split(',');
+ _results = [];
+ for (_m = 0, _len4 = _ref7.length; _m < _len4; _m++) {
+ p = _ref7[_m];
+ _results.push(p.trim());
+ }
+ return _results;
+ })();
+ } else if (pin === true) {
+ pin = ['top', 'left', 'right', 'bottom'];
+ }
+ pin || (pin = []);
+ pinned = [];
+ oob = [];
+ if (top < bounds[1]) {
+ if (__indexOf.call(pin, 'top') >= 0) {
+ top = bounds[1];
+ pinned.push('top');
+ } else {
+ oob.push('top');
+ }
+ }
+ if (top + height > bounds[3]) {
+ if (__indexOf.call(pin, 'bottom') >= 0) {
+ top = bounds[3] - height;
+ pinned.push('bottom');
+ } else {
+ oob.push('bottom');
+ }
+ }
+ if (left < bounds[0]) {
+ if (__indexOf.call(pin, 'left') >= 0) {
+ left = bounds[0];
+ pinned.push('left');
+ } else {
+ oob.push('left');
+ }
+ }
+ if (left + width > bounds[2]) {
+ if (__indexOf.call(pin, 'right') >= 0) {
+ left = bounds[2] - width;
+ pinned.push('right');
+ } else {
+ oob.push('right');
+ }
+ }
+ if (pinned.length) {
+ pinnedClass = (_ref7 = this.options.pinnedClass) != null ? _ref7 : this.getClass('pinned');
+ addClasses.push(pinnedClass);
+ for (_m = 0, _len4 = pinned.length; _m < _len4; _m++) {
+ side = pinned[_m];
+ addClasses.push("" + pinnedClass + "-" + side);
+ }
+ }
+ if (oob.length) {
+ oobClass = (_ref8 = this.options.outOfBoundsClass) != null ? _ref8 : this.getClass('out-of-bounds');
+ addClasses.push(oobClass);
+ for (_n = 0, _len5 = oob.length; _n < _len5; _n++) {
+ side = oob[_n];
+ addClasses.push("" + oobClass + "-" + side);
+ }
+ }
+ if (__indexOf.call(pinned, 'left') >= 0 || __indexOf.call(pinned, 'right') >= 0) {
+ eAttachment.left = tAttachment.left = false;
+ }
+ if (__indexOf.call(pinned, 'top') >= 0 || __indexOf.call(pinned, 'bottom') >= 0) {
+ eAttachment.top = tAttachment.top = false;
+ }
+ if (tAttachment.top !== targetAttachment.top || tAttachment.left !== targetAttachment.left || eAttachment.top !== this.attachment.top || eAttachment.left !== this.attachment.left) {
+ this.updateAttachClasses(eAttachment, tAttachment);
+ }
+ }
+ defer(function() {
+ updateClasses(_this.target, addClasses, allClasses);
+ return updateClasses(_this.element, addClasses, allClasses);
+ });
+ return {
+ top: top,
+ left: left
+ };
+ }
+ });
+
+}).call(this);