X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a592eaeb918c2f2ee45a44fe413842adb26eb4ca..refs/pull/154/head:/resources/assets/js/pages/page-show.js diff --git a/resources/assets/js/pages/page-show.js b/resources/assets/js/pages/page-show.js index c12528975..b037612be 100644 --- a/resources/assets/js/pages/page-show.js +++ b/resources/assets/js/pages/page-show.js @@ -13,7 +13,7 @@ window.setupPageShow = module.exports = function (pageId) { var isSelection = false; // Select all contents on input click - $pointer.on('click', 'input', function(e) { + $pointer.on('click', 'input', function (e) { $(this).select(); e.stopPropagation(); }); @@ -30,6 +30,7 @@ window.setupPageShow = module.exports = function (pageId) { // Show pointer when selecting a single block of tagged content $('.page-content [id^="bkmrk"]').on('mouseup keyup', function (e) { + e.stopPropagation(); var selection = window.getSelection(); if (selection.toString().length === 0) return; @@ -47,8 +48,6 @@ window.setupPageShow = module.exports = function (pageId) { var pointerLeftOffsetPercent = (pointerLeftOffset / $elem.width()) * 100; $pointerInner.css('left', pointerLeftOffsetPercent + '%'); - e.stopPropagation(); - isSelection = true; setTimeout(() => { isSelection = false; @@ -72,4 +71,57 @@ window.setupPageShow = module.exports = function (pageId) { goToText(text); } -}; \ No newline at end of file + // Make the book-tree sidebar stick in view on scroll + var $window = $(window); + var $bookTree = $(".book-tree"); + var $bookTreeParent = $bookTree.parent(); + // Check the page is scrollable and the content is taller than the tree + var pageScrollable = ($(document).height() > $window.height()) && ($bookTree.height() < $('.page-content').height()); + // Get current tree's width and header height + var headerHeight = $("#header").height() + $(".toolbar").height(); + var isFixed = $window.scrollTop() > headerHeight; + // Function to fix the tree as a sidebar + function stickTree() { + $bookTree.width($bookTreeParent.width() + 15); + $bookTree.addClass("fixed"); + isFixed = true; + } + // Function to un-fix the tree back into position + function unstickTree() { + $bookTree.css('width', 'auto'); + $bookTree.removeClass("fixed"); + isFixed = false; + } + // Checks if the tree stickiness state should change + function checkTreeStickiness(skipCheck) { + var shouldBeFixed = $window.scrollTop() > headerHeight; + if (shouldBeFixed && (!isFixed || skipCheck)) { + stickTree(); + } else if (!shouldBeFixed && (isFixed || skipCheck)) { + unstickTree(); + } + } + // The event ran when the window scrolls + function windowScrollEvent() { + checkTreeStickiness(false); + } + + // If the page is scrollable and the window is wide enough listen to scroll events + // and evaluate tree stickiness. + if (pageScrollable && $window.width() > 1000) { + $window.on('scroll', windowScrollEvent); + checkTreeStickiness(true); + } + + // Handle window resizing and switch between desktop/mobile views + $window.on('resize', event => { + if (pageScrollable && $window.width() > 1000) { + $window.on('scroll', windowScrollEvent); + checkTreeStickiness(true); + } else { + $window.off('scroll', windowScrollEvent); + unstickTree(); + } + }); + +};