summaryrefslogtreecommitdiffstats
path: root/js/vendor/angular-ui/modules/directives/scrollfix/scrollfix.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/angular-ui/modules/directives/scrollfix/scrollfix.js')
-rw-r--r--js/vendor/angular-ui/modules/directives/scrollfix/scrollfix.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/js/vendor/angular-ui/modules/directives/scrollfix/scrollfix.js b/js/vendor/angular-ui/modules/directives/scrollfix/scrollfix.js
new file mode 100644
index 000000000..f613838d9
--- /dev/null
+++ b/js/vendor/angular-ui/modules/directives/scrollfix/scrollfix.js
@@ -0,0 +1,39 @@
+/*global angular, $, document*/
+/**
+ * Adds a 'ui-scrollfix' class to the element when the page scrolls past it's position.
+ * @param [offset] {int} optional Y-offset to override the detected offset.
+ * Takes 300 (absolute) or -300 or +300 (relative to detected)
+ */
+angular.module('ui.directives').directive('uiScrollfix', ['$window', function ($window) {
+ 'use strict';
+ return {
+ link: function (scope, elm, attrs) {
+ var top = elm.offset().top;
+ if (!attrs.uiScrollfix) {
+ attrs.uiScrollfix = top;
+ } else {
+ // chartAt is generally faster than indexOf: http://jsperf.com/indexof-vs-chartat
+ if (attrs.uiScrollfix.charAt(0) === '-') {
+ attrs.uiScrollfix = top - attrs.uiScrollfix.substr(1);
+ } else if (attrs.uiScrollfix.charAt(0) === '+') {
+ attrs.uiScrollfix = top + parseFloat(attrs.uiScrollfix.substr(1));
+ }
+ }
+ angular.element($window).on('scroll.ui-scrollfix', function () {
+ // if pageYOffset is defined use it, otherwise use other crap for IE
+ var offset;
+ if (angular.isDefined($window.pageYOffset)) {
+ offset = $window.pageYOffset;
+ } else {
+ var iebody = (document.compatMode && document.compatMode !== "BackCompat") ? document.documentElement : document.body;
+ offset = iebody.scrollTop;
+ }
+ if (!elm.hasClass('ui-scrollfix') && offset > attrs.uiScrollfix) {
+ elm.addClass('ui-scrollfix');
+ } else if (elm.hasClass('ui-scrollfix') && offset < attrs.uiScrollfix) {
+ elm.removeClass('ui-scrollfix');
+ }
+ });
+ }
+ };
+}]);