define [ "base" ], (App) -> App.directive "infiniteScroll", () -> return { link: (scope, element, attrs, ctrl) -> innerElement = element.find(".infinite-scroll-inner") element.css 'overflow-y': 'auto' atEndOfListView = () -> if attrs.infiniteScrollUpwards? atTopOfListView() else atBottomOfListView() atTopOfListView = () -> element.scrollTop() < 30 atBottomOfListView = () -> element.scrollTop() + element.height() >= innerElement.height() - 30 listShorterThanContainer = () -> element.height() > innerElement.height() loadUntilFull = () -> if (listShorterThanContainer() or atEndOfListView()) and not scope.$eval(attrs.infiniteScrollDisabled) promise = scope.$eval(attrs.infiniteScroll) promise.then () -> loadUntilFull() element.on "scroll", (event) -> loadUntilFull() scope.$watch attrs.infiniteScrollInitialize, (value) -> if value loadUntilFull() }