summaryrefslogtreecommitdiffstats
path: root/afb-client/bower_components/tether/docs/welcome/js/drop.js
diff options
context:
space:
mode:
Diffstat (limited to 'afb-client/bower_components/tether/docs/welcome/js/drop.js')
-rw-r--r--afb-client/bower_components/tether/docs/welcome/js/drop.js239
1 files changed, 239 insertions, 0 deletions
diff --git a/afb-client/bower_components/tether/docs/welcome/js/drop.js b/afb-client/bower_components/tether/docs/welcome/js/drop.js
new file mode 100644
index 0000000..0058819
--- /dev/null
+++ b/afb-client/bower_components/tether/docs/welcome/js/drop.js
@@ -0,0 +1,239 @@
+(function() {
+ var Evented, MIRROR_ATTACH, addClass, allDrops, clickEvent, createContext, extend, hasClass, removeClass, sortAttach, touchDevice, _ref,
+ __hasProp = {}.hasOwnProperty,
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ __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 = Tether.Utils, extend = _ref.extend, addClass = _ref.addClass, removeClass = _ref.removeClass, hasClass = _ref.hasClass, Evented = _ref.Evented;
+
+ touchDevice = 'ontouchstart' in document.documentElement;
+
+ clickEvent = touchDevice ? 'touchstart' : 'click';
+
+ sortAttach = function(str) {
+ var first, second, _ref1, _ref2;
+ _ref1 = str.split(' '), first = _ref1[0], second = _ref1[1];
+ if (first === 'left' || first === 'right') {
+ _ref2 = [second, first], first = _ref2[0], second = _ref2[1];
+ }
+ return [first, second].join(' ');
+ };
+
+ MIRROR_ATTACH = {
+ left: 'right',
+ right: 'left',
+ top: 'bottom',
+ bottom: 'top',
+ middle: 'middle',
+ center: 'center'
+ };
+
+ allDrops = {};
+
+ createContext = function(options) {
+ var DropInstance, defaultOptions, drop, _name;
+ if (options == null) {
+ options = {};
+ }
+ drop = function() {
+ return (function(func, args, ctor) {
+ ctor.prototype = func.prototype;
+ var child = new ctor, result = func.apply(child, args);
+ return Object(result) === result ? result : child;
+ })(DropInstance, arguments, function(){});
+ };
+ extend(drop, {
+ createContext: createContext,
+ drops: [],
+ defaults: {}
+ });
+ defaultOptions = {
+ classPrefix: 'drop',
+ defaults: {
+ attach: 'bottom left',
+ openOn: 'click',
+ constrainToScrollParent: true,
+ constrainToWindow: true,
+ classes: '',
+ tetherOptions: {}
+ }
+ };
+ extend(drop, defaultOptions, options);
+ extend(drop.defaults, defaultOptions.defaults, options.defaults);
+ if (allDrops[_name = drop.classPrefix] == null) {
+ allDrops[_name] = [];
+ }
+ drop.updateBodyClasses = function() {
+ var anyOpen, _drop, _i, _len, _ref1;
+ anyOpen = false;
+ _ref1 = allDrops[drop.classPrefix];
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ _drop = _ref1[_i];
+ if (!(_drop.isOpened())) {
+ continue;
+ }
+ anyOpen = true;
+ break;
+ }
+ if (anyOpen) {
+ return addClass(document.body, "" + drop.classPrefix + "-open");
+ } else {
+ return removeClass(document.body, "" + drop.classPrefix + "-open");
+ }
+ };
+ DropInstance = (function(_super) {
+ __extends(DropInstance, _super);
+
+ function DropInstance(options) {
+ this.options = options;
+ this.options = extend({}, drop.defaults, this.options);
+ this.target = this.options.target;
+ if (this.target == null) {
+ throw new Error('Drop Error: You must provide a target.');
+ }
+ drop.drops.push(this);
+ allDrops[drop.classPrefix].push(this);
+ this.setupElements();
+ this.setupEvents();
+ this.setupTether();
+ }
+
+ DropInstance.prototype.setupElements = function() {
+ this.drop = document.createElement('div');
+ addClass(this.drop, drop.classPrefix);
+ if (this.options.classes) {
+ addClass(this.drop, this.options.classes);
+ }
+ this.dropContent = document.createElement('div');
+ addClass(this.dropContent, "" + drop.classPrefix + "-content");
+ if (typeof this.options.content === 'object') {
+ this.dropContent.appendChild(this.options.content);
+ } else {
+ this.dropContent.innerHTML = this.options.content;
+ }
+ return this.drop.appendChild(this.dropContent);
+ };
+
+ DropInstance.prototype.setupTether = function() {
+ var constraints, dropAttach;
+ dropAttach = this.options.position.split(' ');
+ dropAttach[0] = MIRROR_ATTACH[dropAttach[0]];
+ dropAttach = dropAttach.join(' ');
+ constraints = [];
+ if (this.options.constrainToScrollParent) {
+ constraints.push({
+ to: 'scrollParent',
+ pin: 'top, bottom',
+ attachment: 'together none'
+ });
+ }
+ if (this.options.constrainToWindow !== false) {
+ constraints.push({
+ to: 'window',
+ pin: true,
+ attachment: 'together'
+ });
+ }
+ constraints.push({
+ to: 'scrollParent'
+ });
+ options = {
+ element: this.drop,
+ target: this.target,
+ attachment: sortAttach(dropAttach),
+ targetAttachment: sortAttach(this.options.position),
+ classPrefix: drop.classPrefix,
+ offset: '0 0',
+ targetOffset: '0 0',
+ enabled: false,
+ constraints: constraints
+ };
+ if (this.options.tether !== false) {
+ return this.tether = new Tether(extend({}, options, this.options.tether));
+ }
+ };
+
+ DropInstance.prototype.setupEvents = function() {
+ var events,
+ _this = this;
+ if (!this.options.openOn) {
+ return;
+ }
+ events = this.options.openOn.split(' ');
+ if (__indexOf.call(events, 'click') >= 0) {
+ this.target.addEventListener(clickEvent, function() {
+ return _this.toggle();
+ });
+ document.addEventListener(clickEvent, function(event) {
+ if (!_this.isOpened()) {
+ return;
+ }
+ if (event.target === _this.drop || _this.drop.contains(event.target)) {
+ return;
+ }
+ if (event.target === _this.target || _this.target.contains(event.target)) {
+ return;
+ }
+ return _this.close();
+ });
+ }
+ if (__indexOf.call(events, 'hover') >= 0) {
+ this.target.addEventListener('mouseover', function() {
+ return _this.open();
+ });
+ return this.target.addEventListener('mouseout', function() {
+ return _this.close();
+ });
+ }
+ };
+
+ DropInstance.prototype.isOpened = function() {
+ return hasClass(this.drop, "" + drop.classPrefix + "-open");
+ };
+
+ DropInstance.prototype.toggle = function() {
+ if (this.isOpened()) {
+ return this.close();
+ } else {
+ return this.open();
+ }
+ };
+
+ DropInstance.prototype.open = function() {
+ var _ref1;
+ if (!this.drop.parentNode) {
+ document.body.appendChild(this.drop);
+ }
+ addClass(this.target, "" + drop.classPrefix + "-open");
+ addClass(this.drop, "" + drop.classPrefix + "-open");
+ if ((_ref1 = this.tether) != null) {
+ _ref1.enable();
+ }
+ this.trigger('open');
+ return drop.updateBodyClasses();
+ };
+
+ DropInstance.prototype.close = function() {
+ var _ref1;
+ removeClass(this.target, "" + drop.classPrefix + "-open");
+ removeClass(this.drop, "" + drop.classPrefix + "-open");
+ this.trigger('close');
+ if ((_ref1 = this.tether) != null) {
+ _ref1.disable();
+ }
+ return drop.updateBodyClasses();
+ };
+
+ return DropInstance;
+
+ })(Evented);
+ return drop;
+ };
+
+ window.Drop = createContext();
+
+ document.addEventListener('DOMContentLoaded', function() {
+ return Drop.updateBodyClasses();
+ });
+
+}).call(this); \ No newline at end of file