From 002a7ff9848a9b917b2cde78608caa7fac31dee8 Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem <svbergerem@online.de> Date: Sun, 21 Aug 2016 10:02:20 +0200 Subject: [PATCH] Fix stream shortcuts on small screens --- .../javascripts/app/views/stream/shortcuts.js | 28 +++++++++---------- features/desktop/keyboard_navigation.feature | 15 ++++++++++ features/step_definitions/custom_web_steps.rb | 4 +-- .../keyboard_navigation_steps.rb | 2 +- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/app/assets/javascripts/app/views/stream/shortcuts.js b/app/assets/javascripts/app/views/stream/shortcuts.js index b09c6e753b..dd62588c9f 100644 --- a/app/assets/javascripts/app/views/stream/shortcuts.js +++ b/app/assets/javascripts/app/views/stream/shortcuts.js @@ -1,7 +1,7 @@ // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later app.views.StreamShortcuts = Backbone.View.extend({ - _headerSize: 50, + _headerSize: 60, events: { "keydown": "_onHotkeyDown", @@ -57,35 +57,35 @@ app.views.StreamShortcuts = Backbone.View.extend({ gotoNext: function() { // select next post: take the first post under the header - var stream_elements = this.$('div.stream_element.loaded'); + var streamElements = this.$("div.stream_element.loaded"); var posUser = window.pageYOffset; - for (var i = 0; i < stream_elements.length; i++) { - if(stream_elements[i].offsetTop>posUser+this._headerSize){ - this.selectPost(stream_elements[i]); + for (var i = 0; i < streamElements.length; i++) { + if (Math.round($(streamElements[i]).offset().top) > posUser + this._headerSize) { + this.selectPost(streamElements[i]); return; } } // standard: last post - if(stream_elements[stream_elements.length-1]){ - this.selectPost(stream_elements[stream_elements.length-1]); + if (streamElements[streamElements.length - 1]) { + this.selectPost(streamElements[streamElements.length - 1]); } }, gotoPrev: function() { // select previous post: take the first post above the header - var stream_elements = this.$('div.stream_element.loaded'); + var streamElements = this.$("div.stream_element.loaded"); var posUser = window.pageYOffset; - for (var i = stream_elements.length-1; i >=0; i--) { - if(stream_elements[i].offsetTop<posUser+this._headerSize){ - this.selectPost(stream_elements[i]); + for (var i = streamElements.length - 1; i >= 0; i--) { + if (Math.round($(streamElements[i]).offset().top) < posUser + this._headerSize) { + this.selectPost(streamElements[i]); return; } } // standard: first post - if(stream_elements[0]){ - this.selectPost(stream_elements[0]); + if (streamElements[0]) { + this.selectPost(streamElements[0]); } }, @@ -118,7 +118,7 @@ app.views.StreamShortcuts = Backbone.View.extend({ var selected=this.$('div.stream_element.loaded.shortcut_selected'); selected.removeClass('shortcut_selected').removeClass('highlighted'); //move to new post - window.scrollTo(window.pageXOffset, element.offsetTop-this._headerSize); + window.scrollTo(window.pageXOffset, Math.round($(element).offset().top - this._headerSize)); //add the selection and selected-class to new post element.className+=" shortcut_selected highlighted"; }, diff --git a/features/desktop/keyboard_navigation.feature b/features/desktop/keyboard_navigation.feature index 9e4b24cf80..7d26aaea32 100644 --- a/features/desktop/keyboard_navigation.feature +++ b/features/desktop/keyboard_navigation.feature @@ -60,3 +60,18 @@ Feature: Keyboard navigation When I press the "J" key somewhere Then post 2 should be highlighted And I should have navigated to the highlighted post + + Scenario: navigate downwards on a small screen + When I resize my window to 800x600 + And I press the "J" key somewhere + Then post 1 should be highlighted + And I should have navigated to the highlighted post + + When I press the "J" key somewhere + Then post 2 should be highlighted + And I should have navigated to the highlighted post + + Given I expand the publisher + When I press the "J" key in the publisher + Then post 2 should be highlighted + And I close the publisher diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb index 73e9db02ef..3883d2acf4 100644 --- a/features/step_definitions/custom_web_steps.rb +++ b/features/step_definitions/custom_web_steps.rb @@ -241,9 +241,7 @@ And "I wait for notifications to load" do end When /^I resize my window to 800x600$/ do - page.execute_script <<-JS - window.resizeTo(800,600); - JS + page.driver.resize(800, 600) end Then 'I should see an image attached to the post' do diff --git a/features/step_definitions/keyboard_navigation_steps.rb b/features/step_definitions/keyboard_navigation_steps.rb index 2573abc0e3..9bf47c478c 100644 --- a/features/step_definitions/keyboard_navigation_steps.rb +++ b/features/step_definitions/keyboard_navigation_steps.rb @@ -13,5 +13,5 @@ Then /^post (\d+) should be highlighted$/ do |position| end And /^I should have navigated to the highlighted post$/ do - find(".shortcut_selected")["offsetTop"].to_i.should == page.evaluate_script("window.pageYOffset + 50").to_i + expect(page.evaluate_script("window.pageYOffset + 60 - $('.shortcut_selected').offset().top").to_i).to be(0) end -- GitLab