blob: 80c77d441bebd694466df723fd4ef8b7c3c614b7 [file] [log] [blame]
/*!
* Angular Material Design
* https://github.com/angular/material
* @license MIT
* v1.0.0-master-19c11fd
*/
function MdSticky(t,e,n,r){function o(t){function o(t,e){e.addClass("md-sticky-clone");var n={element:t,clone:e};return d.items.push(n),r.nextTick(function(){p.prepend(n.clone)}),m(),function(){d.items.forEach(function(e,n){e.element[0]===t[0]&&(d.items.splice(n,1),e.clone.remove())}),m()}}function i(){d.items.forEach(l),d.items=d.items.sort(function(t,e){return t.top<e.top?-1:1});for(var t,e=p.prop("scrollTop"),n=d.items.length-1;n>=0;n--)if(e>d.items[n].top){t=d.items[n];break}a(t)}function l(t){var e=t.element[0];for(t.top=0,t.left=0;e&&e!==p[0];)t.top+=e.offsetTop,t.left+=e.offsetLeft,e=e.offsetParent;t.height=t.element.prop("offsetHeight"),t.clone.css("margin-left",t.left+"px"),r.floatingScrollbars()&&t.clone.css("margin-right","0")}function s(){var t=p.prop("scrollTop"),e=t>(s.prevScrollTop||0);if(s.prevScrollTop=t,0===t)return void a(null);if(e){if(d.next&&d.next.top<=t)return void a(d.next);if(d.current&&d.next&&d.next.top-t<=d.next.height)return void f(d.current,t+(d.next.top-d.next.height-t))}if(!e){if(d.current&&d.prev&&t<d.current.top)return void a(d.prev);if(d.next&&d.current&&t>=d.next.top-d.current.height)return void f(d.current,t+(d.next.top-t-d.current.height))}d.current&&f(d.current,t)}function a(t){if(d.current!==t){d.current&&(f(d.current,null),u(d.current,null)),t&&u(t,"active"),d.current=t;var e=d.items.indexOf(t);d.next=d.items[e+1],d.prev=d.items[e-1],u(d.next,"next"),u(d.prev,"prev")}}function u(t,e){t&&t.state!==e&&(t.state&&(t.clone.attr("sticky-prev-state",t.state),t.element.attr("sticky-prev-state",t.state)),t.clone.attr("sticky-state",e),t.element.attr("sticky-state",e),t.state=e)}function f(t,n){t&&(null===n||void 0===n?t.translateY&&(t.translateY=null,t.clone.css(e.CSS.TRANSFORM,"")):(t.translateY=n,t.clone.css(e.CSS.TRANSFORM,"translate3d("+t.left+"px,"+n+"px,0)")))}var p=t.$element,m=n.throttle(i);c(p),p.on("$scrollstart",m),p.on("$scroll",s);var d;return d={prev:null,current:null,next:null,items:[],add:o,refreshElements:i}}function i(e){var n,r=angular.element("<div>");t[0].body.appendChild(r[0]);for(var o=["sticky","-webkit-sticky"],i=0;i<o.length;++i)if(r.css({position:o[i],top:0,"z-index":2}),r.css("position")==o[i]){n=o[i];break}return r.remove(),n}function c(t){function e(){+r.now()-i>c?(o=!1,t.triggerHandler("$scrollend")):(t.triggerHandler("$scroll"),n.throttle(e))}var o,i,c=200;t.on("scroll touchmove",function(){o||(o=!0,n.throttle(e),t.triggerHandler("$scrollstart")),t.triggerHandler("$scroll"),i=+r.now()})}var l=i();return function(t,e,n){var r=e.controller("mdContent");if(r)if(l)e.css({position:l,top:0,"z-index":2});else{var i=r.$element.data("$$sticky");i||(i=o(r),r.$element.data("$$sticky",i));var c=i.add(e,n||e.clone());t.$on("$destroy",c)}}}goog.provide("ng.material.components.sticky"),goog.require("ng.material.components.content"),goog.require("ng.material.core"),angular.module("material.components.sticky",["material.core","material.components.content"]).factory("$mdSticky",MdSticky),MdSticky.$inject=["$document","$mdConstant","$$rAF","$mdUtil"],ng.material.components.sticky=angular.module("material.components.sticky");