Initial OpenECOMP Portal commit
[portal.git] / ecomp-portal-FE / client / bower_components / jquery.newstape / jquery.newstape.js
diff --git a/ecomp-portal-FE/client/bower_components/jquery.newstape/jquery.newstape.js b/ecomp-portal-FE/client/bower_components/jquery.newstape/jquery.newstape.js
new file mode 100644 (file)
index 0000000..3c3d3f2
--- /dev/null
@@ -0,0 +1,135 @@
+if (typeof Object.create !== "function") {
+    Object.create = function(obj) {
+        function F() {
+        }
+        F.prototype = obj;
+        return new F();
+    };
+}
+
+(function($, window, document) {
+    var Newstape = {
+        $elem: null,
+        $content: null,
+        options: {},
+        height: 0,
+        contentHeight: 0,
+        dragstartPos: 0,
+        dragDeltaY: 0,
+        dragDeltaYReduce: 0,
+        timer: null,
+        pos: 0,
+        init: function(options, el) {
+            var base = this;
+
+            base.$elem = $(el);
+            base.$content = $('.newstape-content', base.$elem);
+
+            base.options = $.extend({}, $.fn.newstape.options, base.$elem.data(), options);
+
+            var heightRefresh = function() {
+                base.height = base.$elem.outerHeight();
+                base.contentHeight = base.$content.outerHeight();
+            };
+            if (base.options.heightSpy) {
+                setInterval(heightRefresh, 1000);
+            }
+
+            heightRefresh();
+
+            var play = function() {
+                base.timer = setInterval(function() {
+                    base.move();
+                }, base.options.period);
+            };
+
+            base.$elem.bind('mouseover.newstape', function() {
+                clearInterval(base.timer);
+            });
+
+            base.$elem.bind('mouseout.newstape', function() {
+                play();
+            });
+
+            if (base.options.mousewheel) {
+                base.$elem.bind('mousewheel.newstape', function(e) {
+                    e.preventDefault();
+                    base.pos = (e.deltaY > 0) ? base.pos + base.options.mousewheelRate : base.pos - base.options.mousewheelRate;
+                    base.move();
+                });
+            }
+
+            $('a', base.$elem).focus(function(e) {
+                base.$elem.scrollTop(0);
+                base.pos = base.height - $(this).position().top - $(this).outerHeight();
+                base.move();
+            });
+
+            if (base.options.dragable) {
+                base.$elem.bind('dragstart.newstape', function(e, dd) {
+                    base.dragDeltaY = 0;
+                    base.dragDeltaYReduce = 0;
+                    base.dragstartPos = base.pos;
+                    base.$elem.addClass('newstape-drag');
+                }).bind('drag.newstape', function(e, dd) {
+                    base.dragDeltaY = dd.deltaY;
+                    base.pos = base.dragstartPos + (dd.deltaY - base.dragDeltaYReduce);
+                    base.move();
+                }).bind('dragend.newstape', function(e, dd) {
+                    base.$elem.removeClass('newstape-drag');
+                });
+            }
+
+            play();
+        },
+        move: function() {
+            var base = this;
+
+            var dragUpdate = function() {
+                base.dragstartPos = base.pos;
+                base.dragDeltaYReduce = base.dragDeltaY;
+                base.dragDeltaY = 0;
+            };
+
+            if (base.pos <= base.contentHeight * -1) {
+                base.pos = base.height;
+                dragUpdate();
+            }
+
+            if (base.pos >= base.height + base.options.offset) {
+                base.pos = base.contentHeight * -1;
+                dragUpdate();
+            }
+
+            if (!base.$elem.hasClass('newstape-drag')) {
+                base.pos = base.pos - base.options.offset;
+            }
+
+            base.$content.css('top', parseInt(base.pos) + 'px');
+        }
+    };
+
+    $.fn.newstape = function(options) {
+        return this.each(function() {
+            if ($(this).data("newstape-init") === true) {
+                return false;
+            }
+
+            $(this).data("newstape-init", true);
+            var newstape = Object.create(Newstape);
+            newstape.init(options, this);
+            $.data(this, "newstape", newstape);
+        });
+    };
+
+    $.fn.newstape.options = {
+        period: 30,
+        offset: 1,
+        mousewheel: true,
+        dragable: true,
+        mousewheelRate: 30,
+        heightSpy: true
+    };
+
+}(jQuery, window, document));