From 594d1568daf557f103f5eef3e9975216267359fb Mon Sep 17 00:00:00 2001 From: Shantanu Mallik Date: Fri, 4 Sep 2020 12:03:04 +0530 Subject: [PATCH] fix: page scroll with URL hash redirection. (#4883) --- app/components/public/side-menu.js | 24 ++++++++++++++++--- app/templates/components/public/side-menu.hbs | 10 ++++---- app/templates/public/index.hbs | 2 +- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/components/public/side-menu.js b/app/components/public/side-menu.js index 896f368f89b..dcbad7343b2 100644 --- a/app/components/public/side-menu.js +++ b/app/components/public/side-menu.js @@ -4,6 +4,7 @@ import Component from '@ember/component'; import moment from 'moment'; import { SPEAKERS_FILTER } from 'open-event-frontend/routes/public/speakers'; import { tracked } from '@glimmer/tracking'; +import $ from 'jquery'; @classic export default class SideMenu extends Component { @@ -13,12 +14,19 @@ export default class SideMenu extends Component { @tracked showSessions = false; + async didRender() { + super.didRender(); + const anchor_tag = window.location.hash; + $('html, body').animate({ + scrollTop: $(anchor_tag).offset().top + }, 20); + } + async didInsertElement() { super.didInsertElement(...arguments); const speakersCall = await this.event.speakersCall; this.set('shouldShowCallforSpeakers', speakersCall && speakersCall.announcement && (speakersCall.privacy === 'public')); - this.checkSpeakers(); this.checkSessions(); } @@ -46,12 +54,22 @@ export default class SideMenu extends Component { } @action - scrollToTarget() { + scrollToTarget(e) { + + if (history.pushState) { + history.pushState(null, null, e); + } else { + location.hash = e; + } + document.querySelector(e).scrollIntoView({ + behavior: 'smooth', block: 'start' + }); + document.querySelectorAll('.scroll').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ - behavior: 'smooth' + behavior: 'smooth', block: 'start' }); document.querySelectorAll('.scroll').forEach(node => { diff --git a/app/templates/components/public/side-menu.hbs b/app/templates/components/public/side-menu.hbs index ec460b718df..d0d89982002 100644 --- a/app/templates/components/public/side-menu.hbs +++ b/app/templates/components/public/side-menu.hbs @@ -1,11 +1,11 @@ {{#if (and (not-eq this.session.currentRouteName 'public.cfs.new-session') (not-eq this.session.currentRouteName 'public.cfs.new-speaker') (not-eq this.session.currentRouteName 'public.cfs.edit-speaker') (not-eq this.session.currentRouteName 'public.cfs.edit-session'))}}