Project

General

Profile

Patch #36742 » 36742.patch

Dmitry Makurin , 2022-03-09 13:34

View differences:

app/views/layouts/base.html.erb
22 22
<%= call_hook :view_layouts_base_body_top %>
23 23
<div id="wrapper">
24 24

  
25
<div id="us-btn-up"><span class="chevron-up"></span></div>
25 26
<div class="flyout-menu js-flyout-menu">
26 27

  
27 28
    <% if User.current.logged? || !Setting.login_required? %>
public/javascripts/application.js
1219 1219
    tribute.attach(element);
1220 1220
}
1221 1221

  
1222
function setupUpButton() {
1223
  $(window).scroll(function() {
1224
    if ($(this).scrollTop() > 30) {
1225
      $('#us-btn-up').addClass('showed');
1226
    } else {
1227
      $('#us-btn-up').removeClass('showed');
1228
    }
1229
  });
1230
  $('#us-btn-up').click(function () {
1231
    $('html, body').animate({ scrollTop: 0 }, 300);
1232
  });
1233
}
1222 1234

  
1223 1235
$(document).ready(setupAjaxIndicator);
1224 1236
$(document).ready(hideOnLoad);
......
1231 1243
$(document).on('focus', '[data-auto-complete=true]', function(event) {
1232 1244
  inlineAutoComplete(event.target);
1233 1245
});
1246
$(document).ready(setupUpButton);
public/stylesheets/application.css
1874 1874
	display: inline;
1875 1875
	opacity: 1;
1876 1876
}
1877

  
1878
#us-btn-up {
1879
  display: none;
1880
}
1881
@media all and (min-width: 900px) {
1882
  #us-btn-up {
1883
    display: block;
1884
    height: 0;
1885
    padding: 0;
1886
    overflow: hidden;
1887
    position: fixed;
1888
    bottom: 35px;
1889
    right: 35px;
1890
    z-index: 99;
1891
    border: none;
1892
    outline: none;
1893
    color: #888;
1894
    cursor: pointer;
1895
    border-radius: 4px;
1896
    transition: opacity .3s, background-color .3s;
1897
    opacity: 0;
1898
    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 0 30px 0 rgba(0, 0, 0, 0.15) inset;
1899
    background: #fff;
1900
  }
1901

  
1902
  #us-btn-up.showed {
1903
    height: auto;
1904
    opacity: 0.7;
1905
    padding: 15px 20px;
1906
  }
1907

  
1908
  #us-btn-up:hover {
1909
    background-color: #f5f5f5;
1910
  }
1911

  
1912
  .chevron-up {
1913
    position: relative;
1914
    height: 16px;
1915
    width: 16px;
1916
    top: 1px;
1917
    display: inline-block;
1918
    background-image: url(../images/chevron-up.png);
1919
    background-size: cover;
1920
    margin: 0;
1921
    -webkit-font-smoothing: antialiased;
1922
    -moz-osx-font-smoothing: grayscale;
1923
  }
1924
}
test/system/scroll_to_top_button_test.rb
1
# frozen_string_literal: true
2

  
3
# Redmine - project management software
4
# Copyright (C) 2006-2022  Jean-Philippe Lang
5
#
6
# This program is free software; you can redistribute it and/or
7
# modify it under the terms of the GNU General Public License
8
# as published by the Free Software Foundation; either version 2
9
# of the License, or (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19

  
20
require File.expand_path('../../application_system_test_case', __FILE__)
21

  
22
class ScrollToTopButtonTest < ApplicationSystemTestCase
23
  fixtures :issues, :users, :projects, :trackers, :projects_trackers, :issue_statuses, :enumerations, :projects_trackers,
24
           :roles, :members, :member_roles, :enabled_modules
25

  
26
  def setup
27
    super
28
    100.times { Issue.generate! }
29
  end
30

  
31
  def test_scroll_button
32
    log_user('admin', 'admin')
33
    visit '/issues?per_page=100'
34

  
35
    # scroll to the page bottom
36
    page.execute_script "window.scrollBy(0,10000)"
37
    # button appears
38
    assert has_css? '#us-btn-up.showed'
39
    # scroll back to the top
40
    find('div#us-btn-up').click
41
    # no button
42
    assert has_no_css? '#us-btn-up.showed'
43
  end
44
end
(2-2/2)