@internetarchive/bookreader 5.0.0-96 → 5.0.0-98

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.
Files changed (47) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +39 -34
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.map +1 -1
  6. package/BookReader/bergamot-translator-worker.js +2966 -0
  7. package/BookReader/bergamot-translator-worker.wasm +0 -0
  8. package/BookReader/ia-bookreader-bundle.js +1 -1
  9. package/BookReader/ia-bookreader-bundle.js.map +1 -1
  10. package/BookReader/images/icon_experiment.svg +1 -0
  11. package/BookReader/images/translate.svg +1 -0
  12. package/BookReader/plugins/plugin.experiments.js +1 -1
  13. package/BookReader/plugins/plugin.experiments.js.map +1 -1
  14. package/BookReader/plugins/plugin.text_selection.js +1 -1
  15. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  16. package/BookReader/plugins/plugin.translate.js +3 -0
  17. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  18. package/BookReader/plugins/plugin.translate.js.map +1 -0
  19. package/BookReader/plugins/plugin.tts.js +1 -1
  20. package/BookReader/plugins/plugin.tts.js.map +1 -1
  21. package/BookReader/plugins/translator-worker.js +2 -0
  22. package/BookReader/plugins/translator-worker.js.map +1 -0
  23. package/BookReader/silence.mp3 +0 -0
  24. package/BookReader/translator-worker.js +475 -0
  25. package/package.json +6 -3
  26. package/src/BookNavigator/book-navigator.js +1 -0
  27. package/src/BookReader/Mode1UpLit.js +6 -1
  28. package/src/BookReader/Mode2UpLit.js +11 -1
  29. package/src/BookReader/Navbar/Navbar.js +61 -0
  30. package/src/BookReader/options.js +12 -8
  31. package/src/BookReader.js +67 -140
  32. package/src/assets/images/icon_experiment.svg +1 -0
  33. package/src/assets/images/translate.svg +1 -0
  34. package/src/assets/silence.mp3 +0 -0
  35. package/src/css/_BRnav.scss +0 -24
  36. package/src/css/_BRsearch.scss +1 -5
  37. package/src/css/_TextSelection.scss +38 -9
  38. package/src/plugins/plugin.experiments.js +34 -9
  39. package/src/plugins/plugin.text_selection.js +17 -20
  40. package/src/plugins/translate/TranslationManager.js +170 -0
  41. package/src/plugins/translate/plugin.translate.js +489 -0
  42. package/src/plugins/tts/AbstractTTSEngine.js +3 -4
  43. package/src/plugins/tts/PageChunk.js +28 -9
  44. package/src/plugins/tts/WebTTSEngine.js +5 -7
  45. package/src/plugins/tts/plugin.tts.js +40 -4
  46. package/src/plugins/tts/utils.js +21 -22
  47. package/src/util/cache.js +20 -0
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.text_selection.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/BookReader/utils/SelectionObserver.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.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\nexport class SelectionObserver {\n selecting = false;\n startedInSelector = false;\n /** @type {HTMLElement} */\n target = null;\n\n /**\n * @param {string} selector\n * @param {function('started' | 'cleared', HTMLElement): any} handler\n */\n constructor(selector, handler) {\n this.selector = selector;\n this.handler = handler;\n }\n\n attach() {\n // We can't just use selectstart, because safari on iOS just\n // randomly decides when to fire it 😤\n // document.addEventListener(\"selectstart\", this._onSelectStart);\n // This has to be on document :/\n document.addEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n detach() {\n document.removeEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n _onSelectionChange = () => {\n const sel = window.getSelection();\n\n if (!this.selecting && sel.toString()) {\n const target = $(sel.anchorNode).closest(this.selector)[0];\n if (!target) return;\n this.target = target;\n this.selecting = true;\n this.handler('started', this.target);\n }\n\n if (this.selecting && (sel.isCollapsed || !sel.toString() || !$(sel.anchorNode).closest(this.selector)[0])) {\n this.selecting = false;\n this.handler('cleared', this.target);\n }\n };\n}\n","//@ts-check\nimport { createDIVPageLayer } from '../BookReader/PageContainer.js';\nimport { SelectionObserver } from '../BookReader/utils/SelectionObserver.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { applyVariables } from '../util/strings.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n\nexport class TextSelectionPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n /** Whether to fetch the XML as a jsonp */\n jsonp: false,\n /** Mox words tha can be selected when the text layer is protected */\n maxProtectedWords: 200,\n }\n\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n djvuPagesPromise = null;\n\n /** @type {Cache<{index: number, response: any}>} */\n pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n maxWordRendered = 2500;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super(br);\n // In the future this should be in the ocr file\n // since a book being right to left doesn't mean the ocr is right to left. But for\n // now we do make that assumption.\n /** Whether the book is right-to-left */\n this.rtl = this.br.pageProgression === 'rl';\n this.selectionObserver = new SelectionObserver('.BRtextLayer', this._onSelectionChange);\n }\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.loadData();\n\n this.selectionObserver.attach();\n new SelectionObserver('.BRtextLayer', (selectEvent) => {\n // Track how often selection is used\n if (selectEvent == 'started') {\n this.br.plugins.archiveAnalytics?.sendEvent('BookReader', 'SelectStart');\n\n // Set a class on the page to avoid hiding it when zooming/etc\n this.br.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');\n $(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');\n }\n }).attach();\n\n if (this.br.protected) {\n document.addEventListener('selectionchange', this._limitSelection);\n // Prevent right clicking when selected text\n $(document.body).on('contextmenu dragstart copy', (e) => {\n const selection = document.getSelection();\n if (selection?.toString()) {\n const intersectsTextLayer = $('.BRtextLayer')\n .toArray()\n .some(el => selection.containsNode(el, true));\n if (intersectsTextLayer) {\n e.preventDefault();\n return false;\n }\n }\n });\n }\n }\n\n _limitSelection = () => {\n const selection = window.getSelection();\n if (!selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n\n // Check if range.startContainer is inside the sub-tree of .BRContainer\n const startInBr = !!range.startContainer.parentElement.closest('.BRcontainer');\n const endInBr = !!range.endContainer.parentElement.closest('.BRcontainer');\n if (!startInBr && !endInBr) return;\n if (!startInBr || !endInBr) {\n // weird case, just clear the selection\n selection.removeAllRanges();\n return;\n }\n\n // Find the last allowed word in the selection\n const lastAllowedWord = genAt(\n genFilter(\n walkBetweenNodes(range.startContainer, range.endContainer),\n (node) => node.classList?.contains('BRwordElement'),\n ),\n this.options.maxProtectedWords - 1,\n );\n\n if (!lastAllowedWord || range.endContainer.parentNode == lastAllowedWord) return;\n\n const newRange = document.createRange();\n newRange.setStart(range.startContainer, range.startOffset);\n newRange.setEnd(lastAllowedWord.firstChild, lastAllowedWord.textContent.length);\n\n selection.removeAllRanges();\n selection.addRange(newRange);\n };\n\n /**\n * @override\n * @param {PageContainer} pageContainer\n * @returns {PageContainer}\n */\n _configurePageContainer(pageContainer) {\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.br.mode !== this.br.constModeThumb && pageContainer.page) {\n this.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n\n /**\n * @param {'started' | 'cleared'} type\n * @param {HTMLElement} target\n */\n _onSelectionChange = (type, target) => {\n if (type === 'started') {\n this.textSelectingMode(target);\n } else if (type === 'cleared') {\n this.defaultMode(target);\n } else {\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n loadData() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n const res = await $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n });\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {HTMLElement} textLayer\n */\n defaultMode(textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n textLayer.style.pointerEvents = \"none\";\n $pageContainer.find(\"img\").css(\"pointer-events\", \"auto\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n const startedMouseDown = this.mouseIsDown;\n let skipNextMouseup = this.mouseIsDown;\n if (startedMouseDown) {\n textLayer.style.pointerEvents = \"auto\";\n }\n\n // Need to stop propagation to prevent DragScrollable from\n // blocking selection\n $(textLayer).on(\"mousedown.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = true;\n if ($(event.target).is(\".BRwordElement, .BRspace\")) {\n event.stopPropagation();\n }\n });\n\n $(textLayer).on(\"mouseup.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = false;\n textLayer.style.pointerEvents = \"none\";\n if (skipNextMouseup) {\n skipNextMouseup = false;\n event.stopPropagation();\n }\n });\n }\n\n /**\n * This mode is active while there is a selection on the given textLayer\n * @param {HTMLElement} textLayer\n */\n textSelectingMode(textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n // Make text layer consume all events\n textLayer.style.pointerEvents = \"all\";\n // Block img from getting long-press to save while selecting\n $pageContainer.find(\"img\").css(\"pointer-events\", \"none\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n\n $(textLayer).on('mousedown.textSelectPluginHandler', (event) => {\n this.mouseIsDown = true;\n event.stopPropagation();\n });\n\n // Prevent page flip on click\n $(textLayer).on('mouseup.textSelectPluginHandler', (event) => {\n this.mouseIsDown = false;\n event.stopPropagation();\n });\n }\n\n /**\n * Initializes text selection modes if there is a text layer on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<HTMLElement>} */\n const $textLayer = $container.find('.BRtextLayer');\n if (!$textLayer.length) return;\n $textLayer.each((i, s) => this.defaultMode(s));\n if (!this.br.protected) {\n this.interceptCopy($container);\n }\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $textLayers = $container.find('.BRtextLayer');\n if ($textLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n recursivelyAddCoords(XMLpage);\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const textLayer = createDIVPageLayer(pageContainer.page, 'BRtextLayer');\n const ratioW = parseFloat(pageContainer.$container[0].style.width) / pageContainer.page.width;\n const ratioH = parseFloat(pageContainer.$container[0].style.height) / pageContainer.page.height;\n textLayer.style.transform = `scale(${ratioW}, ${ratioH})`;\n textLayer.setAttribute(\"dir\", this.rtl ? \"rtl\" : \"ltr\");\n\n const ocrParagraphs = $(XMLpage).find(\"PARAGRAPH[coords]\").toArray();\n const paragEls = ocrParagraphs.map(p => {\n const el = this.renderParagraph(p);\n textLayer.appendChild(el);\n return el;\n });\n\n // Fix up paragraph positions\n const paragraphRects = determineRealRects(textLayer, '.BRparagraphElement');\n let yAdded = 0;\n for (const [ocrParagraph, paragEl] of zip(ocrParagraphs, paragEls)) {\n const ocrParagBounds = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const realRect = paragraphRects.get(paragEl);\n const [ocrLeft, , ocrRight, ocrTop] = ocrParagBounds;\n const newStartMargin = this.rtl ? (realRect.right - ocrRight) : (ocrLeft - realRect.left);\n const newTop = ocrTop - (realRect.top + yAdded);\n\n paragEl.style[this.rtl ? 'marginRight' : 'marginLeft'] = `${newStartMargin}px`;\n paragEl.style.marginTop = `${newTop}px`;\n yAdded += newTop;\n textLayer.appendChild(paragEl);\n }\n $container.append(textLayer);\n this.stopPageFlip($container);\n }\n\n /**\n * @param {HTMLElement} ocrParagraph\n * @returns {HTMLParagraphElement}\n */\n renderParagraph(ocrParagraph) {\n const paragEl = document.createElement('p');\n paragEl.classList.add('BRparagraphElement');\n const [paragLeft, paragBottom, paragRight, paragTop] = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const wordHeightArr = [];\n const lines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n if (!lines.length) return paragEl;\n\n\n for (const [prevLine, line, nextLine] of lookAroundWindow(genMap(lines, augmentLine))) {\n const isLastLineOfParagraph = line.ocrElement == lines[lines.length - 1];\n const lineEl = document.createElement('span');\n lineEl.classList.add('BRlineElement');\n\n for (const [wordIndex, currWord] of line.words.entries()) {\n const [, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n if (wordIndex == 0 && prevLine?.lastWord.textContent.trim().endsWith('-')) {\n // ideally prefer the next line to determine the left position,\n // since the previous line could be the first line of the paragraph\n // and hence have an incorrectly indented first word.\n // E.g. https://archive.org/details/driitaleofdaring00bachuoft/page/360/mode/2up\n const [newLeft, , , ] = $((nextLine || prevLine).firstWord).attr(\"coords\").split(',').map(parseFloat);\n $(currWord).attr(\"coords\", `${newLeft},${bottom},${right},${top}`);\n }\n\n const wordEl = document.createElement('span');\n wordEl.setAttribute(\"class\", \"BRwordElement\");\n wordEl.textContent = currWord.textContent.trim();\n\n if (wordIndex > 0) {\n const space = document.createElement('span');\n space.classList.add('BRspace');\n space.textContent = ' ';\n lineEl.append(space);\n\n // Edge ignores empty elements (like BRspace), so add another\n // space to ensure Edge's ReadAloud works correctly.\n lineEl.appendChild(document.createTextNode(' '));\n }\n\n lineEl.appendChild(wordEl);\n }\n\n const hasHyphen = line.lastWord.textContent.trim().endsWith('-');\n const lastWordEl = lineEl.children[lineEl.children.length - 1];\n if (hasHyphen && !isLastLineOfParagraph) {\n lastWordEl.textContent = lastWordEl.textContent.trim().slice(0, -1);\n lastWordEl.classList.add('BRwordElement--hyphen');\n }\n\n paragEl.appendChild(lineEl);\n if (!isLastLineOfParagraph && !hasHyphen) {\n // Edge does not correctly have spaces between the lines.\n paragEl.appendChild(document.createTextNode(' '));\n }\n }\n\n wordHeightArr.sort((a, b) => a - b);\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)] + 4;\n paragEl.style.left = `${paragLeft}px`;\n paragEl.style.top = `${paragTop}px`;\n paragEl.style.width = `${paragRight - paragLeft}px`;\n paragEl.style.height = `${paragBottom - paragTop}px`;\n paragEl.style.fontSize = `${paragWordHeight}px`;\n\n // Fix up sizes - stretch/crush words as necessary using letter spacing\n let wordRects = determineRealRects(paragEl, '.BRwordElement');\n const ocrWords = $(ocrParagraph).find(\"WORD\").toArray();\n const wordEls = paragEl.querySelectorAll('.BRwordElement');\n for (const [ocrWord, wordEl] of zip(ocrWords, wordEls)) {\n const realRect = wordRects.get(wordEl);\n const [left, , right ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n let ocrWidth = right - left;\n // Some books (eg theworksofplato01platiala) have a space _inside_ the <WORD>\n // element. That makes it impossible to determine the correct positining\n // of everything, but to avoid the BRspace's being width 0, which makes selection\n // janky on Chrome Android, assume the space is the same width as one of the\n // letters.\n if (ocrWord.textContent.endsWith(' ')) {\n ocrWidth = ocrWidth * (ocrWord.textContent.length - 1) / ocrWord.textContent.length;\n }\n const diff = ocrWidth - realRect.width;\n wordEl.style.letterSpacing = `${diff / (ocrWord.textContent.length - 1)}px`;\n }\n\n // Stretch/crush lines as necessary using line spacing\n // Recompute rects after letter spacing\n wordRects = determineRealRects(paragEl, '.BRwordElement');\n const spaceRects = determineRealRects(paragEl, '.BRspace');\n\n const ocrLines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n const lineEls = Array.from(paragEl.querySelectorAll('.BRlineElement'));\n\n let ySoFar = paragTop;\n for (const [ocrLine, lineEl] of zip(ocrLines, lineEls)) {\n // shift words using marginLeft to align with the correct x position\n const words = $(ocrLine).find(\"WORD\").toArray();\n // const ocrLineLeft = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[0])));\n let xSoFar = this.rtl ? paragRight : paragLeft;\n for (const [ocrWord, wordEl] of zip(words, lineEl.querySelectorAll('.BRwordElement'))) {\n // start of line, need to compute the offset relative to the OCR words\n const wordRect = wordRects.get(wordEl);\n const [ocrLeft, , ocrRight ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n const diff = (this.rtl ? -(ocrRight - xSoFar) : ocrLeft - xSoFar);\n\n if (wordEl.previousElementSibling) {\n const space = wordEl.previousElementSibling;\n space.style.letterSpacing = `${diff - spaceRects.get(space).width}px`;\n } else {\n wordEl.style[this.rtl ? 'paddingRight' : 'paddingLeft'] = `${diff}px`;\n }\n if (this.rtl) xSoFar -= diff + wordRect.width;\n else xSoFar += diff + wordRect.width;\n }\n // And also fix y position\n const ocrLineTop = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[3])));\n const diff = ocrLineTop - ySoFar;\n if (lineEl.previousElementSibling) {\n lineEl.previousElementSibling.style.lineHeight = `${diff}px`;\n ySoFar += diff;\n }\n }\n\n // The last line will have a line height subtracting from the paragraph height\n lineEls[lineEls.length - 1].style.lineHeight = `${paragBottom - ySoFar}px`;\n\n // Edge does not include a newline for some reason when copying/pasting the <p> els\n paragEl.appendChild(document.createElement('br'));\n return paragEl;\n }\n}\n\nBookReader?.registerPlugin('textSelection', TextSelectionPlugin);\n\n\n/**\n * @param {HTMLElement} parentEl\n * @param {string} selector\n * @returns {Map<Element, Rect>}\n */\nfunction determineRealRects(parentEl, selector) {\n const initals = {\n position: parentEl.style.position,\n visibility: parentEl.style.visibility,\n top: parentEl.style.top,\n left: parentEl.style.left,\n transform: parentEl.style.transform,\n };\n parentEl.style.position = 'absolute';\n parentEl.style.visibility = 'hidden';\n parentEl.style.top = '0';\n parentEl.style.left = '0';\n parentEl.style.transform = 'none';\n document.body.appendChild(parentEl);\n const rects = new Map(\n Array.from(parentEl.querySelectorAll(selector))\n .map(wordEl => {\n const origRect = wordEl.getBoundingClientRect();\n return [wordEl, new Rect(\n origRect.left + window.scrollX,\n origRect.top + window.scrollY,\n origRect.width,\n origRect.height,\n )];\n }),\n );\n document.body.removeChild(parentEl);\n Object.assign(parentEl.style, initals);\n return rects;\n}\n\n/**\n * @param {HTMLElement} line\n */\nfunction augmentLine(line) {\n const words = $(line).find(\"WORD\").toArray();\n return {\n ocrElement: line,\n words,\n firstWord: words[0],\n lastWord: words[words.length - 1],\n };\n}\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) return x;\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * @template TFrom, TTo\n * Generator version of map\n * @param {Iterable<TFrom>} gen\n * @param {function(TFrom): TTo} fn\n * @returns {Iterable<TTo>}\n */\nexport function* genMap(gen, fn) {\n for (const x of gen) yield fn(x);\n}\n\n/**\n * @template T\n * Generator that provides a sliding window of 3 elements,\n * prev, current, and next.\n * @param {Iterable<T>} gen\n * @returns {Iterable<[T | undefined, T, T | undefined]>}\n */\nexport function* lookAroundWindow(gen) {\n let prev = undefined;\n let cur = undefined;\n let next = undefined;\n for (const x of gen) {\n if (typeof cur !== 'undefined') {\n next = x;\n yield [prev, cur, next];\n }\n prev = cur;\n cur = x;\n next = undefined;\n }\n\n if (typeof cur !== 'undefined') {\n yield [prev, cur, next];\n }\n}\n\n/**\n * @template T1, T2\n * Lazy zip implementation to avoid importing lodash\n * Expects iterators to be of the same length\n * @param {Iterable<T1>} gen1\n * @param {Iterable<T2>} gen2\n * @returns {Iterable<[T1, T2]>}\n */\nexport function* zip(gen1, gen2) {\n const it1 = gen1[Symbol.iterator]();\n const it2 = gen2[Symbol.iterator]();\n while (true) {\n const r1 = it1.next();\n const r2 = it2.next();\n if (r1.done && r2.done) {\n return;\n }\n if (r1.done || r2.done) {\n throw new Error('zip: one of the iterators is done');\n }\n yield [r1.value, r2.value];\n }\n}\n\n/**\n * [left, bottom, right, top]\n * @param {Array<[number, number, number, number]>} bounds\n * @returns {[number, number, number, number]}\n */\nfunction determineBounds(bounds) {\n let leftMost = Infinity;\n let bottomMost = -Infinity;\n let rightMost = -Infinity;\n let topMost = Infinity;\n\n for (const [left, bottom, right, top] of bounds) {\n leftMost = Math.min(leftMost, left);\n bottomMost = Math.max(bottomMost, bottom);\n rightMost = Math.max(rightMost, right);\n topMost = Math.min(topMost, top);\n }\n\n return [leftMost, bottomMost, rightMost, topMost];\n}\n\n/**\n * Recursively traverses the XML tree and adds coords\n * which are the bounding box of all child coords\n * @param {Element} xmlEl\n */\nfunction recursivelyAddCoords(xmlEl) {\n if ($(xmlEl).attr('coords') || !xmlEl.children) {\n return;\n }\n\n const children = $(xmlEl).children().toArray();\n if (children.length === 0) {\n return;\n }\n\n for (const child of children) {\n recursivelyAddCoords(child);\n }\n\n const childCoords = [];\n\n for (const child of children) {\n if (!$(child).attr('coords')) continue;\n childCoords.push($(child).attr('coords').split(',').map(parseFloat));\n }\n\n const boundingCoords = determineBounds(childCoords);\n if (Math.abs(boundingCoords[0]) != Infinity) {\n $(xmlEl).attr('coords', boundingCoords.join(','));\n }\n}\n\n/**\n * Basically a polyfill for the native DOMRect class\n */\nclass Rect {\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get right() { return this.x + this.width; }\n get bottom() { return this.y + this.height; }\n get top() { return this.y; }\n get left() { return this.x; }\n}\n\n/**\n * Depth traverse the DOM tree starting at `start`, and ending at `end`.\n * @param {Node} start\n * @param {Node} end\n * @returns {Generator<Node>}\n */\nexport function* walkBetweenNodes(start, end) {\n let done = false;\n\n /**\n * @param {Node} node\n */\n function* walk(node, {children = true, parents = true, siblings = true} = {}) {\n if (node === end) {\n done = true;\n yield node;\n return;\n }\n\n // yield self\n yield node;\n\n // First iterate children (depth-first traversal)\n if (children && node.firstChild) {\n yield* walk(node.firstChild, {children: true, parents: false, siblings: true});\n if (done) return;\n }\n\n // Then iterate siblings\n if (siblings) {\n for (let sib = node.nextSibling; sib; sib = sib.nextSibling) {\n yield* walk(sib, {children: true, parents: false, siblings: false});\n if (done) return;\n }\n }\n\n // Finally, move up the tree\n if (parents && node.parentNode) {\n yield* walk(node.parentNode, {children: false, parents: true, siblings: true});\n if (done) return;\n }\n }\n\n yield* walk(start);\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","SelectionObserver","selector","handler","_this","_defineProperty","sel","window","getSelection","selecting","toString","anchorNode","closest","isCollapsed","document","addEventListener","_onSelectionChange","removeEventListener","genFilter","_marked2","_regeneratorRuntime","mark","genMap","_marked3","lookAroundWindow","_marked4","zip","_marked5","walkBetweenNodes","_slicedToArray","r","e","Array","isArray","_arrayWithHoles","l","t","Symbol","iterator","n","i","u","a","f","o","call","next","done","push","length","return","_iterableToArrayLimit","_unsupportedIterableToArray","TypeError","_nonIterableRest","_createForOfIteratorHelper","_n","F","s","_arrayLikeToArray","slice","constructor","from","test","prototype","hasOwnProperty","defineProperty","c","asyncIterator","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","h","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","Boolean","valueOf","bind","_setPrototypeOf","_toPropertyKey","_defineProperties","_createClass","toPrimitive","String","_toPrimitive","BookReader","Cache","maxSize","undefined","entries","entry","shift","TextSelectionPlugin","_BookReaderPlugin","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","jsonp","maxProtectedWords","selection","rangeCount","range","getRangeAt","startInBr","startContainer","parentElement","endInBr","endContainer","lastAllowedWord","iterable","index","_step7","_iterator7","x","err","genAt","node","_node$classList","classList","contains","parentNode","newRange","createRange","setStart","startOffset","setEnd","firstChild","textContent","removeAllRanges","addRange","textSelectingMode","concat","defaultMode","rtl","pageProgression","selectionObserver","_inherits","_this2","loadData","attach","selectEvent","_this2$br$plugins$arc","plugins","archiveAnalytics","sendEvent","refs","$br","find","removeClass","addClass","protected","_limitSelection","body","on","toArray","some","el","containsNode","preventDefault","mode","constModeThumb","page","createTextLayer","djvuPagesPromise","ajax","url","applyVariables","vars","dataType","cache","xhrFields","withCredentials","error","res","xmlMap","parseXML","_getPageText","_callee","cachedEntry","xmlDoc","result","XMLpagesArr","_context","pageTextCache","response","pageIndex","add","t0","_x","$container","event","clipboardData","setData","textLayer","_this3","$pageContainer","style","pointerEvents","css","off","startedMouseDown","mouseIsDown","skipNextMouseup","is","stopPropagation","_this4","_this5","$textLayer","each","interceptCopy","_createTextLayer","_callee2","XMLpage","totalWords","ratioW","ratioH","ocrParagraphs","paragEls","paragraphRects","yAdded","_iterator","_step","_step$value","ocrParagraph","paragEl","ocrParagBounds","realRect","_ocrParagBounds","ocrLeft","ocrRight","ocrTop","newStartMargin","newTop","_this6","_context2","getPageText","recursivelyAddCoords","maxWordRendered","console","log","createDIVPageLayer","parseFloat","width","height","transform","setAttribute","map","renderParagraph","appendChild","determineRealRects","attr","split","get","right","left","top","marginTop","append","stopPageFlip","_x2","createElement","_$$attr$split$map2","paragLeft","paragBottom","paragRight","paragTop","wordHeightArr","lines","_step2","_iterator2","augmentLine","_step2$value","prevLine","line","nextLine","isLastLineOfParagraph","ocrElement","lineEl","_step5","_iterator5","words","_step5$value","wordIndex","currWord","_$$attr$split$map4","bottom","wordHeight","lastWord","endsWith","newLeft","firstWord","wordEl","space","createTextNode","hasHyphen","lastWordEl","children","sort","b","paragWordHeight","Math","floor","fontSize","_step3","wordRects","_iterator3","querySelectorAll","_step3$value","ocrWord","_$$attr$split$map8","ocrWidth","diff","letterSpacing","_step4","spaceRects","ocrLines","lineEls","ySoFar","_iterator4","_step6","_step4$value","ocrLine","xSoFar","_iterator6","_step6$value","wordRect","_$$attr$split$map10","previousElementSibling","min","_arrayWithoutHoles","w","_iterableToArray","_nonIterableSpread","lineHeight","parentEl","initals","position","visibility","rects","Map","origRect","getBoundingClientRect","Rect","scrollX","scrollY","removeChild","fn","_iterator8","_step8","_context3","_marked","gen","_iterator9","_step9","_context4","cur","_iterator10","_step10","_context5","gen1","gen2","it1","it2","r1","r2","_context6","xmlEl","_step12","_iterator12","_step13","childCoords","_iterator13","child","boundingCoords","bounds","_step11","leftMost","Infinity","bottomMost","rightMost","topMost","_iterator11","_step11$value","max","determineBounds","abs","join","registerPlugin","start","end","walk","_context8","_ref","_ref$children","_ref$parents","parents","_ref$siblings","siblings","_callee3","sib","_context7","nextSibling","template","overrides","possibleFilters","APPLY_FILTERS","replace","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","urlencode","encodeURIComponent"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.text_selection.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/BookReader/utils/SelectionObserver.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./src/util/cache.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\nexport class SelectionObserver {\n selecting = false;\n startedInSelector = false;\n /** @type {HTMLElement} */\n target = null;\n\n /**\n * @param {string} selector\n * @param {function('started' | 'cleared', HTMLElement): any} handler\n */\n constructor(selector, handler) {\n this.selector = selector;\n this.handler = handler;\n }\n\n attach() {\n // We can't just use selectstart, because safari on iOS just\n // randomly decides when to fire it 😤\n // document.addEventListener(\"selectstart\", this._onSelectStart);\n // This has to be on document :/\n document.addEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n detach() {\n document.removeEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n _onSelectionChange = () => {\n const sel = window.getSelection();\n\n if (!this.selecting && sel.toString()) {\n const target = $(sel.anchorNode).closest(this.selector)[0];\n if (!target) return;\n this.target = target;\n this.selecting = true;\n this.handler('started', this.target);\n }\n\n if (this.selecting && (sel.isCollapsed || !sel.toString() || !$(sel.anchorNode).closest(this.selector)[0])) {\n this.selecting = false;\n this.handler('cleared', this.target);\n }\n };\n}\n","//@ts-check\nimport { createDIVPageLayer } from '../BookReader/PageContainer.js';\nimport { SelectionObserver } from '../BookReader/utils/SelectionObserver.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { applyVariables } from '../util/strings.js';\nimport { Cache } from '../util/cache.js';\nimport { toISO6391 } from './tts/utils.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class TextSelectionPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n /** Whether to fetch the XML as a jsonp */\n jsonp: false,\n /** Mox words tha can be selected when the text layer is protected */\n maxProtectedWords: 200,\n }\n\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n djvuPagesPromise = null;\n\n /** @type {Cache<{index: number, response: any}>} */\n pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n maxWordRendered = 2500;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super(br);\n // In the future this should be in the ocr file\n // since a book being right to left doesn't mean the ocr is right to left. But for\n // now we do make that assumption.\n /** Whether the book is right-to-left */\n this.rtl = this.br.pageProgression === 'rl';\n this.selectionObserver = new SelectionObserver('.BRtextLayer', this._onSelectionChange);\n }\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.loadData();\n\n this.selectionObserver.attach();\n new SelectionObserver('.BRtextLayer', (selectEvent) => {\n // Track how often selection is used\n if (selectEvent == 'started') {\n this.br.plugins.archiveAnalytics?.sendEvent('BookReader', 'SelectStart');\n\n // Set a class on the page to avoid hiding it when zooming/etc\n this.br.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');\n $(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');\n }\n }).attach();\n\n if (this.br.protected) {\n document.addEventListener('selectionchange', this._limitSelection);\n // Prevent right clicking when selected text\n $(document.body).on('contextmenu dragstart copy', (e) => {\n const selection = document.getSelection();\n if (selection?.toString()) {\n const intersectsTextLayer = $('.BRtextLayer')\n .toArray()\n .some(el => selection.containsNode(el, true));\n if (intersectsTextLayer) {\n e.preventDefault();\n return false;\n }\n }\n });\n }\n }\n\n _limitSelection = () => {\n const selection = window.getSelection();\n if (!selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n\n // Check if range.startContainer is inside the sub-tree of .BRContainer\n const startInBr = !!range.startContainer.parentElement.closest('.BRcontainer');\n const endInBr = !!range.endContainer.parentElement.closest('.BRcontainer');\n if (!startInBr && !endInBr) return;\n if (!startInBr || !endInBr) {\n // weird case, just clear the selection\n selection.removeAllRanges();\n return;\n }\n\n // Find the last allowed word in the selection\n const lastAllowedWord = genAt(\n genFilter(\n walkBetweenNodes(range.startContainer, range.endContainer),\n (node) => node.classList?.contains('BRwordElement'),\n ),\n this.options.maxProtectedWords - 1,\n );\n\n if (!lastAllowedWord || range.endContainer.parentNode == lastAllowedWord) return;\n\n const newRange = document.createRange();\n newRange.setStart(range.startContainer, range.startOffset);\n newRange.setEnd(lastAllowedWord.firstChild, lastAllowedWord.textContent.length);\n\n selection.removeAllRanges();\n selection.addRange(newRange);\n };\n\n /**\n * @override\n * @param {PageContainer} pageContainer\n * @returns {PageContainer}\n */\n _configurePageContainer(pageContainer) {\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.br.mode !== this.br.constModeThumb && pageContainer.page) {\n this.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n\n /**\n * @param {'started' | 'cleared'} type\n * @param {HTMLElement} target\n */\n _onSelectionChange = (type, target) => {\n if (type === 'started') {\n this.textSelectingMode(target);\n } else if (type === 'cleared') {\n this.defaultMode(target);\n } else {\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n loadData() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n const res = await $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n });\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {HTMLElement} textLayer\n */\n defaultMode(textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n textLayer.style.pointerEvents = \"none\";\n $pageContainer.find(\"img\").css(\"pointer-events\", \"auto\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n const startedMouseDown = this.mouseIsDown;\n let skipNextMouseup = this.mouseIsDown;\n if (startedMouseDown) {\n textLayer.style.pointerEvents = \"auto\";\n }\n\n // Need to stop propagation to prevent DragScrollable from\n // blocking selection\n $(textLayer).on(\"mousedown.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = true;\n if ($(event.target).is(\".BRwordElement, .BRspace\")) {\n event.stopPropagation();\n }\n });\n\n $(textLayer).on(\"mouseup.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = false;\n textLayer.style.pointerEvents = \"none\";\n if (skipNextMouseup) {\n skipNextMouseup = false;\n event.stopPropagation();\n }\n });\n }\n\n /**\n * This mode is active while there is a selection on the given textLayer\n * @param {HTMLElement} textLayer\n */\n textSelectingMode(textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n // Make text layer consume all events\n textLayer.style.pointerEvents = \"all\";\n // Block img from getting long-press to save while selecting\n $pageContainer.find(\"img\").css(\"pointer-events\", \"none\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n\n $(textLayer).on('mousedown.textSelectPluginHandler', (event) => {\n this.mouseIsDown = true;\n event.stopPropagation();\n });\n\n // Prevent page flip on click\n $(textLayer).on('mouseup.textSelectPluginHandler', (event) => {\n this.mouseIsDown = false;\n event.stopPropagation();\n });\n }\n\n /**\n * Initializes text selection modes if there is a text layer on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<HTMLElement>} */\n const $textLayer = $container.find('.BRtextLayer');\n if (!$textLayer.length) return;\n $textLayer.each((i, s) => this.defaultMode(s));\n if (!this.br.protected) {\n this.interceptCopy($container);\n }\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $textLayers = $container.find('.BRtextLayer');\n if ($textLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n recursivelyAddCoords(XMLpage);\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const textLayer = createDIVPageLayer(pageContainer.page, 'BRtextLayer');\n // Have to wait to make sure the page container is actually rendered,\n // otherwise width/height are unset after a mode change.\n await Promise.resolve();\n const ratioW = parseFloat(pageContainer.$container[0].style.width) / pageContainer.page.width;\n const ratioH = parseFloat(pageContainer.$container[0].style.height) / pageContainer.page.height;\n textLayer.style.transform = `scale(${ratioW}, ${ratioH})`;\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n if (bookLangCode) {\n textLayer.setAttribute(\"lang\", bookLangCode);\n }\n textLayer.setAttribute(\"dir\", this.rtl ? \"rtl\" : \"ltr\");\n\n const ocrParagraphs = $(XMLpage).find(\"PARAGRAPH[coords]\").toArray();\n const paragEls = ocrParagraphs.map(p => {\n const el = this.renderParagraph(p);\n textLayer.appendChild(el);\n return el;\n });\n\n // Fix up paragraph positions\n const paragraphRects = determineRealRects(textLayer, '.BRparagraphElement');\n let yAdded = 0;\n for (const [ocrParagraph, paragEl] of zip(ocrParagraphs, paragEls)) {\n const ocrParagBounds = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const realRect = paragraphRects.get(paragEl);\n const [ocrLeft, , ocrRight, ocrTop] = ocrParagBounds;\n const newStartMargin = this.rtl ? (realRect.right - ocrRight) : (ocrLeft - realRect.left);\n const newTop = ocrTop - (realRect.top + yAdded);\n\n paragEl.style[this.rtl ? 'marginRight' : 'marginLeft'] = `${newStartMargin}px`;\n paragEl.style.marginTop = `${newTop}px`;\n yAdded += newTop;\n textLayer.appendChild(paragEl);\n }\n $container.append(textLayer);\n this.stopPageFlip($container);\n this.br.trigger('textLayerRendered', {\n pageIndex,\n pageContainer,\n });\n }\n\n /**\n * @param {HTMLElement} ocrParagraph\n * @returns {HTMLParagraphElement}\n */\n renderParagraph(ocrParagraph) {\n const paragEl = document.createElement('p');\n paragEl.classList.add('BRparagraphElement');\n if (ocrParagraph.getAttribute(\"x-role\")) {\n paragEl.classList.add('ocr-role-header-footer');\n paragEl.ariaHidden = \"true\";\n }\n const [paragLeft, paragBottom, paragRight, paragTop] = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const wordHeightArr = [];\n const lines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n if (!lines.length) return paragEl;\n\n\n for (const [prevLine, line, nextLine] of lookAroundWindow(genMap(lines, augmentLine))) {\n const isLastLineOfParagraph = line.ocrElement == lines[lines.length - 1];\n const lineEl = document.createElement('span');\n lineEl.classList.add('BRlineElement');\n\n for (const [wordIndex, currWord] of line.words.entries()) {\n const [, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n if (wordIndex == 0 && prevLine?.lastWord.textContent.trim().endsWith('-')) {\n // ideally prefer the next line to determine the left position,\n // since the previous line could be the first line of the paragraph\n // and hence have an incorrectly indented first word.\n // E.g. https://archive.org/details/driitaleofdaring00bachuoft/page/360/mode/2up\n const [newLeft, , , ] = $((nextLine || prevLine).firstWord).attr(\"coords\").split(',').map(parseFloat);\n $(currWord).attr(\"coords\", `${newLeft},${bottom},${right},${top}`);\n }\n\n const wordEl = document.createElement('span');\n wordEl.setAttribute(\"class\", \"BRwordElement\");\n wordEl.textContent = currWord.textContent.trim();\n\n if (wordIndex > 0) {\n const space = document.createElement('span');\n space.classList.add('BRspace');\n space.textContent = ' ';\n lineEl.append(space);\n\n // Edge ignores empty elements (like BRspace), so add another\n // space to ensure Edge's ReadAloud works correctly.\n lineEl.appendChild(document.createTextNode(' '));\n }\n\n lineEl.appendChild(wordEl);\n }\n\n const hasHyphen = line.lastWord.textContent.trim().endsWith('-');\n const lastWordEl = lineEl.children[lineEl.children.length - 1];\n if (hasHyphen && !isLastLineOfParagraph) {\n lastWordEl.textContent = lastWordEl.textContent.trim().slice(0, -1);\n lastWordEl.classList.add('BRwordElement--hyphen');\n }\n\n paragEl.appendChild(lineEl);\n if (!isLastLineOfParagraph && !hasHyphen) {\n // Edge does not correctly have spaces between the lines.\n paragEl.appendChild(document.createTextNode(' '));\n }\n }\n\n wordHeightArr.sort((a, b) => a - b);\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)] + 4;\n paragEl.style.left = `${paragLeft}px`;\n paragEl.style.top = `${paragTop}px`;\n paragEl.style.width = `${paragRight - paragLeft}px`;\n paragEl.style.height = `${paragBottom - paragTop}px`;\n paragEl.style.fontSize = `${paragWordHeight}px`;\n\n // Fix up sizes - stretch/crush words as necessary using letter spacing\n let wordRects = determineRealRects(paragEl, '.BRwordElement');\n const ocrWords = $(ocrParagraph).find(\"WORD\").toArray();\n const wordEls = paragEl.querySelectorAll('.BRwordElement');\n for (const [ocrWord, wordEl] of zip(ocrWords, wordEls)) {\n const realRect = wordRects.get(wordEl);\n const [left, , right ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n let ocrWidth = right - left;\n // Some books (eg theworksofplato01platiala) have a space _inside_ the <WORD>\n // element. That makes it impossible to determine the correct positining\n // of everything, but to avoid the BRspace's being width 0, which makes selection\n // janky on Chrome Android, assume the space is the same width as one of the\n // letters.\n if (ocrWord.textContent.endsWith(' ')) {\n ocrWidth = ocrWidth * (ocrWord.textContent.length - 1) / ocrWord.textContent.length;\n }\n const diff = ocrWidth - realRect.width;\n wordEl.style.letterSpacing = `${diff / (ocrWord.textContent.length - 1)}px`;\n }\n\n // Stretch/crush lines as necessary using line spacing\n // Recompute rects after letter spacing\n wordRects = determineRealRects(paragEl, '.BRwordElement');\n const spaceRects = determineRealRects(paragEl, '.BRspace');\n\n const ocrLines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n const lineEls = Array.from(paragEl.querySelectorAll('.BRlineElement'));\n\n let ySoFar = paragTop;\n for (const [ocrLine, lineEl] of zip(ocrLines, lineEls)) {\n // shift words using marginLeft to align with the correct x position\n const words = $(ocrLine).find(\"WORD\").toArray();\n // const ocrLineLeft = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[0])));\n let xSoFar = this.rtl ? paragRight : paragLeft;\n for (const [ocrWord, wordEl] of zip(words, lineEl.querySelectorAll('.BRwordElement'))) {\n // start of line, need to compute the offset relative to the OCR words\n const wordRect = wordRects.get(wordEl);\n const [ocrLeft, , ocrRight ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n const diff = (this.rtl ? -(ocrRight - xSoFar) : ocrLeft - xSoFar);\n\n if (wordEl.previousElementSibling) {\n const space = wordEl.previousElementSibling;\n space.style.letterSpacing = `${diff - spaceRects.get(space).width}px`;\n } else {\n wordEl.style[this.rtl ? 'paddingRight' : 'paddingLeft'] = `${diff}px`;\n }\n if (this.rtl) xSoFar -= diff + wordRect.width;\n else xSoFar += diff + wordRect.width;\n }\n // And also fix y position\n const ocrLineTop = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[3])));\n const diff = ocrLineTop - ySoFar;\n if (lineEl.previousElementSibling) {\n lineEl.previousElementSibling.style.lineHeight = `${diff}px`;\n ySoFar += diff;\n }\n }\n\n // The last line will have a line height subtracting from the paragraph height\n lineEls[lineEls.length - 1].style.lineHeight = `${paragBottom - ySoFar}px`;\n\n // Edge does not include a newline for some reason when copying/pasting the <p> els\n paragEl.appendChild(document.createElement('br'));\n return paragEl;\n }\n}\n\nBookReader?.registerPlugin('textSelection', TextSelectionPlugin);\n\n\n/**\n * @param {HTMLElement} parentEl\n * @param {string} selector\n * @returns {Map<Element, Rect>}\n */\nfunction determineRealRects(parentEl, selector) {\n const initals = {\n position: parentEl.style.position,\n visibility: parentEl.style.visibility,\n top: parentEl.style.top,\n left: parentEl.style.left,\n transform: parentEl.style.transform,\n };\n parentEl.style.position = 'absolute';\n parentEl.style.visibility = 'hidden';\n parentEl.style.top = '0';\n parentEl.style.left = '0';\n parentEl.style.transform = 'none';\n document.body.appendChild(parentEl);\n const rects = new Map(\n Array.from(parentEl.querySelectorAll(selector))\n .map(wordEl => {\n const origRect = wordEl.getBoundingClientRect();\n return [wordEl, new Rect(\n origRect.left + window.scrollX,\n origRect.top + window.scrollY,\n origRect.width,\n origRect.height,\n )];\n }),\n );\n document.body.removeChild(parentEl);\n Object.assign(parentEl.style, initals);\n return rects;\n}\n\n/**\n * @param {HTMLElement} line\n */\nfunction augmentLine(line) {\n const words = $(line).find(\"WORD\").toArray();\n return {\n ocrElement: line,\n words,\n firstWord: words[0],\n lastWord: words[words.length - 1],\n };\n}\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) return x;\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * @template TFrom, TTo\n * Generator version of map\n * @param {Iterable<TFrom>} gen\n * @param {function(TFrom): TTo} fn\n * @returns {Iterable<TTo>}\n */\nexport function* genMap(gen, fn) {\n for (const x of gen) yield fn(x);\n}\n\n/**\n * @template T\n * Generator that provides a sliding window of 3 elements,\n * prev, current, and next.\n * @param {Iterable<T>} gen\n * @returns {Iterable<[T | undefined, T, T | undefined]>}\n */\nexport function* lookAroundWindow(gen) {\n let prev = undefined;\n let cur = undefined;\n let next = undefined;\n for (const x of gen) {\n if (typeof cur !== 'undefined') {\n next = x;\n yield [prev, cur, next];\n }\n prev = cur;\n cur = x;\n next = undefined;\n }\n\n if (typeof cur !== 'undefined') {\n yield [prev, cur, next];\n }\n}\n\n/**\n * @template T1, T2\n * Lazy zip implementation to avoid importing lodash\n * Expects iterators to be of the same length\n * @param {Iterable<T1>} gen1\n * @param {Iterable<T2>} gen2\n * @returns {Iterable<[T1, T2]>}\n */\nexport function* zip(gen1, gen2) {\n const it1 = gen1[Symbol.iterator]();\n const it2 = gen2[Symbol.iterator]();\n while (true) {\n const r1 = it1.next();\n const r2 = it2.next();\n if (r1.done && r2.done) {\n return;\n }\n if (r1.done || r2.done) {\n throw new Error('zip: one of the iterators is done');\n }\n yield [r1.value, r2.value];\n }\n}\n\n/**\n * [left, bottom, right, top]\n * @param {Array<[number, number, number, number]>} bounds\n * @returns {[number, number, number, number]}\n */\nfunction determineBounds(bounds) {\n let leftMost = Infinity;\n let bottomMost = -Infinity;\n let rightMost = -Infinity;\n let topMost = Infinity;\n\n for (const [left, bottom, right, top] of bounds) {\n leftMost = Math.min(leftMost, left);\n bottomMost = Math.max(bottomMost, bottom);\n rightMost = Math.max(rightMost, right);\n topMost = Math.min(topMost, top);\n }\n\n return [leftMost, bottomMost, rightMost, topMost];\n}\n\n/**\n * Recursively traverses the XML tree and adds coords\n * which are the bounding box of all child coords\n * @param {Element} xmlEl\n */\nfunction recursivelyAddCoords(xmlEl) {\n if ($(xmlEl).attr('coords') || !xmlEl.children) {\n return;\n }\n\n const children = $(xmlEl).children().toArray();\n if (children.length === 0) {\n return;\n }\n\n for (const child of children) {\n recursivelyAddCoords(child);\n }\n\n const childCoords = [];\n\n for (const child of children) {\n if (!$(child).attr('coords')) continue;\n childCoords.push($(child).attr('coords').split(',').map(parseFloat));\n }\n\n const boundingCoords = determineBounds(childCoords);\n if (Math.abs(boundingCoords[0]) != Infinity) {\n $(xmlEl).attr('coords', boundingCoords.join(','));\n }\n}\n\n/**\n * Basically a polyfill for the native DOMRect class\n */\nclass Rect {\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get right() { return this.x + this.width; }\n get bottom() { return this.y + this.height; }\n get top() { return this.y; }\n get left() { return this.x; }\n}\n\n/**\n * Depth traverse the DOM tree starting at `start`, and ending at `end`.\n * @param {Node} start\n * @param {Node} end\n * @returns {Generator<Node>}\n */\nexport function* walkBetweenNodes(start, end) {\n let done = false;\n\n /**\n * @param {Node} node\n */\n function* walk(node, {children = true, parents = true, siblings = true} = {}) {\n if (node === end) {\n done = true;\n yield node;\n return;\n }\n\n // yield self\n yield node;\n\n // First iterate children (depth-first traversal)\n if (children && node.firstChild) {\n yield* walk(node.firstChild, {children: true, parents: false, siblings: true});\n if (done) return;\n }\n\n // Then iterate siblings\n if (siblings) {\n for (let sib = node.nextSibling; sib; sib = sib.nextSibling) {\n yield* walk(sib, {children: true, parents: false, siblings: false});\n if (done) return;\n }\n }\n\n // Finally, move up the tree\n if (parents && node.parentNode) {\n yield* walk(node.parentNode, {children: false, parents: true, siblings: true});\n if (done) return;\n }\n }\n\n yield* walk(start);\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","/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\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","SelectionObserver","selector","handler","_this","_defineProperty","sel","window","getSelection","selecting","toString","anchorNode","closest","isCollapsed","document","addEventListener","_onSelectionChange","removeEventListener","genFilter","_marked2","_regeneratorRuntime","mark","genMap","_marked3","lookAroundWindow","_marked4","zip","_marked5","walkBetweenNodes","_slicedToArray","r","e","Array","isArray","_arrayWithHoles","l","t","Symbol","iterator","n","i","u","a","f","o","call","next","done","push","length","return","_iterableToArrayLimit","_unsupportedIterableToArray","TypeError","_nonIterableRest","_createForOfIteratorHelper","_n","F","s","_arrayLikeToArray","slice","constructor","from","test","prototype","hasOwnProperty","defineProperty","c","asyncIterator","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","h","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperties","_toPropertyKey","_createClass","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","Boolean","valueOf","bind","_setPrototypeOf","toPrimitive","String","_toPrimitive","BookReader","TextSelectionPlugin","_BookReaderPlugin","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","jsonp","maxProtectedWords","Cache","selection","rangeCount","range","getRangeAt","startInBr","startContainer","parentElement","endInBr","endContainer","lastAllowedWord","iterable","index","_step7","_iterator7","x","err","genAt","node","_node$classList","classList","contains","parentNode","newRange","createRange","setStart","startOffset","setEnd","firstChild","textContent","removeAllRanges","addRange","textSelectingMode","concat","defaultMode","rtl","pageProgression","selectionObserver","_inherits","_this2","loadData","attach","selectEvent","_this2$br$plugins$arc","plugins","archiveAnalytics","sendEvent","refs","$br","find","removeClass","addClass","protected","_limitSelection","body","on","toArray","some","el","containsNode","preventDefault","mode","constModeThumb","page","createTextLayer","djvuPagesPromise","ajax","url","applyVariables","vars","dataType","cache","xhrFields","withCredentials","error","res","xmlMap","parseXML","_getPageText","_callee","cachedEntry","xmlDoc","result","XMLpagesArr","_context","pageTextCache","entries","response","pageIndex","add","t0","undefined","_x","$container","event","clipboardData","setData","textLayer","_this3","$pageContainer","style","pointerEvents","css","off","startedMouseDown","mouseIsDown","skipNextMouseup","is","stopPropagation","_this4","_this5","$textLayer","each","interceptCopy","_createTextLayer","_callee2","XMLpage","totalWords","ratioW","ratioH","bookLangCode","ocrParagraphs","paragEls","paragraphRects","yAdded","_iterator","_step","_step$value","ocrParagraph","paragEl","ocrParagBounds","realRect","_ocrParagBounds","ocrLeft","ocrRight","ocrTop","newStartMargin","newTop","_this6","_context2","getPageText","recursivelyAddCoords","maxWordRendered","console","log","createDIVPageLayer","parseFloat","width","height","transform","toISO6391","bookLanguage","setAttribute","map","renderParagraph","appendChild","determineRealRects","attr","split","get","right","left","top","marginTop","append","stopPageFlip","trigger","_x2","createElement","getAttribute","ariaHidden","_$$attr$split$map2","paragLeft","paragBottom","paragRight","paragTop","wordHeightArr","lines","_step2","_iterator2","augmentLine","_step2$value","prevLine","line","nextLine","isLastLineOfParagraph","ocrElement","lineEl","_step5","_iterator5","words","_step5$value","wordIndex","currWord","_$$attr$split$map4","bottom","wordHeight","lastWord","endsWith","newLeft","firstWord","wordEl","space","createTextNode","hasHyphen","lastWordEl","children","sort","b","paragWordHeight","Math","floor","fontSize","_step3","wordRects","_iterator3","querySelectorAll","_step3$value","ocrWord","_$$attr$split$map8","ocrWidth","diff","letterSpacing","_step4","spaceRects","ocrLines","lineEls","ySoFar","_iterator4","_step6","_step4$value","ocrLine","xSoFar","_iterator6","_step6$value","wordRect","_$$attr$split$map10","previousElementSibling","min","_arrayWithoutHoles","w","_iterableToArray","_nonIterableSpread","lineHeight","parentEl","initals","position","visibility","rects","Map","origRect","getBoundingClientRect","Rect","scrollX","scrollY","removeChild","fn","_iterator8","_step8","_context3","_marked","gen","_iterator9","_step9","_context4","cur","_iterator10","_step10","_context5","gen1","gen2","it1","it2","r1","r2","_context6","xmlEl","_step12","_iterator12","_step13","childCoords","_iterator13","child","boundingCoords","bounds","_step11","leftMost","Infinity","bottomMost","rightMost","topMost","_iterator11","_step11$value","max","determineBounds","abs","join","registerPlugin","start","end","walk","_context8","_ref","_ref$children","_ref$parents","parents","_ref$siblings","siblings","_callee3","sib","_context7","nextSibling","codes","by639_1","by639_2T","by639_2B","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","src_default","approximateWordCount","text","m","match","isAndroid","userAgent","navigator","specialLangs","language","getName","searchForISO6391","toLowerCase","columnsToSearch","langs","lang","indexOf","hasLocalStorage","localStorage","DEBUG_READ_ALOUD","location","maxSize","entry","shift","template","overrides","possibleFilters","APPLY_FILTERS","replace","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","urlencode","encodeURIComponent"],"sourceRoot":""}