From 7e03880bd09b86eb139d66dd83323b3ac5fa0fd7 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Mon, 11 Mar 2013 17:31:17 -0600 Subject: [PATCH] Add $.fn.scrollUp and .scrollDown These scroll the element by a small amount up or down. --- spec/stdlib/jquery-extensions-spec.coffee | 30 +++++++++++++++++++++++ src/stdlib/jquery-extensions.coffee | 6 +++++ 2 files changed, 36 insertions(+) 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)