From ee3599890e41c5b266e259d32b5a519608084b6c Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Fri, 3 Jul 2020 15:05:44 +0200 Subject: [PATCH] wip #3755 @4 --- js/libs/fluidbook/fluidbook.bookmarks.js | 18 +++++ js/libs/fluidbook/fluidbook.help.js | 4 +- js/libs/fluidbook/fluidbook.interface.js | 8 +-- js/libs/fluidbook/fluidbook.js | 2 +- js/libs/fluidbook/fluidbook.keyboard.js | 68 ++++++++++++++++--- js/libs/fluidbook/fluidbook.menu.js | 2 +- js/libs/fluidbook/fluidbook.nav.js | 9 +-- js/libs/fluidbook/fluidbook.search.js | 17 +++-- .../fluidbook/links/fluidbook.links.zoom.js | 2 +- 9 files changed, 103 insertions(+), 27 deletions(-) diff --git a/js/libs/fluidbook/fluidbook.bookmarks.js b/js/libs/fluidbook/fluidbook.bookmarks.js index def03894..3f199051 100644 --- a/js/libs/fluidbook/fluidbook.bookmarks.js +++ b/js/libs/fluidbook/fluidbook.bookmarks.js @@ -72,7 +72,18 @@ FluidbookBookmarks.prototype = { for (var i in this.bookmarks) { this.addBookmark(this.bookmarks[i], true); } + + this.fluidbook.keyboard.initBookmarksShortcuts(); + }, + + toggleSide: function (side) { + var b = $('a.bookmark.' + side); + if (b.length === 0) { + b = $('a.bookmark'); + } + $(b).click(); }, + sortGroup: function (a, b) { var p_a = this.getPagesOfGroup(a)[0]; var p_b = this.getPagesOfGroup(b)[0]; @@ -386,13 +397,20 @@ FluidbookBookmarks.prototype = { if (permanentIcon) { side += ' permanent'; } + var shortcut = "Control+Alt+D"; + if (side === 'left') { + shortcut = "Control+Shift+D"; + } bookmarks += "'; diff --git a/js/libs/fluidbook/fluidbook.help.js b/js/libs/fluidbook/fluidbook.help.js index f2f334d4..079ceaf3 100644 --- a/js/libs/fluidbook/fluidbook.help.js +++ b/js/libs/fluidbook/fluidbook.help.js @@ -167,8 +167,8 @@ FluidbookHelp.prototype = { $(document).on('click', '.icon-help', function (e) { $this.show(); - if (fluidbook.nav.menuIsOpen) { - fluidbook.nav.menuAPI.close(); + if ($this.fluidbook.nav.menuIsOpen) { + $this.fluidbook.nav.menuAPI.close(); } e.preventDefault(); }); diff --git a/js/libs/fluidbook/fluidbook.interface.js b/js/libs/fluidbook/fluidbook.interface.js index 6ac393e1..8b43c5d9 100644 --- a/js/libs/fluidbook/fluidbook.interface.js +++ b/js/libs/fluidbook/fluidbook.interface.js @@ -22,20 +22,20 @@ FluidbookInterface.prototype = { var res = ''; if ($('html').hasClass('ltr')) { res += '
'; - res += this.fluidbook.nav.getLink('interface-next', '#', 'next', '', labels.next, 'arrow-top', true, '', 'Right'); + res += this.fluidbook.nav.getLink('interface-next', '#', 'next', '', labels.next, 'arrow-top', true, '', 'ArrowRight'); res += this.fluidbook.nav.getLink('interface-last', '#', 'last', '', labels.last, 'arrow-bottom', true ,'','End'); res += '
'; res += '
'; - res += this.fluidbook.nav.getLink('interface-prev', '#', 'previous', '', labels.previous, 'arrow-top', true, '', 'Left'); + res += this.fluidbook.nav.getLink('interface-prev', '#', 'previous', '', labels.previous, 'arrow-top', true, '', 'ArrowLeft'); res += this.fluidbook.nav.getLink('interface-first', '#', 'first', '', labels.first, 'arrow-bottom', true, '', 'Home'); res += '
'; } else { res += '
'; - res += this.fluidbook.nav.getLink('interface-next', '#', 'previous', '', labels.previous, 'arrow-top', true, '', 'Right'); + res += this.fluidbook.nav.getLink('interface-next', '#', 'previous', '', labels.previous, 'arrow-top', true, '', 'ArrowRight'); res += this.fluidbook.nav.getLink('interface-last', '#', 'first', '', labels.first, 'arrow-bottom', true, 'Home'); res += '
'; res += '
'; - res += this.fluidbook.nav.getLink('interface-prev', '#', 'next', '', labels.next, 'arrow-top', true, 'Left'); + res += this.fluidbook.nav.getLink('interface-prev', '#', 'next', '', labels.next, 'arrow-top', true, 'ArrowLeft'); res += this.fluidbook.nav.getLink('interface-first', '#', 'last', '', labels.last, 'arrow-bottom', true, 'End'); res += '
'; } diff --git a/js/libs/fluidbook/fluidbook.js b/js/libs/fluidbook/fluidbook.js index 4de1cdc2..7c16acf5 100644 --- a/js/libs/fluidbook/fluidbook.js +++ b/js/libs/fluidbook/fluidbook.js @@ -45,6 +45,7 @@ Fluidbook.prototype = { this.contentlock = new FluidbookContentLock(this); this.menu = new FluidbookMenu(this); this.support = new FluidbookSupport(this); + this.l10n = new FluidbookL10N(this, $_GET['lang']); this.search = new FluidbookSearch(this); this.mobilefirst = new FluidbookMobileFirst(this); this.zoom = new FluidbookZoom(this); @@ -65,7 +66,6 @@ Fluidbook.prototype = { this.touch = new FluidbookTouch(this); } this.background = new FluidbookBackground(this); - this.l10n = new FluidbookL10N(this, $_GET['lang']); this.video = new FluidbookVideo(this); this.bookmarks = new FluidbookBookmarks(this); this.tooltip = new FluidbookTooltip(this); diff --git a/js/libs/fluidbook/fluidbook.keyboard.js b/js/libs/fluidbook/fluidbook.keyboard.js index de10da57..0a044aee 100644 --- a/js/libs/fluidbook/fluidbook.keyboard.js +++ b/js/libs/fluidbook/fluidbook.keyboard.js @@ -7,11 +7,65 @@ function FluidbookKeyboard(fluidbook) { FluidbookKeyboard.prototype = { initKeyboardShortcuts: function () { var $this = this; - key('escape', function () { - $this.fluidbook.help.hide(); - $this.fluidbook.menu.closeView(function () { + key.filter = function (event) { + var e = $(event.target || event.srcElement); + return !(e.is('input:not(#q),select,textarea')); + } + this.keyShortcut('escape', function () { + if ($this.fluidbook.help.isVisible()) { + $this.fluidbook.help.hide(); + } + if ($this.fluidbook.menu.viewMode()) { + $this.fluidbook.menu.closeView(function () { + + }, true, true); + } + $this.fluidbook.search.closeSearch(); + if ($this.fluidbook.nav.menuIsOpen) { + $this.fluidbook.nav.closeMenu(); + } + if (screenfull.isFullscreen) { + screenfull.exit(); + } + }); + if (this.fluidbook.settings.fullscreen) { + this.keyShortcut('f11', function () { + screenfull.toggle(); + }); + } + + if (!this.fluidbook.settings.print) { + this.keyShortcut('ctrl+p', function () { + }); + } + }, - }, true, true); + initBookmarksShortcuts: function () { + var $this = this; + this.keyShortcut('ctrl+alt+d', function () { + $this.fluidbook.bookmarks.toggleSide('right'); + }); + this.keyShortcut('ctrl+shift+d', function () { + $this.fluidbook.bookmarks.toggleSide('left'); + }); + }, + + initSearchShortcuts: function () { + var $this = this; + key('f3', function () { + if ($this.fluidbook.search.isResultNavOpened()) { + $this.fluidbook.search.nextResultsPage(); + } else { + $this.fluidbook.nav.openSearch(); + } + return false; + }); + + key('shift+f3', function () { + if ($this.fluidbook.search.isResultNavOpened()) { + $this.fluidbook.search.previousResultsPage(); + } + return false; }); }, @@ -20,11 +74,7 @@ FluidbookKeyboard.prototype = { return; } key(this.checkShortcuts(shortcuts), function () { - console.log('triggered ' + shortcuts) func(); - if(shortcuts==='f11'){ - return true; - } return false; }); }, @@ -57,7 +107,7 @@ FluidbookKeyboard.prototype = { var $this = this; shortcuts = shortcuts.split(' '); var res = []; - var map = {control: 'ctrl'}; + var map = {control: 'ctrl', arrowleft: 'left', arrowright: 'right', arrowup: 'up', arrowdown: 'down'}; $.each(shortcuts, function (k, shortcut) { if (shortcut === '') { return; diff --git a/js/libs/fluidbook/fluidbook.menu.js b/js/libs/fluidbook/fluidbook.menu.js index 604669e6..e2f8257d 100644 --- a/js/libs/fluidbook/fluidbook.menu.js +++ b/js/libs/fluidbook/fluidbook.menu.js @@ -273,7 +273,7 @@ FluidbookMenu.prototype = { } else { c = ' ' + c; } - return '
' + getSpriteIcon('interface-close') + ''; + return '' + getSpriteIcon('interface-close') + ''; } , openAudio: function (audio, callback) { diff --git a/js/libs/fluidbook/fluidbook.nav.js b/js/libs/fluidbook/fluidbook.nav.js index 187e20fe..d2cd1994 100644 --- a/js/libs/fluidbook/fluidbook.nav.js +++ b/js/libs/fluidbook/fluidbook.nav.js @@ -175,7 +175,7 @@ FluidbookNav.prototype = { // Make sure that the link gets a unique ID when it is used in both menus - var elementID = (navType === undefined || navType===null || navType==='') ? id : navType + '_' + id; + var elementID = (navType === undefined || navType === null || navType === '') ? id : navType + '_' + id; res += ' id="' + elementID + '"'; @@ -443,7 +443,7 @@ FluidbookNav.prototype = { } else if (icon === 'bookmark' && this.fluidbook.settings.bookmark) { link = this.addLink(navType, 'nav-bookmarks', '#/bookmark', 'bookmarks', 'bookmarks', 'bookmarks', 'Control+B'); } else if (icon === 'pdf' && this.fluidbook.settings.pdf) { - link = this.addLink(navType, 'nav-download', '#', 'download', 'download', 'download', 'Control+Alt+D'); + link = this.addLink(navType, 'nav-download', '#', 'download', 'download', 'download', 'Control+S'); } else if (icon === 'print' && this.fluidbook.settings.print) { link = this.addLink(navType, 'nav-print', '#', 'print', 'print', 'print', 'Control+P'); } else if (icon === 'basket' && this.fluidbook.cart !== undefined && this.fluidbook.cart.enabled) { @@ -484,7 +484,6 @@ FluidbookNav.prototype = { } else if (icon === 'fullscreen' && this.fluidbook.support.fullscreen && !this.fluidbook.settings.phonegap) { link = this.addLink(navType, 'nav-' + icon, '#', icon, 'full screen', 'switch between fullscreen and normal', 'F11'); - } else if (icon === 'sound' && this.fluidbook.sound.enabled) { link = this.addLink(navType, 'nav-sound-on', '#', 'sound-on', 'switch off the sound', 'switch on / switch off the sound', 'F10'); link2 = this.addLink(navType, 'nav-sound-off', '#', 'sound-off', 'switch on the sound', 'switch on / switch off the sound', 'Alt+A'); @@ -771,6 +770,7 @@ FluidbookNav.prototype = { if (screenfull.isFullscreen) { $('.icon-fullscreen').addClass('active'); } else { + window.focus(); $('.icon-fullscreen').removeClass('active'); } resize(); @@ -779,6 +779,7 @@ FluidbookNav.prototype = { setTimeout(function () { resize(); }, 1000); + window.focus(); }); }, @@ -829,7 +830,7 @@ FluidbookNav.prototype = { } }); - return '' + getSpriteIcon('interface-close') + ''; + return '' + getSpriteIcon('interface-close') + ''; }, getSearch: function () { diff --git a/js/libs/fluidbook/fluidbook.search.js b/js/libs/fluidbook/fluidbook.search.js index 3b946048..32312ba0 100644 --- a/js/libs/fluidbook/fluidbook.search.js +++ b/js/libs/fluidbook/fluidbook.search.js @@ -51,6 +51,9 @@ FluidbookSearch.prototype = { // The results nav bar provides navigation between results without needing the menu to be open // When it is active, the rest of the interface is hidden initResultsNav: function () { + + this.fluidbook.keyboard.initSearchShortcuts(); + var $this = this; // Previously we used buttons in the HTML for clickable elements @@ -63,11 +66,11 @@ FluidbookSearch.prototype = { html += '
'; html += ''; // .searchResultsNavField html += '
'; - html += '
'; + html += '
'; html += '
'; - html += '
'; + html += '
'; html += '
'; // .searchResultsNavArrows - html += '
'; + html += '
'; html += getSpriteIcon('interface-close'); html += '
'; // .searchResultsNavClose html += '
'; // #searchResultsNav @@ -112,12 +115,11 @@ FluidbookSearch.prototype = { $this.closeResultsNav(); } }) - - }, resultsNavActive: function () { return $('body').hasClass(this.resultsActiveClass); }, + updateResultsNav: function (resultPage) { // If we are in landscape view, there are 2 pages visible, @@ -156,6 +158,11 @@ FluidbookSearch.prototype = { this.resultsNav.removeClass('hidden'); $('body').addClass(this.resultsActiveClass); }, + + isResultNavOpened: function () { + return $('body').hasClass(this.resultsActiveClass); + }, + closeResultsNav: function (keepSearch) { keepSearch = keepSearch !== 'undefined' ? keepSearch : false; diff --git a/js/libs/fluidbook/links/fluidbook.links.zoom.js b/js/libs/fluidbook/links/fluidbook.links.zoom.js index 2fb6a0b4..68a485dd 100644 --- a/js/libs/fluidbook/links/fluidbook.links.zoom.js +++ b/js/libs/fluidbook/links/fluidbook.links.zoom.js @@ -214,7 +214,7 @@ FluidbookLinksZoom.prototype = { } menu += ''; $groupWrapper.append('
' + menu); - $groupWrapper.append('' + getSpriteIcon('interface-close') + ''); + $groupWrapper.append('' + getSpriteIcon('interface-close') + ''); } var z = $('#zoomPopup_' + zoomID), -- 2.39.5