scala-news-reader

rss/atom news reader in scala

git clone https://9o.is/git/scala-news-reader.git

jquery.waypoints.js

(16877B)


      1 // Generated by CoffeeScript 1.6.2
      2 /*
      3 jQuery Waypoints - v2.0.2
      4 Copyright (c) 2011-2013 Caleb Troughton
      5 Dual licensed under the MIT license and GPL license.
      6 https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
      7 */
      8 
      9 
     10 (function() {
     11   var __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; },
     12     __slice = [].slice;
     13 
     14   (function(root, factory) {
     15     if (typeof define === 'function' && define.amd) {
     16       return define('waypoints', ['jquery'], function($) {
     17         return factory($, root);
     18       });
     19     } else {
     20       return factory(root.jQuery, root);
     21     }
     22   })(this, function($, window) {
     23     var $w, Context, Waypoint, allWaypoints, contextCounter, contextKey, contexts, isTouch, jQMethods, methods, resizeEvent, scrollEvent, waypointCounter, waypointKey, wp, wps;
     24 
     25     $w = $(window);
     26     isTouch = __indexOf.call(window, 'ontouchstart') >= 0;
     27     allWaypoints = {
     28       horizontal: {},
     29       vertical: {}
     30     };
     31     contextCounter = 1;
     32     contexts = {};
     33     contextKey = 'waypoints-context-id';
     34     resizeEvent = 'resize.waypoints';
     35     scrollEvent = 'scroll.waypoints';
     36     waypointCounter = 1;
     37     waypointKey = 'waypoints-waypoint-ids';
     38     wp = 'waypoint';
     39     wps = 'waypoints';
     40     Context = (function() {
     41       function Context($element) {
     42         var _this = this;
     43 
     44         this.$element = $element;
     45         this.element = $element[0];
     46         this.didResize = false;
     47         this.didScroll = false;
     48         this.id = 'context' + contextCounter++;
     49         this.oldScroll = {
     50           x: $element.scrollLeft(),
     51           y: $element.scrollTop()
     52         };
     53         this.waypoints = {
     54           horizontal: {},
     55           vertical: {}
     56         };
     57         $element.data(contextKey, this.id);
     58         contexts[this.id] = this;
     59         $element.bind(scrollEvent, function() {
     60           var scrollHandler;
     61 
     62           if (!(_this.didScroll || isTouch)) {
     63             _this.didScroll = true;
     64             scrollHandler = function() {
     65               _this.doScroll();
     66               return _this.didScroll = false;
     67             };
     68             return window.setTimeout(scrollHandler, $[wps].settings.scrollThrottle);
     69           }
     70         });
     71         $element.bind(resizeEvent, function() {
     72           var resizeHandler;
     73 
     74           if (!_this.didResize) {
     75             _this.didResize = true;
     76             resizeHandler = function() {
     77               $[wps]('refresh');
     78               return _this.didResize = false;
     79             };
     80             return window.setTimeout(resizeHandler, $[wps].settings.resizeThrottle);
     81           }
     82         });
     83       }
     84 
     85       Context.prototype.doScroll = function() {
     86         var axes,
     87           _this = this;
     88 
     89         axes = {
     90           horizontal: {
     91             newScroll: this.$element.scrollLeft(),
     92             oldScroll: this.oldScroll.x,
     93             forward: 'right',
     94             backward: 'left'
     95           },
     96           vertical: {
     97             newScroll: this.$element.scrollTop(),
     98             oldScroll: this.oldScroll.y,
     99             forward: 'down',
    100             backward: 'up'
    101           }
    102         };
    103         if (isTouch && (!axes.vertical.oldScroll || !axes.vertical.newScroll)) {
    104           $[wps]('refresh');
    105         }
    106         $.each(axes, function(aKey, axis) {
    107           var direction, isForward, triggered;
    108 
    109           triggered = [];
    110           isForward = axis.newScroll > axis.oldScroll;
    111           direction = isForward ? axis.forward : axis.backward;
    112           $.each(_this.waypoints[aKey], function(wKey, waypoint) {
    113             var _ref, _ref1;
    114 
    115             if ((axis.oldScroll < (_ref = waypoint.offset) && _ref <= axis.newScroll)) {
    116               return triggered.push(waypoint);
    117             } else if ((axis.newScroll < (_ref1 = waypoint.offset) && _ref1 <= axis.oldScroll)) {
    118               return triggered.push(waypoint);
    119             }
    120           });
    121           triggered.sort(function(a, b) {
    122             return a.offset - b.offset;
    123           });
    124           if (!isForward) {
    125             triggered.reverse();
    126           }
    127           return $.each(triggered, function(i, waypoint) {
    128             if (waypoint.options.continuous || i === triggered.length - 1) {
    129               return waypoint.trigger([direction]);
    130             }
    131           });
    132         });
    133         return this.oldScroll = {
    134           x: axes.horizontal.newScroll,
    135           y: axes.vertical.newScroll
    136         };
    137       };
    138 
    139       Context.prototype.refresh = function() {
    140         var axes, cOffset, isWin,
    141           _this = this;
    142 
    143         isWin = $.isWindow(this.element);
    144         cOffset = this.$element.offset();
    145         this.doScroll();
    146         axes = {
    147           horizontal: {
    148             contextOffset: isWin ? 0 : cOffset.left,
    149             contextScroll: isWin ? 0 : this.oldScroll.x,
    150             contextDimension: this.$element.width(),
    151             oldScroll: this.oldScroll.x,
    152             forward: 'right',
    153             backward: 'left',
    154             offsetProp: 'left'
    155           },
    156           vertical: {
    157             contextOffset: isWin ? 0 : cOffset.top,
    158             contextScroll: isWin ? 0 : this.oldScroll.y,
    159             contextDimension: isWin ? $[wps]('viewportHeight') : this.$element.height(),
    160             oldScroll: this.oldScroll.y,
    161             forward: 'down',
    162             backward: 'up',
    163             offsetProp: 'top'
    164           }
    165         };
    166         return $.each(axes, function(aKey, axis) {
    167           return $.each(_this.waypoints[aKey], function(i, waypoint) {
    168             var adjustment, elementOffset, oldOffset, _ref, _ref1;
    169 
    170             adjustment = waypoint.options.offset;
    171             oldOffset = waypoint.offset;
    172             elementOffset = $.isWindow(waypoint.element) ? 0 : waypoint.$element.offset()[axis.offsetProp];
    173             if ($.isFunction(adjustment)) {
    174               adjustment = adjustment.apply(waypoint.element);
    175             } else if (typeof adjustment === 'string') {
    176               adjustment = parseFloat(adjustment);
    177               if (waypoint.options.offset.indexOf('%') > -1) {
    178                 adjustment = Math.ceil(axis.contextDimension * adjustment / 100);
    179               }
    180             }
    181             waypoint.offset = elementOffset - axis.contextOffset + axis.contextScroll - adjustment;
    182             if ((waypoint.options.onlyOnScroll && (oldOffset != null)) || !waypoint.enabled) {
    183               return;
    184             }
    185             if (oldOffset !== null && (oldOffset < (_ref = axis.oldScroll) && _ref <= waypoint.offset)) {
    186               return waypoint.trigger([axis.backward]);
    187             } else if (oldOffset !== null && (oldOffset > (_ref1 = axis.oldScroll) && _ref1 >= waypoint.offset)) {
    188               return waypoint.trigger([axis.forward]);
    189             } else if (oldOffset === null && axis.oldScroll >= waypoint.offset) {
    190               return waypoint.trigger([axis.forward]);
    191             }
    192           });
    193         });
    194       };
    195 
    196       Context.prototype.checkEmpty = function() {
    197         if ($.isEmptyObject(this.waypoints.horizontal) && $.isEmptyObject(this.waypoints.vertical)) {
    198           this.$element.unbind([resizeEvent, scrollEvent].join(' '));
    199           return delete contexts[this.id];
    200         }
    201       };
    202 
    203       return Context;
    204 
    205     })();
    206     Waypoint = (function() {
    207       function Waypoint($element, context, options) {
    208         var idList, _ref;
    209 
    210         options = $.extend({}, $.fn[wp].defaults, options);
    211         if (options.offset === 'bottom-in-view') {
    212           options.offset = function() {
    213             var contextHeight;
    214 
    215             contextHeight = $[wps]('viewportHeight');
    216             if (!$.isWindow(context.element)) {
    217               contextHeight = context.$element.height();
    218             }
    219             return contextHeight - $(this).outerHeight();
    220           };
    221         }
    222         this.$element = $element;
    223         this.element = $element[0];
    224         this.axis = options.horizontal ? 'horizontal' : 'vertical';
    225         this.callback = options.handler;
    226         this.context = context;
    227         this.enabled = options.enabled;
    228         this.id = 'waypoints' + waypointCounter++;
    229         this.offset = null;
    230         this.options = options;
    231         context.waypoints[this.axis][this.id] = this;
    232         allWaypoints[this.axis][this.id] = this;
    233         idList = (_ref = $element.data(waypointKey)) != null ? _ref : [];
    234         idList.push(this.id);
    235         $element.data(waypointKey, idList);
    236       }
    237 
    238       Waypoint.prototype.trigger = function(args) {
    239         if (!this.enabled) {
    240           return;
    241         }
    242         if (this.callback != null) {
    243           this.callback.apply(this.element, args);
    244         }
    245         if (this.options.triggerOnce) {
    246           return this.destroy();
    247         }
    248       };
    249 
    250       Waypoint.prototype.disable = function() {
    251         return this.enabled = false;
    252       };
    253 
    254       Waypoint.prototype.enable = function() {
    255         this.context.refresh();
    256         return this.enabled = true;
    257       };
    258 
    259       Waypoint.prototype.destroy = function() {
    260         delete allWaypoints[this.axis][this.id];
    261         delete this.context.waypoints[this.axis][this.id];
    262         return this.context.checkEmpty();
    263       };
    264 
    265       Waypoint.getWaypointsByElement = function(element) {
    266         var all, ids;
    267 
    268         ids = $(element).data(waypointKey);
    269         if (!ids) {
    270           return [];
    271         }
    272         all = $.extend({}, allWaypoints.horizontal, allWaypoints.vertical);
    273         return $.map(ids, function(id) {
    274           return all[id];
    275         });
    276       };
    277 
    278       return Waypoint;
    279 
    280     })();
    281     methods = {
    282       init: function(f, options) {
    283         var _ref;
    284 
    285         if (options == null) {
    286           options = {};
    287         }
    288         if ((_ref = options.handler) == null) {
    289           options.handler = f;
    290         }
    291         this.each(function() {
    292           var $this, context, contextElement, _ref1;
    293 
    294           $this = $(this);
    295           contextElement = (_ref1 = options.context) != null ? _ref1 : $.fn[wp].defaults.context;
    296           if (!$.isWindow(contextElement)) {
    297             contextElement = $this.closest(contextElement);
    298           }
    299           contextElement = $(contextElement);
    300           context = contexts[contextElement.data(contextKey)];
    301           if (!context) {
    302             context = new Context(contextElement);
    303           }
    304           return new Waypoint($this, context, options);
    305         });
    306         $[wps]('refresh');
    307         return this;
    308       },
    309       disable: function() {
    310         return methods._invoke(this, 'disable');
    311       },
    312       enable: function() {
    313         return methods._invoke(this, 'enable');
    314       },
    315       destroy: function() {
    316         return methods._invoke(this, 'destroy');
    317       },
    318       prev: function(axis, selector) {
    319         return methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
    320           if (index > 0) {
    321             return stack.push(waypoints[index - 1]);
    322           }
    323         });
    324       },
    325       next: function(axis, selector) {
    326         return methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
    327           if (index < waypoints.length - 1) {
    328             return stack.push(waypoints[index + 1]);
    329           }
    330         });
    331       },
    332       _traverse: function(axis, selector, push) {
    333         var stack, waypoints;
    334 
    335         if (axis == null) {
    336           axis = 'vertical';
    337         }
    338         if (selector == null) {
    339           selector = window;
    340         }
    341         waypoints = jQMethods.aggregate(selector);
    342         stack = [];
    343         this.each(function() {
    344           var index;
    345 
    346           index = $.inArray(this, waypoints[axis]);
    347           return push(stack, index, waypoints[axis]);
    348         });
    349         return this.pushStack(stack);
    350       },
    351       _invoke: function($elements, method) {
    352         $elements.each(function() {
    353           var waypoints;
    354 
    355           waypoints = Waypoint.getWaypointsByElement(this);
    356           return $.each(waypoints, function(i, waypoint) {
    357             waypoint[method]();
    358             return true;
    359           });
    360         });
    361         return this;
    362       }
    363     };
    364     $.fn[wp] = function() {
    365       var args, method;
    366 
    367       method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
    368       if (methods[method]) {
    369         return methods[method].apply(this, args);
    370       } else if ($.isFunction(method)) {
    371         return methods.init.apply(this, arguments);
    372       } else if ($.isPlainObject(method)) {
    373         return methods.init.apply(this, [null, method]);
    374       } else if (!method) {
    375         return $.error("jQuery Waypoints needs a callback function or handler option.");
    376       } else {
    377         return $.error("The " + method + " method does not exist in jQuery Waypoints.");
    378       }
    379     };
    380     $.fn[wp].defaults = {
    381       context: window,
    382       continuous: true,
    383       enabled: true,
    384       horizontal: false,
    385       offset: 0,
    386       triggerOnce: false
    387     };
    388     jQMethods = {
    389       refresh: function() {
    390         return $.each(contexts, function(i, context) {
    391           return context.refresh();
    392         });
    393       },
    394       viewportHeight: function() {
    395         var _ref;
    396 
    397         return (_ref = window.innerHeight) != null ? _ref : $w.height();
    398       },
    399       aggregate: function(contextSelector) {
    400         var collection, waypoints, _ref;
    401 
    402         collection = allWaypoints;
    403         if (contextSelector) {
    404           collection = (_ref = contexts[$(contextSelector).data(contextKey)]) != null ? _ref.waypoints : void 0;
    405         }
    406         if (!collection) {
    407           return [];
    408         }
    409         waypoints = {
    410           horizontal: [],
    411           vertical: []
    412         };
    413         $.each(waypoints, function(axis, arr) {
    414           $.each(collection[axis], function(key, waypoint) {
    415             return arr.push(waypoint);
    416           });
    417           arr.sort(function(a, b) {
    418             return a.offset - b.offset;
    419           });
    420           waypoints[axis] = $.map(arr, function(waypoint) {
    421             return waypoint.element;
    422           });
    423           return waypoints[axis] = $.unique(waypoints[axis]);
    424         });
    425         return waypoints;
    426       },
    427       above: function(contextSelector) {
    428         if (contextSelector == null) {
    429           contextSelector = window;
    430         }
    431         return jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
    432           return waypoint.offset <= context.oldScroll.y;
    433         });
    434       },
    435       below: function(contextSelector) {
    436         if (contextSelector == null) {
    437           contextSelector = window;
    438         }
    439         return jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
    440           return waypoint.offset > context.oldScroll.y;
    441         });
    442       },
    443       left: function(contextSelector) {
    444         if (contextSelector == null) {
    445           contextSelector = window;
    446         }
    447         return jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
    448           return waypoint.offset <= context.oldScroll.x;
    449         });
    450       },
    451       right: function(contextSelector) {
    452         if (contextSelector == null) {
    453           contextSelector = window;
    454         }
    455         return jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
    456           return waypoint.offset > context.oldScroll.x;
    457         });
    458       },
    459       enable: function() {
    460         return jQMethods._invoke('enable');
    461       },
    462       disable: function() {
    463         return jQMethods._invoke('disable');
    464       },
    465       destroy: function() {
    466         return jQMethods._invoke('destroy');
    467       },
    468       extendFn: function(methodName, f) {
    469         return methods[methodName] = f;
    470       },
    471       _invoke: function(method) {
    472         var waypoints;
    473 
    474         waypoints = $.extend({}, allWaypoints.vertical, allWaypoints.horizontal);
    475         return $.each(waypoints, function(key, waypoint) {
    476           waypoint[method]();
    477           return true;
    478         });
    479       },
    480       _filter: function(selector, axis, test) {
    481         var context, waypoints;
    482 
    483         context = contexts[$(selector).data(contextKey)];
    484         if (!context) {
    485           return [];
    486         }
    487         waypoints = [];
    488         $.each(context.waypoints[axis], function(i, waypoint) {
    489           if (test(context, waypoint)) {
    490             return waypoints.push(waypoint);
    491           }
    492         });
    493         waypoints.sort(function(a, b) {
    494           return a.offset - b.offset;
    495         });
    496         return $.map(waypoints, function(waypoint) {
    497           return waypoint.element;
    498         });
    499       }
    500     };
    501     $[wps] = function() {
    502       var args, method;
    503 
    504       method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
    505       if (jQMethods[method]) {
    506         return jQMethods[method].apply(null, args);
    507       } else {
    508         return jQMethods.aggregate.call(null, method);
    509       }
    510     };
    511     $[wps].settings = {
    512       resizeThrottle: 100,
    513       scrollThrottle: 30
    514     };
    515     return $w.load(function() {
    516       return $[wps]('refresh');
    517     });
    518   });
    519 
    520 }).call(this);