diff --git a/spec/stdlib/jquery-extensions-spec.coffee b/spec/stdlib/jquery-extensions-spec.coffee index 6b781370b..4bdd8fd11 100644 --- a/spec/stdlib/jquery-extensions-spec.coffee +++ b/spec/stdlib/jquery-extensions-spec.coffee @@ -1,4 +1,5 @@ $ = require 'jquery' +_ = require 'underscore' {View, $$} = require 'space-pen' describe 'jQuery extensions', -> @@ -76,6 +77,35 @@ describe 'jQuery extensions', -> 'a1': "A1: Waste perfectly-good steak" 'a2': null + describe "$.fn.scrollUp/Down/ToTop/ToBottom", -> + it "scrolls the element in the specified way if possible", -> + view = $$ -> @div => _.times 20, => @div('A') + view.css(height: 100, width: 100, overflow: 'scroll') + view.attachToDom() + + view.scrollUp() + expect(view.scrollTop()).toBe 0 + + view.scrollDown() + expect(view.scrollTop()).toBeGreaterThan 0 + previousScrollTop = view.scrollTop() + view.scrollDown() + expect(view.scrollTop()).toBeGreaterThan previousScrollTop + + view.scrollToBottom() + expect(view.scrollTop()).toBe view.prop('scrollHeight') - 100 + previousScrollTop = view.scrollTop() + view.scrollDown() + expect(view.scrollTop()).toBe previousScrollTop + view.scrollUp() + expect(view.scrollTop()).toBeLessThan previousScrollTop + previousScrollTop = view.scrollTop() + view.scrollUp() + expect(view.scrollTop()).toBeLessThan previousScrollTop + + view.scrollToTop() + expect(view.scrollTop()).toBe 0 + describe "Event.prototype", -> class GrandchildView extends View @content: -> @div class: 'grandchild' diff --git a/src/stdlib/jquery-extensions.coffee b/src/stdlib/jquery-extensions.coffee index 089363577..fe403c2a9 100644 --- a/src/stdlib/jquery-extensions.coffee +++ b/src/stdlib/jquery-extensions.coffee @@ -7,6 +7,12 @@ $.fn.scrollBottom = (newValue) -> else @scrollTop() + @height() +$.fn.scrollDown = -> + @scrollTop(@scrollTop() + $(window).height() / 20) + +$.fn.scrollUp = -> + @scrollTop(@scrollTop() - $(window).height() / 20) + $.fn.scrollToTop = -> @scrollTop(0)