@internetarchive/bookreader 5.0.0-21 → 5.0.0-24-sortingstate

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 (130) hide show
  1. package/.nvmrc +1 -0
  2. package/BookReader/BookReader.css +0 -55
  3. package/BookReader/BookReader.js +32148 -2
  4. package/BookReader/BookReader.js.map +1 -1
  5. package/BookReader/bookreader-component-bundle.js +10916 -941
  6. package/BookReader/bookreader-component-bundle.js.map +1 -1
  7. package/BookReader/icons/1up.svg +12 -1
  8. package/BookReader/icons/2up.svg +15 -1
  9. package/BookReader/icons/advance.svg +26 -3
  10. package/BookReader/icons/chevron-right.svg +1 -1
  11. package/BookReader/icons/close-circle-dark.svg +1 -1
  12. package/BookReader/icons/close-circle.svg +1 -1
  13. package/BookReader/icons/fullscreen.svg +17 -1
  14. package/BookReader/icons/fullscreen_exit.svg +17 -1
  15. package/BookReader/icons/hamburger.svg +15 -1
  16. package/BookReader/icons/left-arrow.svg +12 -1
  17. package/BookReader/icons/magnify-minus.svg +16 -1
  18. package/BookReader/icons/magnify-plus.svg +17 -1
  19. package/BookReader/icons/magnify.svg +15 -1
  20. package/BookReader/icons/pause.svg +23 -1
  21. package/BookReader/icons/play.svg +22 -1
  22. package/BookReader/icons/playback-speed.svg +34 -1
  23. package/BookReader/icons/read-aloud.svg +22 -1
  24. package/BookReader/icons/review.svg +22 -3
  25. package/BookReader/icons/thumbnails.svg +17 -1
  26. package/BookReader/icons/voice.svg +1 -1
  27. package/BookReader/icons/volume-full.svg +22 -1
  28. package/BookReader/images/BRicons.svg +94 -5
  29. package/BookReader/images/books_graphic.svg +177 -1
  30. package/BookReader/images/icon_book.svg +12 -1
  31. package/BookReader/images/icon_bookmark.svg +12 -1
  32. package/BookReader/images/icon_gear.svg +14 -1
  33. package/BookReader/images/icon_hamburger.svg +20 -1
  34. package/BookReader/images/icon_home.svg +21 -1
  35. package/BookReader/images/icon_info.svg +11 -1
  36. package/BookReader/images/icon_one_page.svg +8 -1
  37. package/BookReader/images/icon_pause.svg +1 -1
  38. package/BookReader/images/icon_play.svg +1 -1
  39. package/BookReader/images/icon_playback-rate.svg +15 -1
  40. package/BookReader/images/icon_search_button.svg +8 -1
  41. package/BookReader/images/icon_share.svg +9 -1
  42. package/BookReader/images/icon_skip-ahead.svg +6 -1
  43. package/BookReader/images/icon_skip-back.svg +13 -2
  44. package/BookReader/images/icon_speaker.svg +18 -1
  45. package/BookReader/images/icon_speaker_open.svg +10 -1
  46. package/BookReader/images/icon_thumbnails.svg +12 -1
  47. package/BookReader/images/icon_toc.svg +5 -1
  48. package/BookReader/images/icon_two_pages.svg +9 -1
  49. package/BookReader/images/marker_chap-off.svg +11 -1
  50. package/BookReader/images/marker_chap-on.svg +11 -1
  51. package/BookReader/images/marker_srch-on.svg +11 -1
  52. package/BookReader/jquery-1.10.1.js +108 -2
  53. package/BookReader/plugins/plugin.archive_analytics.js +170 -1
  54. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  55. package/BookReader/plugins/plugin.autoplay.js +163 -1
  56. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  57. package/BookReader/plugins/plugin.chapters.js +333 -1
  58. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  59. package/BookReader/plugins/plugin.iframe.js +72 -1
  60. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  61. package/BookReader/plugins/plugin.mobile_nav.js +332 -1
  62. package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
  63. package/BookReader/plugins/plugin.resume.js +241 -1
  64. package/BookReader/plugins/plugin.resume.js.map +1 -1
  65. package/BookReader/plugins/plugin.search.js +1263 -1
  66. package/BookReader/plugins/plugin.search.js.map +1 -1
  67. package/BookReader/plugins/plugin.text_selection.js +839 -1
  68. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  69. package/BookReader/plugins/plugin.tts.js +9114 -2
  70. package/BookReader/plugins/plugin.tts.js.map +1 -1
  71. package/BookReader/plugins/plugin.url.js +750 -1
  72. package/BookReader/plugins/plugin.url.js.map +1 -1
  73. package/BookReader/plugins/plugin.vendor-fullscreen.js +326 -1
  74. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  75. package/BookReader/webcomponents-bundle.js +411 -2
  76. package/BookReader/webcomponents-bundle.js.map +1 -1
  77. package/CHANGELOG.md +12 -0
  78. package/package.json +2 -6
  79. package/src/BookNavigator/bookmarks/bookmarks-provider.js +1 -0
  80. package/src/BookNavigator/bookmarks/ia-bookmarks.js +3 -0
  81. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +1 -1
  82. package/src/BookNavigator/volumes/volumes-provider.js +39 -9
  83. package/src/BookReader/Mode1Up.js +10 -2
  84. package/src/BookReader/ModeThumb.js +13 -6
  85. package/src/BookReader/Navbar/Navbar.js +0 -29
  86. package/src/BookReader/options.js +4 -0
  87. package/src/BookReader.js +14 -34
  88. package/src/ItemNavigator/ItemNavigator.js +1 -0
  89. package/src/css/_BRnav.scss +0 -23
  90. package/src/plugins/plugin.url.js +209 -2
  91. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +0 -0
  92. package/tests/{BookReader → jest/BookReader}/BookReaderPublicFunctions.test.js +0 -0
  93. package/tests/{BookReader → jest/BookReader}/DebugConsole.test.js +0 -0
  94. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +0 -0
  95. package/tests/{BookReader → jest/BookReader}/Mode1UpLit.test.js +0 -0
  96. package/tests/{BookReader → jest/BookReader}/Mode2Up.test.js +0 -0
  97. package/tests/{BookReader → jest/BookReader}/ModeSmoothZoom.test.js +0 -0
  98. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  99. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +0 -0
  100. package/tests/{BookReader → jest/BookReader}/PageContainer.test.js +0 -0
  101. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +0 -0
  102. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +0 -0
  103. package/tests/{BookReader → jest/BookReader}/utils/HTMLDimensionsCacher.test.js +0 -0
  104. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +0 -0
  105. package/tests/{BookReader → jest/BookReader}/utils.test.js +0 -0
  106. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +8 -0
  107. package/tests/{BookReader.test.js → jest/BookReader.test.js} +16 -0
  108. package/tests/{plugins → jest/plugins}/plugin.archive_analytics.test.js +0 -0
  109. package/tests/{plugins → jest/plugins}/plugin.autoplay.test.js +0 -0
  110. package/tests/{plugins → jest/plugins}/plugin.chapters.test.js +0 -0
  111. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +0 -0
  112. package/tests/{plugins → jest/plugins}/plugin.mobile_nav.test.js +0 -0
  113. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +0 -0
  114. package/tests/{plugins → jest/plugins}/plugin.text_selection.test.js +0 -0
  115. package/tests/jest/plugins/plugin.url.test.js +306 -0
  116. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +0 -0
  117. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +0 -0
  118. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +0 -0
  119. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +0 -0
  120. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +0 -0
  121. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +0 -0
  122. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +0 -0
  123. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +0 -0
  124. package/tests/{plugins → jest/plugins}/tts/utils.test.js +0 -0
  125. package/tests/{util → jest/util}/browserSniffing.test.js +0 -0
  126. package/tests/{util → jest/util}/docCookies.test.js +0 -0
  127. package/tests/{util → jest/util}/strings.test.js +0 -0
  128. package/tests/{utils.js → jest/utils.js} +0 -0
  129. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +6 -6
  130. package/tests/plugins/plugin.url.test.js +0 -147
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.url.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollID);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\n"],"names":["super_","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlMode","urlHistoryBasePath","urlTrackedParams","urlTrackIndex0","prototype","setup","options","call","this","locationPollId","oldLocationHash","oldUserHash","init","bind","eventNames","PostInit","document","title","shortTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","bookTitle","length","substr","urlReadFragment","clearInterval","locationPollID","setInterval","newFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","window","history","replaceState","baseWithoutSlash","replace","newFragmentWithSlash","newUrlPath","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","location","url","URLSearchParams","has","q","get","pathname","hash","urlReadHashFragment"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = 'hash';\n this.urlHistoryBasePath = '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlSchema, urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/$/, '')}`;\n const concatenatedPath = `/${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `/${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {array} urlSchema\n * @param {string} str\n * @returns {object}\n */\n urlStringToUrlState(urlSchema, str) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URLSearchParams\n const urlPath = new URL(str, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const urlStrSplitSlashObj = Object.fromEntries(urlPath.pathname\n .match(/[^\\\\/]+\\/[^\\\\/]+/g)\n .map(x => x.split('/'))\n );\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n if (!urlStrSplitSlashObj[schema.name] && schema.default) {\n return urlState[schema.name] = schema.default;\n }\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey)\n return urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n\n if (hasPropertyKey)\n return urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n });\n\n // Add searchParams to urlState\n // Check if Object value is a Boolean and convert value to Boolean\n // Otherwise, return Object value\n const isBoolean = value => value === 'true' || (value === 'false' ? false : value);\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = isBoolean(value);\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlSchema, this.urlState);\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${urlStrPath}`;\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + urlStrPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n * @param {string} location\n * @return {string}\n */\n pullFromAddressBar (location) {\n const path = this.urlMode === 'history'\n ? location.substr(this.urlHistoryBasePath.length)\n : location.substr(1);\n this.urlState = this.urlStringToUrlState(this.urlSchema, path);\n }\n}\nexport class BookreaderUrlPlugin extends BookReader {\n\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n"],"names":["jQuery","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlMode","urlHistoryBasePath","urlTrackedParams","urlTrackIndex0","prototype","setup","super_","options","call","locationPollId","oldLocationHash","oldUserHash","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","length","substr","urlReadFragment","clearInterval","updateHash","newFragment","hasFragmentChange","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","setInterval","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","window","history","replaceState","baseWithoutSlash","replace","newFragmentWithSlash","newUrlPath","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","location","url","URLSearchParams","has","q","get","pathname","hash","urlReadHashFragment","UrlPlugin","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlLocationPollId","searchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","concatenatedPath","toString","str","urlPath","URL","urlSearchParamsObj","fromEntries","entries","urlStrSplitSlashObj","match","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","hasDeprecatedKey","isBoolean","pushToAddressBar","urlStrPath","urlStateToUrlString","urlStringToUrlState","path","BookreaderUrlPlugin","urlPlugin","listenForHashChanges"],"sourceRoot":""}
@@ -1,2 +1,327 @@
1
- (self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[46],{8688:function(e,t,n){"use strict";n(3210),n(9600);var o,r=n(3609),i=n(3609);if(!m()){var u=".bookreader_vendor-fullscreen";r.extend(BookReader.defaultOptions,{enableVendorFullscreenPlugin:!0}),BookReader.prototype.setup=(o=BookReader.prototype.setup,function(e){o.call(this,e),this.isVendorFullscreenActive=!1}),BookReader.prototype.getInitialMode=function(e){return function(t){var n=e.call(this,t);return this.isVendorFullscreenActive&&(n=this.constMode1up),n}}(BookReader.prototype.getInitialMode),BookReader.prototype.init=function(e){return function(){e.call(this),d()&&p(this,(function(e){e.data.resize(),e.data.updateBrClasses();var t=i("#cboxOverlay"),n=i("#colorbox");s()?i(l()).append(t).append(n):i(document.body).append(t).append(n)}))}}(BookReader.prototype.init),BookReader.prototype.enterFullWindow=function(){var e=this;this.refs.$brContainer.css("opacity",0),i(window).width()<=this.onePageMinBreakpoint&&this.switchMode(this.constMode1up),this.isVendorFullscreenActive=!0,this.updateBrClasses(),this.resize(),this.jumpToIndex(this.currentIndex()),this.refs.$brContainer.animate({opacity:1},400,"linear"),i(document).on("keyup.".concat(u),(function(t){27===t.keyCode&&e.exitFullScreen()}))},BookReader.prototype.exitFullWindow=function(){this.refs.$brContainer.css("opacity",0),i(document).off("keyup"+u),this.isFullscreenActive=!1,this.updateBrClasses(),this.resize(),this.refs.$brContainer.animate({opacity:1},400,"linear")},BookReader.prototype.isFullscreen=function(){return s()||this.isVendorFullscreenActive},BookReader.prototype.toggleFullscreen=function(){this.isFullscreen()?d()?c():this.exitFullWindow():d()?a(this.refs.$br[0]):this.enterFullWindow()},BookReader.util.isMobile=m,BookReader.util.getFullscreenElement=l,BookReader.util.bindFullscreenChangeListener=p,BookReader.util.fullscreenAllowed=d,BookReader.util.requestFullscreen=a,BookReader.util.exitFullscreen=c,BookReader.util.isFullscreenActive=s}function l(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement}function s(){return null!=l()}function c(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()}function a(e){e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen()}function d(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullScreenEnabled}function p(e,t){var n="fullscreenchange ",o=(n+["webkit","moz","ms"].join(n)+n).trim();i(document).on(o,e,t)}function m(){return void 0!==window.orientation||-1!==navigator.userAgent.indexOf("IEMobile")}},6091:function(e,t,n){var o=n(7293),r=n(1361);e.exports=function(e){return o((function(){return!!r[e]()||"​…᠎"!="​…᠎"[e]()||r[e].name!==e}))}},3210:function(e,t,n){"use strict";var o=n(2109),r=n(3111).trim;o({target:"String",proto:!0,forced:n(6091)("trim")},{trim:function(){return r(this)}})}},function(e){e(e.s=8688)}]);
1
+ (self["webpackChunk_internetarchive_bookreader"] = self["webpackChunk_internetarchive_bookreader"] || []).push([["plugins/plugin.vendor-fullscreen.js"],{
2
+
3
+ /***/ "./src/plugins/plugin.vendor-fullscreen.js":
4
+ /*!*************************************************!*\
5
+ !*** ./src/plugins/plugin.vendor-fullscreen.js ***!
6
+ \*************************************************/
7
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8
+
9
+ "use strict";
10
+ __webpack_require__.r(__webpack_exports__);
11
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
+ /* harmony export */ "getFullscreenElement": function() { return /* binding */ getFullscreenElement; },
13
+ /* harmony export */ "isFullscreenActive": function() { return /* binding */ isFullscreenActive; },
14
+ /* harmony export */ "exitFullscreen": function() { return /* binding */ exitFullscreen; },
15
+ /* harmony export */ "requestFullscreen": function() { return /* binding */ requestFullscreen; },
16
+ /* harmony export */ "fullscreenAllowed": function() { return /* binding */ fullscreenAllowed; },
17
+ /* harmony export */ "bindFullscreenChangeListener": function() { return /* binding */ bindFullscreenChangeListener; },
18
+ /* harmony export */ "isMobile": function() { return /* binding */ isMobile; }
19
+ /* harmony export */ });
20
+ /* harmony import */ var core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.trim.js */ "./node_modules/core-js/modules/es.string.trim.js");
21
+ /* harmony import */ var core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_0__);
22
+ /* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ "./node_modules/core-js/modules/es.array.join.js");
23
+ /* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__);
24
+ /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery");
25
+ /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery");
26
+
27
+
28
+
29
+ /* global BookReader */
30
+
31
+ /**
32
+ * Toggles browser's native fullscreen mode if available device is not mobile
33
+ */
34
+ if (!isMobile()) {
35
+ var EVENT_NAMESPACE = '.bookreader_vendor-fullscreen';
36
+ jQuery.extend(BookReader.defaultOptions, {
37
+ /** @type {boolean} */
38
+ enableVendorFullscreenPlugin: true
39
+ });
40
+ /** @override */
41
+
42
+ BookReader.prototype.setup = function (super_) {
43
+ return function (options) {
44
+ super_.call(this, options);
45
+ this.isVendorFullscreenActive = false;
46
+ };
47
+ }(BookReader.prototype.setup);
48
+ /** @override */
49
+
50
+
51
+ BookReader.prototype.getInitialMode = function (super_) {
52
+ return function (params) {
53
+ var nextMode = super_.call(this, params);
54
+
55
+ if (this.isVendorFullscreenActive) {
56
+ nextMode = this.constMode1up;
57
+ }
58
+
59
+ return nextMode;
60
+ };
61
+ }(BookReader.prototype.getInitialMode);
62
+ /** @override */
63
+
64
+
65
+ BookReader.prototype.init = function (super_) {
66
+ return function () {
67
+ super_.call(this);
68
+
69
+ if (!fullscreenAllowed()) {
70
+ return;
71
+ } // In fullscreen mode the colorbox and overlay need to be inside the fullscreen element to display properly.
72
+
73
+
74
+ bindFullscreenChangeListener(this, function (e) {
75
+ e.data.resize();
76
+ e.data.updateBrClasses();
77
+ var cboxOverlay = $('#cboxOverlay');
78
+ var cbox = $('#colorbox');
79
+
80
+ if (isFullscreenActive()) {
81
+ // In full screen mode, the colorbox and overlay need
82
+ // to be children of the fullscreen element to display properly.
83
+ var $fullscreen = $(getFullscreenElement());
84
+ $fullscreen.append(cboxOverlay).append(cbox);
85
+ } else {
86
+ // In non-fullscreen mode, the colorbox and overlay need
87
+ // to be children of the main document body.
88
+ $(document.body).append(cboxOverlay).append(cbox);
89
+ }
90
+ });
91
+ };
92
+ }(BookReader.prototype.init);
93
+ /**
94
+ * Start fullscreen mode
95
+ */
96
+
97
+
98
+ BookReader.prototype.enterFullWindow = function () {
99
+ var _this = this;
100
+
101
+ this.refs.$brContainer.css('opacity', 0);
102
+ var windowWidth = $(window).width();
103
+
104
+ if (windowWidth <= this.onePageMinBreakpoint) {
105
+ this.switchMode(this.constMode1up);
106
+ }
107
+
108
+ this.isVendorFullscreenActive = true;
109
+ this.updateBrClasses();
110
+ this.resize();
111
+ this.jumpToIndex(this.currentIndex());
112
+ this.refs.$brContainer.animate({
113
+ opacity: 1
114
+ }, 400, 'linear');
115
+ $(document).on("keyup.".concat(EVENT_NAMESPACE), function (e) {
116
+ if (e.keyCode === 27) _this.exitFullScreen();
117
+ });
118
+ };
119
+ /**
120
+ * Exit from fullscreen mode
121
+ */
122
+
123
+
124
+ BookReader.prototype.exitFullWindow = function () {
125
+ this.refs.$brContainer.css('opacity', 0);
126
+ $(document).off('keyup' + EVENT_NAMESPACE);
127
+ this.isFullscreenActive = false;
128
+ this.updateBrClasses();
129
+ this.resize();
130
+ this.refs.$brContainer.animate({
131
+ opacity: 1
132
+ }, 400, 'linear');
133
+ };
134
+ /**
135
+ * Returns true if fullscreen mode is enabled
136
+ *
137
+ * @returns {boolean}
138
+ */
139
+
140
+
141
+ BookReader.prototype.isFullscreen = function () {
142
+ return isFullscreenActive() || this.isVendorFullscreenActive;
143
+ };
144
+ /**
145
+ * Toggle screen
146
+ */
147
+
148
+
149
+ BookReader.prototype.toggleFullscreen = function () {
150
+ if (this.isFullscreen()) {
151
+ if (fullscreenAllowed()) {
152
+ exitFullscreen();
153
+ } else {
154
+ this.exitFullWindow();
155
+ }
156
+ } else {
157
+ if (fullscreenAllowed()) {
158
+ requestFullscreen(this.refs.$br[0]);
159
+ } else {
160
+ this.enterFullWindow();
161
+ }
162
+ }
163
+ };
164
+ /** @deprecated */
165
+
166
+
167
+ BookReader.util.isMobile = isMobile;
168
+ /** @deprecated */
169
+
170
+ BookReader.util.getFullscreenElement = getFullscreenElement;
171
+ /** @deprecated */
172
+
173
+ BookReader.util.bindFullscreenChangeListener = bindFullscreenChangeListener;
174
+ /** @deprecated */
175
+
176
+ BookReader.util.fullscreenAllowed = fullscreenAllowed;
177
+ /** @deprecated */
178
+
179
+ BookReader.util.requestFullscreen = requestFullscreen;
180
+ /** @deprecated */
181
+
182
+ BookReader.util.exitFullscreen = exitFullscreen;
183
+ /** @deprecated */
184
+
185
+ BookReader.util.isFullscreenActive = isFullscreenActive;
186
+ }
187
+ /**
188
+ * Returns the DOM element being used for fullscreen.
189
+ *
190
+ * @returns {HTMLElement}
191
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/fullscreenElement
192
+ */
193
+
194
+
195
+ function getFullscreenElement() {
196
+ return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
197
+ }
198
+ /**
199
+ * Returns true if the document is in fullscreen mode.
200
+ *
201
+ * @returns {boolean}
202
+ */
203
+
204
+ function isFullscreenActive() {
205
+ var fullscreenElement = getFullscreenElement();
206
+ return fullscreenElement !== null && fullscreenElement !== undefined;
207
+ }
208
+ /**
209
+ * Exits fullscreen mode.
210
+ *
211
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/exitFullscreen
212
+ */
213
+
214
+ function exitFullscreen() {
215
+ if (document.exitFullscreen) {
216
+ document.exitFullscreen();
217
+ } else if (document.webkitExitFullscreen) {
218
+ document.webkitExitFullscreen();
219
+ } else if (document.mozCancelFullScreen) {
220
+ document.mozCancelFullScreen();
221
+ } else if (document.msExitFullscreen) {
222
+ document.msExitFullscreen();
223
+ }
224
+ }
225
+ /**
226
+ * Requests fullscreen mode for the given element
227
+ *
228
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen
229
+ */
230
+
231
+ function requestFullscreen(element) {
232
+ if (element.requestFullscreen) {
233
+ element.requestFullscreen();
234
+ } else if (element.webkitRequestFullscreen) {
235
+ element.webkitRequestFullscreen();
236
+ } else if (element.mozRequestFullScreen) {
237
+ element.mozRequestFullScreen();
238
+ } else if (element.msRequestFullscreen) {
239
+ element.msRequestFullscreen();
240
+ }
241
+ }
242
+ /**
243
+ * Returns true if fullscreen mode is allowed on this device and document.
244
+ *
245
+ * @returns {boolean}
246
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenEnabled
247
+ */
248
+
249
+ function fullscreenAllowed() {
250
+ return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullScreenEnabled;
251
+ }
252
+ /**
253
+ * jQuery-style binding to a fullscreenchange event.
254
+ *
255
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenchange_event
256
+ */
257
+
258
+ function bindFullscreenChangeListener(data, fullscreenchangeListener) {
259
+ var event = 'fullscreenchange ';
260
+ var vendor_prefixes = ['webkit', 'moz', 'ms'];
261
+ var all_events = (event + vendor_prefixes.join(event) + event).trim();
262
+ $(document).on(all_events, data, fullscreenchangeListener);
263
+ }
264
+ /**
265
+ * Returns true if current device is mobile
266
+ *
267
+ * @returns {boolean}
268
+ */
269
+
270
+ function isMobile() {
271
+ return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1;
272
+ }
273
+
274
+ /***/ }),
275
+
276
+ /***/ "./node_modules/core-js/internals/string-trim-forced.js":
277
+ /*!**************************************************************!*\
278
+ !*** ./node_modules/core-js/internals/string-trim-forced.js ***!
279
+ \**************************************************************/
280
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
281
+
282
+ var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
283
+ var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "./node_modules/core-js/internals/whitespaces.js");
284
+
285
+ var non = '\u200B\u0085\u180E';
286
+
287
+ // check that a method works with the correct list
288
+ // of whitespaces and has a correct name
289
+ module.exports = function (METHOD_NAME) {
290
+ return fails(function () {
291
+ return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;
292
+ });
293
+ };
294
+
295
+
296
+ /***/ }),
297
+
298
+ /***/ "./node_modules/core-js/modules/es.string.trim.js":
299
+ /*!********************************************************!*\
300
+ !*** ./node_modules/core-js/modules/es.string.trim.js ***!
301
+ \********************************************************/
302
+ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
303
+
304
+ "use strict";
305
+
306
+ var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
307
+ var $trim = __webpack_require__(/*! ../internals/string-trim */ "./node_modules/core-js/internals/string-trim.js").trim;
308
+ var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ "./node_modules/core-js/internals/string-trim-forced.js");
309
+
310
+ // `String.prototype.trim` method
311
+ // https://tc39.es/ecma262/#sec-string.prototype.trim
312
+ $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
313
+ trim: function trim() {
314
+ return $trim(this);
315
+ }
316
+ });
317
+
318
+
319
+ /***/ })
320
+
321
+ },
322
+ /******/ function(__webpack_require__) { // webpackRuntimeModules
323
+ /******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
324
+ /******/ var __webpack_exports__ = (__webpack_exec__("./src/plugins/plugin.vendor-fullscreen.js"));
325
+ /******/ }
326
+ ]);
2
327
  //# sourceMappingURL=plugin.vendor-fullscreen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.vendor-fullscreen.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.vendor-fullscreen.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js"],"sourcesContent":["/* global BookReader */\n\n/**\n * Toggles browser's native fullscreen mode if available device is not mobile\n */\nif (!isMobile()) {\n const EVENT_NAMESPACE = '.bookreader_vendor-fullscreen';\n\n jQuery.extend(BookReader.defaultOptions, {\n /** @type {boolean} */\n enableVendorFullscreenPlugin: true\n });\n\n /** @override */\n BookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.isVendorFullscreenActive = false;\n };\n })(BookReader.prototype.setup);\n\n /** @override */\n BookReader.prototype.getInitialMode = (function(super_) {\n return function(params) {\n let nextMode = super_.call(this, params);\n if (this.isVendorFullscreenActive) {\n nextMode = this.constMode1up;\n }\n return nextMode;\n };\n })(BookReader.prototype.getInitialMode);\n\n /** @override */\n BookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n\n if (!fullscreenAllowed()) {\n return;\n }\n // In fullscreen mode the colorbox and overlay need to be inside the fullscreen element to display properly.\n bindFullscreenChangeListener(this, (e) => {\n e.data.resize();\n e.data.updateBrClasses();\n const cboxOverlay = $('#cboxOverlay');\n const cbox = $('#colorbox');\n if (isFullscreenActive()) {\n // In full screen mode, the colorbox and overlay need\n // to be children of the fullscreen element to display properly.\n const $fullscreen = $(getFullscreenElement());\n $fullscreen.append(cboxOverlay).append(cbox);\n } else {\n // In non-fullscreen mode, the colorbox and overlay need\n // to be children of the main document body.\n $(document.body).append(cboxOverlay).append(cbox);\n }\n });\n };\n })(BookReader.prototype.init);\n\n /**\n * Start fullscreen mode\n */\n BookReader.prototype.enterFullWindow = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n const windowWidth = $(window).width();\n if (windowWidth <= this.onePageMinBreakpoint) {\n this.switchMode(this.constMode1up);\n }\n\n this.isVendorFullscreenActive = true;\n this.updateBrClasses();\n\n this.resize();\n this.jumpToIndex(this.currentIndex());\n\n this.refs.$brContainer.animate({ opacity: 1 }, 400, 'linear');\n\n $(document).on(`keyup.${EVENT_NAMESPACE}`, e => {\n if (e.keyCode === 27) this.exitFullScreen();\n });\n };\n\n /**\n * Exit from fullscreen mode\n */\n BookReader.prototype.exitFullWindow = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n $(document).off('keyup' + EVENT_NAMESPACE);\n\n this.isFullscreenActive = false;\n this.updateBrClasses();\n\n this.resize();\n this.refs.$brContainer.animate({ opacity: 1 }, 400, 'linear');\n };\n\n /**\n * Returns true if fullscreen mode is enabled\n *\n * @returns {boolean}\n */\n BookReader.prototype.isFullscreen = function() {\n return isFullscreenActive() || this.isVendorFullscreenActive;\n };\n\n /**\n * Toggle screen\n */\n BookReader.prototype.toggleFullscreen = function() {\n if (this.isFullscreen()) {\n if (fullscreenAllowed()) {\n exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n } else {\n if (fullscreenAllowed()) {\n requestFullscreen(this.refs.$br[0]);\n } else {\n this.enterFullWindow();\n }\n }\n };\n\n /** @deprecated */\n BookReader.util.isMobile = isMobile;\n\n /** @deprecated */\n BookReader.util.getFullscreenElement = getFullscreenElement;\n\n /** @deprecated */\n BookReader.util.bindFullscreenChangeListener = bindFullscreenChangeListener;\n\n /** @deprecated */\n BookReader.util.fullscreenAllowed = fullscreenAllowed;\n\n /** @deprecated */\n BookReader.util.requestFullscreen = requestFullscreen;\n\n /** @deprecated */\n BookReader.util.exitFullscreen = exitFullscreen;\n\n /** @deprecated */\n BookReader.util.isFullscreenActive = isFullscreenActive;\n}\n\n\n/**\n * Returns the DOM element being used for fullscreen.\n *\n * @returns {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/fullscreenElement\n */\nexport function getFullscreenElement() {\n return document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.mozFullScreenElement ||\n document.msFullscreenElement;\n}\n\n/**\n * Returns true if the document is in fullscreen mode.\n *\n * @returns {boolean}\n */\nexport function isFullscreenActive() {\n const fullscreenElement = getFullscreenElement();\n return fullscreenElement !== null && fullscreenElement !== undefined;\n}\n\n/**\n * Exits fullscreen mode.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/exitFullscreen\n */\nexport function exitFullscreen() {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n}\n\n/**\n * Requests fullscreen mode for the given element\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen\n */\nexport function requestFullscreen(element) {\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n }\n}\n\n/**\n * Returns true if fullscreen mode is allowed on this device and document.\n *\n * @returns {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenEnabled\n */\nexport function fullscreenAllowed() {\n return (document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullScreenEnabled);\n}\n\n/**\n * jQuery-style binding to a fullscreenchange event.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenchange_event\n */\nexport function bindFullscreenChangeListener(\n data, fullscreenchangeListener\n) {\n const event = 'fullscreenchange ';\n const vendor_prefixes = [\n 'webkit',\n 'moz',\n 'ms'\n ];\n const all_events = (event + vendor_prefixes.join(event) + event).trim();\n $(document).on(all_events, data, fullscreenchangeListener);\n}\n\n/**\n * Returns true if current device is mobile\n *\n * @returns {boolean}\n */\nexport function isMobile() {\n return (typeof window.orientation !== 'undefined') || (navigator.userAgent.indexOf('IEMobile') !== -1);\n}\n","var 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]() || non[METHOD_NAME]() != non || 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"],"names":["super_","isMobile","EVENT_NAMESPACE","jQuery","extend","BookReader","defaultOptions","enableVendorFullscreenPlugin","prototype","setup","options","call","this","isVendorFullscreenActive","getInitialMode","params","nextMode","constMode1up","init","fullscreenAllowed","bindFullscreenChangeListener","e","data","resize","updateBrClasses","cboxOverlay","$","cbox","isFullscreenActive","getFullscreenElement","append","document","body","enterFullWindow","refs","$brContainer","css","window","width","onePageMinBreakpoint","switchMode","jumpToIndex","currentIndex","animate","opacity","on","keyCode","exitFullScreen","exitFullWindow","off","isFullscreen","toggleFullscreen","exitFullscreen","requestFullscreen","$br","util","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","element","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullScreenEnabled","fullscreenchangeListener","event","all_events","join","trim","orientation","navigator","userAgent","indexOf","fails","whitespaces","module","exports","METHOD_NAME","name","$trim","target","proto","forced","forcedStringTrimMethod"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.vendor-fullscreen.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.vendor-fullscreen.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js"],"sourcesContent":["/* global BookReader */\n\n/**\n * Toggles browser's native fullscreen mode if available device is not mobile\n */\nif (!isMobile()) {\n const EVENT_NAMESPACE = '.bookreader_vendor-fullscreen';\n\n jQuery.extend(BookReader.defaultOptions, {\n /** @type {boolean} */\n enableVendorFullscreenPlugin: true\n });\n\n /** @override */\n BookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.isVendorFullscreenActive = false;\n };\n })(BookReader.prototype.setup);\n\n /** @override */\n BookReader.prototype.getInitialMode = (function(super_) {\n return function(params) {\n let nextMode = super_.call(this, params);\n if (this.isVendorFullscreenActive) {\n nextMode = this.constMode1up;\n }\n return nextMode;\n };\n })(BookReader.prototype.getInitialMode);\n\n /** @override */\n BookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n\n if (!fullscreenAllowed()) {\n return;\n }\n // In fullscreen mode the colorbox and overlay need to be inside the fullscreen element to display properly.\n bindFullscreenChangeListener(this, (e) => {\n e.data.resize();\n e.data.updateBrClasses();\n const cboxOverlay = $('#cboxOverlay');\n const cbox = $('#colorbox');\n if (isFullscreenActive()) {\n // In full screen mode, the colorbox and overlay need\n // to be children of the fullscreen element to display properly.\n const $fullscreen = $(getFullscreenElement());\n $fullscreen.append(cboxOverlay).append(cbox);\n } else {\n // In non-fullscreen mode, the colorbox and overlay need\n // to be children of the main document body.\n $(document.body).append(cboxOverlay).append(cbox);\n }\n });\n };\n })(BookReader.prototype.init);\n\n /**\n * Start fullscreen mode\n */\n BookReader.prototype.enterFullWindow = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n const windowWidth = $(window).width();\n if (windowWidth <= this.onePageMinBreakpoint) {\n this.switchMode(this.constMode1up);\n }\n\n this.isVendorFullscreenActive = true;\n this.updateBrClasses();\n\n this.resize();\n this.jumpToIndex(this.currentIndex());\n\n this.refs.$brContainer.animate({ opacity: 1 }, 400, 'linear');\n\n $(document).on(`keyup.${EVENT_NAMESPACE}`, e => {\n if (e.keyCode === 27) this.exitFullScreen();\n });\n };\n\n /**\n * Exit from fullscreen mode\n */\n BookReader.prototype.exitFullWindow = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n $(document).off('keyup' + EVENT_NAMESPACE);\n\n this.isFullscreenActive = false;\n this.updateBrClasses();\n\n this.resize();\n this.refs.$brContainer.animate({ opacity: 1 }, 400, 'linear');\n };\n\n /**\n * Returns true if fullscreen mode is enabled\n *\n * @returns {boolean}\n */\n BookReader.prototype.isFullscreen = function() {\n return isFullscreenActive() || this.isVendorFullscreenActive;\n };\n\n /**\n * Toggle screen\n */\n BookReader.prototype.toggleFullscreen = function() {\n if (this.isFullscreen()) {\n if (fullscreenAllowed()) {\n exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n } else {\n if (fullscreenAllowed()) {\n requestFullscreen(this.refs.$br[0]);\n } else {\n this.enterFullWindow();\n }\n }\n };\n\n /** @deprecated */\n BookReader.util.isMobile = isMobile;\n\n /** @deprecated */\n BookReader.util.getFullscreenElement = getFullscreenElement;\n\n /** @deprecated */\n BookReader.util.bindFullscreenChangeListener = bindFullscreenChangeListener;\n\n /** @deprecated */\n BookReader.util.fullscreenAllowed = fullscreenAllowed;\n\n /** @deprecated */\n BookReader.util.requestFullscreen = requestFullscreen;\n\n /** @deprecated */\n BookReader.util.exitFullscreen = exitFullscreen;\n\n /** @deprecated */\n BookReader.util.isFullscreenActive = isFullscreenActive;\n}\n\n\n/**\n * Returns the DOM element being used for fullscreen.\n *\n * @returns {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/fullscreenElement\n */\nexport function getFullscreenElement() {\n return document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.mozFullScreenElement ||\n document.msFullscreenElement;\n}\n\n/**\n * Returns true if the document is in fullscreen mode.\n *\n * @returns {boolean}\n */\nexport function isFullscreenActive() {\n const fullscreenElement = getFullscreenElement();\n return fullscreenElement !== null && fullscreenElement !== undefined;\n}\n\n/**\n * Exits fullscreen mode.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/exitFullscreen\n */\nexport function exitFullscreen() {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n}\n\n/**\n * Requests fullscreen mode for the given element\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen\n */\nexport function requestFullscreen(element) {\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n }\n}\n\n/**\n * Returns true if fullscreen mode is allowed on this device and document.\n *\n * @returns {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenEnabled\n */\nexport function fullscreenAllowed() {\n return (document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullScreenEnabled);\n}\n\n/**\n * jQuery-style binding to a fullscreenchange event.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenchange_event\n */\nexport function bindFullscreenChangeListener(\n data, fullscreenchangeListener\n) {\n const event = 'fullscreenchange ';\n const vendor_prefixes = [\n 'webkit',\n 'moz',\n 'ms'\n ];\n const all_events = (event + vendor_prefixes.join(event) + event).trim();\n $(document).on(all_events, data, fullscreenchangeListener);\n}\n\n/**\n * Returns true if current device is mobile\n *\n * @returns {boolean}\n */\nexport function isMobile() {\n return (typeof window.orientation !== 'undefined') || (navigator.userAgent.indexOf('IEMobile') !== -1);\n}\n","var 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]() || non[METHOD_NAME]() != non || 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"],"names":["isMobile","EVENT_NAMESPACE","jQuery","extend","BookReader","defaultOptions","enableVendorFullscreenPlugin","prototype","setup","super_","options","call","isVendorFullscreenActive","getInitialMode","params","nextMode","constMode1up","init","fullscreenAllowed","bindFullscreenChangeListener","e","data","resize","updateBrClasses","cboxOverlay","$","cbox","isFullscreenActive","$fullscreen","getFullscreenElement","append","document","body","enterFullWindow","refs","$brContainer","css","windowWidth","window","width","onePageMinBreakpoint","switchMode","jumpToIndex","currentIndex","animate","opacity","on","keyCode","exitFullScreen","exitFullWindow","off","isFullscreen","toggleFullscreen","exitFullscreen","requestFullscreen","$br","util","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","undefined","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","element","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullScreenEnabled","fullscreenchangeListener","event","vendor_prefixes","all_events","join","trim","orientation","navigator","userAgent","indexOf"],"sourceRoot":""}