@internetarchive/bookreader 5.0.0-100 → 5.0.0-102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BookReader/474.js +1 -1
- package/BookReader/474.js.map +1 -1
- package/BookReader/BookReader.css +79 -8
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.LICENSE.txt +1 -1
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/ia-bookreader-bundle.js +52 -52
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -1
- package/BookReader/ia-bookreader-bundle.js.map +1 -1
- package/BookReader/icons/1up.svg +1 -1
- package/BookReader/icons/2up.svg +1 -1
- package/BookReader/icons/advance.svg +1 -1
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -1
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -1
- package/BookReader/icons/fullscreen_exit.svg +1 -1
- package/BookReader/icons/hamburger.svg +1 -1
- package/BookReader/icons/left-arrow.svg +1 -1
- package/BookReader/icons/magnify-minus.svg +1 -1
- package/BookReader/icons/magnify-plus.svg +1 -1
- package/BookReader/icons/magnify.svg +1 -1
- package/BookReader/icons/pause.svg +1 -1
- package/BookReader/icons/play.svg +1 -1
- package/BookReader/icons/playback-speed.svg +1 -1
- package/BookReader/icons/read-aloud.svg +1 -1
- package/BookReader/icons/review.svg +1 -1
- package/BookReader/icons/slider-toggle.svg +1 -0
- package/BookReader/icons/thumbnails.svg +1 -1
- package/BookReader/icons/voice.svg +1 -1
- package/BookReader/icons/volume-full.svg +1 -1
- package/BookReader/images/BRicons.svg +2 -2
- package/BookReader/images/books_graphic.svg +1 -1
- package/BookReader/images/icon_book.svg +1 -1
- package/BookReader/images/icon_bookmark.svg +1 -1
- package/BookReader/images/icon_gear.svg +1 -1
- package/BookReader/images/icon_hamburger.svg +1 -1
- package/BookReader/images/icon_home.svg +1 -1
- package/BookReader/images/icon_info.svg +1 -1
- package/BookReader/images/icon_one_page.svg +1 -1
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -1
- package/BookReader/images/icon_search_button.svg +1 -1
- package/BookReader/images/icon_share.svg +1 -1
- package/BookReader/images/icon_skip-back.svg +1 -1
- package/BookReader/images/icon_speaker.svg +1 -1
- package/BookReader/images/icon_speaker_open.svg +1 -1
- package/BookReader/images/icon_thumbnails.svg +1 -1
- package/BookReader/images/icon_toc.svg +1 -1
- package/BookReader/images/icon_two_pages.svg +1 -1
- package/BookReader/images/marker_chap-off.svg +1 -1
- package/BookReader/images/marker_chap-on.svg +1 -1
- package/BookReader/images/marker_srch-on.svg +1 -1
- package/BookReader/images/translate.svg +1 -1
- package/BookReader/jquery-3.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +2 -2
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -1
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.experiments.js +1 -1
- package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -1
- package/BookReader/plugins/plugin.experiments.js.map +1 -1
- package/BookReader/plugins/plugin.iframe.js +1 -1
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +1 -1
- package/BookReader/plugins/plugin.iiif.js.map +1 -1
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -1
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +1 -1
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -1
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.translate.js +4 -4
- package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -1
- package/BookReader/plugins/plugin.translate.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +1 -1
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -1
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/plugins/translator-worker.js +1 -1
- package/BookReader/plugins/translator-worker.js.map +1 -1
- package/BookReader/webcomponents-bundle.js +1 -1
- package/BookReader/webcomponents-bundle.js.map +1 -1
- package/package.json +20 -20
- package/src/BookNavigator/search/search-results.js +84 -63
- package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +4 -4
- package/src/BookNavigator/visual-adjustments/visual-adjustments.js +77 -59
- package/src/BookReader/Navbar/Navbar.js +54 -71
- package/src/BookReader/options.js +6 -0
- package/src/BookReader.js +12 -0
- package/src/assets/icons/slider-toggle.svg +1 -0
- package/src/css/_BRnav.scss +57 -4
- package/src/css/_BRpages.scss +9 -0
- package/src/css/_icons.scss +7 -0
- package/src/plugins/plugin.text_selection.js +9 -0
- package/src/plugins/search/plugin.search.js +4 -0
- package/src/plugins/search/utils.js +8 -1
- package/src/plugins/search/view.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins/plugin.search.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/search/view.js","webpack://@internetarchive/bookreader/./src/plugins/search/utils.js","webpack://@internetarchive/bookreader/./src/plugins/search/plugin.search.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\n/** @typedef {import('@/src/BookReader.js').default} BookReader */\n\nclass SearchView {\n /**\n * @param {object} params\n * @param {BookReader} params.br The BookReader instance\n * @param {function} params.searchCancelledCallback callback when a user wants to cancel search\n *\n * @event BookReader:SearchResultsCleared - when the search results nav gets cleared\n * @event BookReader:ToggleSearchMenu - when search results menu should toggle\n */\n constructor({ br, searchCancelledCallback = () => {} }) {\n /** @type {BookReader} */\n this.br = br;\n this.matches = [];\n this.cacheDOMElements();\n this.cancelSearch = searchCancelledCallback;\n }\n\n init() {\n this.bindEvents();\n }\n\n cacheDOMElements() {\n this.dom = {};\n // Search input within the top toolbar. Will be removed once the mobile menu is replaced.\n this.dom.toolbarSearch = this.buildToolbarSearch();\n }\n\n /**\n * @param {string} query\n */\n setQuery(query) {\n this.br.$('[name=\"query\"]').val(query);\n }\n\n emptyMatches() {\n this.matches = [];\n }\n\n removeResultPins() {\n this.br.$('.BRnavpos .BRsearch').remove();\n }\n\n clearSearchFieldAndResults(dispatchEventWhenComplete = true) {\n this.br.plugins.search.removeSearchResults();\n this.removeResultPins();\n this.emptyMatches();\n this.setQuery('');\n this.teardownSearchNavigation();\n if (dispatchEventWhenComplete) {\n this.br.trigger('SearchResultsCleared');\n }\n }\n\n toggleSidebar() {\n this.br.trigger('ToggleSearchMenu');\n }\n\n renderSearchNavigation() {\n const selector = 'BRsearch-navigation';\n $('.BRnav').before(`\n <div class=\"${selector}\">\n <button class=\"toggle-sidebar\">\n <h4>\n <span class=\"icon icon-search\"></span> Results\n </h4>\n </button>\n <div class=\"pagination\">\n <button class=\"prev\" title=\"Previous result\"><span class=\"icon icon-chevron hflip\"></span></button>\n <span data-id=\"resultsCount\">${this.resultsPosition()}</span>\n <button class=\"next\" title=\"Next result\"><span class=\"icon icon-chevron\"></button>\n </div>\n <button class=\"clear\" title=\"Clear search results\">\n <span class=\"icon icon-close\"></span>\n </button>\n </div>\n `);\n this.dom.searchNavigation = $(`.${selector}`);\n }\n\n resultsPosition() {\n let positionMessage = `${this.matches.length} result${this.matches.length === 1 ? '' : 's'}`;\n if (~this.currentMatchIndex) {\n positionMessage = `${this.currentMatchIndex + 1} / ${this.matches.length}`;\n }\n return positionMessage;\n }\n\n bindSearchNavigationEvents() {\n if (!this.dom.searchNavigation) { return; }\n const namespace = 'searchNavigation';\n\n this.dom.searchNavigation\n .on(`click.${namespace}`, '.clear', this.clearSearchFieldAndResults.bind(this))\n .on(`click.${namespace}`, '.prev', this.showPrevResult.bind(this))\n .on(`click.${namespace}`, '.next', this.showNextResult.bind(this))\n .on(`click.${namespace}`, '.toggle-sidebar', this.toggleSidebar.bind(this))\n .on(`click.${namespace}`, false);\n }\n\n showPrevResult() {\n if (this.currentMatchIndex === 0) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => end[0] > comparator) + 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(--this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n showNextResult() {\n if (this.currentMatchIndex + 1 === this.matches.length) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => start[start.length - 1] > comparator) - 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(++this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * Obtains closest match based on the logical comparison function passed in.\n * When the comparison function returns true, the starting (left) half of the\n * matches array is used in the binary split, else the ending (right) half is\n * used. A recursive call is made to perform the same split and comparison\n * on the winning half of the matches. This is traditionally known as binary\n * search (https://en.wikipedia.org/wiki/Binary_search_algorithm), and in\n * most cases (medium to large search result arrays) should outperform\n * traversing the array from start to finish. In the case of small arrays,\n * the speed difference is negligible.\n *\n * @param {function} comparisonFn\n * @return {number} matchIndex\n */\n getClosestMatchIndex(comparisonFn) {\n const matchPages = this.matches.map((m) => m.par[0].page);\n const currentPage = this.br.currentIndex() + 1;\n const closestTo = (pool, comparator) => {\n if (pool.length === 1) { return pool[0]; }\n const start = pool.slice(0, pool.length / 2);\n const end = pool.slice(pool.length / 2);\n return closestTo((comparisonFn(start, end, comparator) ? start : end), comparator);\n };\n\n const closestPage = closestTo(matchPages, currentPage);\n return this.matches.indexOf(this.matches.find((m) => m.par[0].page === closestPage));\n }\n\n updateResultsPosition() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());\n }\n\n updateSearchNavigationButtons() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);\n this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);\n }\n\n teardownSearchNavigation() {\n if (!this.dom.searchNavigation) {\n this.dom.searchNavigation = $('.BRsearch-navigation');\n }\n if (!this.dom.searchNavigation.length) { return; }\n\n this.dom.searchNavigation.off('.searchNavigation').remove();\n this.dom.searchNavigation = null;\n this.br.resize();\n }\n\n setCurrentMatchIndex() {\n let matchingSearchResult;\n if (this.br.mode === this.br.constModeThumb) {\n this.currentMatchIndex = -1;\n return;\n }\n if (this.br.mode === this.br.constMode2up) {\n matchingSearchResult = this.find2upMatchingSearchResult();\n }\n else {\n matchingSearchResult = this.find1upMatchingSearchResult();\n }\n this.currentMatchIndex = this.matches.indexOf(matchingSearchResult);\n }\n\n find1upMatchingSearchResult() {\n return this.matches.find((m) => this.br.currentIndex() === m.par[0].page - 1);\n }\n\n find2upMatchingSearchResult() {\n return this.matches.find((m) => this.br._isIndexDisplayed(m.par[0].page - 1));\n }\n\n updateSearchNavigation() {\n if (!this.matches.length) { return; }\n\n this.setCurrentMatchIndex();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * @param {boolean} bool\n */\n togglePinsFor(bool) {\n const pinsVisibleState = bool ? 'visible' : 'hidden';\n this.br.refs.$BRfooter.find('.BRsearch').css({ visibility: pinsVisibleState });\n }\n\n buildToolbarSearch() {\n const toolbarSearch = document.createElement('span');\n toolbarSearch.classList.add('BRtoolbarSection', 'BRtoolbarSectionSearch');\n toolbarSearch.innerHTML = `\n <form class=\"BRbooksearch desktop\">\n <input type=\"search\" name=\"query\" class=\"BRsearchInput\" value=\"\" placeholder=\"Search inside\"/>\n <button type=\"submit\" class=\"BRsearchSubmit\">\n <img src=\"${this.br.options.imagesBaseURL}icon_search_button.svg\" />\n </button>\n </form>\n `;\n return toolbarSearch;\n }\n\n /**\n * @param {array} matches\n */\n renderPins(matches) {\n matches.forEach((match) => {\n const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);\n const uiStringSearch = \"Search result\"; // i18n\n const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);\n\n let html = match.html;\n if (html.length > 200) {\n const start = Math.max(0, html.indexOf('<mark>') - 100);\n if (start != 0) {\n html = '…' + match.html\n .substring(start)\n // Make sure at word boundary though\n .replace(/^\\S+/, '');\n }\n }\n // draw marker\n $('<div>')\n .addClass('BRsearch')\n .css({\n left: percentThrough,\n })\n .attr('title', uiStringSearch)\n .append(`\n <div class=\"BRquery\">\n <main>${html}</main>\n <footer>Page ${match.displayPageNumber}</footer>\n </div>\n `)\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", (event) => {\n // remove from other markers then turn on just for this\n // XXX should be done when nav slider moves\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('.BRquery');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n $('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", (event) => $(event.target).removeClass('front'))\n .on(\"click\", () => { this.br.plugins.search.jumpToMatch(match.matchIndex); });\n });\n }\n\n /**\n * @param {boolean} show\n */\n toggleSearchPending(show = false) {\n if (show) {\n this.br.showProgressPopup(\"Search results will appear below...\", () => this.progressPopupClosed());\n }\n else {\n this.br.removeProgressPopup();\n }\n }\n\n /**\n * Primary callback when user cancels search popup\n */\n progressPopupClosed() {\n this.toggleSearchPending();\n this.cancelSearch();\n }\n\n renderErrorModal(textIsProcessing = false) {\n const errorDetails = `${!textIsProcessing ? 'The text may still be processing. ' : ''}Please try again.`;\n this.renderModalMessage(`\n Sorry, there was an error with your search.\n <br />\n ${errorDetails}\n `);\n this.delayModalRemovalFor(4000);\n }\n\n renderBookNotIndexedModal() {\n this.renderModalMessage(`\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n `);\n this.delayModalRemovalFor(5000);\n }\n\n renderResultsEmptyModal() {\n this.renderModalMessage('No matches were found.');\n this.delayModalRemovalFor(2000);\n }\n\n /**\n * @param {string} messageHTML The innerHTML string used to popupate the modal contents\n */\n renderModalMessage(messageHTML) {\n const modal = document.createElement('div');\n modal.classList.add('BRprogresspopup', 'search_modal');\n modal.innerHTML = messageHTML;\n document.querySelector(this.br.el).append(modal);\n }\n\n /**\n * @param {number} timeoutMS\n */\n delayModalRemovalFor(timeoutMS) {\n setTimeout(this.br.removeProgressPopup.bind(this.br), timeoutMS);\n }\n\n /**\n * @param {Event} e\n */\n submitHandler(e) {\n e.preventDefault();\n const query = e.target.querySelector('[name=\"query\"]').value;\n if (!query.length) { return false; }\n this.br.search(query);\n this.emptyMatches();\n this.toggleSearchPending(true);\n return false;\n }\n\n /**\n * @param {Event} e\n * @param {object} properties\n * @param {object} properties.results\n * @param {object} properties.options\n */\n handleSearchCallback(e, { results, options }) {\n this.matches = results.matches;\n this.setCurrentMatchIndex();\n this.teardownSearchNavigation();\n this.renderSearchNavigation();\n this.bindSearchNavigationEvents();\n this.renderPins(results.matches);\n this.toggleSearchPending(false);\n if (options.goToFirstResult) {\n $(document).one('BookReader:pageChanged', () => {\n this.br.resize();\n });\n } else {\n this.br.resize();\n }\n }\n\n handleSearchStarted() {\n this.emptyMatches();\n this.br.plugins.search.removeSearchHilites();\n this.removeResultPins();\n this.toggleSearchPending(true);\n this.teardownSearchNavigation();\n this.setQuery(this.br.plugins.search.searchTerm);\n }\n\n /**\n * Event listener for: `BookReader:SearchCallbackError`\n * @param {CustomEvent} event\n */\n handleSearchCallbackError(event = {}) {\n this.toggleSearchPending(false);\n const isIndexed = event?.detail?.props?.results?.indexed;\n this.renderErrorModal(isIndexed);\n }\n\n handleSearchCallbackBookNotIndexed() {\n this.toggleSearchPending(false);\n this.renderBookNotIndexedModal();\n }\n\n handleSearchCallbackEmpty() {\n this.toggleSearchPending(false);\n this.renderResultsEmptyModal();\n }\n\n bindEvents() {\n const namespace = 'BookReader:';\n\n window.addEventListener(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this));\n $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))\n .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))\n .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))\n .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))\n .on(`${namespace}pageChanged`, this.updateSearchNavigation.bind(this));\n\n this.dom.toolbarSearch.querySelector('form').addEventListener('submit', this.submitHandler.bind(this));\n }\n}\n\nexport default SearchView;\n","import { escapeHTML, escapeRegExp } from '../../BookReader/utils.js';\n\n/**\n * @param {string} match\n * @param {string} preTag\n * @param {string} postTag\n * @returns {string}\n */\nexport function renderMatch(match, preTag, postTag) {\n // Search results are returned as a text blob with the hits wrapped in\n // triple mustaches. Hits occasionally include text beyond the search\n // term, so everything within the staches is captured and wrapped.\n const preTagRe = escapeRegExp(escapeHTML(preTag));\n const postTagRe = escapeRegExp(escapeHTML(postTag));\n // [^] matches any character, including line breaks\n const regex = new RegExp(`${preTagRe}([^]+?)${postTagRe}`, 'g');\n return escapeHTML(match)\n .replace(regex, '<mark>$1</mark>')\n // Fix trailing hyphens. This over-corrects but is net useful.\n .replace(/(\\b)- /g, '$1');\n}\n\n/**\n * Attach some fields to search inside results\n * @param {SearchInsideResults} results\n * @param {(pageNum: LeafNum) => PageNumString} displayPageNumberFn\n * @param {string} preTag\n * @param {string} postTag\n */\nexport function marshallSearchResults(results, displayPageNumberFn, preTag, postTag) {\n // Attach matchIndex to a few things to make it easier to identify\n // an active/selected match\n for (const [index, match] of results.matches.entries()) {\n match.matchIndex = index;\n match.displayPageNumber = displayPageNumberFn(match.par[0].page);\n match.html = renderMatch(match.text, preTag, postTag);\n for (const par of match.par) {\n for (const box of par.boxes) {\n box.matchIndex = index;\n }\n }\n }\n}\n","// @ts-check\n/**\n * Plugin for Archive.org book search\n * Events fired at various points throughout search processing are published\n * on the document DOM element. These can be subscribed to using jQuery's event\n * binding method `$.fn.on`. All of the events are prefixed with a BookReader\n * namespace. The events are:\n *\n * @event BookReader:SearchStarted - When a search form is submitted, immediately\n * before an AJAX call is made to request search results\n * @event BookReader:SearchCallback - When the search AJAX call is returned and at\n * least one result is returned. The event callback receives an object\n * with the `results`, plugin `options`, and the BookReader `instance`\n * @event BookReader:SearchCallbackError - When the AJAX request returns an error.\n * Receives the `results` and `instance`\n * @event BookReader:SearchCallbackNotIndexed - When a message is received that\n * the book has not had OCR text indexed yet. Receives `instance`\n * @event BookReader:SearchCallbackEmpty - When no results found. Receives\n * `instance`\n * @event BookReader:SearchCanceled - When no results found. Receives\n * `instance`\n */\nimport { poll } from '../../BookReader/utils.js';\nimport { renderBoxesInPageContainerLayer } from '../../BookReader/PageContainer.js';\nimport SearchView from './view.js';\nimport { marshallSearchResults } from './utils.js';\nimport { BookReaderPlugin } from '../../BookReaderPlugin.js';\nimport { applyVariables } from '../../util/strings.js';\n/** @typedef {import('../../BookReader/PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../../BookReader/BookModel').PageIndex} PageIndex */\n/** @typedef {import('../../BookReader/BookModel').LeafNum} LeafNum */\n/** @typedef {import('../../BookReader/BookModel').PageNumString} PageNumString */\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\nexport class SearchPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n preTag: '{{{',\n postTag: '}}}',\n /**\n * @type {import('@/src/util/strings.js').StringWithVars}\n * Provides the variables: `query`, `preTag`, and `postTag` (from these options)\n */\n searchInsideUrl: '/fulltext/inside.php?' + [\n 'q={{query|urlencode}}',\n 'pre_tag={{preTag|urlencode}}',\n 'post_tag={{postTag|urlencode}}',\n ].join('&'),\n /** @type {string} */\n initialSearchTerm: null,\n goToFirstResult: false,\n }\n\n /**\n * @override\n * @param {Partial<SearchPlugin['options']>} options\n **/\n setup(options) {\n super.setup(options);\n\n this.searchTerm = '';\n /** @type {SearchInsideResults | null} */\n this.searchResults = null;\n this.searchInsideUrl = this.options.searchInsideUrl;\n this.enabled = this.options.enabled;\n this.searchXHR = null;\n\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n this._searchBoxesByIndex = {};\n\n if (this.enabled) {\n this.searchView = new SearchView({\n br: this.br,\n searchCancelledCallback: () => {\n this._cancelSearch();\n this.br.trigger('SearchCanceled', { term: this.searchTerm, instance: this.br });\n },\n });\n } else {\n this.searchView = null;\n }\n }\n\n /** @override */\n init() {\n super.init();\n\n if (!this.enabled) return;\n\n this.searchView.init();\n if (this.options.initialSearchTerm) {\n /**\n * this.search() take two parameter\n * 1. this.options.initialSearchTerm - search term\n * 2. {\n * goToFirstResult: this.options.goToFirstResult,\n * suppressFragmentChange: false // always want to change fragment in URL\n * }\n */\n this.search(\n this.options.initialSearchTerm,\n { goToFirstResult: this.options.goToFirstResult, suppressFragmentChange: false },\n );\n }\n }\n\n /**\n * @override\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n if (!this.enabled) { return; }\n if (this.searchView.dom.toolbarSearch) {\n $toolbarElement.find('.BRtoolbarSectionInfo').after(this.searchView.dom.toolbarSearch);\n }\n return $toolbarElement;\n }\n\n /**\n * @override\n * @param {import (\"@/src/BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n if (this.enabled && pageContainer.page && pageContainer.page.index in this._searchBoxesByIndex) {\n const pageIndex = pageContainer.page.index;\n const boxes = this._searchBoxesByIndex[pageIndex];\n renderBoxesInPageContainerLayer(\n 'searchHiliteLayer',\n boxes,\n pageContainer.page,\n pageContainer.$container[0],\n boxes.map(b => `match-index-${b.matchIndex}`),\n );\n }\n return pageContainer;\n }\n\n /**\n * Submits search request\n *\n * @param {string} term\n * @param {Partial<SearchOptions>} overrides\n */\n async search(term = '', overrides = {}) {\n /** @type {SearchOptions} */\n const defaultOptions = {\n goToFirstResult: false, /* jump to the first result (default=false) */\n disablePopup: false, /* don't show the modal progress (default=false) */\n suppressFragmentChange: false, /* don't change the URL on initial load */\n error: null, /* optional error handler (default=null) */\n success: null, /* optional success handler (default=null) */\n\n };\n const options = jQuery.extend({}, defaultOptions, overrides);\n this.suppressFragmentChange = options.suppressFragmentChange;\n this.searchCancelled = false;\n\n // strip slashes, since this goes in the url\n this.searchTerm = term.replace(/\\//g, ' ');\n\n if (!options.suppressFragmentChange) {\n this.br.trigger(BookReader.eventNames.fragmentChange);\n }\n\n // Add quotes to the term. This is to compenstate for the backends default OR query\n // term = term.replace(/['\"]+/g, '');\n // term = '\"' + term + '\"';\n\n const url = applyVariables(this.options.searchInsideUrl, this.br.options.vars, {\n query: term,\n preTag: this.options.preTag,\n postTag: this.options.postTag,\n });\n\n const callSearchResultsCallback = (searchInsideResults) => {\n if (this.searchCancelled) {\n return;\n }\n const responseHasError = searchInsideResults.error || !searchInsideResults.matches.length;\n const hasCustomError = typeof options.error === 'function';\n const hasCustomSuccess = typeof options.success === 'function';\n\n if (responseHasError) {\n console.error('Search Inside Response Error', searchInsideResults.error || 'matches.length == 0');\n hasCustomError\n ? options.error.call(this, searchInsideResults, options)\n : this.BRSearchCallbackError(searchInsideResults);\n } else {\n hasCustomSuccess\n ? options.success.call(this, searchInsideResults, options)\n : this.BRSearchCallback(searchInsideResults, options);\n }\n };\n\n this.br.trigger('SearchStarted', { term: this.searchTerm, instance: this.br });\n callSearchResultsCallback(await $.ajax({\n url: url,\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n beforeSend: xhr => { this.searchXHR = xhr; },\n }));\n }\n\n /**\n * cancels AJAX Call\n * emits custom event\n */\n _cancelSearch() {\n this.searchXHR?.abort();\n this.searchView.clearSearchFieldAndResults(false);\n this.searchTerm = '';\n this.searchXHR = null;\n this.searchCancelled = true;\n this.searchResults = null;\n }\n\n /**\n * External function to cancel search\n * checks for term & xhr in flight before running\n */\n cancelSearchRequest() {\n this.searchCancelled = true;\n if (this.searchXHR !== null) {\n this._cancelSearch();\n this.searchView.toggleSearchPending();\n this.br.trigger('SearchCanceled', { term: this.searchTerm, instance: this.br });\n }\n }\n\n /**\n * Search Results return handler\n * @param {SearchInsideResults} results\n * @param {object} options\n * @param {boolean} options.goToFirstResult\n */\n BRSearchCallback(results, options) {\n marshallSearchResults(\n results,\n pageNum => this.br.book.getPageNum(this.br.book.leafNumToIndex(pageNum)),\n this.options.preTag,\n this.options.postTag,\n );\n this.searchResults = results || null;\n\n this.updateSearchHilites();\n this.br.removeProgressPopup();\n if (options.goToFirstResult) {\n this.jumpToMatch(0);\n }\n this.br.trigger('SearchCallback', { results, options, instance: this.br });\n }\n\n /**\n * Main search results error handler\n * @param {SearchInsideResults} results\n */\n BRSearchCallbackError(results) {\n this._BRSearchCallbackError(results);\n }\n\n /**\n * @private draws search results error\n * @param {SearchInsideResults} results\n */\n _BRSearchCallbackError(results) {\n this.searchResults = results;\n const payload = {\n term: this.searchTerm,\n results,\n instance: this.br,\n };\n if (results.error) {\n this.br.trigger('SearchCallbackError', payload);\n } else if (0 == results.matches.length) {\n if (false === results.indexed) {\n this.br.trigger('SearchCallbackBookNotIndexed', payload);\n return;\n }\n this.br.trigger('SearchCallbackEmpty', payload);\n }\n }\n\n /**\n * updates search on-page highlights controller\n */\n updateSearchHilites() {\n /** @type {SearchInsideMatch[]} */\n const matches = this.searchResults?.matches || [];\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n const boxesByIndex = {};\n\n // Clear any existing svg layers\n this.removeSearchHilites();\n\n // Group by pageIndex\n for (const match of matches) {\n for (const box of match.par[0].boxes) {\n const pageIndex = this.br.book.leafNumToIndex(box.page);\n const pageBoxes = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);\n pageBoxes.push(box);\n }\n }\n\n // update any already created pages\n for (const [pageIndexString, boxes] of Object.entries(boxesByIndex)) {\n const pageIndex = parseFloat(pageIndexString);\n const page = this.br.book.getPage(pageIndex);\n const pageContainers = this.br.getActivePageContainerElementsForIndex(pageIndex);\n for (const container of pageContainers) {\n renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container, boxes.map(b => `match-index-${b.matchIndex}`));\n }\n }\n\n this._searchBoxesByIndex = boxesByIndex;\n }\n\n /**\n * remove search highlights\n */\n removeSearchHilites() {\n $(this.br.getActivePageContainerElements()).find('.searchHiliteLayer').remove();\n }\n\n /**\n * Goes to the page specified. If the page is not viewable, tries to load the page\n * FIXME Most of this logic is IA specific, and should be less integrated into here\n * or at least more configurable.\n * @param {number} matchIndex\n */\n async jumpToMatch(matchIndex) {\n const match = this.searchResults?.matches[matchIndex];\n const book = this.br.book;\n const pageIndex = book.leafNumToIndex(match.par[0].page);\n const page = book.getPage(pageIndex);\n const onNearbyPage = Math.abs(this.br.currentIndex() - pageIndex) < 3;\n let makeUnviewableAtEnd = false;\n if (!page.isViewable) {\n const resp = await fetch('/services/bookreader/request_page?' + new URLSearchParams({\n id: this.br.options.bookId,\n subprefix: this.br.options.subPrefix,\n leafNum: page.leafNum,\n })).then(r => r.json());\n\n for (const leafNum of resp.value) {\n book.getPage(book.leafNumToIndex(leafNum)).makeViewable();\n }\n\n // not able to show page; make the page viewable anyways so that it can\n // actually open. On IA, it has a fallback to a special error page.\n if (!resp.value.length) {\n book.getPage(pageIndex).makeViewable();\n makeUnviewableAtEnd = true;\n }\n\n // Trigger an update of book\n this.br._modes.mode1Up.mode1UpLit.updatePages();\n if (this.br.activeMode == this.br._modes.mode1Up) {\n await this.br._modes.mode1Up.mode1UpLit.updateComplete;\n }\n }\n /* this updates the URL */\n if (!this.br._isIndexDisplayed(pageIndex)) {\n this.suppressFragmentChange = false;\n this.br.jumpToIndex(pageIndex);\n }\n\n // Reset it to unviewable if it wasn't resolved\n if (makeUnviewableAtEnd) {\n book.getPage(pageIndex).makeViewable(false);\n }\n\n // Scroll/flash in the ui\n const $boxes = await poll(() => $(`rect.match-index-${match.matchIndex}`), { until: result => result.length > 0 });\n if ($boxes.length) {\n $boxes.css('animation', 'none');\n $boxes[0].scrollIntoView({\n // Only vertically center the highlight if we're in 1up or in full screen. In\n // 2up, if we're not fullscreen, the whole body gets scrolled around to try to\n // center the highlight 🙄 See:\n // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move/11041376\n // Note: nearest doesn't quite work great, because the ReadAloud toolbar is now\n // full-width, and covers up the last line of the highlight.\n block: this.br.constMode1up == this.br.mode || this.br.isFullscreenActive ? 'center' : 'nearest',\n inline: 'center',\n behavior: onNearbyPage ? 'smooth' : 'auto',\n });\n // wait for animation to start\n await new Promise(resolve => setTimeout(resolve, 100));\n $boxes.removeAttr(\"style\");\n }\n }\n\n /**\n * Removes all search pins\n */\n removeSearchResults(suppressFragmentChange = false) {\n this.removeSearchHilites(); //be sure to set all box.divs to null\n this.searchTerm = null;\n this.searchResults = null;\n if (!suppressFragmentChange) {\n this.br.trigger(BookReader.eventNames.fragmentChange);\n }\n }\n}\nBookReader?.registerPlugin('search', SearchPlugin);\n\n/**\n * @typedef {object} SearchOptions\n * @property {boolean} goToFirstResult\n * @property {boolean} disablePopup\n * @property {boolean} suppressFragmentChange\n * @property {(null|function)} error (deprecated)\n * @property {(null|function)} success (deprecated)\n */\n\n/**\n * @typedef {object} SearchInsideMatchBox\n * @property {number} page\n * @property {number} r\n * @property {number} l\n * @property {number} b\n * @property {number} t\n * @property {HTMLDivElement} [div]\n * @property {number} matchIndex This is a fake field! not part of the API response. The index of the match that contains this box in total search results matches.\n */\n\n/**\n * @typedef {object} SearchInsideMatch\n * @property {number} matchIndex This is a fake field! Not part of the API response. It is added by the JS.\n * @property {string} displayPageNumber (fake field) The page number as it should be displayed in the UI.\n * @property {string} html (computed field) The html-escaped raw html to display in the UI.\n * @property {string} text\n * @property {Array<{ page: number, boxes: SearchInsideMatchBox[] }>} par\n */\n\n/**\n * @typedef {object} SearchInsideResults\n * @property {string} q\n * @property {string} error\n * @property {SearchInsideMatch[]} matches\n * @property {boolean} indexed\n */\n","/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n * @returns {StringWithVars|string}\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n"],"names":["PROPER_FUNCTION_NAME","fails","whitespaces","module","exports","METHOD_NAME","name","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","this","BookReaderPlugin","br","_classCallCheck","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","SearchView","_ref","_ref$searchCancelledC","searchCancelledCallback","matches","cacheDOMElements","cancelSearch","bindEvents","dom","toolbarSearch","buildToolbarSearch","query","val","remove","dispatchEventWhenComplete","arguments","length","undefined","plugins","search","removeSearchResults","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","trigger","selector","before","concat","resultsPosition","searchNavigation","positionMessage","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","mode","constModeThumb","switchMode","constMode1up","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","matchPages","map","m","par","page","currentPage","currentIndex","closestTo","pool","slice","closestPage","indexOf","find","text","attr","off","resize","matchingSearchResult","constMode2up","find2upMatchingSearchResult","find1upMatchingSearchResult","_this","_this2","_isIndexDisplayed","setCurrentMatchIndex","bool","pinsVisibleState","refs","$BRfooter","css","visibility","document","createElement","classList","add","innerHTML","imagesBaseURL","_this3","forEach","match","pageIndex","book","leafNumToIndex","percentThrough","constructor","util","cssPercentage","getNumLeafs","html","Math","max","substring","replace","addClass","left","append","displayPageNumber","appendTo","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","removeClass","jumpToMatch","matchIndex","_this4","showProgressPopup","progressPopupClosed","removeProgressPopup","toggleSearchPending","errorDetails","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","e","preventDefault","_ref2","_this5","results","renderSearchNavigation","bindSearchNavigationEvents","renderPins","goToFirstResult","one","removeSearchHilites","searchTerm","_event$detail","isIndexed","detail","props","indexed","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","window","addEventListener","handleSearchCallbackError","handleSearchCallback","handleSearchStarted","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","submitHandler","renderMatch","preTag","postTag","preTagRe","escapeRegExp","escapeHTML","postTagRe","regex","RegExp","_regeneratorRuntime","t","r","prototype","n","hasOwnProperty","o","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","apply","_next","_throw","_defineProperties","_toPropertyKey","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","Boolean","valueOf","_superPropGet","_get","get","_superPropBase","getOwnPropertyDescriptor","_setPrototypeOf","toPrimitive","String","_toPrimitive","BookReader","SearchPlugin","_BookReaderPlugin","_len","args","Array","_key","enabled","searchInsideUrl","join","initialSearchTerm","_inherits","searchResults","searchXHR","_searchBoxesByIndex","searchView","_cancelSearch","term","instance","init","suppressFragmentChange","after","index","boxes","renderBoxesInPageContainerLayer","$container","b","_search","_callee","overrides","defaultOptions","url","callSearchResultsCallback","_args","_context","disablePopup","error","success","jQuery","extend","searchCancelled","eventNames","fragmentChange","applyVariables","vars","searchInsideResults","responseHasError","hasCustomError","hasCustomSuccess","console","BRSearchCallbackError","BRSearchCallback","t0","ajax","cache","xhrFields","withCredentials","protected","beforeSend","xhr","t1","_this$searchXHR","abort","displayPageNumberFn","_step","pageNum","_iterator","_createForOfIteratorHelper","entries","_step$value","_slicedToArray","getPageNum","_step2","_iterator2","_step3","_iterator3","err","marshallSearchResults","updateSearchHilites","_BRSearchCallbackError","payload","_this$searchResults","boxesByIndex","box","_i","_Object$entries","_Object$entries$_i","pageIndexString","parseFloat","getPage","getActivePageContainerElementsForIndex","container","getActivePageContainerElements","_jumpToMatch","_callee2","_this$searchResults2","onNearbyPage","makeUnviewableAtEnd","resp","_iterator4","_step4","leafNum","$boxes","_context2","abs","isViewable","fetch","URLSearchParams","id","bookId","subprefix","subPrefix","json","makeViewable","_modes","mode1Up","mode1UpLit","updatePages","activeMode","updateComplete","jumpToIndex","poll","until","result","scrollIntoView","block","isFullscreenActive","inline","behavior","removeAttr","_x","registerPlugin","template","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","split","varName","filterNames","reduce","acc","cur","toString","urlencode","encodeURIComponent"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"plugins/plugin.search.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./src/plugins/search/view.js","webpack://@internetarchive/bookreader/./src/plugins/search/utils.js","webpack://@internetarchive/bookreader/./src/plugins/search/plugin.search.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// src/data.ts\nvar data_default = [\n [\"Serbian\", \"\\u0441\\u0440\\u043F\\u0441\\u043A\\u0438 \\u0458\\u0435\\u0437\\u0438\\u043A\", \"sr\", \"srp\", \"srp\"],\n [\"Romanian, Moldavian, Moldovan\", \"Rom\\xE2n\\u0103\", \"ro\", \"ron\", \"rum\"],\n [\"Sichuan Yi, Nuosu\", \"\\uA188\\uA320\\uA4BF Nuosuhxop\", \"ii\", \"iii\", \"iii\"],\n [\"Tahitian\", \"Reo Tahiti\", \"ty\", \"tah\", \"tah\"],\n [\"Tagalog\", \"Wikang Tagalog\", \"tl\", \"tgl\", \"tgl\"],\n [\"Yiddish\", \"\\u05D9\\u05D9\\u05B4\\u05D3\\u05D9\\u05E9\", \"yi\", \"yid\", \"yid\"],\n [\"Akan\", \"Akan\", \"ak\", \"aka\", \"aka\"],\n [\"Malay\", \"Bahasa Melayu, \\u0628\\u0647\\u0627\\u0633 \\u0645\\u0644\\u0627\\u064A\\u0648\", \"ms\", \"msa\", \"may\"],\n [\"Arabic\", \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\", \"ar\", \"ara\", \"ara\"],\n [\"Norwegian\", \"Norsk\", \"no\", \"nor\", \"nor\"],\n [\"Ojibwa\", \"\\u140A\\u14C2\\u1511\\u14C8\\u142F\\u14A7\\u140E\\u14D0\", \"oj\", \"oji\", \"oji\"],\n [\"Fulah\", \"Fulfulde, Pulaar, Pular\", \"ff\", \"ful\", \"ful\"],\n [\"Persian\", \"\\u0641\\u0627\\u0631\\u0633\\u06CC\", \"fa\", \"fas\", \"per\"],\n [\"Albanian\", \"Shqip\", \"sq\", \"sqi\", \"alb\"],\n [\"Aymara\", \"aymar aru\", \"ay\", \"aym\", \"aym\"],\n [\"Azerbaijani\", \"az\\u0259rbaycan dili\", \"az\", \"aze\", \"aze\"],\n [\"Chinese\", \"\\u4E2D\\u6587 (Zh\\u014Dngw\\xE9n), \\u6C49\\u8BED, \\u6F22\\u8A9E\", \"zh\", \"zho\", \"chi\"],\n [\"Cree\", \"\\u14C0\\u1426\\u1403\\u152D\\u140D\\u140F\\u1423\", \"cr\", \"cre\", \"cre\"],\n [\"Estonian\", \"eesti, eesti keel\", \"et\", \"est\", \"est\"],\n [\"Guaran\\xED\", \"Ava\\xF1e'\\u1EBD\", \"gn\", \"grn\", \"grn\"],\n [\"Inupiaq\", \"I\\xF1upiaq, I\\xF1upiatun\", \"ik\", \"ipk\", \"ipk\"],\n [\"Inuktitut\", \"\\u1403\\u14C4\\u1483\\u144E\\u1450\\u1466\", \"iu\", \"iku\", \"iku\"],\n [\"Kanuri\", \"Kanuri\", \"kr\", \"kau\", \"kau\"],\n [\"Komi\", \"\\u043A\\u043E\\u043C\\u0438 \\u043A\\u044B\\u0432\", \"kv\", \"kom\", \"kom\"],\n [\"Kongo\", \"Kikongo\", \"kg\", \"kon\", \"kon\"],\n [\"Kurdish\", \"Kurd\\xEE, \\u0623\\u06C7\\u0632\\u0628\\u06D0\\u0643\", \"ku\", \"kur\", \"kur\"],\n [\"Latvian\", \"latvie\\u0161u valoda\", \"lv\", \"lav\", \"lav\"],\n [\"Malagasy\", \"fiteny malagasy\", \"mg\", \"mlg\", \"mlg\"],\n [\"Mongolian\", \"\\u041C\\u043E\\u043D\\u0433\\u043E\\u043B \\u0445\\u044D\\u043B\", \"mn\", \"mon\", \"mon\"],\n [\"Oromo\", \"Afaan Oromoo\", \"om\", \"orm\", \"orm\"],\n [\"Pashto, Pushto\", \"\\u067E\\u069A\\u062A\\u0648\", \"ps\", \"pus\", \"pus\"],\n [\"Quechua\", \"Runa Simi, Kichwa\", \"qu\", \"que\", \"que\"],\n [\"Sardinian\", \"sardu\", \"sc\", \"srd\", \"srd\"],\n [\"Swahili\", \"Kiswahili\", \"sw\", \"swa\", \"swa\"],\n [\"Uzbek\", \"O\\u02BBzbek, \\u040E\\u0437\\u0431\\u0435\\u043A, \", \"uz\", \"uzb\", \"uzb\"],\n [\"Zhuang, Chuang\", \"Sa\\u026F cue\\u014B\\u0185, Saw cuengh\", \"za\", \"zha\", \"zha\"],\n [\"Bislama\", \"Bislama\", \"bi\", \"bis\", \"bis\"],\n [\"Norwegian Bokm\\xE5l\", \"Norsk Bokm\\xE5l\", \"nb\", \"nob\", \"nob\"],\n [\"Norwegian Nynorsk\", \"Norsk Nynorsk\", \"nn\", \"nno\", \"nno\"],\n [\"Indonesian\", \"Bahasa Indonesia\", \"id\", \"ind\", \"ind\"],\n [\"Twi\", \"Twi\", \"tw\", \"twi\", \"twi\"],\n [\"Esperanto\", \"Esperanto\", \"eo\", \"epo\", \"epo\"],\n [\"Interlingua\", \"Interlingua\", \"ia\", \"ina\", \"ina\"],\n [\"Interlingue\", \"Originally called Occidental; then Interlingue after WWII\", \"ie\", \"ile\", \"ile\"],\n [\"Ido\", \"Ido\", \"io\", \"ido\", \"ido\"],\n [\"Volap\\xFCk\", \"Volap\\xFCk\", \"vo\", \"vol\", \"vol\"],\n [\"Bihari languages\", \"\\u092D\\u094B\\u091C\\u092A\\u0941\\u0930\\u0940\", \"bh\", \"bih\", \"bih\"],\n [\"Hebrew (modern)\", \"\\u05E2\\u05D1\\u05E8\\u05D9\\u05EA\", \"he\", \"heb\", \"heb\"],\n [\"Sanskrit\", \"\\u0938\\u0902\\u0938\\u094D\\u0915\\u0943\\u0924\\u092E\\u094D\", \"sa\", \"san\", \"san\"],\n [\"Church Slavic, Church Slavonic, Old Church Slavonic, Old Slavonic, Old Bulgarian\", \"\\u0469\\u0437\\u044B\\u043A\\u044A \\u0441\\u043B\\u043E\\u0432\\u0463\\u043D\\u044C\\u0441\\u043A\\u044A\", \"cu\", \"chu\", \"chu\"],\n [\"Pali\", \"\\u092A\\u093E\\u0934\\u093F\", \"pi\", \"pli\", \"pli\"],\n [\"Avestan\", \"avesta\", \"ae\", \"ave\", \"ave\"],\n [\"Latin\", \"latine, lingua latina\", \"la\", \"lat\", \"lat\"],\n [\"Armenian\", \"\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576\", \"hy\", \"hye\", \"arm\"],\n [\"Swati\", \"SiSwati\", \"ss\", \"ssw\", \"ssw\"],\n [\"Tibetan\", \"\\u0F56\\u0F7C\\u0F51\\u0F0B\\u0F61\\u0F72\\u0F42\", \"bo\", \"bod\", \"tib\"],\n [\"South Ndebele\", \"isiNdebele\", \"nr\", \"nbl\", \"nbl\"],\n [\"Slovene\", \"Slovenski Jezik, Sloven\\u0161\\u010Dina\", \"sl\", \"slv\", \"slv\"],\n [\"Oriya\", \"\\u0B13\\u0B21\\u0B3C\\u0B3F\\u0B06\", \"or\", \"ori\", \"ori\"],\n [\"North Ndebele\", \"isiNdebele\", \"nd\", \"nde\", \"nde\"],\n [\"Nauru\", \"Dorerin Naoero\", \"na\", \"nau\", \"nau\"],\n [\"Maori\", \"te reo M\\u0101ori\", \"mi\", \"mri\", \"mao\"],\n [\"Marathi\", \"\\u092E\\u0930\\u093E\\u0920\\u0940\", \"mr\", \"mar\", \"mar\"],\n [\"Luba-Katanga\", \"Kiluba\", \"lu\", \"lub\", \"lub\"],\n [\"Rundi\", \"Ikirundi\", \"rn\", \"run\", \"run\"],\n [\"Central Khmer\", \"\\u1781\\u17D2\\u1798\\u17C2\\u179A, \\u1781\\u17C1\\u1798\\u179A\\u1797\\u17B6\\u179F\\u17B6, \\u1797\\u17B6\\u179F\\u17B6\\u1781\\u17D2\\u1798\\u17C2\\u179A\", \"km\", \"khm\", \"khm\"],\n [\"Western Frisian\", \"Frysk\", \"fy\", \"fry\", \"fry\"],\n [\"Bengali\", \"\\u09AC\\u09BE\\u0982\\u09B2\\u09BE\", \"bn\", \"ben\", \"ben\"],\n [\"Avaric\", \"\\u0430\\u0432\\u0430\\u0440 \\u043C\\u0430\\u0446\\u04C0, \\u043C\\u0430\\u0433\\u04C0\\u0430\\u0440\\u0443\\u043B \\u043C\\u0430\\u0446\\u04C0\", \"av\", \"ava\", \"ava\"],\n [\"Abkhazian\", \"\\u0430\\u04A7\\u0441\\u0443\\u0430 \\u0431\\u044B\\u0437\\u0448\\u04D9\\u0430, \\u0430\\u04A7\\u0441\\u0448\\u04D9\\u0430\", \"ab\", \"abk\", \"abk\"],\n [\"Afar\", \"Afaraf\", \"aa\", \"aar\", \"aar\"],\n [\"Afrikaans\", \"Afrikaans\", \"af\", \"afr\", \"afr\"],\n [\"Amharic\", \"\\u12A0\\u121B\\u122D\\u129B\", \"am\", \"amh\", \"amh\"],\n [\"Aragonese\", \"aragon\\xE9s\", \"an\", \"arg\", \"arg\"],\n [\"Assamese\", \"\\u0985\\u09B8\\u09AE\\u09C0\\u09AF\\u09BC\\u09BE\", \"as\", \"asm\", \"asm\"],\n [\"Bambara\", \"bamanankan\", \"bm\", \"bam\", \"bam\"],\n [\"Bashkir\", \"\\u0431\\u0430\\u0448\\u04A1\\u043E\\u0440\\u0442 \\u0442\\u0435\\u043B\\u0435\", \"ba\", \"bak\", \"bak\"],\n [\"Basque\", \"euskara, euskera\", \"eu\", \"eus\", \"baq\"],\n [\"Belarusian\", \"\\u0431\\u0435\\u043B\\u0430\\u0440\\u0443\\u0441\\u043A\\u0430\\u044F \\u043C\\u043E\\u0432\\u0430\", \"be\", \"bel\", \"bel\"],\n [\"Bosnian\", \"bosanski jezik\", \"bs\", \"bos\", \"bos\"],\n [\"Breton\", \"brezhoneg\", \"br\", \"bre\", \"bre\"],\n [\"Bulgarian\", \"\\u0431\\u044A\\u043B\\u0433\\u0430\\u0440\\u0441\\u043A\\u0438 \\u0435\\u0437\\u0438\\u043A\", \"bg\", \"bul\", \"bul\"],\n [\"Burmese\", \"\\u1017\\u1019\\u102C\\u1005\\u102C\", \"my\", \"mya\", \"bur\"],\n [\"Catalan, Valencian\", \"catal\\xE0, valenci\\xE0\", \"ca\", \"cat\", \"cat\"],\n [\"Chamorro\", \"Chamoru\", \"ch\", \"cha\", \"cha\"],\n [\"Chechen\", \"\\u043D\\u043E\\u0445\\u0447\\u0438\\u0439\\u043D \\u043C\\u043E\\u0442\\u0442\", \"ce\", \"che\", \"che\"],\n [\"Chichewa, Chewa, Nyanja\", \"chiChe\\u0175a, chinyanja\", \"ny\", \"nya\", \"nya\"],\n [\"Chuvash\", \"\\u0447\\u04D1\\u0432\\u0430\\u0448 \\u0447\\u04D7\\u043B\\u0445\\u0438\", \"cv\", \"chv\", \"chv\"],\n [\"Cornish\", \"Kernewek\", \"kw\", \"cor\", \"cor\"],\n [\"Corsican\", \"corsu, lingua corsa\", \"co\", \"cos\", \"cos\"],\n [\"Croatian\", \"hrvatski jezik\", \"hr\", \"hrv\", \"hrv\"],\n [\"Czech\", \"\\u010De\\u0161tina, \\u010Desk\\xFD jazyk\", \"cs\", \"ces\", \"cze\"],\n [\"Danish\", \"dansk\", \"da\", \"dan\", \"dan\"],\n [\"Divehi, Dhivehi, Maldivian\", \"\\u078B\\u07A8\\u0788\\u07AC\\u0780\\u07A8\", \"dv\", \"div\", \"div\"],\n [\"Dutch, Flemish\", \"Nederlands, Vlaams\", \"nl\", \"nld\", \"dut\"],\n [\"Dzongkha\", \"\\u0F62\\u0FAB\\u0F7C\\u0F44\\u0F0B\\u0F41\", \"dz\", \"dzo\", \"dzo\"],\n [\"English\", \"English\", \"en\", \"eng\", \"eng\"],\n [\"Ewe\", \"E\\u028Begbe\", \"ee\", \"ewe\", \"ewe\"],\n [\"Faroese\", \"f\\xF8royskt\", \"fo\", \"fao\", \"fao\"],\n [\"Fijian\", \"vosa Vakaviti\", \"fj\", \"fij\", \"fij\"],\n [\"Finnish\", \"suomi, suomen kieli\", \"fi\", \"fin\", \"fin\"],\n [\"French\", \"fran\\xE7ais, langue fran\\xE7aise\", \"fr\", \"fra\", \"fre\"],\n [\"Galician\", \"Galego\", \"gl\", \"glg\", \"glg\"],\n [\"Georgian\", \"\\u10E5\\u10D0\\u10E0\\u10D7\\u10E3\\u10DA\\u10D8\", \"ka\", \"kat\", \"geo\"],\n [\"German\", \"Deutsch\", \"de\", \"deu\", \"ger\"],\n [\"Greek (modern)\", \"\\u03B5\\u03BB\\u03BB\\u03B7\\u03BD\\u03B9\\u03BA\\u03AC\", \"el\", \"ell\", \"gre\"],\n [\"Gujarati\", \"\\u0A97\\u0AC1\\u0A9C\\u0AB0\\u0ABE\\u0AA4\\u0AC0\", \"gu\", \"guj\", \"guj\"],\n [\"Haitian, Haitian Creole\", \"Krey\\xF2l ayisyen\", \"ht\", \"hat\", \"hat\"],\n [\"Hausa\", \"(Hausa) \\u0647\\u064E\\u0648\\u064F\\u0633\\u064E\", \"ha\", \"hau\", \"hau\"],\n [\"Herero\", \"Otjiherero\", \"hz\", \"her\", \"her\"],\n [\"Hindi\", \"\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940, \\u0939\\u093F\\u0902\\u0926\\u0940\", \"hi\", \"hin\", \"hin\"],\n [\"Hiri Motu\", \"Hiri Motu\", \"ho\", \"hmo\", \"hmo\"],\n [\"Hungarian\", \"magyar\", \"hu\", \"hun\", \"hun\"],\n [\"Irish\", \"Gaeilge\", \"ga\", \"gle\", \"gle\"],\n [\"Igbo\", \"As\\u1EE5s\\u1EE5 Igbo\", \"ig\", \"ibo\", \"ibo\"],\n [\"Icelandic\", \"\\xCDslenska\", \"is\", \"isl\", \"ice\"],\n [\"Italian\", \"Italiano\", \"it\", \"ita\", \"ita\"],\n [\"Japanese\", \"\\u65E5\\u672C\\u8A9E (\\u306B\\u307B\\u3093\\u3054)\", \"ja\", \"jpn\", \"jpn\"],\n [\"Javanese\", \"\\uA9A7\\uA9B1\\uA997\\uA9AE, Basa Jawa\", \"jv\", \"jav\", \"jav\"],\n [\"Kalaallisut, Greenlandic\", \"kalaallisut, kalaallit oqaasii\", \"kl\", \"kal\", \"kal\"],\n [\"Kannada\", \"\\u0C95\\u0CA8\\u0CCD\\u0CA8\\u0CA1\", \"kn\", \"kan\", \"kan\"],\n [\"Kashmiri\", \"\\u0915\\u0936\\u094D\\u092E\\u0940\\u0930\\u0940, \\u0643\\u0634\\u0645\\u064A\\u0631\\u064A\", \"ks\", \"kas\", \"kas\"],\n [\"Kazakh\", \"\\u049B\\u0430\\u0437\\u0430\\u049B \\u0442\\u0456\\u043B\\u0456\", \"kk\", \"kaz\", \"kaz\"],\n [\"Kikuyu, Gikuyu\", \"G\\u0129k\\u0169y\\u0169\", \"ki\", \"kik\", \"kik\"],\n [\"Kinyarwanda\", \"Ikinyarwanda\", \"rw\", \"kin\", \"kin\"],\n [\"Kirghiz, Kyrgyz\", \"\\u041A\\u044B\\u0440\\u0433\\u044B\\u0437\\u0447\\u0430, \\u041A\\u044B\\u0440\\u0433\\u044B\\u0437 \\u0442\\u0438\\u043B\\u0438\", \"ky\", \"kir\", \"kir\"],\n [\"Korean\", \"\\uD55C\\uAD6D\\uC5B4\", \"ko\", \"kor\", \"kor\"],\n [\"Kuanyama, Kwanyama\", \"Kuanyama\", \"kj\", \"kua\", \"kua\"],\n [\"Luxembourgish, Letzeburgesch\", \"L\\xEBtzebuergesch\", \"lb\", \"ltz\", \"ltz\"],\n [\"Ganda\", \"Luganda\", \"lg\", \"lug\", \"lug\"],\n [\"Limburgan, Limburger, Limburgish\", \"Limburgs\", \"li\", \"lim\", \"lim\"],\n [\"Lingala\", \"Ling\\xE1la\", \"ln\", \"lin\", \"lin\"],\n [\"Lao\", \"\\u0E9E\\u0EB2\\u0EAA\\u0EB2\\u0EA5\\u0EB2\\u0EA7\", \"lo\", \"lao\", \"lao\"],\n [\"Lithuanian\", \"lietuvi\\u0173 kalba\", \"lt\", \"lit\", \"lit\"],\n [\"Manx\", \"Gaelg, Gailck\", \"gv\", \"glv\", \"glv\"],\n [\"Macedonian\", \"\\u043C\\u0430\\u043A\\u0435\\u0434\\u043E\\u043D\\u0441\\u043A\\u0438 \\u0458\\u0430\\u0437\\u0438\\u043A\", \"mk\", \"mkd\", \"mac\"],\n [\"Malayalam\", \"\\u0D2E\\u0D32\\u0D2F\\u0D3E\\u0D33\\u0D02\", \"ml\", \"mal\", \"mal\"],\n [\"Maltese\", \"Malti\", \"mt\", \"mlt\", \"mlt\"],\n [\"Marshallese\", \"Kajin M\\u0327aje\\u013C\", \"mh\", \"mah\", \"mah\"],\n [\"Navajo, Navaho\", \"Din\\xE9 bizaad\", \"nv\", \"nav\", \"nav\"],\n [\"Nepali\", \"\\u0928\\u0947\\u092A\\u093E\\u0932\\u0940\", \"ne\", \"nep\", \"nep\"],\n [\"Ndonga\", \"Owambo\", \"ng\", \"ndo\", \"ndo\"],\n [\"Occitan\", \"occitan, lenga d'\\xF2c\", \"oc\", \"oci\", \"oci\"],\n [\"Ossetian, Ossetic\", \"\\u0438\\u0440\\u043E\\u043D \\xE6\\u0432\\u0437\\u0430\\u0433\", \"os\", \"oss\", \"oss\"],\n [\"Panjabi, Punjabi\", \"\\u0A2A\\u0A70\\u0A1C\\u0A3E\\u0A2C\\u0A40\", \"pa\", \"pan\", \"pan\"],\n [\"Polish\", \"j\\u0119zyk polski, polszczyzna\", \"pl\", \"pol\", \"pol\"],\n [\"Portuguese\", \"Portugu\\xEAs\", \"pt\", \"por\", \"por\"],\n [\"Romansh\", \"Rumantsch Grischun\", \"rm\", \"roh\", \"roh\"],\n [\"Russian\", \"\\u0440\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\", \"ru\", \"rus\", \"rus\"],\n [\"Sindhi\", \"\\u0938\\u093F\\u0928\\u094D\\u0927\\u0940, \\u0633\\u0646\\u068C\\u064A\\u060C \\u0633\\u0646\\u062F\\u06BE\\u06CC\", \"sd\", \"snd\", \"snd\"],\n [\"Northern Sami\", \"Davvis\\xE1megiella\", \"se\", \"sme\", \"sme\"],\n [\"Samoan\", \"gagana fa'a Samoa\", \"sm\", \"smo\", \"smo\"],\n [\"Sango\", \"y\\xE2ng\\xE2 t\\xEE s\\xE4ng\\xF6\", \"sg\", \"sag\", \"sag\"],\n [\"Gaelic, Scottish Gaelic\", \"G\\xE0idhlig\", \"gd\", \"gla\", \"gla\"],\n [\"Shona\", \"chiShona\", \"sn\", \"sna\", \"sna\"],\n [\"Sinhala, Sinhalese\", \"\\u0DC3\\u0DD2\\u0D82\\u0DC4\\u0DBD\", \"si\", \"sin\", \"sin\"],\n [\"Slovak\", \"Sloven\\u010Dina, Slovensk\\xFD Jazyk\", \"sk\", \"slk\", \"slo\"],\n [\"Somali\", \"Soomaaliga, af Soomaali\", \"so\", \"som\", \"som\"],\n [\"Southern Sotho\", \"Sesotho\", \"st\", \"sot\", \"sot\"],\n [\"Spanish, Castilian\", \"Espa\\xF1ol\", \"es\", \"spa\", \"spa\"],\n [\"Sundanese\", \"Basa Sunda\", \"su\", \"sun\", \"sun\"],\n [\"Swedish\", \"Svenska\", \"sv\", \"swe\", \"swe\"],\n [\"Tamil\", \"\\u0BA4\\u0BAE\\u0BBF\\u0BB4\\u0BCD\", \"ta\", \"tam\", \"tam\"],\n [\"Telugu\", \"\\u0C24\\u0C46\\u0C32\\u0C41\\u0C17\\u0C41\", \"te\", \"tel\", \"tel\"],\n [\"Tajik\", \"\\u0442\\u043E\\u04B7\\u0438\\u043A\\u04E3, to\\xE7ik\\u012B, \\u062A\\u0627\\u062C\\u06CC\\u06A9\\u06CC\", \"tg\", \"tgk\", \"tgk\"],\n [\"Thai\", \"\\u0E44\\u0E17\\u0E22\", \"th\", \"tha\", \"tha\"],\n [\"Tigrinya\", \"\\u1275\\u130D\\u122D\\u129B\", \"ti\", \"tir\", \"tir\"],\n [\"Turkmen\", \"T\\xFCrkmen, \\u0422\\u04AF\\u0440\\u043A\\u043C\\u0435\\u043D\", \"tk\", \"tuk\", \"tuk\"],\n [\"Tswana\", \"Setswana\", \"tn\", \"tsn\", \"tsn\"],\n [\"Tongan (Tonga Islands)\", \"Faka Tonga\", \"to\", \"ton\", \"ton\"],\n [\"Turkish\", \"T\\xFCrk\\xE7e\", \"tr\", \"tur\", \"tur\"],\n [\"Tsonga\", \"Xitsonga\", \"ts\", \"tso\", \"tso\"],\n [\"Tatar\", \"\\u0442\\u0430\\u0442\\u0430\\u0440 \\u0442\\u0435\\u043B\\u0435, tatar tele\", \"tt\", \"tat\", \"tat\"],\n [\"Uighur, Uyghur\", \"\\u0626\\u06C7\\u064A\\u063A\\u06C7\\u0631\\u0686\\u06D5, Uyghurche\", \"ug\", \"uig\", \"uig\"],\n [\"Ukrainian\", \"\\u0423\\u043A\\u0440\\u0430\\u0457\\u043D\\u0441\\u044C\\u043A\\u0430\", \"uk\", \"ukr\", \"ukr\"],\n [\"Urdu\", \"\\u0627\\u0631\\u062F\\u0648\", \"ur\", \"urd\", \"urd\"],\n [\"Venda\", \"Tshiven\\u1E13a\", \"ve\", \"ven\", \"ven\"],\n [\"Vietnamese\", \"Ti\\u1EBFng Vi\\u1EC7t\", \"vi\", \"vie\", \"vie\"],\n [\"Walloon\", \"Walon\", \"wa\", \"wln\", \"wln\"],\n [\"Welsh\", \"Cymraeg\", \"cy\", \"cym\", \"wel\"],\n [\"Wolof\", \"Wollof\", \"wo\", \"wol\", \"wol\"],\n [\"Xhosa\", \"isiXhosa\", \"xh\", \"xho\", \"xho\"],\n [\"Yoruba\", \"Yor\\xF9b\\xE1\", \"yo\", \"yor\", \"yor\"],\n [\"Zulu\", \"isiZulu\", \"zu\", \"zul\", \"zul\"]\n];\n\n// src/index.ts\nvar codes = [];\nvar by639_1 = {};\nvar by639_2T = {};\nvar by639_2B = {};\ndata_default.forEach((row) => {\n var code = {\n name: row[0],\n nativeName: row[1],\n iso639_1: row[2],\n iso639_2T: row[3],\n iso639_2B: row[4]\n };\n by639_1[row[2]] = by639_2T[row[3]] = by639_2B[row[4]] = code;\n codes.push(code);\n});\nvar src_default = codes;\nexport {\n by639_1,\n by639_2B,\n by639_2T,\n codes,\n src_default as default\n};\n//# sourceMappingURL=index.mjs.map","import langs from 'iso-language-codes';\n\n/**\n * Use regex to approximate word count in a string\n * @param {string} text\n * @return {number}\n */\nexport function approximateWordCount(text) {\n const m = text.match(/\\S+/g);\n return m ? m.length : 0;\n}\n\n/**\n * Checks whether the current browser is on android\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isAndroid(userAgent = navigator.userAgent) {\n return /android/i.test(userAgent);\n}\n\n/** @type {{[lang: string]: string}} */\n// Handle odd one-off language pairs that might show up over time\nconst specialLangs = {\n \"zh-hans\": \"中文 (Zhōngwén)\",\n};\n/**\n * @typedef {string} ISO6391\n * Language code in ISO 639-1 format. e.g. en, fr, zh\n * Can also retrieve language native name + ISO 639-1 code\n **/\n\n/**\n * @param {string} language in some format\n * @param {boolean?} getName gets Native Name + language code if true\n * @return {ISO6391?}\n */\nexport function toISO6391(language, getName = false) {\n if (!language) return null;\n language = language.toLowerCase();\n\n return searchForISO6391(language, ['iso639_1'], getName) ||\n searchForISO6391(language, ['iso639_2T'], getName) ||\n searchForISO6391(language, ['iso639_2B', 'nativeName', 'name'], getName);\n}\n\n/**\n * Searches for the given long in the given columns.\n * @param {string} language\n * @param {Array<keyof import('iso-language-codes').Code>} columnsToSearch\n * @param {boolean?} getName\n * @return {ISO6391?}\n */\nfunction searchForISO6391(language, columnsToSearch, getName) {\n for (const lang of langs) {\n for (const colName of columnsToSearch) {\n if (lang[colName].split(', ').map(x => x.toLowerCase()).indexOf(language) != -1) {\n if (getName) return `${lang.nativeName.split(\", \")[0]} (${lang.iso639_1})`;\n return lang.iso639_1;\n }\n }\n }\n if (specialLangs[language]) return `${specialLangs[language]} (${language})`;\n return null;\n}\n\n/**\n * Checks whether the current browser supports localStorage or\n * if the current context has access to it.\n * @return {boolean}\n */\nexport function hasLocalStorage() {\n try {\n return !!window.localStorage;\n } catch (e) {\n // Will throw in sandboxed iframe\n // DOMException: Window.localStorage getter: Forbidden in a sandboxed document without the 'allow-same-origin' flag.\n return false;\n }\n}\n\nexport const DEBUG_READ_ALOUD = location.toString().indexOf('_debugReadAloud=true') != -1;\n\nexport async function checkIfFiresPause() {\n // Pick some random text so that if it accidentally speaks, it's not too annoying\n const u = new SpeechSynthesisUtterance(\"Loading\");\n let calledPause = false;\n u.addEventListener('pause', () => calledPause = true);\n speechSynthesis.speak(u);\n await new Promise(res => setTimeout(res, 10));\n speechSynthesis.pause();\n return calledPause;\n}\n","// @ts-check\n/** @typedef {import('@/src/BookReader.js').default} BookReader */\n\nclass SearchView {\n /**\n * @param {object} params\n * @param {BookReader} params.br The BookReader instance\n * @param {function} params.searchCancelledCallback callback when a user wants to cancel search\n *\n * @event BookReader:SearchResultsCleared - when the search results nav gets cleared\n * @event BookReader:ToggleSearchMenu - when search results menu should toggle\n */\n constructor({ br, searchCancelledCallback = () => {} }) {\n /** @type {BookReader} */\n this.br = br;\n this.matches = [];\n this.cacheDOMElements();\n this.cancelSearch = searchCancelledCallback;\n }\n\n init() {\n this.bindEvents();\n }\n\n cacheDOMElements() {\n this.dom = {};\n // Search input within the top toolbar. Will be removed once the mobile menu is replaced.\n this.dom.toolbarSearch = this.buildToolbarSearch();\n }\n\n /**\n * @param {string} query\n */\n setQuery(query) {\n this.br.$('[name=\"query\"]').val(query);\n }\n\n emptyMatches() {\n this.matches = [];\n }\n\n removeResultPins() {\n this.br.$('.BRnavpos .BRsearch').remove();\n }\n\n clearSearchFieldAndResults(dispatchEventWhenComplete = true) {\n this.br.plugins.search.removeSearchResults();\n this.removeResultPins();\n this.emptyMatches();\n this.setQuery('');\n this.teardownSearchNavigation();\n if (dispatchEventWhenComplete) {\n this.br.trigger('SearchResultsCleared');\n }\n }\n\n toggleSidebar() {\n this.br.trigger('ToggleSearchMenu');\n }\n\n renderSearchNavigation() {\n const selector = 'BRsearch-navigation';\n $('.BRnav.BRnavMain').before(`\n <div class=\"${selector}\">\n <button class=\"toggle-sidebar\">\n <h4>\n <span class=\"icon icon-search\"></span> Results\n </h4>\n </button>\n <div class=\"pagination\">\n <button class=\"prev\" title=\"Previous result\"><span class=\"icon icon-chevron hflip\"></span></button>\n <span data-id=\"resultsCount\">${this.resultsPosition()}</span>\n <button class=\"next\" title=\"Next result\"><span class=\"icon icon-chevron\"></button>\n </div>\n <button class=\"clear\" title=\"Clear search results\">\n <span class=\"icon icon-close\"></span>\n </button>\n </div>\n `);\n this.dom.searchNavigation = $(`.${selector}`);\n }\n\n resultsPosition() {\n let positionMessage = `${this.matches.length} result${this.matches.length === 1 ? '' : 's'}`;\n if (~this.currentMatchIndex) {\n positionMessage = `${this.currentMatchIndex + 1} / ${this.matches.length}`;\n }\n return positionMessage;\n }\n\n bindSearchNavigationEvents() {\n if (!this.dom.searchNavigation) { return; }\n const namespace = 'searchNavigation';\n\n this.dom.searchNavigation\n .on(`click.${namespace}`, '.clear', this.clearSearchFieldAndResults.bind(this))\n .on(`click.${namespace}`, '.prev', this.showPrevResult.bind(this))\n .on(`click.${namespace}`, '.next', this.showNextResult.bind(this))\n .on(`click.${namespace}`, '.toggle-sidebar', this.toggleSidebar.bind(this))\n .on(`click.${namespace}`, false);\n }\n\n showPrevResult() {\n if (this.currentMatchIndex === 0) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => end[0] > comparator) + 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(--this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n showNextResult() {\n if (this.currentMatchIndex + 1 === this.matches.length) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => start[start.length - 1] > comparator) - 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(++this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * Obtains closest match based on the logical comparison function passed in.\n * When the comparison function returns true, the starting (left) half of the\n * matches array is used in the binary split, else the ending (right) half is\n * used. A recursive call is made to perform the same split and comparison\n * on the winning half of the matches. This is traditionally known as binary\n * search (https://en.wikipedia.org/wiki/Binary_search_algorithm), and in\n * most cases (medium to large search result arrays) should outperform\n * traversing the array from start to finish. In the case of small arrays,\n * the speed difference is negligible.\n *\n * @param {function} comparisonFn\n * @return {number} matchIndex\n */\n getClosestMatchIndex(comparisonFn) {\n const matchPages = this.matches.map((m) => m.par[0].page);\n const currentPage = this.br.currentIndex() + 1;\n const closestTo = (pool, comparator) => {\n if (pool.length === 1) { return pool[0]; }\n const start = pool.slice(0, pool.length / 2);\n const end = pool.slice(pool.length / 2);\n return closestTo((comparisonFn(start, end, comparator) ? start : end), comparator);\n };\n\n const closestPage = closestTo(matchPages, currentPage);\n return this.matches.indexOf(this.matches.find((m) => m.par[0].page === closestPage));\n }\n\n updateResultsPosition() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());\n }\n\n updateSearchNavigationButtons() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);\n this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);\n }\n\n teardownSearchNavigation() {\n if (!this.dom.searchNavigation) {\n this.dom.searchNavigation = $('.BRsearch-navigation');\n }\n if (!this.dom.searchNavigation.length) { return; }\n\n this.dom.searchNavigation.off('.searchNavigation').remove();\n this.dom.searchNavigation = null;\n this.br.resize();\n }\n\n setCurrentMatchIndex() {\n let matchingSearchResult;\n if (this.br.mode === this.br.constModeThumb) {\n this.currentMatchIndex = -1;\n return;\n }\n if (this.br.mode === this.br.constMode2up) {\n matchingSearchResult = this.find2upMatchingSearchResult();\n }\n else {\n matchingSearchResult = this.find1upMatchingSearchResult();\n }\n this.currentMatchIndex = this.matches.indexOf(matchingSearchResult);\n }\n\n find1upMatchingSearchResult() {\n return this.matches.find((m) => this.br.currentIndex() === m.par[0].page - 1);\n }\n\n find2upMatchingSearchResult() {\n return this.matches.find((m) => this.br._isIndexDisplayed(m.par[0].page - 1));\n }\n\n updateSearchNavigation() {\n if (!this.matches.length) { return; }\n\n this.setCurrentMatchIndex();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * @param {boolean} bool\n */\n togglePinsFor(bool) {\n const pinsVisibleState = bool ? 'visible' : 'hidden';\n this.br.refs.$BRfooter.find('.BRsearch').css({ visibility: pinsVisibleState });\n }\n\n buildToolbarSearch() {\n const toolbarSearch = document.createElement('span');\n toolbarSearch.classList.add('BRtoolbarSection', 'BRtoolbarSectionSearch');\n toolbarSearch.innerHTML = `\n <form class=\"BRbooksearch desktop\">\n <input type=\"search\" name=\"query\" class=\"BRsearchInput\" value=\"\" placeholder=\"Search inside\"/>\n <button type=\"submit\" class=\"BRsearchSubmit\">\n <img src=\"${this.br.options.imagesBaseURL}icon_search_button.svg\" />\n </button>\n </form>\n `;\n return toolbarSearch;\n }\n\n /**\n * @param {array} matches\n */\n renderPins(matches) {\n matches.forEach((match) => {\n const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);\n const uiStringSearch = \"Search result\"; // i18n\n const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);\n\n let html = match.html;\n if (html.length > 200) {\n const start = Math.max(0, html.indexOf('<mark>') - 100);\n if (start != 0) {\n html = '…' + match.html\n .substring(start)\n // Make sure at word boundary though\n .replace(/^\\S+/, '');\n }\n }\n // draw marker\n $('<div>')\n .addClass('BRsearch')\n .css({\n left: percentThrough,\n })\n .attr('title', uiStringSearch)\n .append(`\n <div class=\"BRquery\">\n <main>${html}</main>\n <footer>Page ${match.displayPageNumber}</footer>\n </div>\n `)\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", (event) => {\n // remove from other markers then turn on just for this\n // XXX should be done when nav slider moves\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('.BRquery');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n $('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", (event) => $(event.target).removeClass('front'))\n .on(\"click\", () => { this.br.plugins.search.jumpToMatch(match.matchIndex); });\n });\n }\n\n /**\n * @param {boolean} show\n */\n toggleSearchPending(show = false) {\n if (show) {\n this.br.showProgressPopup(\"Search results will appear below...\", () => this.progressPopupClosed());\n }\n else {\n this.br.removeProgressPopup();\n }\n }\n\n /**\n * Primary callback when user cancels search popup\n */\n progressPopupClosed() {\n this.toggleSearchPending();\n this.cancelSearch();\n }\n\n renderErrorModal(textIsProcessing = false) {\n const errorDetails = `${!textIsProcessing ? 'The text may still be processing. ' : ''}Please try again.`;\n this.renderModalMessage(`\n Sorry, there was an error with your search.\n <br />\n ${errorDetails}\n `);\n this.delayModalRemovalFor(4000);\n }\n\n renderBookNotIndexedModal() {\n this.renderModalMessage(`\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n `);\n this.delayModalRemovalFor(5000);\n }\n\n renderResultsEmptyModal() {\n this.renderModalMessage('No matches were found.');\n this.delayModalRemovalFor(2000);\n }\n\n /**\n * @param {string} messageHTML The innerHTML string used to popupate the modal contents\n */\n renderModalMessage(messageHTML) {\n const modal = document.createElement('div');\n modal.classList.add('BRprogresspopup', 'search_modal');\n modal.innerHTML = messageHTML;\n document.querySelector(this.br.el).append(modal);\n }\n\n /**\n * @param {number} timeoutMS\n */\n delayModalRemovalFor(timeoutMS) {\n setTimeout(this.br.removeProgressPopup.bind(this.br), timeoutMS);\n }\n\n /**\n * @param {Event} e\n */\n submitHandler(e) {\n e.preventDefault();\n const query = e.target.querySelector('[name=\"query\"]').value;\n if (!query.length) { return false; }\n this.br.search(query);\n this.emptyMatches();\n this.toggleSearchPending(true);\n return false;\n }\n\n /**\n * @param {Event} e\n * @param {object} properties\n * @param {object} properties.results\n * @param {object} properties.options\n */\n handleSearchCallback(e, { results, options }) {\n this.matches = results.matches;\n this.setCurrentMatchIndex();\n this.teardownSearchNavigation();\n this.renderSearchNavigation();\n this.bindSearchNavigationEvents();\n this.renderPins(results.matches);\n this.toggleSearchPending(false);\n if (options.goToFirstResult) {\n $(document).one('BookReader:pageChanged', () => {\n this.br.resize();\n });\n } else {\n this.br.resize();\n }\n }\n\n handleSearchStarted() {\n this.emptyMatches();\n this.br.plugins.search.removeSearchHilites();\n this.removeResultPins();\n this.toggleSearchPending(true);\n this.teardownSearchNavigation();\n this.setQuery(this.br.plugins.search.searchTerm);\n }\n\n /**\n * Event listener for: `BookReader:SearchCallbackError`\n * @param {CustomEvent} event\n */\n handleSearchCallbackError(event = {}) {\n this.toggleSearchPending(false);\n const isIndexed = event?.detail?.props?.results?.indexed;\n this.renderErrorModal(isIndexed);\n }\n\n handleSearchCallbackBookNotIndexed() {\n this.toggleSearchPending(false);\n this.renderBookNotIndexedModal();\n }\n\n handleSearchCallbackEmpty() {\n this.toggleSearchPending(false);\n this.renderResultsEmptyModal();\n }\n\n bindEvents() {\n const namespace = 'BookReader:';\n\n window.addEventListener(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this));\n $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))\n .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))\n .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))\n .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))\n .on(`${namespace}pageChanged`, this.updateSearchNavigation.bind(this));\n\n this.dom.toolbarSearch.querySelector('form').addEventListener('submit', this.submitHandler.bind(this));\n }\n}\n\nexport default SearchView;\n","// @ts-check\nimport { escapeHTML, escapeRegExp } from '../../BookReader/utils.js';\n/** @typedef {import('@/src/plugins/search/plugin.search.js').SearchInsideResults} SearchInsideResults */\n/** @typedef {import('@/src/plugins/search/plugin.search.js').LeafNum} LeafNum */\n/** @typedef {import('@/src/plugins/search/plugin.search.js').PageNumString} PageNumString */\n\n/**\n * @param {string} match\n * @param {string} preTag\n * @param {string} postTag\n * @returns {string}\n */\nexport function renderMatch(match, preTag, postTag) {\n // Search results are returned as a text blob with the hits wrapped in\n // triple mustaches. Hits occasionally include text beyond the search\n // term, so everything within the staches is captured and wrapped.\n const preTagRe = escapeRegExp(escapeHTML(preTag));\n const postTagRe = escapeRegExp(escapeHTML(postTag));\n // [^] matches any character, including line breaks\n const regex = new RegExp(`${preTagRe}([^]+?)${postTagRe}`, 'g');\n return escapeHTML(match)\n .replace(regex, '<mark>$1</mark>')\n // Fix trailing hyphens. This over-corrects but is net useful.\n .replace(/(\\b)- /g, '$1');\n}\n\n/**\n * Attach some fields to search inside results\n * @param {SearchInsideResults} results\n * @param {(pageNum: LeafNum) => PageNumString} displayPageNumberFn\n * @param {string} preTag\n * @param {string} postTag\n * @param {string | null} bookLanguage The ISO 639-1 language code of the book\n */\nexport function marshallSearchResults(results, displayPageNumberFn, preTag, postTag, bookLanguage) {\n // Attach matchIndex to a few things to make it easier to identify\n // an active/selected match\n\n for (const [index, match] of results.matches.entries()) {\n match.matchIndex = index;\n match.displayPageNumber = displayPageNumberFn(match.par[0].page);\n match.html = renderMatch(match.text, preTag, postTag);\n match.lang = bookLanguage;\n for (const par of match.par) {\n for (const box of par.boxes) {\n box.matchIndex = index;\n }\n }\n }\n}\n","// @ts-check\n/**\n * Plugin for Archive.org book search\n * Events fired at various points throughout search processing are published\n * on the document DOM element. These can be subscribed to using jQuery's event\n * binding method `$.fn.on`. All of the events are prefixed with a BookReader\n * namespace. The events are:\n *\n * @event BookReader:SearchStarted - When a search form is submitted, immediately\n * before an AJAX call is made to request search results\n * @event BookReader:SearchCallback - When the search AJAX call is returned and at\n * least one result is returned. The event callback receives an object\n * with the `results`, plugin `options`, and the BookReader `instance`\n * @event BookReader:SearchCallbackError - When the AJAX request returns an error.\n * Receives the `results` and `instance`\n * @event BookReader:SearchCallbackNotIndexed - When a message is received that\n * the book has not had OCR text indexed yet. Receives `instance`\n * @event BookReader:SearchCallbackEmpty - When no results found. Receives\n * `instance`\n * @event BookReader:SearchCanceled - When no results found. Receives\n * `instance`\n */\nimport { poll } from '../../BookReader/utils.js';\nimport { renderBoxesInPageContainerLayer } from '../../BookReader/PageContainer.js';\nimport SearchView from './view.js';\nimport { marshallSearchResults } from './utils.js';\nimport { BookReaderPlugin } from '../../BookReaderPlugin.js';\nimport { applyVariables } from '../../util/strings.js';\nimport { toISO6391 } from '../tts/utils.js';\n/** @typedef {import('../../BookReader/PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../../BookReader/BookModel').PageIndex} PageIndex */\n/** @typedef {import('../../BookReader/BookModel').LeafNum} LeafNum */\n/** @typedef {import('../../BookReader/BookModel').PageNumString} PageNumString */\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\nexport class SearchPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n preTag: '{{{',\n postTag: '}}}',\n /**\n * @type {import('@/src/util/strings.js').StringWithVars}\n * Provides the variables: `query`, `preTag`, and `postTag` (from these options)\n */\n searchInsideUrl: '/fulltext/inside.php?' + [\n 'q={{query|urlencode}}',\n 'pre_tag={{preTag|urlencode}}',\n 'post_tag={{postTag|urlencode}}',\n ].join('&'),\n /** @type {string} */\n initialSearchTerm: null,\n goToFirstResult: false,\n }\n\n /**\n * @override\n * @param {Partial<SearchPlugin['options']>} options\n **/\n setup(options) {\n super.setup(options);\n\n this.searchTerm = '';\n /** @type {SearchInsideResults | null} */\n this.searchResults = null;\n this.searchInsideUrl = this.options.searchInsideUrl;\n this.enabled = this.options.enabled;\n this.searchXHR = null;\n\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n this._searchBoxesByIndex = {};\n\n if (this.enabled) {\n this.searchView = new SearchView({\n br: this.br,\n searchCancelledCallback: () => {\n this._cancelSearch();\n this.br.trigger('SearchCanceled', { term: this.searchTerm, instance: this.br });\n },\n });\n } else {\n this.searchView = null;\n }\n }\n\n /** @override */\n init() {\n super.init();\n\n if (!this.enabled) return;\n\n this.searchView.init();\n if (this.options.initialSearchTerm) {\n /**\n * this.search() take two parameter\n * 1. this.options.initialSearchTerm - search term\n * 2. {\n * goToFirstResult: this.options.goToFirstResult,\n * suppressFragmentChange: false // always want to change fragment in URL\n * }\n */\n this.search(\n this.options.initialSearchTerm,\n { goToFirstResult: this.options.goToFirstResult, suppressFragmentChange: false },\n );\n }\n }\n\n /**\n * @override\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n if (!this.enabled) { return; }\n if (this.searchView.dom.toolbarSearch) {\n $toolbarElement.find('.BRtoolbarSectionInfo').after(this.searchView.dom.toolbarSearch);\n }\n return $toolbarElement;\n }\n\n /**\n * @override\n * @param {import (\"@/src/BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n if (this.enabled && pageContainer.page && pageContainer.page.index in this._searchBoxesByIndex) {\n const pageIndex = pageContainer.page.index;\n const boxes = this._searchBoxesByIndex[pageIndex];\n renderBoxesInPageContainerLayer(\n 'searchHiliteLayer',\n boxes,\n pageContainer.page,\n pageContainer.$container[0],\n boxes.map(b => `match-index-${b.matchIndex}`),\n );\n }\n return pageContainer;\n }\n\n /**\n * Submits search request\n *\n * @param {string} term\n * @param {Partial<SearchOptions>} overrides\n */\n async search(term = '', overrides = {}) {\n /** @type {SearchOptions} */\n const defaultOptions = {\n goToFirstResult: false, /* jump to the first result (default=false) */\n disablePopup: false, /* don't show the modal progress (default=false) */\n suppressFragmentChange: false, /* don't change the URL on initial load */\n error: null, /* optional error handler (default=null) */\n success: null, /* optional success handler (default=null) */\n\n };\n const options = jQuery.extend({}, defaultOptions, overrides);\n this.suppressFragmentChange = options.suppressFragmentChange;\n this.searchCancelled = false;\n\n // strip slashes, since this goes in the url\n this.searchTerm = term.replace(/\\//g, ' ');\n\n if (!options.suppressFragmentChange) {\n this.br.trigger(BookReader.eventNames.fragmentChange);\n }\n\n // Add quotes to the term. This is to compenstate for the backends default OR query\n // term = term.replace(/['\"]+/g, '');\n // term = '\"' + term + '\"';\n\n const url = applyVariables(this.options.searchInsideUrl, this.br.options.vars, {\n query: term,\n preTag: this.options.preTag,\n postTag: this.options.postTag,\n });\n\n const callSearchResultsCallback = (searchInsideResults) => {\n if (this.searchCancelled) {\n return;\n }\n const responseHasError = searchInsideResults.error || !searchInsideResults.matches.length;\n const hasCustomError = typeof options.error === 'function';\n const hasCustomSuccess = typeof options.success === 'function';\n\n if (responseHasError) {\n console.error('Search Inside Response Error', searchInsideResults.error || 'matches.length == 0');\n hasCustomError\n ? options.error.call(this, searchInsideResults, options)\n : this.BRSearchCallbackError(searchInsideResults);\n } else {\n hasCustomSuccess\n ? options.success.call(this, searchInsideResults, options)\n : this.BRSearchCallback(searchInsideResults, options);\n }\n };\n\n this.br.trigger('SearchStarted', { term: this.searchTerm, instance: this.br });\n callSearchResultsCallback(await $.ajax({\n url: url,\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n beforeSend: xhr => { this.searchXHR = xhr; },\n }));\n }\n\n /**\n * cancels AJAX Call\n * emits custom event\n */\n _cancelSearch() {\n this.searchXHR?.abort();\n this.searchView.clearSearchFieldAndResults(false);\n this.searchTerm = '';\n this.searchXHR = null;\n this.searchCancelled = true;\n this.searchResults = null;\n }\n\n /**\n * External function to cancel search\n * checks for term & xhr in flight before running\n */\n cancelSearchRequest() {\n this.searchCancelled = true;\n if (this.searchXHR !== null) {\n this._cancelSearch();\n this.searchView.toggleSearchPending();\n this.br.trigger('SearchCanceled', { term: this.searchTerm, instance: this.br });\n }\n }\n\n /**\n * Search Results return handler\n * @param {SearchInsideResults} results\n * @param {object} options\n * @param {boolean} options.goToFirstResult\n */\n BRSearchCallback(results, options) {\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n marshallSearchResults(\n results,\n pageNum => this.br.book.getPageNum(this.br.book.leafNumToIndex(pageNum)),\n this.options.preTag,\n this.options.postTag,\n bookLangCode,\n );\n this.searchResults = results || null;\n\n this.updateSearchHilites();\n this.br.removeProgressPopup();\n if (options.goToFirstResult) {\n this.jumpToMatch(0);\n }\n this.br.trigger('SearchCallback', { results, options, instance: this.br });\n }\n\n /**\n * Main search results error handler\n * @param {SearchInsideResults} results\n */\n BRSearchCallbackError(results) {\n this._BRSearchCallbackError(results);\n }\n\n /**\n * @private draws search results error\n * @param {SearchInsideResults} results\n */\n _BRSearchCallbackError(results) {\n this.searchResults = results;\n const payload = {\n term: this.searchTerm,\n results,\n instance: this.br,\n };\n if (results.error) {\n this.br.trigger('SearchCallbackError', payload);\n } else if (0 == results.matches.length) {\n if (false === results.indexed) {\n this.br.trigger('SearchCallbackBookNotIndexed', payload);\n return;\n }\n this.br.trigger('SearchCallbackEmpty', payload);\n }\n }\n\n /**\n * updates search on-page highlights controller\n */\n updateSearchHilites() {\n /** @type {SearchInsideMatch[]} */\n const matches = this.searchResults?.matches || [];\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n const boxesByIndex = {};\n\n // Clear any existing svg layers\n this.removeSearchHilites();\n\n // Group by pageIndex\n for (const match of matches) {\n for (const box of match.par[0].boxes) {\n const pageIndex = this.br.book.leafNumToIndex(box.page);\n const pageBoxes = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);\n pageBoxes.push(box);\n }\n }\n\n // update any already created pages\n for (const [pageIndexString, boxes] of Object.entries(boxesByIndex)) {\n const pageIndex = parseFloat(pageIndexString);\n const page = this.br.book.getPage(pageIndex);\n const pageContainers = this.br.getActivePageContainerElementsForIndex(pageIndex);\n for (const container of pageContainers) {\n renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container, boxes.map(b => `match-index-${b.matchIndex}`));\n }\n }\n\n this._searchBoxesByIndex = boxesByIndex;\n }\n\n /**\n * remove search highlights\n */\n removeSearchHilites() {\n $(this.br.getActivePageContainerElements()).find('.searchHiliteLayer').remove();\n }\n\n /**\n * Goes to the page specified. If the page is not viewable, tries to load the page\n * FIXME Most of this logic is IA specific, and should be less integrated into here\n * or at least more configurable.\n * @param {number} matchIndex\n */\n async jumpToMatch(matchIndex) {\n const match = this.searchResults?.matches[matchIndex];\n const book = this.br.book;\n const pageIndex = book.leafNumToIndex(match.par[0].page);\n const page = book.getPage(pageIndex);\n const onNearbyPage = Math.abs(this.br.currentIndex() - pageIndex) < 3;\n let makeUnviewableAtEnd = false;\n if (!page.isViewable) {\n const resp = await fetch('/services/bookreader/request_page?' + new URLSearchParams({\n id: this.br.options.bookId,\n subprefix: this.br.options.subPrefix,\n leafNum: page.leafNum,\n })).then(r => r.json());\n\n for (const leafNum of resp.value) {\n book.getPage(book.leafNumToIndex(leafNum)).makeViewable();\n }\n\n // not able to show page; make the page viewable anyways so that it can\n // actually open. On IA, it has a fallback to a special error page.\n if (!resp.value.length) {\n book.getPage(pageIndex).makeViewable();\n makeUnviewableAtEnd = true;\n }\n\n // Trigger an update of book\n this.br._modes.mode1Up.mode1UpLit.updatePages();\n if (this.br.activeMode == this.br._modes.mode1Up) {\n await this.br._modes.mode1Up.mode1UpLit.updateComplete;\n }\n }\n /* this updates the URL */\n if (!this.br._isIndexDisplayed(pageIndex)) {\n this.suppressFragmentChange = false;\n this.br.jumpToIndex(pageIndex);\n }\n\n // Reset it to unviewable if it wasn't resolved\n if (makeUnviewableAtEnd) {\n book.getPage(pageIndex).makeViewable(false);\n }\n\n // Scroll/flash in the ui\n const $boxes = await poll(() => $(`rect.match-index-${match.matchIndex}`), { until: result => result.length > 0 });\n if ($boxes.length) {\n $boxes.css('animation', 'none');\n $boxes[0].scrollIntoView({\n // Only vertically center the highlight if we're in 1up or in full screen. In\n // 2up, if we're not fullscreen, the whole body gets scrolled around to try to\n // center the highlight 🙄 See:\n // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move/11041376\n // Note: nearest doesn't quite work great, because the ReadAloud toolbar is now\n // full-width, and covers up the last line of the highlight.\n block: this.br.constMode1up == this.br.mode || this.br.isFullscreenActive ? 'center' : 'nearest',\n inline: 'center',\n behavior: onNearbyPage ? 'smooth' : 'auto',\n });\n // wait for animation to start\n await new Promise(resolve => setTimeout(resolve, 100));\n $boxes.removeAttr(\"style\");\n }\n }\n\n /**\n * Removes all search pins\n */\n removeSearchResults(suppressFragmentChange = false) {\n this.removeSearchHilites(); //be sure to set all box.divs to null\n this.searchTerm = null;\n this.searchResults = null;\n if (!suppressFragmentChange) {\n this.br.trigger(BookReader.eventNames.fragmentChange);\n }\n }\n}\nBookReader?.registerPlugin('search', SearchPlugin);\n\n/**\n * @typedef {object} SearchOptions\n * @property {boolean} goToFirstResult\n * @property {boolean} disablePopup\n * @property {boolean} suppressFragmentChange\n * @property {(null|function)} error (deprecated)\n * @property {(null|function)} success (deprecated)\n */\n\n/**\n * @typedef {object} SearchInsideMatchBox\n * @property {number} page\n * @property {number} r\n * @property {number} l\n * @property {number} b\n * @property {number} t\n * @property {HTMLDivElement} [div]\n * @property {number} matchIndex This is a fake field! not part of the API response. The index of the match that contains this box in total search results matches.\n */\n\n/**\n * @typedef {object} SearchInsideMatch\n * @property {number} matchIndex This is a fake field! Not part of the API response. It is added by the JS.\n * @property {string} displayPageNumber (fake field) The page number as it should be displayed in the UI.\n * @property {string} html (computed field) The html-escaped raw html to display in the UI.\n * @property {string} text\n * @property {string} lang (fake field) The ISO 639-1 language code of the book\n * @property {Array<{ page: number, boxes: SearchInsideMatchBox[] }>} par\n */\n\n/**\n * @typedef {object} SearchInsideResults\n * @property {string} q\n * @property {string} error\n * @property {SearchInsideMatch[]} matches\n * @property {boolean} indexed\n */\n","/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n * @returns {StringWithVars|string}\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n"],"names":["PROPER_FUNCTION_NAME","fails","whitespaces","module","exports","METHOD_NAME","name","BookReaderPlugin","br","_classCallCheck","this","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","codes","by639_1","by639_2T","by639_2B","forEach","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","push","src_default","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","a","_arrayLikeToArray","toString","call","slice","constructor","from","test","_unsupportedIterableToArray","length","_n","F","s","n","done","f","TypeError","o","u","next","return","approximateWordCount","text","m","match","isAndroid","userAgent","arguments","undefined","navigator","specialLangs","toISO6391","language","getName","searchForISO6391","toLowerCase","columnsToSearch","_step","_iterator","langs","_step2","lang","_iterator2","split","map","x","indexOf","concat","err","hasLocalStorage","window","localStorage","DEBUG_READ_ALOUD","location","SearchView","_ref","_ref$searchCancelledC","searchCancelledCallback","matches","cacheDOMElements","cancelSearch","bindEvents","dom","toolbarSearch","buildToolbarSearch","query","val","remove","dispatchEventWhenComplete","plugins","search","removeSearchResults","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","trigger","selector","before","resultsPosition","searchNavigation","positionMessage","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","mode","constModeThumb","switchMode","constMode1up","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","matchPages","par","page","currentPage","currentIndex","closestTo","pool","closestPage","find","attr","off","resize","matchingSearchResult","constMode2up","find2upMatchingSearchResult","find1upMatchingSearchResult","_this","_this2","_isIndexDisplayed","setCurrentMatchIndex","bool","pinsVisibleState","refs","$BRfooter","css","visibility","document","createElement","classList","add","innerHTML","imagesBaseURL","_this3","pageIndex","book","leafNumToIndex","percentThrough","util","cssPercentage","getNumLeafs","html","Math","max","substring","replace","addClass","left","append","displayPageNumber","appendTo","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","style","setProperty","removeClass","jumpToMatch","matchIndex","_this4","showProgressPopup","progressPopupClosed","removeProgressPopup","toggleSearchPending","errorDetails","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","preventDefault","_ref2","_this5","results","renderSearchNavigation","bindSearchNavigationEvents","renderPins","goToFirstResult","one","removeSearchHilites","searchTerm","_event$detail","isIndexed","detail","props","indexed","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","addEventListener","handleSearchCallbackError","handleSearchCallback","handleSearchStarted","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","submitHandler","renderMatch","preTag","postTag","preTagRe","escapeRegExp","escapeHTML","postTagRe","regex","RegExp","toStringTag","i","c","prototype","Generator","create","_regeneratorDefine2","p","y","G","v","d","l","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","apply","_next","_throw","_defineProperties","_toPropertyKey","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_superPropGet","_get","_getPrototypeOf","get","hasOwnProperty","_superPropBase","getOwnPropertyDescriptor","_setPrototypeOf","_typeof","toPrimitive","String","_toPrimitive","BookReader","SearchPlugin","_BookReaderPlugin","_len","args","_key","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_callSuper","enabled","searchInsideUrl","join","initialSearchTerm","_inherits","searchResults","searchXHR","_searchBoxesByIndex","searchView","_cancelSearch","term","instance","init","suppressFragmentChange","after","index","boxes","renderBoxesInPageContainerLayer","$container","b","_search","_callee","overrides","defaultOptions","url","callSearchResultsCallback","_t","_args","_context","disablePopup","error","success","jQuery","extend","searchCancelled","eventNames","fragmentChange","applyVariables","vars","searchInsideResults","responseHasError","hasCustomError","hasCustomSuccess","console","BRSearchCallbackError","BRSearchCallback","ajax","cache","xhrFields","withCredentials","protected","beforeSend","xhr","_this$searchXHR","abort","bookLangCode","bookLanguage","displayPageNumberFn","entries","_step$value","_slicedToArray","_step3","_iterator3","marshallSearchResults","pageNum","getPageNum","updateSearchHilites","_BRSearchCallbackError","payload","_this$searchResults","boxesByIndex","box","_i","_Object$entries","_Object$entries$_i","pageIndexString","parseFloat","getPage","getActivePageContainerElementsForIndex","container","getActivePageContainerElements","_jumpToMatch","_callee2","_this$searchResults2","onNearbyPage","makeUnviewableAtEnd","resp","_iterator4","_step4","leafNum","$boxes","_context2","abs","isViewable","fetch","URLSearchParams","id","bookId","subprefix","subPrefix","json","makeViewable","_modes","mode1Up","mode1UpLit","updatePages","activeMode","updateComplete","jumpToIndex","poll","until","result","scrollIntoView","block","isFullscreenActive","inline","behavior","removeAttr","_x","registerPlugin","template","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","cur","urlencode","encodeURIComponent"],"sourceRoot":""}
|