/* global CONFIG */ document.addEventListener('DOMContentLoaded', () => { 'use strict'; const doSaveScroll = () => { localStorage.setItem('bookmark' + location.pathname, window.scrollY); }; const scrollToMark = () => { let top = localStorage.getItem('bookmark' + location.pathname); top = parseInt(top, 10); // If the page opens with a specific hash, just jump out if (!isNaN(top) && location.hash === '') { // Auto scroll to the position window.anime({ targets : document.scrollingElement, duration : 200, easing : 'linear', scrollTop: top }); } }; // Register everything const init = function(trigger) { // Create a link element const link = document.querySelector('.book-mark-link'); // Scroll event window.addEventListener('scroll', () => link.classList.toggle('book-mark-link-fixed', window.scrollY === 0), { passive: true }); // Register beforeunload event when the trigger is auto if (trigger === 'auto') { // Register beforeunload event window.addEventListener('beforeunload', doSaveScroll); document.addEventListener('pjax:send', doSaveScroll); } // Save the position by clicking the icon link.addEventListener('click', () => { doSaveScroll(); window.anime({ targets : link, duration: 200, easing : 'linear', top : -30, complete: () => { setTimeout(() => { link.style.top = ''; }, 400); } }); }); scrollToMark(); document.addEventListener('pjax:success', scrollToMark); }; init(CONFIG.bookmark.save); });