From a3748c941dc065a1753dc71a7e74c6309f2f5014 Mon Sep 17 00:00:00 2001 From: Jonathon Wilson Date: Fri, 23 Nov 2012 10:37:27 -0700 Subject: [PATCH] Provide option for tests to disable body:overflow-hidden --- app/assets/javascripts/jamkazam.js | 9 +++++++-- app/assets/javascripts/layout.js | 10 +++++++++- spec/javascripts/jamkazam.spec.js | 7 ++++++- spec/javascripts/layout.spec.js | 21 +++++++++++---------- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/jamkazam.js b/app/assets/javascripts/jamkazam.js index 761854030..4d1b64464 100644 --- a/app/assets/javascripts/jamkazam.js +++ b/app/assets/javascripts/jamkazam.js @@ -9,6 +9,10 @@ var heartbeatInterval = null; var subscribers = {}; // Keys are MessageType.MESSAGE values Values are lists of functions to call + var opts = { + layoutOpts: {} + }; + /** * Dynamically build routes from markup. Any layout="screen" will get a route corresponding to * his layout-id attribute. If a layout-arg attribute is present, that will be named as a data @@ -143,11 +147,12 @@ /** * Two-phase construction. Call after construction when in non-unit-test use. */ - this.initialize = function() { + this.initialize = function(inOpts) { var url, hash; app = this; + this.opts = $.extend(opts, inOpts); this.layout = new JK.Layout(); - this.layout.initialize(); + this.layout.initialize(this.opts.layoutOpts); routing(); registerMessages(); registerLoginAck(); diff --git a/app/assets/javascripts/layout.js b/app/assets/javascripts/layout.js index 715e0955b..6f631af8b 100644 --- a/app/assets/javascripts/layout.js +++ b/app/assets/javascripts/layout.js @@ -23,6 +23,7 @@ context.JK.Layout = function() { // privates + var logger = context.JK.logger; var me = null; // Reference to this instance for context sanity. @@ -37,7 +38,8 @@ screenMargin: 0, // Margin around screens (not headers/sidebar) gridOuterMargin: 6, // Outer margin on Grids (added to screenMargin if screen) gridPadding: 8, // Padding around grid cells. Added to outer margin. - animationDuration: 400 + animationDuration: 400, + allowBodyOverflow: false // Allow tests to disable the body-no-scroll policy }; var width = $(window).width(); @@ -264,7 +266,11 @@ padding: '0px', overflow: 'hidden' }; + if (opts.allowBodyOverflow) { + delete bodyStyle.overflow; + } $('body').css(bodyStyle); + var layoutStyle = { position: 'absolute', margin: '0px', @@ -449,6 +455,8 @@ this.initialize = function(inOpts) { me = this; opts = $.extend(opts, inOpts); + logger.error("layout.initialize.opts:"); + logger.error(opts); setup(); events(); }; diff --git a/spec/javascripts/jamkazam.spec.js b/spec/javascripts/jamkazam.spec.js index 634be915a..1fe444d13 100644 --- a/spec/javascripts/jamkazam.spec.js +++ b/spec/javascripts/jamkazam.spec.js @@ -5,7 +5,12 @@ beforeEach(function() { jasmine.getFixtures().fixturesPath = '/spec/javascripts/fixtures'; - jamkazam = new context.JK.JamKazam(); + var opts = { + layoutOpts: { + allowBodyOverflow: true + } + }; + jamkazam = new context.JK.JamKazam(opts); }); describe("Event Subscription", function() { diff --git a/spec/javascripts/layout.spec.js b/spec/javascripts/layout.spec.js index fca645064..4360a07ed 100644 --- a/spec/javascripts/layout.spec.js +++ b/spec/javascripts/layout.spec.js @@ -23,6 +23,7 @@ describe("override one default", function() { it("headerHeight should be 300", function() { testOpts = { + allowBodyOverflow: true, headerHeight: 300 }; layout.initialize(testOpts); @@ -44,7 +45,7 @@ describe("CardLayout", function() { describe("One cell, zero margins", function() { it("should fill space", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 0}; + testOpts = { allowBodyOverflow:true, gridOuterMargin: 0, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 1, 1, 0, 0, 1, 1); expect(cardLayout).toEqual({top:0,left:0,width:100,height:100}); @@ -53,7 +54,7 @@ describe("Two columns, zero margins", function() { it("should be half width each", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 0}; + testOpts = { allowBodyOverflow:true, gridOuterMargin: 0, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 1, 2, 0, 0, 1, 1); expect(cardLayout).toEqual({top:0,left:0,width:50,height:100}); @@ -65,7 +66,7 @@ describe("Two rows, zero margins", function() { it("should be half height each", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 0}; + testOpts = { allowBodyOverflow:true, gridOuterMargin: 0, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 2, 1, 0, 0, 1, 1); expect(cardLayout).toEqual({top:0,left:0,width:100,height:50}); @@ -77,7 +78,7 @@ describe("two cols, colspan 2, zero margins", function() { it("should fill width", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 0}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 0, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 1, 2, 0, 0, 1, 2); expect(cardLayout).toEqual({top:0,left:0,width:100,height:100}); @@ -86,7 +87,7 @@ describe("two rows, rowspan 2, zero margins", function() { it("should fill height", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 0}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 0, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 2, 1, 0, 0, 2, 1); expect(cardLayout).toEqual({top:0,left:0,width:100,height:100}); @@ -95,7 +96,7 @@ describe("4x4, zero margins, row 1, col 1, rowspan 2, colspan 2", function() { it("should fill middle 4 cells", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 0}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 0, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 4, 4, 1, 1, 2, 2); expect(cardLayout).toEqual({top:25,left:25,width:50,height:50}); @@ -105,7 +106,7 @@ // Outer margins describe("1x1, 100x100, outermargin 10", function() { it("should be inset 10 pixels, 80x80", function() { - testOpts = { gridOuterMargin: 10, gridPadding: 0}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 10, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 1, 1, 0, 0, 1, 1); expect(cardLayout).toEqual({top:10,left:10,width:80,height:80}); @@ -113,7 +114,7 @@ }); describe("2x2, 100x100, outermargin 10", function() { it("should be inset 10 pixels, 40x40", function() { - testOpts = { gridOuterMargin: 10, gridPadding: 0}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 10, gridPadding: 0}; layout.initialize(testOpts); cardLayout = layout.getCardLayout(100, 100, 2, 2, 0, 0, 1, 1); expect(cardLayout).toEqual({top:10,left:10,width:40,height:40}); @@ -123,7 +124,7 @@ // Inner margins describe("2x2, 100x100, padding 10", function() { it("10 pixels in and 10 pixel gutters", function() { - testOpts = { gridOuterMargin: 0, gridPadding: 10}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 0, gridPadding: 10}; layout.initialize(testOpts); // upper left cardLayout = layout.getCardLayout(100, 100, 2, 2, 0, 0, 1, 1); @@ -137,7 +138,7 @@ // 5 block test like starting home. describe("home page test", function() { it("5 blocks", function() { - testOpts = { gridOuterMargin: 10, gridPadding: 10}; + testOpts = { allowBodyOverflow: true, gridOuterMargin: 10, gridPadding: 10}; layout.initialize(testOpts); // Cell 1 cardLayout = layout.getCardLayout(1000, 1000, 2, 4, 0, 0, 1, 1);