@internetarchive/bookreader 5.0.0-118 → 5.0.0-119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BookReader/474.js.map +1 -1
- package/BookReader/BookReader.css +1 -1
- package/BookReader/ia-bookreader.js +1886 -0
- package/BookReader/{BookReader.js.LICENSE.txt → ia-bookreader.js.LICENSE.txt} +6 -0
- package/BookReader/ia-bookreader.js.map +1 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +2 -2
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.experiments.js +1 -1
- package/BookReader/plugins/plugin.experiments.js.map +1 -1
- package/BookReader/plugins/plugin.iframe.js +1 -1
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +1 -1
- package/BookReader/plugins/plugin.iiif.js.map +1 -1
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +1 -63
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.translate.js +1 -197
- package/BookReader/plugins/plugin.translate.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -1
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/plugins/translator-worker.js.map +1 -1
- package/BookReader/webcomponents-bundle.js.map +1 -1
- package/dist/esm/ia-bookreader.js +3 -0
- package/{BookReader/ia-bookreader-bundle.js.LICENSE.txt → dist/esm/ia-bookreader.js.LICENSE.txt} +1 -3
- package/dist/esm/ia-bookreader.js.map +1 -0
- package/dist/esm/plugins/plugin.archive_analytics.js +2 -0
- package/dist/esm/plugins/plugin.archive_analytics.js.map +1 -0
- package/dist/esm/plugins/plugin.autoplay.js +2 -0
- package/dist/esm/plugins/plugin.autoplay.js.map +1 -0
- package/dist/esm/plugins/plugin.chapters.js +2 -0
- package/dist/esm/plugins/plugin.chapters.js.map +1 -0
- package/dist/esm/plugins/plugin.experiments.js +2 -0
- package/dist/esm/plugins/plugin.experiments.js.map +1 -0
- package/dist/esm/plugins/plugin.iframe.js +2 -0
- package/dist/esm/plugins/plugin.iframe.js.map +1 -0
- package/dist/esm/plugins/plugin.iiif.js +2 -0
- package/dist/esm/plugins/plugin.iiif.js.map +1 -0
- package/dist/esm/plugins/plugin.resume.js +2 -0
- package/dist/esm/plugins/plugin.resume.js.map +1 -0
- package/dist/esm/plugins/plugin.search.js +2 -0
- package/dist/esm/plugins/plugin.search.js.map +1 -0
- package/dist/esm/plugins/plugin.text_selection.js +2 -0
- package/dist/esm/plugins/plugin.text_selection.js.map +1 -0
- package/dist/esm/plugins/plugin.translate.js +2 -0
- package/dist/esm/plugins/plugin.translate.js.map +1 -0
- package/dist/esm/plugins/plugin.tts.js +2 -0
- package/dist/esm/plugins/plugin.tts.js.map +1 -0
- package/dist/esm/plugins/plugin.url.js +2 -0
- package/dist/esm/plugins/plugin.url.js.map +1 -0
- package/dist/esm/plugins/plugin.vendor-fullscreen.js +2 -0
- package/dist/esm/plugins/plugin.vendor-fullscreen.js.map +1 -0
- package/package.json +19 -13
- package/src/BookReader/options.js +1 -1
- package/src/BookReader/utils/SelectionObserver.js +19 -2
- package/src/ia-bookreader/ia-bookreader.js +12 -3
- package/src/plugins/search/view.js +1 -1
- package/src/plugins/translate/plugin.translate.js +3 -2
- package/BookReader/BookReader.js +0 -3
- package/BookReader/BookReader.js.map +0 -1
- package/BookReader/ia-bookreader-bundle.js +0 -1886
- package/BookReader/ia-bookreader-bundle.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[623];export const __webpack_esm_modules__={6869:(e,n,t)=>{t.d(n,{S:()=>i});class i{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},5473:(e,n,t)=>{t.d(n,{c:()=>r}),t(3792),t(7495),t(2953);var i=t(6869);function o(e,n,t){return(n=function(e){var n=function(e){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof n?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const a=window.BookReader;class r extends i.S{constructor(){super(...arguments),o(this,"options",{enabled:!0,debug:!1}),o(this,"_prevFragment",null)}init(){this.options.enabled&&this.br.bind(a.eventNames.fragmentChange,()=>this.sendFragmentChange())}sendFragmentChange(){if(!window.archive_analytics)return;const e=this._prevFragment,n=this.br.paramsFromCurrent(),t=this.br.fragmentFromParams(n);if(e!=t){var i;const e={bookreader:"user_changed_view",itemid:this.br.bookId,cache_bust:Math.random(),offsite:1,details:0};try{e.offsite=window.top.location.hostname.match(/\.archive.org$/)?0:1,e.details=!e.offsite&&window.top.location.pathname.match(/^\/details\//)?1:0}catch(e){}window.archive_analytics.send_ping(e,null,"augment_for_ao_site");const n=null!==(i=this.br.options.lendingInfo)&&void 0!==i&&i.loanId?{loanId:this.br.options.lendingInfo.loanId}:{};window.archive_analytics.send_event("BookReader","UserChangedView",window.location.pathname,n),this._prevFragment=t}}sendEvent(e,n,t,i){this.options.enabled&&(this.options.debug&&console.log("archiveAnalyticsSendEvent",arguments,window.archive_analytics),window.archive_analytics&&(i=i||{},"number"==typeof t&&(i.ev=t),window.archive_analytics.send_event(e,n,null,i)))}}null==a||a.registerPlugin("archiveAnalytics",r)}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});const n=e(5473).c;export{n as ArchiveAnalyticsPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.archive_analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.archive_analytics.js","mappings":"6GAMO,MAAMA,EAIXC,WAAAA,CAAYC,GAEVC,KAAKD,GAAKA,EAEVC,KAAKC,OACP,CAMAC,KAAAA,CAAMD,GACJD,KAAKC,QAAUE,OAAOC,OAAO,CAAC,EAAGJ,KAAKC,QAASA,EACjD,CAGAI,IAAAA,GAAQ,CAORC,uBAAAA,CAAwBC,GACxB,CAOAC,iBAAAA,CAAkBC,GAClB,CAGAC,uBAAAA,GAA2B,CAK3BC,YAAAA,CAAaC,GAAU,E,ieC/CzB,MAAMC,EAAmEC,OAAOD,WAGzE,MAAME,UAA+BlB,EAAAA,EAAiBC,WAAAA,GAAAkB,SAAAC,WAAAC,EAAAlB,KAAA,UACjD,CACRmB,SAAS,EAETC,OAAO,IAGTF,EAAAlB,KAAA,gBACgB,KAAI,CAGpBK,IAAAA,GACML,KAAKC,QAAQkB,SACfnB,KAAKD,GAAGsB,KAAKR,EAAWS,WAAWC,eAAgB,IAAMvB,KAAKwB,qBAElE,CAGAA,kBAAAA,GACE,IAAKV,OAAOW,kBACV,OAGF,MAAMC,EAAe1B,KAAK2B,cAEpBC,EAAS5B,KAAKD,GAAG8B,oBACjBC,EAAc9B,KAAKD,GAAGgC,mBAAmBH,GAE/C,GAAIF,GAAgBI,EAAa,KAAAE,EAC/B,MAAMC,EAAS,CACbC,WAAY,oBACZC,OAAQnC,KAAKD,GAAGqC,OAChBC,WAAYC,KAAKC,SAGnBN,QAAiB,EACjBA,QAAiB,GACjB,IACEA,EAAOO,QAAU1B,OAAO2B,IAAIC,SAASC,SAASC,MAAM,kBAChD,EACA,EACJX,EAAOY,SACJZ,EAAOO,SAAW1B,OAAO2B,IAAIC,SAASI,SAASF,MAAM,gBAClD,EACA,CACR,CAAE,MAAOG,GAAK,CAIdjC,OAAOW,kBAAkBuB,UAAUf,EAAQ,KAAM,uBAGjD,MAAMgB,EAAmD,QAA3BjB,EAAAhC,KAAKD,GAAGE,QAAQiD,mBAAW,IAAAlB,GAA3BA,EAA6BmB,OACvD,CAAEA,OAAQnD,KAAKD,GAAGE,QAAQiD,YAAYC,QACtC,CAAC,EACLrC,OAAOW,kBAAkB2B,WAAW,aAAc,kBAAmBtC,OAAO4B,SAASI,SAAUG,GAE/FjD,KAAK2B,cAAgBG,CACvB,CACF,CASAuB,SAAAA,CAAUC,EAAUC,EAAQC,EAAOP,GAC5BjD,KAAKC,QAAQkB,UAEdnB,KAAKC,QAAQmB,OACfqC,QAAQC,IAAI,4BAA6BzC,UAAWH,OAAOW,mBAGxDX,OAAOW,oBAEZwB,EAAwBA,GAAyB,CAAC,EAC5B,iBAAVO,IACVP,EAAsBU,GAAKH,GAE7B1C,OAAOW,kBAAkB2B,WAAWE,EAAUC,EAAQ,KAAMN,IAC9D,EAGFpC,SAAAA,EAAY+C,eAAe,mBAAoB7C,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.archive_analytics.js"],"sourcesContent":["// @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\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class ArchiveAnalyticsPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** Provide a means of debugging, cause otherwise it's impossible to test locally */\n debug: false,\n }\n\n /** @type {string} */\n _prevFragment = null;\n\n /** @override */\n init() {\n if (this.options.enabled) {\n this.br.bind(BookReader.eventNames.fragmentChange, () => this.sendFragmentChange());\n }\n }\n\n /** @private */\n sendFragmentChange() {\n if (!window.archive_analytics) {\n return;\n }\n\n const prevFragment = this._prevFragment;\n\n const params = this.br.paramsFromCurrent();\n const newFragment = this.br.fragmentFromParams(params);\n\n if (prevFragment != newFragment) {\n const values = {\n bookreader: \"user_changed_view\",\n itemid: this.br.bookId,\n cache_bust: Math.random(),\n };\n // EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!\n values.offsite = 1;\n values.details = 0;\n try {\n values.offsite = window.top.location.hostname.match(/\\.archive.org$/)\n ? 0\n : 1;\n values.details =\n !values.offsite && window.top.location.pathname.match(/^\\/details\\//)\n ? 1\n : 0;\n } catch (e) { }\n // avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!\n\n // Send bookreader ping\n window.archive_analytics.send_ping(values, null, \"augment_for_ao_site\");\n\n // Also send tracking event ping\n const additionalEventParams = this.br.options.lendingInfo?.loanId\n ? { loanId: this.br.options.lendingInfo.loanId }\n : {};\n window.archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);\n\n this._prevFragment = newFragment;\n }\n }\n\n /**\n * Sends a tracking \"Event\". See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events\n * @param {string} category\n * @param {string} action\n * @param {number} [value] (must be an int)\n * @param {Object} [additionalEventParams]\n */\n sendEvent(category, action, value, additionalEventParams) {\n if (!this.options.enabled) return;\n\n if (this.options.debug) {\n console.log(\"archiveAnalyticsSendEvent\", arguments, window.archive_analytics);\n }\n\n if (!window.archive_analytics) return;\n\n additionalEventParams = additionalEventParams || {};\n if (typeof (value) == 'number') {\n additionalEventParams.ev = value;\n }\n window.archive_analytics.send_event(category, action, null, additionalEventParams);\n }\n}\n\nBookReader?.registerPlugin('archiveAnalytics', ArchiveAnalyticsPlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","ArchiveAnalyticsPlugin","super","arguments","_defineProperty","enabled","debug","bind","eventNames","fragmentChange","sendFragmentChange","archive_analytics","prevFragment","_prevFragment","params","paramsFromCurrent","newFragment","fragmentFromParams","_this$br$options$lend","values","bookreader","itemid","bookId","cache_bust","Math","random","offsite","top","location","hostname","match","details","pathname","e","send_ping","additionalEventParams","lendingInfo","loanId","send_event","sendEvent","category","action","value","console","log","ev","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[393];export const __webpack_esm_modules__={6869:(t,e,i)=>{i.d(e,{S:()=>s});class s{constructor(t){this.br=t,this.options}setup(t){this.options=Object.assign({},this.options,t)}init(){}_configurePageContainer(t){}_configureToolbar(t){}_bindNavigationHandlers(){}extendNavBar(t){}}},9423:(t,e,i)=>{i.d(e,{L:()=>p}),i(3792),i(7495),i(2953),i(8408);var s=i(5312),o=i(9880),r=i(6869);function n(t,e,i){return(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}class p extends r.S{constructor(){super(...arguments),n(this,"options",{enabled:!0,flipSpeed:1500,flipDelay:5e3,urlParams:!0}),n(this,"timer",null)}init(){if(this.options.enabled&&(this.br.bind(s.q.stop,()=>this.stop()),this.options.urlParams)){const t=new URLSearchParams(window.location.search);t.get("flipSpeed")&&(this.options.flipSpeed=(0,o.Ve)(t.get("flipSpeed"))||this.options.flipSpeed),t.get("flipDelay")&&(this.options.flipDelay=(0,o.Ve)(t.get("flipDelay"))||this.options.flipDelay),"1"===t.get("autoflip")&&this.toggle()}}_bindNavigationHandlers(){if(!this.options.enabled)return;const t=this.br.$(".BRicon");t.filter(".play").on("click",()=>(this.toggle(),!1)),t.filter(".pause").on("click",()=>(this.toggle(),!1))}toggle(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.options.enabled)return;Object.assign(this.options,t),this.br.trigger(s.q.stop);let e=!1;this.br.constMode2up!=this.br.mode&&(e=!0,this.br.switchMode(this.br.constMode2up)),null==this.timer?("rl"==this.br.pageProgression&&e||this.br.next({triggerStop:!1,flipSpeed:this.options.flipSpeed}),this.br.$(".play").hide(),this.br.$(".pause").show(),this.timer=setInterval(()=>{this.br.animating||(Math.max(this.br.twoPage.currentIndexL,this.br.twoPage.currentIndexR)>=this.br.book.getNumLeafs()-1?this.br.prev({triggerStop:!1,flipSpeed:this.options.flipSpeed}):this.br.next({triggerStop:!1,flipSpeed:this.options.flipSpeed}))},(0,o.Ve)(this.options.flipDelay))):this.stop()}stop(){this.options.enabled&&null!=this.timer&&(clearInterval(this.timer),this.br.$(".pause").hide(),this.br.$(".play").show(),this.timer=null)}}const l=window.BookReader;null==l||l.registerPlugin("autoplay",p)}};import{__webpack_require__ as t}from"../ia-bookreader.js";t.C({__webpack_esm_ids__,__webpack_esm_modules__});const e=t(9423).L;export{e as AutoplayPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.autoplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.autoplay.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.autoplay.js"],"sourcesContent":["// @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\nimport { EVENTS } from \"../BookReader/events.js\";\nimport { parseAnimationSpeed } from \"../BookReader/utils.js\";\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\n\n/**\n * Plugin which adds an autoplay feature. Useful for kiosk situations.\n */\nexport class AutoplayPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /**\n * @type {number | 'fast' | 'slow'}\n * How quickly the flip animation should run.\n **/\n flipSpeed: 1500,\n /** How long to pause on each page between flips */\n flipDelay: 5000,\n /** Allow controlling the autoflip/speed/delay from the url */\n urlParams: true,\n }\n\n timer = null;\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.br.bind(EVENTS.stop, () => this.stop());\n\n if (this.options.urlParams) {\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('flipSpeed')) {\n this.options.flipSpeed = parseAnimationSpeed(urlParams.get('flipSpeed')) || this.options.flipSpeed;\n }\n if (urlParams.get('flipDelay')) {\n this.options.flipDelay = parseAnimationSpeed(urlParams.get('flipDelay')) || this.options.flipDelay;\n }\n if (urlParams.get('autoflip') === '1') {\n this.toggle();\n }\n }\n }\n\n /** @override */\n _bindNavigationHandlers() {\n if (!this.options.enabled) return;\n\n const jIcons = this.br.$('.BRicon');\n\n jIcons.filter('.play').on('click', () => {\n this.toggle();\n return false;\n });\n\n jIcons.filter('.pause').on('click', () => {\n this.toggle();\n return false;\n });\n }\n\n /**\n * Starts autoplay mode\n * @param {object} overrides\n * @param {number} overrides.flipSpeed\n * @param {number} overrides.flipDelay\n */\n toggle(overrides = null) {\n if (!this.options.enabled) return;\n\n Object.assign(this.options, overrides);\n this.br.trigger(EVENTS.stop);\n\n let bComingFrom1up = false;\n if (this.br.constMode2up != this.br.mode) {\n bComingFrom1up = true;\n this.br.switchMode(this.br.constMode2up);\n }\n\n if (null == this.timer) {\n // $$$ Draw events currently cause layout problems when they occur during animation.\n // There is a specific problem when changing from 1-up immediately to autoplay in RTL so\n // we workaround for now by not triggering immediate animation in that case.\n // See https://bugs.launchpad.net/gnubook/+bug/328327\n if (('rl' == this.br.pageProgression) && bComingFrom1up) {\n // don't flip immediately -- wait until timer fires\n } else {\n // flip immediately\n this.br.next({ triggerStop: false, flipSpeed: this.options.flipSpeed });\n }\n\n this.br.$('.play').hide();\n this.br.$('.pause').show();\n this.timer = setInterval(() => {\n if (this.br.animating) return;\n\n if (Math.max(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR) >= this.br.book.getNumLeafs() - 1) {\n this.br.prev({ triggerStop: false, flipSpeed: this.options.flipSpeed }); // $$$ really what we want?\n } else {\n this.br.next({ triggerStop: false, flipSpeed: this.options.flipSpeed });\n }\n }, parseAnimationSpeed(this.options.flipDelay));\n } else {\n this.stop();\n }\n }\n\n /**\n * Stop autoplay mode, allowing animations to finish\n */\n stop() {\n if (!this.options.enabled) return;\n\n if (null != this.timer) {\n clearInterval(this.timer);\n this.br.$('.pause').hide();\n this.br.$('.play').show();\n this.timer = null;\n }\n }\n}\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\nBookReader?.registerPlugin('autoplay', AutoplayPlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","AutoplayPlugin","super","arguments","_defineProperty","enabled","flipSpeed","flipDelay","urlParams","bind","EVENTS","stop","URLSearchParams","window","location","search","get","parseAnimationSpeed","toggle","jIcons","$","filter","on","overrides","length","undefined","trigger","bComingFrom1up","constMode2up","mode","switchMode","timer","pageProgression","next","triggerStop","hide","show","setInterval","animating","Math","max","twoPage","currentIndexL","currentIndexR","book","getNumLeafs","prev","clearInterval","BookReader","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"@internetarchive/icon-toc/icon-toc.js";export const __webpack_esm_ids__=[858];export const __webpack_esm_modules__={706:(e,t,r)=>{var n=r(350).PROPER,i=r(9039),o=r(7452);e.exports=function(e){return i(function(){return!!o[e]()||"
"!=="
"[e]()||n&&o[e].name!==e})}},3802:(e,t,r)=>{var n=r(9504),i=r(7750),o=r(655),s=r(7452),a=n("".replace),c=RegExp("^["+s+"]+"),l=RegExp("(^|[^"+s+"])["+s+"]+$"),d=function(e){return function(t){var r=o(i(t));return 1&e&&(r=a(r,c,"")),2&e&&(r=a(r,l,"$1")),r}};e.exports={start:d(1),end:d(2),Bq:d(3)}},7452:e=>{e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},2762:(e,t,r)=>{var n=r(6518),i=r(3802).Bq;n({target:"String",proto:!0,forced:r(706)("trim")},{trim:function(){return i(this)}})},6869:(e,t,r)=>{r.d(t,{S:()=>n});class n{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},113:(e,t,r)=>{r.d(t,{F:()=>R,g:()=>O}),r(9463),r(3792),r(4490),r(3362),r(7495),r(2953),r(8408);var n,i,o,s,a,c,l=r(7597),d=r(6054),p=r(6248),u=r(6106),h=r(6869),f=r(8965),m=r(9880),y=r(3583),b=r(1669);function v(){v=function(){return e};var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!w(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(a)||a);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d<l.length;d++)this.addElementPlacement(l[d],t);r.push.apply(r,l)}}return{element:e,finishers:n,extras:r}},decorateConstructor:function(e,t){for(var r=[],n=t.length-1;n>=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s<e.length-1;s++)for(var a=s+1;a<e.length;a++)if(e[s].key===e[a].key&&e[s].placement===e[a].placement)throw new TypeError("Duplicated element ("+e[s].key+")")}}return{elements:e,finishers:r}},fromElementDescriptor:function(e){var t={kind:e.kind,key:e.key,placement:e.placement,descriptor:e.descriptor};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),"field"===e.kind&&(t.initializer=e.initializer),t},toElementDescriptors:function(e){if(void 0!==e)return(t=e,function(e){if(Array.isArray(e))return e}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?P(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map(function(e){var t=this.toElementDescriptor(e);return this.disallowProperty(e,"finisher","An element descriptor"),this.disallowProperty(e,"extras","An element descriptor"),t},this);var t},toElementDescriptor:function(e){var t=e.kind+"";if("method"!==t&&"field"!==t)throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "'+t+'"');var r=T(e.key),n=e.placement+"";if("static"!==n&&"prototype"!==n&&"own"!==n)throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "'+n+'"');var i=e.descriptor;this.disallowProperty(e,"elements","An element descriptor");var o={kind:t,key:r,placement:n,descriptor:Object.assign({},i)};return"field"!==t?this.disallowProperty(e,"initializer","A method descriptor"):(this.disallowProperty(i,"get","The property descriptor of a field descriptor"),this.disallowProperty(i,"set","The property descriptor of a field descriptor"),this.disallowProperty(i,"value","The property descriptor of a field descriptor"),o.initializer=e.initializer),o},toElementFinisherExtras:function(e){return{element:this.toElementDescriptor(e),finisher:E(e,"finisher"),extras:this.toElementDescriptors(e.extras)}},fromClassDescriptor:function(e){var t={kind:"class",elements:e.map(this.fromElementDescriptor,this)};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),t},toClassDescriptor:function(e){var t=e.kind+"";if("class"!==t)throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "'+t+'"');this.disallowProperty(e,"key","A class descriptor"),this.disallowProperty(e,"placement","A class descriptor"),this.disallowProperty(e,"descriptor","A class descriptor"),this.disallowProperty(e,"initializer","A class descriptor"),this.disallowProperty(e,"extras","A class descriptor");var r=E(e,"finisher");return{elements:this.toElementDescriptors(e.elements),finisher:r}},runClassFinishers:function(e,t){for(var r=0;r<t.length;r++){var n=(0,t[r])(e);if(void 0!==n){if("function"!=typeof n)throw new TypeError("Finishers must return a constructor.");e=n}}return e},disallowProperty:function(e,t,r){if(void 0!==e[t])throw new TypeError(r+" can't have a ."+t+" property.")}};return e}function g(e){var t,r=T(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function k(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function w(e){return e.decorators&&e.decorators.length}function _(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function E(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function x(){return x="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=C(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(arguments.length<3?e:r):i.value}},x.apply(null,arguments)}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function I(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function j(e,t,r){return(t=T(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function T(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}const A=window.BookReader;class O extends h.S{constructor(){super(...arguments),j(this,"options",{enabled:!0,openLibraryHost:"https://openlibrary.org",openLibraryId:"",internetArchiveId:"",olHost:"https://openlibrary.org",bookId:"{{bookId}}"}),j(this,"_tocEntries",void 0),j(this,"_chaptersPanel",void 0)}setup(e){super.setup(e),this.options.internetArchiveId=this.options.internetArchiveId||this.options.bookId,this.options.openLibraryHost=this.options.openLibraryHost||this.options.olHost}async init(){var e;if(!this.options.enabled||"embed"===this.br.ui)return;let t=null;if(null!==(e=this.br.options.table_of_contents)&&void 0!==e&&e.length)t=this.br.options.table_of_contents;else{var r;const e=await this.getOpenLibraryRecord();null!=e&&null!==(r=e.table_of_contents)&&void 0!==r&&r.length&&(t=e.table_of_contents)}t&&(this._tocEntries=t.map(e=>Object.assign({},e,{pageIndex:"number"==typeof e.page_index?e.page_index:"number"==typeof e.leaf?this.br.book.leafNumToIndex(e.leaf):e.pagenum?this.br.book.getPageIndex(e.pagenum):void 0})),this.br.shell||await(0,m.Fg)(window,"BookReader:PostInit"),this._render(),this.br.bind(A.eventNames.pageChanged,()=>this._updateCurrent()))}_render(){this.br.shell.menuProviders.chapters={id:"chapters",icon:(0,l.qy)(n||(n=I(['<ia-icon-toc aria-hidden="true" role="presentation" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon-toc>']))),label:"Table of Contents",component:(0,l.qy)(i||(i=I(['<br-chapters-panel\n .contents="','"\n .jumpToPage="','"\n @connected="','"\n />'])),this._tocEntries,e=>{this._updateCurrent(e),this.br.jumpToIndex(e,{ariaLive:!0})},e=>{this._chaptersPanel=e.target,this._updateCurrent()})},this.br.shell.addMenuShortcut("chapters"),this.br.shell.updateMenuContents(),this._tocEntries.forEach((e,t)=>this._renderMarker(e,t))}_renderMarker(e,t){if(null==e.pageIndex)return;const r=[e.label,e.title].filter(e=>e).join(" ")||"Chapter ".concat(t+1),n=A.util.cssPercentage(e.pageIndex,this.br.book.getNumLeafs()-1);b("<div></div>").append(b("<div />").text(r).append(b('<div class="BRchapterPage" />').text(this.br.book.getPageName(e.pageIndex)))).addClass("BRchapter").css({left:n}).appendTo(this.br.$(".BRnavline")).on("mouseenter",e=>{const t=e.currentTarget,r=t.querySelector("div"),n=r.getBoundingClientRect(),i=t.getBoundingClientRect(),o=2*parseInt(getComputedStyle(r).paddingLeft);n.x-o<0&&r.style.setProperty("transform","translateX(-".concat(i.left-o,"px)")),this.br.$(".BRsearch,.BRchapter").removeClass("front"),b(e.target).addClass("front")}).on("mouseleave",e=>b(e.target).removeClass("front")).on("click",()=>{this._updateCurrent(e.pageIndex),this.br.jumpToIndex(e.pageIndex,{ariaLive:!0})}),this.br.$(".BRchapter, .BRsearch").each((e,t)=>{const r=b(t);r.on("mouseenter",()=>r.addClass("front")).on("mouseleave",()=>r.removeClass("front"))})}async getOpenLibraryRecord(){const e=(0,f.gT)(this.options.openLibraryHost,this.br.options.vars);if(this.options.openLibraryId){const t=(0,f.gT)(this.options.openLibraryId,this.br.options.vars);return await b.ajax({url:"".concat(e,"/books/").concat(t,".json")})}if(this.options.internetArchiveId){var t;const r=(0,f.gT)(this.options.internetArchiveId,this.br.options.vars),n="".concat(e,"/query.json?type=/type/edition&*=&");let i=await b.ajax({url:n+new URLSearchParams({ocaid:r,limit:"1"})});return i&&i.length||(i=await b.ajax({url:n+new URLSearchParams({source_records:"ia:".concat(r),limit:"1"})})),null===(t=i)||void 0===t?void 0:t[0]}return null}_updateCurrent(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2==this.br.mode?Math.max(...this.br.displayedIndices):this.br.firstIndex;const t=this._tocEntries.filter(e=>null!=e.pageIndex).reverse(),r=t[t.findIndex(t=>t.pageIndex<=e)];this._chaptersPanel&&(this._chaptersPanel.currentChapter=r)}}null==A||A.registerPlugin("chapters",O);let R=(S=[(0,d.EM)("br-chapters-panel")],D=l.WF,B=v(),L=function(e,t){class r extends t{constructor(t){super(),e(this),this.contents=t}}return{F:r,d:[{kind:"field",decorators:[(0,d.MZ)({type:Array})],key:"contents",value:()=>[]},{kind:"field",decorators:[(0,d.MZ)({type:Object})],key:"currentChapter",value:()=>({})},{kind:"field",key:"jumpToPage",value:()=>()=>{}},{kind:"method",key:"render",value:function(){return(0,l.qy)(o||(o=I(["\n <ol>\n ","\n </ol>\n "])),this.contents.map(e=>this.renderTOCEntry(e)))}},{kind:"method",key:"renderTOCEntry",value:function(e){const t=[e.label,e.title].filter(e=>e).join(" "),r=null!=e.pageIndex;return(0,l.qy)(s||(s=I(['\n <li\n class="\n BRtable-contents-el\n ',"\n ",'\n "\n style="','"\n data-event-click-tracking="','"\n @click="','"\n >\n ',"\n ","\n </li>"])),r?"clickable":"",e==this.currentChapter?"current":"",(0,u.W)({marginLeft:10*(e.level-1)+"px"}),(0,p.J)(r?"BRTOCPanel|GoToChapter":void 0),()=>this.jumpToPage(e.pageIndex),t,e.pagenum?(0,l.qy)(a||(a=I(['\n <br />\n <span class="BRTOCElementPage">Page ',"</span>\n "])),e.pagenum):l.s6)}},{kind:"method",key:"connectedCallback",value:function(){var e,t,n,i,o;(e=r,t="connectedCallback",n=this,o=x(C(1&(i=3)?e.prototype:e),t,n),2&i&&"function"==typeof o?function(e){return o.apply(n,e)}:o)([]),this.dispatchEvent(new CustomEvent("connected"))}},{kind:"method",key:"updated",value:function(e){if(e.has("currentChapter")){const e=this.shadowRoot.querySelector("li.current");e&&(0,y.N)(e,{block:"nearest",behavior:"smooth"})}}},{kind:"get",static:!0,key:"styles",value:function(){return(0,l.AH)(c||(c=I(["\n ol {\n padding: 0;\n margin: 0;\n margin-right: 5px;\n }\n li {\n padding: 10px;\n overflow: hidden;\n border-radius: 4px;\n }\n li.clickable {\n font-weight: normal;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n li.clickable:not(.current):hover {\n background-color: rgba(255,255,255, 0.05);\n }\n\n li.current {\n background-color: rgba(255,255,255,0.9);\n color: #333;\n }\n\n .BRTOCElementPage {\n font-size: 0.85em;\n opacity: .8;\n }"])))}}]}}(function(e){B.initializeInstanceElements(e,z.elements)},D),z=B.decorateClass(function(e){for(var t=[],r=function(e){return"method"===e.kind&&e.key===o.key&&e.placement===o.placement},n=0;n<e.length;n++){var i,o=e[n];if("method"===o.kind&&(i=t.find(r)))if(_(o.descriptor)||_(i.descriptor)){if(w(o)||w(i))throw new ReferenceError("Duplicated methods ("+o.key+") can't be decorated.");i.descriptor=o.descriptor}else{if(w(o)){if(w(i))throw new ReferenceError("Decorators can't be placed on different accessors with for the same property ("+o.key+").");i.decorators=o.decorators}k(o,i)}else t.push(o)}return t}(L.d.map(g)),S),B.initializeClassElements(L.F,z.elements),B.runClassFinishers(L.F,z.finishers));var S,D,B,L,z},8965:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e){const t=e.match(/\S+/g);return t?t.length:0}function o(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s;return null==e?void 0:e.replace(/\{\{([^}]*?)\}\}/g,(e,o)=>{if(!o)return e;const s=function(e){if(Array.isArray(e))return e}(l=o.split("|").map(e=>e.trim()))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),a=s[0],c=n(s).slice(1);var l;if(!(a in r)&&!(a in t))return e;const d=a in r?r[a]:a in t?t[a]:null;return c.map(e=>i[e]).reduce((e,t)=>t(e),d&&d.toString())})}r.d(t,{gT:()=>o,rj:()=>i}),r(9463),r(3792),r(2712),r(7495),r(5440),r(2762),r(2953);const s={urlencode:encodeURIComponent}}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});var t=e(113);const r=t.F,n=t.g;export{r as BRChaptersPanel,n as ChaptersPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.chapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.chapters.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/internals/string-trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/whitespaces.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.chapters.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 uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\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\nimport { css, html, LitElement, nothing } from \"lit\";\nimport { customElement, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport '@internetarchive/icon-toc/icon-toc.js';\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\nimport { applyVariables } from \"../util/strings.js\";\nimport { promisifyEvent } from \"../BookReader/utils.js\";\nimport { singleScrollIntoView } from \"../util/dom.js\";\n/** @typedef {import('@/src/BookReader/BookModel.js').PageIndex} PageIndex */\n/** @typedef {import('@/src/BookReader/BookModel.js').PageString} PageString */\n/** @typedef {import('@/src/BookReader/BookModel.js').LeafNum} LeafNum */\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\n/**\n * Plugin for chapter markers in BookReader. Fetches from openlibrary.org\n * Could be forked, or extended to alter behavior\n */\nexport class ChaptersPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n\n /**\n * The Open Library host to fetch/query Open Library.\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n openLibraryHost: 'https://openlibrary.org',\n\n /**\n * The Open Library edition to fetch the table of contents from.\n * E.g. 'OL12345M'\n *\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n openLibraryId: '',\n\n /**\n * The Internet Archive identifier to fetch the Open Library table\n * of contents from.\n * E.g. 'goody'\n *\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n internetArchiveId: '',\n\n /**\n * @deprecated\n * Old name for openLibraryHost\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n olHost: 'https://openlibrary.org',\n\n /**\n * @deprecated\n * Old name for internetArchiveId\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n bookId: '{{bookId}}',\n }\n\n /** @type {TocEntry[]} */\n _tocEntries;\n\n /** @type {BRChaptersPanel} */\n _chaptersPanel;\n\n /** @override */\n setup(options) {\n super.setup(options);\n this.options.internetArchiveId = this.options.internetArchiveId || this.options.bookId;\n this.options.openLibraryHost = this.options.openLibraryHost || this.options.olHost;\n }\n\n /** @override Extend to call Open Library for TOC */\n async init() {\n if (!this.options.enabled || this.br.ui === 'embed') {\n return;\n }\n\n let rawTableOfContents = null;\n // Prefer explicit TOC if specified\n if (this.br.options.table_of_contents?.length) {\n rawTableOfContents = this.br.options.table_of_contents;\n } else {\n // Otherwise fetch from OL\n const olEdition = await this.getOpenLibraryRecord();\n if (olEdition?.table_of_contents?.length) {\n rawTableOfContents = olEdition.table_of_contents;\n }\n }\n\n if (rawTableOfContents) {\n this._tocEntries = rawTableOfContents\n .map(rawTOCEntry => (Object.assign({}, rawTOCEntry, {\n pageIndex: (\n typeof rawTOCEntry.page_index === 'number' ? rawTOCEntry.page_index :\n typeof(rawTOCEntry.leaf) == 'number' ? this.br.book.leafNumToIndex(rawTOCEntry.leaf) :\n rawTOCEntry.pagenum ? this.br.book.getPageIndex(rawTOCEntry.pagenum) :\n undefined\n ),\n })));\n if (!this.br.shell) {\n await promisifyEvent(window, 'BookReader:PostInit');\n }\n this._render();\n this.br.bind(BookReader.eventNames.pageChanged, () => this._updateCurrent());\n }\n }\n\n /**\n * Update the table of contents based on array of TOC entries.\n */\n _render() {\n this.br.shell.menuProviders['chapters'] = {\n id: 'chapters',\n icon: html`<ia-icon-toc aria-hidden=\"true\" role=\"presentation\" style=\"width: var(--iconWidth); height: var(--iconHeight);\"></ia-icon-toc>`,\n label: 'Table of Contents',\n component: html`<br-chapters-panel\n .contents=\"${this._tocEntries}\"\n .jumpToPage=\"${(pageIndex) => {\n this._updateCurrent(pageIndex);\n this.br.jumpToIndex(pageIndex, { ariaLive: true });\n }}\"\n @connected=\"${(e) => {\n this._chaptersPanel = e.target;\n this._updateCurrent();\n }}\"\n />`,\n };\n this.br.shell.addMenuShortcut('chapters');\n this.br.shell.updateMenuContents();\n this._tocEntries.forEach((tocEntry, i) => this._renderMarker(tocEntry, i));\n }\n\n /**\n * @param {TocEntry} tocEntry\n * @param {number} entryIndex\n */\n _renderMarker(tocEntry, entryIndex) {\n if (tocEntry.pageIndex == undefined) return;\n\n //creates a string with non-void tocEntry.label and tocEntry.title\n const chapterStr = [tocEntry.label, tocEntry.title]\n .filter(x => x)\n .join(' ') || `Chapter ${entryIndex + 1}`;\n\n const percentThrough = BookReader.util.cssPercentage(tocEntry.pageIndex, this.br.book.getNumLeafs() - 1);\n $(`<div></div>`)\n .append(\n $('<div />')\n .text(chapterStr)\n .append(\n $('<div class=\"BRchapterPage\" />')\n .text(this.br.book.getPageName(tocEntry.pageIndex)),\n ),\n )\n .addClass('BRchapter')\n .css({ left: percentThrough })\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", event => {\n // remove hover effect from other markers then turn on just for this\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('div');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n this.br.$('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", event => $(event.target).removeClass('front'))\n .on('click', () => {\n this._updateCurrent(tocEntry.pageIndex);\n this.br.jumpToIndex(tocEntry.pageIndex, { ariaLive: true });\n });\n\n this.br.$('.BRchapter, .BRsearch').each((i, el) => {\n const $el = $(el);\n $el\n .on(\"mouseenter\", () => $el.addClass('front'))\n .on(\"mouseleave\", () => $el.removeClass('front'));\n });\n }\n\n /**\n * This makes a call to OL API and calls the given callback function with the\n * response from the API.\n */\n async getOpenLibraryRecord() {\n const olHost = applyVariables(this.options.openLibraryHost, this.br.options.vars);\n\n if (this.options.openLibraryId) {\n const openLibraryId = applyVariables(this.options.openLibraryId, this.br.options.vars);\n return await $.ajax({ url: `${olHost}/books/${openLibraryId}.json` });\n }\n\n if (this.options.internetArchiveId) {\n const ocaid = applyVariables(this.options.internetArchiveId, this.br.options.vars);\n\n // Try looking up by ocaid first, then by source_record\n const baseQueryUrl = `${olHost}/query.json?type=/type/edition&*=&`;\n\n let data = await $.ajax({\n url: baseQueryUrl + new URLSearchParams({ ocaid, limit: '1' }),\n });\n\n if (!data || !data.length) {\n // try source_records\n data = await $.ajax({\n url: baseQueryUrl + new URLSearchParams({ source_records: `ia:${ocaid}`, limit: '1' }),\n });\n }\n\n return data?.[0];\n }\n\n return null;\n }\n\n /**\n * @private\n * Highlights the current chapter based on current page\n * @param {PageIndex} curIndex\n */\n _updateCurrent(\n curIndex = (this.br.mode == 2 ? Math.max(...this.br.displayedIndices) : this.br.firstIndex),\n ) {\n const tocEntriesIndexed = this._tocEntries.filter((el) => el.pageIndex != undefined).reverse();\n const currChapter = tocEntriesIndexed[\n // subtract one so that 2up shows the right label\n tocEntriesIndexed.findIndex((chapter) => chapter.pageIndex <= curIndex)\n ];\n if (this._chaptersPanel) {\n this._chaptersPanel.currentChapter = currChapter;\n }\n }\n}\nBookReader?.registerPlugin('chapters', ChaptersPlugin);\n\n/**\n * @typedef {Object} TocEntry\n * Table of contents entry as defined by Open Library, with some extra values for internal use\n * @property {number} [level]\n * @property {string} [label]\n * @property {string} [title]\n * @property {PageString} [pagenum]\n * @property {LeafNum} [leaf]\n * @property {number} [pageIndex] - Added\n *\n * @example {\n * \"pagenum\": \"17\",\n * \"level\": 1,\n * \"label\": \"CHAPTER I\",\n * \"title\": \"THE COUNTRY AND THE MISSION\"\n * }\n */\n\n@customElement('br-chapters-panel')\nexport class BRChaptersPanel extends LitElement {\n /** @type {TocEntry[]} */\n @property({ type: Array })\n contents = [];\n\n /** @type {TocEntry?} */\n @property({ type: Object })\n currentChapter = {};\n\n /** @type {(pageIndex: PageIndex) => void} */\n jumpToPage = () => {};\n\n /**\n * @param {TocEntry[]} contents\n */\n constructor(contents) {\n super();\n this.contents = contents;\n }\n\n render() {\n return html`\n <ol>\n ${this.contents.map(tocEntry => this.renderTOCEntry(tocEntry))}\n </ol>\n `;\n }\n\n /**\n * @param {TocEntry} tocEntry\n */\n renderTOCEntry(tocEntry) {\n const chapterTitle = [tocEntry.label, tocEntry.title]\n .filter(x => x)\n .join(' ');\n const clickable = tocEntry.pageIndex != undefined;\n // note the click-tracking won't work...\n return html`\n <li\n class=\"\n BRtable-contents-el\n ${clickable ? 'clickable' : ''}\n ${tocEntry == this.currentChapter ? 'current' : ''}\n \"\n style=\"${styleMap({marginLeft: (tocEntry.level - 1) * 10 + 'px'})}\"\n data-event-click-tracking=\"${ifDefined(clickable ? \"BRTOCPanel|GoToChapter\" : undefined)}\"\n @click=\"${() => this.jumpToPage(tocEntry.pageIndex)}\"\n >\n ${chapterTitle}\n ${tocEntry.pagenum ? html`\n <br />\n <span class=\"BRTOCElementPage\">Page ${tocEntry.pagenum}</span>\n ` : nothing}\n </li>`;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.dispatchEvent(new CustomEvent('connected'));\n }\n\n updated(changedProperties) {\n if (changedProperties.has('currentChapter')) {\n const currentEl = this.shadowRoot.querySelector('li.current');\n if (currentEl) {\n singleScrollIntoView(currentEl, {\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }\n }\n\n static get styles() {\n return css`\n ol {\n padding: 0;\n margin: 0;\n margin-right: 5px;\n }\n li {\n padding: 10px;\n overflow: hidden;\n border-radius: 4px;\n }\n li.clickable {\n font-weight: normal;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n li.clickable:not(.current):hover {\n background-color: rgba(255,255,255, 0.05);\n }\n\n li.current {\n background-color: rgba(255,255,255,0.9);\n color: #333;\n }\n\n .BRTOCElementPage {\n font-size: 0.85em;\n opacity: .8;\n }`;\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 * Count whitespace-delimited words in a string.\n * @param {string} text\n * @return {number}\n */\nexport function countWords(text) {\n const matches = text.match(/\\S+/g);\n return matches ? matches.length : 0;\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","__webpack_require__","fails","whitespaces","module","exports","METHOD_NAME","name","uncurryThis","requireObjectCoercible","toString","replace","ltrim","RegExp","rtrim","createMethod","TYPE","$this","string","start","end","Bq","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","this","BookReaderPlugin","constructor","br","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","ChaptersPlugin","super","arguments","_defineProperty","enabled","openLibraryHost","openLibraryId","internetArchiveId","olHost","bookId","_this$br$options$tabl","ui","rawTableOfContents","table_of_contents","length","_olEdition$table_of_c","olEdition","getOpenLibraryRecord","_tocEntries","map","rawTOCEntry","pageIndex","page_index","leaf","book","leafNumToIndex","pagenum","getPageIndex","undefined","shell","promisifyEvent","_render","bind","eventNames","pageChanged","_updateCurrent","menuProviders","id","icon","html","_templateObject","_taggedTemplateLiteral","label","component","_templateObject2","jumpToIndex","ariaLive","e","_chaptersPanel","addMenuShortcut","updateMenuContents","forEach","tocEntry","i","_renderMarker","entryIndex","chapterStr","title","filter","x","join","concat","percentThrough","util","cssPercentage","getNumLeafs","append","text","getPageName","addClass","css","left","appendTo","on","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","style","setProperty","removeClass","each","el","$el","applyVariables","vars","ajax","url","_data","ocaid","baseQueryUrl","data","URLSearchParams","limit","source_records","curIndex","mode","Math","max","displayedIndices","firstIndex","tocEntriesIndexed","reverse","currChapter","findIndex","chapter","currentChapter","registerPlugin","BRChaptersPanel","customElement","LitElement","_initialize","_LitElement","contents","F","d","kind","decorators","property","type","Array","key","value","_templateObject3","renderTOCEntry","chapterTitle","clickable","_templateObject4","styleMap","marginLeft","level","ifDefined","jumpToPage","_templateObject5","nothing","dispatchEvent","CustomEvent","changedProperties","has","currentEl","shadowRoot","singleScrollIntoView","block","behavior","static","_templateObject6","countWords","matches","match","template","overrides","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","split","varName","filterNames","_arrayLikeToArray","slice","n","reduce","acc","cur","urlencode","encodeURIComponent"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[830];export const __webpack_esm_modules__={3921:(e,t,n)=>{var i=n(6518),r=n(2652),o=n(4659);i({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,function(e,n){o(t,e,n)},{AS_ENTRIES:!0}),t}})},6869:(e,t,n)=>{n.d(t,{S:()=>i});class i{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},4680:(e,t,n)=>{n.d(t,{B5:()=>j,cr:()=>M,qL:()=>D}),n(9463),n(4423),n(3792),n(3921),n(3362),n(7495),n(5440),n(2953);var i,r,o,s,a,l,c,d,p=n(7597),h=n(6869),u=n(6054),f=n(9880);function m(e,t,n,i){var r=y();if(i)for(var o=0;o<i.length;o++)r=i[o](r);var s=t(function(e){r.initializeInstanceElements(e,a.elements)},n),a=r.decorateClass(function(e){for(var t=[],n=function(e){return"method"===e.kind&&e.key===o.key&&e.placement===o.placement},i=0;i<e.length;i++){var r,o=e[i];if("method"===o.kind&&(r=t.find(n)))if(k(o.descriptor)||k(r.descriptor)){if(v(o)||v(r))throw new ReferenceError("Duplicated methods ("+o.key+") can't be decorated.");r.descriptor=o.descriptor}else{if(v(o)){if(v(r))throw new ReferenceError("Decorators can't be placed on different accessors with for the same property ("+o.key+").");r.decorators=o.decorators}g(o,r)}else t.push(o)}return t}(s.d.map(b)),e);return r.initializeClassElements(s.F,a.elements),r.runClassFinishers(s.F,a.finishers)}function y(){y=function(){return e};var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(i){t.forEach(function(t){var r=t.placement;if(t.kind===i&&("static"===r||"prototype"===r)){var o="static"===r?e:n;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var i=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===i?void 0:i.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],i=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!v(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),i.push.apply(i,t.finishers)},this),!t)return{elements:n,finishers:i};var o=this.decorateConstructor(n,t);return i.push.apply(i,o.finishers),o.finishers=i,o},addElementPlacement:function(e,t,n){var i=t[e.placement];if(!n&&-1!==i.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");i.push(e.key)},decorateElement:function(e,t){for(var n=[],i=[],r=e.decorators,o=r.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,r[o])(a)||a);e=l.element,this.addElementPlacement(e,t),l.finisher&&i.push(l.finisher);var c=l.extras;if(c){for(var d=0;d<c.length;d++)this.addElementPlacement(c[d],t);n.push.apply(n,c)}}return{element:e,finishers:i,extras:n}},decorateConstructor:function(e,t){for(var n=[],i=t.length-1;i>=0;i--){var r=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[i])(r)||r);if(void 0!==o.finisher&&n.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s<e.length-1;s++)for(var a=s+1;a<e.length;a++)if(e[s].key===e[a].key&&e[s].placement===e[a].placement)throw new TypeError("Duplicated element ("+e[s].key+")")}}return{elements:e,finishers:n}},fromElementDescriptor:function(e){var t={kind:e.kind,key:e.key,placement:e.placement,descriptor:e.descriptor};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),"field"===e.kind&&(t.initializer=e.initializer),t},toElementDescriptors:function(e){if(void 0!==e)return(t=e,function(e){if(Array.isArray(e))return e}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map(function(e){var t=this.toElementDescriptor(e);return this.disallowProperty(e,"finisher","An element descriptor"),this.disallowProperty(e,"extras","An element descriptor"),t},this);var t},toElementDescriptor:function(e){var t=e.kind+"";if("method"!==t&&"field"!==t)throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "'+t+'"');var n=A(e.key),i=e.placement+"";if("static"!==i&&"prototype"!==i&&"own"!==i)throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "'+i+'"');var r=e.descriptor;this.disallowProperty(e,"elements","An element descriptor");var o={kind:t,key:n,placement:i,descriptor:Object.assign({},r)};return"field"!==t?this.disallowProperty(e,"initializer","A method descriptor"):(this.disallowProperty(r,"get","The property descriptor of a field descriptor"),this.disallowProperty(r,"set","The property descriptor of a field descriptor"),this.disallowProperty(r,"value","The property descriptor of a field descriptor"),o.initializer=e.initializer),o},toElementFinisherExtras:function(e){return{element:this.toElementDescriptor(e),finisher:w(e,"finisher"),extras:this.toElementDescriptors(e.extras)}},fromClassDescriptor:function(e){var t={kind:"class",elements:e.map(this.fromElementDescriptor,this)};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),t},toClassDescriptor:function(e){var t=e.kind+"";if("class"!==t)throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "'+t+'"');this.disallowProperty(e,"key","A class descriptor"),this.disallowProperty(e,"placement","A class descriptor"),this.disallowProperty(e,"descriptor","A class descriptor"),this.disallowProperty(e,"initializer","A class descriptor"),this.disallowProperty(e,"extras","A class descriptor");var n=w(e,"finisher");return{elements:this.toElementDescriptors(e.elements),finisher:n}},runClassFinishers:function(e,t){for(var n=0;n<t.length;n++){var i=(0,t[n])(e);if(void 0!==i){if("function"!=typeof i)throw new TypeError("Finishers must return a constructor.");e=i}}return e},disallowProperty:function(e,t,n){if(void 0!==e[t])throw new TypeError(n+" can't have a ."+t+" property.")}};return e}function b(e){var t,n=A(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var i={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(i.decorators=e.decorators),"field"===e.kind&&(i.initializer=e.value),i}function g(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function v(e){return e.decorators&&e.decorators.length}function k(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function w(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}function x(e,t,n,i){var r=_(P(1&i?e.prototype:e),t,n);return 2&i&&"function"==typeof r?function(e){return r.apply(n,e)}:r}function _(){return _="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var i=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=P(e)););return e}(e,t);if(i){var r=Object.getOwnPropertyDescriptor(i,t);return r.get?r.get.call(arguments.length<3?e:n):r.value}},_.apply(null,arguments)}function P(e){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},P(e)}function S(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function C(e,t,n){return(t=A(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function A(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}const T=window.BookReader;class O{constructor(){C(this,"name",void 0),C(this,"title",void 0),C(this,"description",void 0),C(this,"icon",void 0),C(this,"enabled",void 0),C(this,"learnMore",void 0),C(this,"br",void 0),C(this,"assetRoot","/BookReader/"),C(this,"enabledLoading",!1)}buildAssetPath(e){return"".concat(this.assetRoot).concat(e)}async enable(e){e.manual}async disable(){}}class M extends h.S{constructor(){super(...arguments),C(this,"options",{enabled:!0,localStorageKey:"BrExperiments",availableExperiments:["translate","copyLinkToHighlight"],autoEnabledExperiments:[]}),C(this,"allExperiments",[new class extends O{constructor(){super(...arguments),C(this,"name","copyLinkToHighlight"),C(this,"title","Copy Link to Highlight"),C(this,"description","Shareable link to a text selection"),C(this,"icon",null),C(this,"enabled",!1)}async enable(e){let t=e.manual;void 0!==t&&t&&(this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled=!0)}async disable(){this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled=!1}},new class extends O{constructor(){super(...arguments),C(this,"name","annotateHighlight"),C(this,"title","Highlight and annotate"),C(this,"description","Create private highlights and annotations for this book"),C(this,"icon",null),C(this,"enabled",!1)}async enable(e){let t=e.manual;void 0!==t&&t&&(this.br.plugins.textSelection.textSelectionManager.selectMenu.highlightAnnotationEnabled=!0)}async disable(){(0,f.yy)(0).then(()=>{window.location.reload()})}},new class extends O{constructor(){super(...arguments),C(this,"name","translate"),C(this,"title","Translate Plugin"),C(this,"description","Translate books directly in your browser."),C(this,"learnMore","https://mozilla.github.io/translations/"),C(this,"icon","images/translate.svg"),C(this,"enabled",!1)}async enable(e){e.manual,T.PLUGINS.translate||(await L(this.buildAssetPath("plugins/plugin.translate.js")),this.br.initializePlugin("translate"))}async disable(){(0,f.yy)(0).then(()=>{window.location.reload()})}},new class extends O{constructor(){super(...arguments),C(this,"name","hypothesis"),C(this,"title","Hypothes.is"),C(this,"description","Create public, collaborative, or fully private annotations on books and the web."),C(this,"learnMore","https://web.hypothes.is/about/"),C(this,"icon","images/hypothesis.ico"),C(this,"enabled",!1)}async enable(e){let t=e.manual,n=void 0!==t&&t;const i=document.createElement("script");return i.type="application/json",i.className="js-hypothesis-config",i.textContent=JSON.stringify({openSidebar:n,assetRoot:this.buildAssetPath("hypothesis/")}),document.head.appendChild(i),L(this.buildAssetPath("hypothesis/build/boot.js"))}async disable(){(0,f.yy)(0).then(()=>{window.location.reload()})}}]),C(this,"_panel",void 0)}async init(){if(this.options.enabled){for(const e of this.allExperiments)e.assetRoot=this.br.options.imagesBaseURL.replace(/images\/$/,""),e.icon&&(e.icon=e.buildAssetPath(e.icon)),e.br=this.br,!e.enabled&&this.options.autoEnabledExperiments.includes(e.name)&&(e.enabled=!0,await e.enable({manual:!1}));this._loadExperimentStates(),await Promise.resolve(),this._render()}}isEnabled(e){const t=this.allExperiments.find(t=>t.name===e);return null==t?void 0:t.enabled}_loadExperimentStates(){const e=JSON.parse(localStorage.getItem(this.options.localStorageKey)||"{}");this.allExperiments.forEach(t=>{void 0!==e[t.name]&&(t.enabled=e[t.name],t.enabled&&t.enable({manual:!1}))})}_saveExperimentStates(){const e=Object.fromEntries(this.allExperiments.map(e=>[e.name,e.enabled]));localStorage.setItem(this.options.localStorageKey,JSON.stringify(e))}async _toggleExperiment(e,t){var n;e.enabledLoading=!0,null===(n=this.br.plugins.archiveAnalytics)||void 0===n||n.sendEvent("BRExperiment-".concat(e.name),t?"Enable":"Disable"),this._panel.requestUpdate(),t?await e.enable({manual:!0}):await e.disable(),e.enabledLoading=!1,e.enabled=t,this._panel.requestUpdate()}_render(){this.br.shell.menuProviders.experiments={id:"experiments",icon:(0,p.qy)(i||(i=S(['\n <img src="','/icon_experiment.svg" alt="" width="26"/>\n '])),this.br.options.imagesBaseURL),label:"Experiments",component:(0,p.qy)(r||(r=S(['<br-experiments-panel\n .experiments="','"\n @connected="','"\n @toggle="','"\n />'])),this.allExperiments.filter(e=>this.options.availableExperiments.includes(e.name)),e=>this._panel=e.target,async e=>{await this._toggleExperiment(e.detail.experiment,e.detail.enabled),this._saveExperimentStates()})},this.br.shell.updateMenuContents()}}null==T||T.registerPlugin("experiments",M);let j=m([(0,u.EM)("br-experiments-panel")],function(e,t){class n extends t{constructor(){super(...arguments),e(this)}}return{F:n,d:[{kind:"field",decorators:[(0,u.MZ)({type:Array})],key:"experiments",value:()=>[]},{kind:"method",key:"render",value:function(){return(0,p.qy)(o||(o=S(['\n <div style="padding: 10px">\n ',"\n </div>\n "])),this.experiments.map(e=>(0,p.qy)(s||(s=S(['\n <br-experiment-toggle\n .icon="','"\n .title="','"\n .description="','"\n .enabled="','"\n .loading="','"\n .learnMore="','"\n @toggle="','"\n ></br-experiment-toggle>\n '])),e.icon,e.title,e.description,e.enabled,e.enabledLoading,e.learnMore,t=>this._dispatchToggle(e,t.detail.enabled))))}},{kind:"method",key:"_dispatchToggle",value:async function(e,t){this.dispatchEvent(new CustomEvent("toggle",{detail:{experiment:e,enabled:t}}))}},{kind:"method",key:"connectedCallback",value:function(){x(n,"connectedCallback",this,3)([]),this.dispatchEvent(new CustomEvent("connected"))}}]}},p.WF),D=m([(0,u.EM)("br-experiment-toggle")],function(e,t){class n extends t{constructor(){super(...arguments),e(this)}}return{F:n,d:[{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"icon",value:()=>""},{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"title",value:()=>""},{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"description",value:()=>""},{kind:"field",decorators:[(0,u.MZ)({type:Boolean})],key:"enabled",value:()=>!1},{kind:"field",decorators:[(0,u.MZ)({type:Boolean})],key:"loading",value:()=>!1},{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"learnMore",value:()=>""},{kind:"field",decorators:[(0,u.wk)()],key:"_longLoading",value:()=>!1},{kind:"method",key:"update",value:function(e){x(n,"update",this,3)([e]),e.has("loading")&&(this.loading?(0,f.yy)(500).then(()=>{this.loading&&(this._longLoading=!0,this.requestUpdate())}):this._longLoading=!1)}},{kind:"method",key:"render",value:function(){return(0,p.qy)(a||(a=S(['\n <div class="experiment-card" style="margin-bottom: 10px;">\n <div style="display: flex; align-items: center; gap: 10px;">\n ','\n <div style="flex-grow: 1; font-weight: bold;">','</div>\n </div>\n <p style="opacity: 0.9">\n ',"\n ",'\n </p>\n <div style="display: flex">\n <div style="flex-grow: 1;"></div>\n <button @click="','" .disabled="','">\n ',"\n </button>\n </div>\n </div>\n "])),this.icon?(0,p.qy)(l||(l=S(['<img src="','" style="width: 20px; height: 20px;" alt="" />'])),this.icon):"",this.title,this.description,this.learnMore?(0,p.qy)(c||(c=S(['<a href="','" target="_blank">Learn more</a>.'])),this.learnMore):"",this._dispatchToggle,this.loading,this._longLoading?"Loading…":this.enabled?"Disable":"Enable")}},{kind:"get",static:!0,key:"styles",value:function(){return(0,p.AH)(d||(d=S(["\n .experiment-card {\n border-radius: 8px;\n background-color: #fff2;\n padding: 10px;\n display: flex;\n flex-direction: column;\n }\n\n .experiment-card p {\n margin: 6px 0;\n }\n "])))}},{kind:"method",key:"_dispatchToggle",value:function(){this.dispatchEvent(new CustomEvent("toggle",{detail:{enabled:!this.enabled}}))}}]}},p.WF);async function L(e){return new Promise((t,n)=>{const i=document.createElement("script");i.src=e,i.onload=()=>t(),i.onerror=()=>n(new Error("Failed to load script: ".concat(e))),document.head.appendChild(i)})}}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});var t=e(4680);const n=t.qL,i=t.B5,r=t.cr;export{n as BrExperimentToggle,i as BrExperimentsPanel,r as ExperimentsPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.experiments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.experiments.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.experiments.js"],"sourcesContent":["'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://tc39.es/ecma262/#sec-object.fromentries\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","// @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\nimport { css, html, LitElement } from 'lit';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { sleep } from '../BookReader/utils.js';\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\n/** @typedef {'copyLinkToHighlight' | 'annotateHighlight' | 'translate' | 'hypothesis'} ExperimentName */\n\nclass ExperimentModel {\n /** @type {ExperimentName} */\n name;\n /** @type {string} */\n title;\n /** @type {string} */\n description;\n /** @type {string} */\n icon;\n /** @type {boolean} */\n enabled;\n /** @type {string} */\n learnMore;\n\n /** @type {import(\"@/src/BookReader.js\").default} */\n br;\n\n assetRoot = '/BookReader/';\n\n enabledLoading = false;\n\n /**\n * @param {string} path\n */\n buildAssetPath(path) {\n return `${this.assetRoot}${path}`;\n }\n\n /**\n * @param {object} param0\n * @param {boolean} param0.manual Whether the experiment was enabled manually\n */\n async enable({ manual }) { }\n async disable() { }\n}\n\nexport class ExperimentsPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n\n /** Where the state of this plugin is saved in localStorage */\n localStorageKey: 'BrExperiments',\n\n /** @type {ExperimentName[]} Experiments shown in the experiments panel */\n availableExperiments: ['translate', 'copyLinkToHighlight'],\n\n /** @type {ExperimentName[]} Experiments enabled by default */\n autoEnabledExperiments: [],\n }\n\n /** @type {ExperimentModel[]} */\n allExperiments = [\n new class extends ExperimentModel {\n name = 'copyLinkToHighlight';\n title = 'Copy Link to Highlight';\n description = 'Shareable link to a text selection';\n icon = null;\n enabled = false;\n async enable ({ manual = false }) {\n if (manual) {\n this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled = true;\n }\n }\n async disable() {\n this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled = false;\n }\n }(),\n new class extends ExperimentModel {\n name = 'annotateHighlight';\n title = 'Highlight and annotate';\n description = 'Create private highlights and annotations for this book';\n icon = null;\n enabled = false;\n async enable ({ manual = false }) {\n if (manual) {\n this.br.plugins.textSelection.textSelectionManager.selectMenu.highlightAnnotationEnabled = true;\n }\n }\n async disable() {\n sleep(0).then(() => {\n window.location.reload();\n });\n }\n }(),\n new class extends ExperimentModel {\n name = 'translate';\n title = 'Translate Plugin';\n description = \"Translate books directly in your browser.\";\n learnMore = 'https://mozilla.github.io/translations/';\n icon = 'images/translate.svg';\n enabled = false;\n async enable({ manual = false}) {\n if (BookReader.PLUGINS.translate) return;\n\n await importAsScript(this.buildAssetPath('plugins/plugin.translate.js'));\n this.br.initializePlugin('translate');\n }\n async disable() {\n // need to reload to remove translate plugin script\n // Sleep so that the event loop can finish processing before the reload\n sleep(0).then(() => {\n window.location.reload();\n });\n }\n }(),\n new class extends ExperimentModel {\n name = 'hypothesis';\n title = 'Hypothes.is';\n description = 'Create public, collaborative, or fully private annotations on books and the web.';\n learnMore = 'https://web.hypothes.is/about/';\n icon = 'images/hypothesis.ico';\n enabled = false;\n\n async enable({ manual = false }) {\n // Hypothesis configs ; see https://h.readthedocs.io/projects/client/en/latest/publishers/config.html\n const configScript = document.createElement('script');\n configScript.type = 'application/json';\n configScript.className = 'js-hypothesis-config';\n configScript.textContent = JSON.stringify({\n // Open the sidebar if this is the first time enabling\n openSidebar: manual,\n assetRoot: this.buildAssetPath('hypothesis/'),\n });\n\n document.head.appendChild(configScript);\n return importAsScript(this.buildAssetPath('hypothesis/build/boot.js'));\n // For testing\n // return importAsScript('http://localhost:3001/hypothesis');\n }\n\n async disable() {\n // need to reload to remove the Hypothesis script\n // Sleep so that the event loop can finish processing before the reload\n sleep(0).then(() => {\n window.location.reload();\n });\n }\n }(),\n ]\n\n /** @type {BrExperimentsPanel} */\n _panel;\n\n async init() {\n if (!this.options.enabled) {\n return;\n }\n\n for (const experiment of this.allExperiments) {\n // TODO: imagesBaseURL should be replaced with assetRoot everywhere\n experiment.assetRoot = this.br.options.imagesBaseURL.replace(/images\\/$/, '');\n if (experiment.icon) {\n experiment.icon = experiment.buildAssetPath(experiment.icon);\n }\n\n experiment.br = this.br;\n\n // Enable any experiments that should be automatically enabled\n if (!experiment.enabled && this.options.autoEnabledExperiments.includes(experiment.name)) {\n experiment.enabled = true;\n await experiment.enable({ manual: false });\n }\n }\n\n this._loadExperimentStates();\n await Promise.resolve();\n this._render();\n }\n\n /**\n * @param {ExperimentName} experimentName\n */\n isEnabled(experimentName) {\n const experiment = this.allExperiments.find(exp => exp.name === experimentName);\n return experiment?.enabled;\n }\n\n _loadExperimentStates() {\n const savedStates = JSON.parse(localStorage.getItem(this.options.localStorageKey) || '{}');\n this.allExperiments.forEach(experiment => {\n if (savedStates[experiment.name] !== undefined) {\n experiment.enabled = savedStates[experiment.name];\n if (experiment.enabled) {\n experiment.enable({ manual: false });\n }\n }\n });\n }\n\n _saveExperimentStates() {\n const states = Object.fromEntries(\n this.allExperiments.map(experiment => [experiment.name, experiment.enabled]),\n );\n localStorage.setItem(this.options.localStorageKey, JSON.stringify(states));\n }\n\n /**\n * @param {ExperimentModel} experiment\n * @param {boolean} enabled\n */\n async _toggleExperiment(experiment, enabled) {\n experiment.enabledLoading = true;\n this.br.plugins.archiveAnalytics?.sendEvent(`BRExperiment-${experiment.name}`, enabled ? 'Enable' : 'Disable');\n this._panel.requestUpdate();\n\n if (enabled) {\n await experiment.enable({ manual: true });\n } else {\n await experiment.disable();\n }\n experiment.enabledLoading = false;\n experiment.enabled = enabled;\n this._panel.requestUpdate();\n }\n\n _render() {\n this.br.shell.menuProviders['experiments'] = {\n id: 'experiments',\n icon: html`\n <img src=\"${this.br.options.imagesBaseURL}/icon_experiment.svg\" alt=\"\" width=\"26\"/>\n `,\n label: 'Experiments',\n component: html`<br-experiments-panel\n .experiments=\"${this.allExperiments.filter(experiment => this.options.availableExperiments.includes(experiment.name))}\"\n @connected=\"${e => this._panel = e.target}\"\n @toggle=\"${async e => {\n await this._toggleExperiment(e.detail.experiment, e.detail.enabled);\n this._saveExperimentStates();\n }}\"\n />`,\n };\n this.br.shell.updateMenuContents();\n }\n}\nBookReader?.registerPlugin('experiments', ExperimentsPlugin);\n\n@customElement('br-experiments-panel')\nexport class BrExperimentsPanel extends LitElement {\n\n /** @type {ExperimentModel[]} */\n @property({ type: Array }) experiments = [];\n\n render() {\n return html`\n <div style=\"padding: 10px\">\n ${this.experiments.map(\n experiment => html`\n <br-experiment-toggle\n .icon=\"${experiment.icon}\"\n .title=\"${experiment.title}\"\n .description=\"${experiment.description}\"\n .enabled=\"${experiment.enabled}\"\n .loading=\"${experiment.enabledLoading}\"\n .learnMore=\"${experiment.learnMore}\"\n @toggle=\"${e => this._dispatchToggle(experiment, e.detail.enabled)}\"\n ></br-experiment-toggle>\n `,\n )}\n </div>\n `;\n }\n\n /**\n * @param {ExperimentModel} experiment\n * @param {boolean} enabled\n */\n async _dispatchToggle(experiment, enabled) {\n this.dispatchEvent(new CustomEvent('toggle', {\n detail: { experiment, enabled },\n }));\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.dispatchEvent(new CustomEvent('connected'));\n }\n}\n\n@customElement('br-experiment-toggle')\nexport class BrExperimentToggle extends LitElement {\n @property({ type: String }) icon = '';\n @property({ type: String }) title = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) enabled = false;\n @property({ type: Boolean }) loading = false;\n @property({ type: String }) learnMore = '';\n\n /**\n * We want to disable the button immediately if loading, but only display\n * the loading indicator after 200ms.\n */\n @state() _longLoading = false;\n\n /** @override */\n update(changedProperties) {\n super.update(changedProperties);\n if (changedProperties.has('loading')) {\n if (this.loading) {\n sleep(500).then(() => {\n if (this.loading) {\n this._longLoading = true;\n this.requestUpdate();\n }\n });\n } else {\n this._longLoading = false;\n }\n }\n }\n\n render() {\n return html`\n <div class=\"experiment-card\" style=\"margin-bottom: 10px;\">\n <div style=\"display: flex; align-items: center; gap: 10px;\">\n ${this.icon ? html`<img src=\"${this.icon}\" style=\"width: 20px; height: 20px;\" alt=\"\" />` : ''}\n <div style=\"flex-grow: 1; font-weight: bold;\">${this.title}</div>\n </div>\n <p style=\"opacity: 0.9\">\n ${this.description}\n ${this.learnMore ? html`<a href=\"${this.learnMore}\" target=\"_blank\">Learn more</a>.` : ''}\n </p>\n <div style=\"display: flex\">\n <div style=\"flex-grow: 1;\"></div>\n <button @click=\"${this._dispatchToggle}\" .disabled=\"${this.loading}\">\n ${this._longLoading ? 'Loading…' : this.enabled ? 'Disable' : 'Enable'}\n </button>\n </div>\n </div>\n `;\n }\n\n static get styles() {\n return css`\n .experiment-card {\n border-radius: 8px;\n background-color: #fff2;\n padding: 10px;\n display: flex;\n flex-direction: column;\n }\n\n .experiment-card p {\n margin: 6px 0;\n }\n `;\n }\n\n _dispatchToggle() {\n this.dispatchEvent(new CustomEvent('toggle', { detail: { enabled: !this.enabled } }));\n }\n}\n\n/**\n * @param {string} url\n */\nasync function importAsScript(url) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(`Failed to load script: ${url}`));\n document.head.appendChild(script);\n });\n}\n"],"names":["$","__webpack_require__","iterate","createProperty","target","stat","fromEntries","iterable","obj","k","v","AS_ENTRIES","BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","ExperimentModel","_defineProperty","buildAssetPath","path","concat","assetRoot","enable","_ref","manual","disable","ExperimentsPlugin","super","arguments","enabled","localStorageKey","availableExperiments","autoEnabledExperiments","_ref2","_ref2$manual","plugins","textSelection","textSelectionManager","selectMenu","copyLinkToHighlightEnabled","_ref3","_ref3$manual","highlightAnnotationEnabled","sleep","then","location","reload","_ref4","PLUGINS","translate","importAsScript","initializePlugin","_ref5","_ref5$manual","configScript","document","createElement","type","className","textContent","JSON","stringify","openSidebar","head","appendChild","experiment","allExperiments","imagesBaseURL","replace","icon","includes","name","_loadExperimentStates","Promise","resolve","_render","isEnabled","experimentName","find","exp","savedStates","parse","localStorage","getItem","forEach","undefined","_saveExperimentStates","states","map","setItem","_toggleExperiment","_this$br$plugins$arch","enabledLoading","archiveAnalytics","sendEvent","_panel","requestUpdate","shell","menuProviders","id","html","_templateObject","_taggedTemplateLiteral","label","component","_templateObject2","filter","e","async","detail","updateMenuContents","registerPlugin","BrExperimentsPanel","_decorate","customElement","_initialize","_LitElement","F","d","kind","decorators","property","Array","key","value","_templateObject3","experiments","_templateObject4","title","description","learnMore","_dispatchToggle","dispatchEvent","CustomEvent","_superPropGet","LitElement","BrExperimentToggle","_initialize2","_LitElement2","String","Boolean","state","changedProperties","has","loading","_longLoading","_templateObject5","_templateObject6","_templateObject7","static","css","_templateObject8","url","reject","script","src","onload","onerror","Error"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[240];export const __webpack_esm_modules__={6869:(e,t,r)=>{r.d(t,{S:()=>a});class a{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},4842:(e,t,r)=>{r.d(t,{c:()=>i}),r(3792),r(2953);var a=r(5312),o=r(6869);const n="bookReaderFragmentChange";class i extends o.S{constructor(){var e,t,r;super(...arguments),e=this,r={enabled:!0},(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t="options"))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}init(){this.options.enabled&&window.parent&&(this.br.bind(a.q.fragmentChange,()=>{const e=this.br.fragmentFromParams(this.br.paramsFromCurrent());window.parent.postMessage({type:n,fragment:e},"*")}),window.addEventListener("message",e=>{e.data&&e.data.type===n&&this.br.updateFromParams(this.br.paramsFromFragment(e.data.fragment))}))}}const s=window.BookReader;null==s||s.registerPlugin("iframe",i)}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});const t=e(4842).c;export{t as IframePlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.iframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.iframe.js","mappings":"6GAMO,MAAMA,EAIXC,WAAAA,CAAYC,GAEVC,KAAKD,GAAKA,EAEVC,KAAKC,OACP,CAMAC,KAAAA,CAAMD,GACJD,KAAKC,QAAUE,OAAOC,OAAO,CAAC,EAAGJ,KAAKC,QAASA,EACjD,CAGAI,IAAAA,GAAQ,CAORC,uBAAAA,CAAwBC,GACxB,CAOAC,iBAAAA,CAAkBC,GAClB,CAGAC,uBAAAA,GAA2B,CAK3BC,YAAAA,CAAaC,GAAU,E,0EC9CzB,MAAMC,EAA+B,2BAS9B,MAAMC,UAAqBjB,EAAAA,EAAiBC,WAAAA,G,UAAAiB,SAAAC,W,EAAAhB,K,EACvC,CACRiB,SAAS,I,kSAFsC,c,uFAGhD,CAGDZ,IAAAA,GAEOL,KAAKC,QAAQgB,SAAYC,OAAOC,SAIrCnB,KAAKD,GAAGqB,KAAKC,EAAAA,EAAOC,eAAgB,KAClC,MAAMC,EAAWvB,KAAKD,GAAGyB,mBAAmBxB,KAAKD,GAAG0B,qBAEpDP,OAAOC,OAAOO,YACZ,CAAEC,KAAMd,EAA8BU,YACtC,OAIJL,OAAOU,iBAAiB,UAAWC,IAE5BA,EAAMC,MAAQD,EAAMC,KAAKH,OAASd,GAIvCb,KAAKD,GAAGgC,iBAAiB/B,KAAKD,GAAGiC,mBAAmBH,EAAMC,KAAKP,aAEnE,EAGF,MAAMU,EAAmEf,OAAOe,WAChFA,SAAAA,EAAYC,eAAe,SAAUpB,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.iframe.js"],"sourcesContent":["// @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\nimport { EVENTS } from '../BookReader/events.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\n\nconst MESSAGE_TYPE_FRAGMENT_CHANGE = 'bookReaderFragmentChange';\n\n/**\n * Plugin for two-way communication between a BookReader in an IFrame and the\n * parent web page. Using window.postMessage() and event listeners, the\n * plugin notifies the parent window when pages change, and the parent\n * window can also explicitly request a page change by sending its own\n * message.\n */\nexport class IframePlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n }\n\n /** @override */\n init() {\n // Not enabled, or not embedded, abort\n if (!this.options.enabled || !window.parent) {\n return;\n }\n\n this.br.bind(EVENTS.fragmentChange, () => {\n const fragment = this.br.fragmentFromParams(this.br.paramsFromCurrent());\n\n window.parent.postMessage(\n { type: MESSAGE_TYPE_FRAGMENT_CHANGE, fragment },\n '*',\n );\n });\n\n window.addEventListener('message', event => {\n // Not a recognized message type, abort\n if (!event.data || event.data.type !== MESSAGE_TYPE_FRAGMENT_CHANGE) {\n return;\n }\n\n this.br.updateFromParams(this.br.paramsFromFragment(event.data.fragment));\n });\n }\n}\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\nBookReader?.registerPlugin('iframe', IframePlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","MESSAGE_TYPE_FRAGMENT_CHANGE","IframePlugin","super","arguments","enabled","window","parent","bind","EVENTS","fragmentChange","fragment","fragmentFromParams","paramsFromCurrent","postMessage","type","addEventListener","event","data","updateFromParams","paramsFromFragment","BookReader","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[69];export const __webpack_esm_modules__={6869:(t,e,i)=>{i.d(e,{S:()=>o});class o{constructor(t){this.br=t,this.options}setup(t){this.options=Object.assign({},this.options,t)}init(){}_configurePageContainer(t){}_configureToolbar(t){}_bindNavigationHandlers(){}extendNavBar(t){}}},331:(t,e,i)=>{i.d(e,{b:()=>s}),i(3792),i(2953);var o=i(6869);const n=window.BookReader;class s extends o.S{constructor(){var t,e,i;super(...arguments),t=this,i={enabled:!0,manifest:null},(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e="options"))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i}setup(t){super.setup(t),this.manifest=this.options.manifest,this.options.enabled&&Object.assign(this.br.options,this.load())}load(){if("http://iiif.io/api/presentation/2/context.json"==this.manifest["@context"]){const t=this.manifest;return this.manifestToBookReaderV2(t)}if("http://iiif.io/api/presentation/3/context.json"==this.manifest["@context"]){const t=this.manifest;return this.manifestToBookReaderV3(t)}throw new Error("Unsupported IIIF context "+this.manifest["@context"])}manifestToBookReaderV3(t){const e={bookTitle:a(t.label),pageProgression:"right-to-left"==t.viewingDirection?"rl":"lr",metadata:(t.metadata||[]).map(t=>({label:a(t.label),value:a(t.value)})),data:[],getPageURI(e,i,o){const n=Math.floor(100/i),s=t.items[e].items[0].items[0].body,a=(s instanceof Array?s[0]:s).service[0].id;return"".concat(a,"/full/pct:").concat(n,"/0/default.jpg")}};"top-to-bottom"!=t.viewingDirection&&"bottom-to-top"!=t.viewingDirection||console.warn("Unsupported viewingDirection",t.viewingDirection);let i=[];return t.items.forEach((o,n)=>{const s=t.items[n].items[0].items[0].body,r={uri:(s instanceof Array?s[0]:s).service[0].id,width:o.width,height:o.height,pageNum:a(o.label)};i.push(r),n%2==0&&(e.data.push(i),i=[])}),i.length>0&&e.data.push(i),e}manifestToBookReaderV2(t){var e;const i={bookTitle:t.label,metadata:t.metadata,thumbnail:null===(e=t.thumbnail)||void 0===e?void 0:e["@id"],data:[],getPageURI(e,i,o){const n=Math.floor(100/i),s=t.sequences[0].canvases[e].images[0].resource.service["@id"];return"".concat(s,"/full/pct:").concat(n,"/0/default.jpg")}};let o=[];return t.sequences[0].canvases.forEach((t,e)=>{const n={uri:t.images[0].resource.service["@id"],width:t.width,height:t.height,pageNum:t.label};o.push(n),e%2==0&&(i.data.push(o),o=[])}),o.length>0&&i.data.push(o),i}}function a(t){const e=Object.keys(t)[0];return(t[navigator.language]||t[e])[0]}null==n||n.registerPlugin("iiif",s)}};import{__webpack_require__ as t}from"../ia-bookreader.js";t.C({__webpack_esm_ids__,__webpack_esm_modules__});const e=t(331).b;export{e as IiifPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.iiif.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.iiif.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.iiif.js"],"sourcesContent":["// @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\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n/**\n * @extends BookReaderPlugin<IiifPlugin['options']>\n */\nexport class IiifPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {import('@iiif/presentation-3').Manifest | import('@iiif/presentation-2').Manifest | null} */\n manifest: null,\n }\n\n /**\n * @param {IiifPlugin['options']} options\n */\n setup(options) {\n super.setup(options);\n this.manifest = this.options.manifest;\n\n if (this.options.enabled) {\n Object.assign(this.br.options, this.load());\n }\n }\n\n load() {\n if (this.manifest[\"@context\"] == \"http://iiif.io/api/presentation/2/context.json\") {\n const manifest = /** @type {import('@iiif/presentation-2').Manifest} */(this.manifest);\n return this.manifestToBookReaderV2(manifest);\n } else if (this.manifest[\"@context\"] == \"http://iiif.io/api/presentation/3/context.json\") {\n const manifest = /** @type {import('@iiif/presentation-3').Manifest} */(this.manifest);\n return this.manifestToBookReaderV3(manifest);\n } else {\n throw new Error(\"Unsupported IIIF context \" + this.manifest[\"@context\"]);\n }\n }\n\n /**\n * @param {import('@iiif/presentation-3').Manifest} manifest\n */\n manifestToBookReaderV3(manifest) {\n /** @type {import('../BookReader/options.js').BookReaderOptions} */\n const book = {\n bookTitle: resolveInternationalString(manifest.label),\n pageProgression: manifest.viewingDirection == \"right-to-left\" ? \"rl\" : \"lr\",\n // numLeafs: manifest.items.length,\n metadata: (manifest.metadata || []).map((metadata) => {\n return {\n label: resolveInternationalString(metadata.label),\n value: resolveInternationalString(metadata.value),\n };\n }),\n data: [],\n /**\n * @this {import('../BookReader.js').default}\n */\n getPageURI(pageIndex, reduce, rotate) {\n const percent = Math.floor(100 * 1 / reduce);\n const bodyArr = manifest.items[pageIndex].items[0].items[0].body;\n const body = bodyArr instanceof Array ? bodyArr[0] : bodyArr;\n const uri = body.service[0].id;\n return `${uri}/full/pct:${percent}/0/default.jpg`;\n },\n };\n\n if (manifest.viewingDirection == \"top-to-bottom\" || manifest.viewingDirection == \"bottom-to-top\") {\n console.warn(\"Unsupported viewingDirection\", manifest.viewingDirection);\n }\n\n let spread = [];\n manifest.items.forEach((item, index) => {\n const bodyArr = manifest.items[index].items[0].items[0].body;\n const body = bodyArr instanceof Array ? bodyArr[0] : bodyArr;\n const uri = body.service[0].id;\n /** @type {import('../BookReader/options.js').PageData} */\n const pageData = {\n uri,\n width: item.width,\n height: item.height,\n pageNum: resolveInternationalString(item.label),\n };\n spread.push(pageData);\n if (index % 2 == 0) {\n book.data.push(spread);\n spread = [];\n }\n });\n if (spread.length > 0) {\n book.data.push(spread);\n }\n return book;\n }\n\n /**\n * @param {import('@iiif/presentation-2').Manifest} manifest\n */\n manifestToBookReaderV2(manifest) {\n /** @type {import('../BookReader/options.js').BookReaderOptions} */\n const book = {\n bookTitle: manifest.label,\n metadata: manifest.metadata,\n thumbnail: manifest.thumbnail?.['@id'],\n // numLeafs: manifest.sequences[0].canvases.length,\n data: [],\n /**\n * @this {import('../BookReader.js').default}\n */\n getPageURI(pageIndex, reduce, rotate) {\n const percent = Math.floor(100 * 1 / reduce);\n const uri = manifest.sequences[0].canvases[pageIndex].images[0].resource.service['@id'];\n return `${uri}/full/pct:${percent}/0/default.jpg`;\n },\n };\n\n let spread = [];\n manifest.sequences[0].canvases.forEach((canvas, index) => {\n /** @type {import('../BookReader/options.js').PageData} */\n const pageData = {\n uri: canvas.images[0].resource.service['@id'],\n width: canvas.width,\n height: canvas.height,\n pageNum: canvas.label,\n };\n spread.push(pageData);\n if (index % 2 == 0) {\n book.data.push(spread);\n spread = [];\n }\n });\n if (spread.length > 0) {\n book.data.push(spread);\n }\n return book;\n }\n}\n\n/**\n * @param {import('@iiif/presentation-3').InternationalString} internationalString\n */\nfunction resolveInternationalString(internationalString) {\n const anyLang = Object.keys(internationalString)[0];\n return (internationalString[navigator.language] || internationalString[anyLang])[0];\n}\n\nBookReader?.registerPlugin('iiif', IiifPlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","IiifPlugin","super","arguments","enabled","manifest","load","manifestToBookReaderV2","manifestToBookReaderV3","Error","book","bookTitle","resolveInternationalString","label","pageProgression","viewingDirection","metadata","map","value","data","getPageURI","pageIndex","reduce","rotate","percent","Math","floor","bodyArr","items","body","uri","Array","service","id","concat","console","warn","spread","forEach","item","index","pageData","width","height","pageNum","push","length","_manifest$thumbnail","thumbnail","sequences","canvases","images","resource","canvas","internationalString","anyLang","keys","navigator","language","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[555];export const __webpack_esm_modules__={6869:(e,o,t)=>{t.d(o,{S:()=>n});class n{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},2784:(e,o,t)=>{t.d(o,{V:()=>l});var n={};t.r(n),t.d(n,{areCookiesBlocked:()=>a,getItem:()=>c,removeItem:()=>m,setItem:()=>u}),t(3792),t(7495),t(2953);var r=t(5312),i=t(6869);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;try{return e.cookie,!1}catch(e){return!0}}t(4864),t(5440);const s=a();function c(e){return s||!e?null:decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null}function u(e,o,t,n,r,i){return!s&&(document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+(t?"; expires=".concat(t.toUTCString()):"")+(r?"; domain=".concat(r):"")+(n?"; path=".concat(n):"")+(i?"; secure":""),!0)}function m(e,o,t){return!s&&!!hasItem(e)&&(document.cookie=encodeURIComponent(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT"+(t?"; domain=".concat(t):"")+(o?"; path=".concat(o):""),!0)}var d;BookReader.docCookies=n;class l extends i.S{constructor(){var e,o,t;super(...arguments),e=this,t={enabled:!0,cookiePath:null},(o=function(e){var o=function(e){if("object"!=typeof e||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var t=o.call(e,"string");if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof o?o:o+""}(o="options"))in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t}init(){this.options.enabled&&this.br.bind(r.q.fragmentChange,()=>{const e=this.br.paramsFromCurrent();this.updateResumeValue(e.index)})}getResumeValue(){const e=BookReader.docCookies.getItem("br-resume");return null!==e?parseInt(e):null}getCookiePath(e){return e.match(".+?(?=/page/|/mode/|$)")[0]}updateResumeValue(e,o){const t=new Date(+new Date+12096e5),n=this.options.cookiePath||this.getCookiePath(window.location.pathname);BookReader.docCookies.setItem(o||"br-resume",e,t,n,null,!1)}}null===(d=BookReader)||void 0===d||d.registerPlugin("resume",l)}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});const o=e(2784).V;export{o as ResumePlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.resume.js","mappings":"6GAMO,MAAMA,EAIXC,WAAAA,CAAYC,GAEVC,KAAKD,GAAKA,EAEVC,KAAKC,OACP,CAMAC,KAAAA,CAAMD,GACJD,KAAKC,QAAUE,OAAOC,OAAO,CAAC,EAAGJ,KAAKC,QAASA,EACjD,CAGAI,IAAAA,GAAQ,CAORC,uBAAAA,CAAwBC,GACxB,CAOAC,iBAAAA,CAAkBC,GAClB,CAGAC,uBAAAA,GAA2B,CAK3BC,YAAAA,CAAaC,GAAU,E,gLClClB,SAASC,IAAkC,IAAhBC,EAAGC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGG,SACtC,IAEE,OADAJ,EAAIK,QACG,CACT,CAAE,MAAOC,GACP,OAAO,CACT,CACF,C,gBAEA,MAAMC,EAAkBR,IASjB,SAASS,EAAQC,GACtB,OAAIF,IAAoBE,EAAa,KAE9BC,mBAELN,SAASC,OAAOM,QAAQ,IAAIC,OAAO,mBAAqBC,mBAAmBJ,GAAME,QAAQ,cAAe,QAAU,+BAAgC,QAAU,IAChK,CAcO,SAASG,EAAQL,EAAMM,EAAQC,EAAMC,EAAOC,EAASC,GAC1D,OAAIZ,IAEJH,SAASC,OAASQ,mBAAmBJ,GAAQ,IAAMI,mBAAmBE,IACnEC,EAAI,aAAAI,OAAgBJ,EAAKK,eAAkB,KAC3CH,EAAO,YAAAE,OAAeF,GAAY,KAClCD,EAAK,UAAAG,OAAaH,GAAU,KAC5BE,EAAO,WAAgB,KAEnB,EACT,CAWO,SAASG,EAAWb,EAAMQ,EAAOC,GACtC,OAAIX,KAECgB,QAAQd,KAEbL,SAASC,OAASQ,mBAAmBJ,GAAK,4CACvCS,EAAO,YAAAE,OAAeF,GAAY,KAClCD,EAAK,UAAAG,OAAaH,GAAU,KAExB,EACT,C,MC9EAO,WAAWC,WAAaA,EAKjB,MAAMC,UAAqB3C,EAAAA,EAAiBC,WAAAA,G,UAAA2C,SAAA1B,W,EAAAf,K,EACvC,CACR0C,SAAS,EAETC,WAAY,O,kSAJmC,c,uFAKhD,CAGDtC,IAAAA,GACML,KAAKC,QAAQyC,SACf1C,KAAKD,GAAG6C,KAAKC,EAAAA,EAAOC,eAAgB,KAClC,MAAMC,EAAS/C,KAAKD,GAAGiD,oBACvBhD,KAAKiD,kBAAkBF,EAAOG,QAGpC,CAQAC,cAAAA,GACE,MAAMC,EAAMd,WAAWC,WAAWjB,QAAQ,aAC1C,OAAY,OAAR8B,EAAqBC,SAASD,GACtB,IACd,CAUAE,aAAAA,CAAcC,GACZ,OAAOA,EAAYC,MAAM,0BAA0B,EACrD,CASAP,iBAAAA,CAAkBC,EAAOO,GACvB,MAAMC,EAAM,IAAIC,MAAM,IAAIA,KAAO,SAG3BC,EAAO5D,KAAKC,QAAQ0C,YACrB3C,KAAKsD,cAAcO,OAAOC,SAASC,UACxCzB,WAAWC,WAAWX,QAAQ6B,GAAc,YAAaP,EAAOQ,EAAKE,EAAM,MAAM,EACnF,EAGQ,QAAVI,EAAA1B,kBAAU,IAAA0B,GAAVA,EAAYC,eAAe,SAAUzB,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/util/docCookies.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.resume.js"],"sourcesContent":["// @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","/**\n * Helper module use to get, set and remove item from cookie\n *\n * See more:\n * https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n * https://developer.mozilla.org/User:fusionchess\n * https://github.com/madmurphy/cookies.js\n * This framework is released under the GNU Public License, version 3 or later.\n * http://www.gnu.org/licenses/gpl-3.0-standalone.html\n */\n\n/**\n * Check to see if the browser has cookies enabled.\n * Accessing document.cookies errors if eg iframe with sandbox enabled.\n * @returns {boolean}\n */\nexport function areCookiesBlocked(doc = document) {\n try {\n doc.cookie;\n return false;\n } catch (e) {\n return true;\n }\n}\n\nconst COOKIES_BLOCKED = areCookiesBlocked();\n\n/**\n * Get specific key's value stored in cookie\n *\n * @param {string} sKey\n *\n * @returns {string|null}\n */\nexport function getItem(sKey) {\n if (COOKIES_BLOCKED || !sKey) return null;\n\n return decodeURIComponent(\n // eslint-disable-next-line no-useless-escape\n document.cookie.replace(new RegExp('(?:(?:^|.*;)\\\\s*' + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'), '$1')) || null;\n}\n\n/**\n * Set specific key's value in cookie\n *\n * @param {string} sKey cookie name\n * @param {string} sValue cookie value\n * @param {string} [vEnd] expire|max-age\n * @param {string} [sPath] path of current item\n * @param {string} [sDomain] domain name\n * @param {boolean} [bSecure]\n *\n * @returns {boolean}\n */\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n if (COOKIES_BLOCKED) return false;\n\n document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue)\n + (vEnd ? `; expires=${vEnd.toUTCString()}` : '')\n + (sDomain ? `; domain=${sDomain}` : '')\n + (sPath ? `; path=${sPath}` : '')\n + (bSecure ? `; secure` : '');\n\n return true;\n}\n\n/**\n * BROKEN Remove specific key's value from cookie\n * @fixme hasItem isn't even implemented! This will always error.\n * @param {string} sKey cookie name\n * @param {string} [sPath] path of current item\n * @param {string} [sDomain]\n *\n * @returns {boolean}\n */\nexport function removeItem(sKey, sPath, sDomain) {\n if (COOKIES_BLOCKED) return false;\n // eslint-disable-next-line\n if (!hasItem(sKey)) return false;\n\n document.cookie = encodeURIComponent(sKey) + `=; expires=Thu, 01 Jan 1970 00:00:00 GMT`\n + (sDomain ? `; domain=${sDomain}` : '')\n + (sPath ? `; path=${sPath}` : '');\n\n return true;\n}\n","import { EVENTS } from '../BookReader/events.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport * as docCookies from '../util/docCookies.js';\n\n/* global BookReader */\n\n/** @deprecated Exposed for backward compatibility */\nBookReader.docCookies = docCookies;\n\n/**\n * Plugin to remember the current page number in a cookie\n */\nexport class ResumePlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {string|null} eg '/', '/details/id' */\n cookiePath: null,\n }\n\n /** @override */\n init() {\n if (this.options.enabled) {\n this.br.bind(EVENTS.fragmentChange, () => {\n const params = this.br.paramsFromCurrent();\n this.updateResumeValue(params.index);\n });\n }\n }\n\n /**\n * Gets page resume value, for remembering reader's page\n * Can be overridden for different implementation\n *\n * @return {number|null}\n */\n getResumeValue() {\n const val = BookReader.docCookies.getItem('br-resume');\n if (val !== null) return parseInt(val);\n else return null;\n }\n\n /**\n * Return cookie path using pathname up to /page/... or /mode/...\n * using window.location.pathname for urlPathPart:\n * - matches encoding\n * - ignores querystring part\n * - ignores fragment part (after #)\n * @param {string} urlPathPart - window.location.pathname\n */\n getCookiePath(urlPathPart) {\n return urlPathPart.match('.+?(?=/page/|/mode/|$)')[0];\n }\n\n /**\n * Sets page resume value, for remembering reader's page\n * Can be overridden for different implementation\n *\n * @param {Number} index leaf index\n * @param {string} [cookieName]\n */\n updateResumeValue(index, cookieName) {\n const ttl = new Date(+new Date + 12096e5); // 2 weeks\n // For multiple files in item, leave cookiePath blank\n // It's likely we can remove cookiePath using getCookiePath()\n const path = this.options.cookiePath\n || this.getCookiePath(window.location.pathname);\n BookReader.docCookies.setItem(cookieName || 'br-resume', index, ttl, path, null, false);\n }\n}\n\nBookReader?.registerPlugin('resume', ResumePlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","areCookiesBlocked","doc","arguments","length","undefined","document","cookie","e","COOKIES_BLOCKED","getItem","sKey","decodeURIComponent","replace","RegExp","encodeURIComponent","setItem","sValue","vEnd","sPath","sDomain","bSecure","concat","toUTCString","removeItem","hasItem","BookReader","docCookies","ResumePlugin","super","enabled","cookiePath","bind","EVENTS","fragmentChange","params","paramsFromCurrent","updateResumeValue","index","getResumeValue","val","parseInt","getCookiePath","urlPathPart","match","cookieName","ttl","Date","path","window","location","pathname","_BookReader","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{default as e}from"iso-language-codes";export const __webpack_esm_ids__=[924];export const __webpack_esm_modules__={706:(e,t,r)=>{var n=r(350).PROPER,s=r(9039),a=r(7452);e.exports=function(e){return s(function(){return!!a[e]()||"
"!=="
"[e]()||n&&a[e].name!==e})}},3802:(e,t,r)=>{var n=r(9504),s=r(7750),a=r(655),i=r(7452),o=n("".replace),c=RegExp("^["+i+"]+"),h=RegExp("(^|[^"+i+"])["+i+"]+$"),l=function(e){return function(t){var r=a(s(t));return 1&e&&(r=o(r,c,"")),2&e&&(r=o(r,h,"$1")),r}};e.exports={start:l(1),end:l(2),Bq:l(3)}},7452:e=>{e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},2762:(e,t,r)=>{var n=r(6518),s=r(3802).Bq;n({target:"String",proto:!0,forced:r(706)("trim")},{trim:function(){return s(this)}})},6869:(e,t,r)=>{r.d(t,{S:()=>n});class n{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},631:(e,t,r)=>{r.d(t,{u:()=>v}),r(9463),r(3792),r(3362),r(7495),r(5440),r(2953),r(8408);var n=r(9880),s=r(1391),a=r(1669);const i=class{constructor(e){let t=e.br,r=e.searchCancelledCallback,n=void 0===r?()=>{}:r;this.br=t,this.matches=[],this.cacheDOMElements(),this.cancelSearch=n}init(){this.bindEvents()}cacheDOMElements(){this.dom={},this.dom.toolbarSearch=this.buildToolbarSearch()}setQuery(e){this.br.$('[name="query"]').val(e)}emptyMatches(){this.matches=[]}removeResultPins(){this.br.$(".BRnavpos .BRsearch").remove()}clearSearchFieldAndResults(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.br.plugins.search.removeSearchResults(),this.removeResultPins(),this.emptyMatches(),this.setQuery(""),this.teardownSearchNavigation(),e&&this.br.trigger("SearchResultsCleared")}toggleSidebar(){this.br.trigger("ToggleSearchMenu")}renderSearchNavigation(){const e="BRsearch-navigation";a(".BRnav.BRnavMain").before('\n <div class="'.concat(e,'">\n <button class="toggle-sidebar">\n <h4>\n <span class="icon icon-search"></span> Results\n </h4>\n </button>\n <div class="pagination">\n <button class="prev" title="Previous result"><span class="icon icon-chevron hflip"></span></button>\n <span data-id="resultsCount">').concat(this.resultsPosition(),'</span>\n <button class="next" title="Next result"><span class="icon icon-chevron"></button>\n </div>\n <button class="clear" title="Clear search results">\n <span class="icon icon-close"></span>\n </button>\n </div>\n ')),this.dom.searchNavigation=a(".".concat(e))}resultsPosition(){let e="".concat(this.matches.length," result").concat(1===this.matches.length?"":"s");return~this.currentMatchIndex&&(e="".concat(this.currentMatchIndex+1," / ").concat(this.matches.length)),e}bindSearchNavigationEvents(){if(!this.dom.searchNavigation)return;const e="searchNavigation";this.dom.searchNavigation.on("click.".concat(e),".clear",this.clearSearchFieldAndResults.bind(this)).on("click.".concat(e),".prev",this.showPrevResult.bind(this)).on("click.".concat(e),".next",this.showNextResult.bind(this)).on("click.".concat(e),".toggle-sidebar",this.toggleSidebar.bind(this)).on("click.".concat(e),!1)}showPrevResult(){0!==this.currentMatchIndex&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((e,t,r)=>t[0]>r)+1),this.br.$(".BRnavline .BRsearch").eq(--this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}showNextResult(){this.currentMatchIndex+1!==this.matches.length&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((e,t,r)=>e[e.length-1]>r)-1),this.br.$(".BRnavline .BRsearch").eq(++this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}getClosestMatchIndex(e){const t=this.matches.map(e=>e.par[0].page),r=this.br.currentIndex()+1,n=(t,r)=>{if(1===t.length)return t[0];const s=t.slice(0,t.length/2),a=t.slice(t.length/2);return n(e(s,a,r)?s:a,r)},s=n(t,r);return this.matches.indexOf(this.matches.find(e=>e.par[0].page===s))}updateResultsPosition(){this.dom.searchNavigation&&this.dom.searchNavigation.find("[data-id=resultsCount]").text(this.resultsPosition())}updateSearchNavigationButtons(){this.dom.searchNavigation&&(this.dom.searchNavigation.find(".prev").attr("disabled",!this.currentMatchIndex),this.dom.searchNavigation.find(".next").attr("disabled",this.currentMatchIndex+1===this.matches.length))}teardownSearchNavigation(){this.dom.searchNavigation||(this.dom.searchNavigation=a(".BRsearch-navigation")),this.dom.searchNavigation.length&&(this.dom.searchNavigation.off(".searchNavigation").remove(),this.dom.searchNavigation=null,this.br.resize())}setCurrentMatchIndex(){let e;this.br.mode!==this.br.constModeThumb?(e=this.br.mode===this.br.constMode2up?this.find2upMatchingSearchResult():this.find1upMatchingSearchResult(),this.currentMatchIndex=this.matches.indexOf(e)):this.currentMatchIndex=-1}find1upMatchingSearchResult(){return this.matches.find(e=>this.br.currentIndex()===e.par[0].page-1)}find2upMatchingSearchResult(){return this.matches.find(e=>this.br._isIndexDisplayed(e.par[0].page-1))}updateSearchNavigation(){this.matches.length&&(this.setCurrentMatchIndex(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}togglePinsFor(e){const t=e?"visible":"hidden";this.br.refs.$BRfooter.find(".BRsearch").css({visibility:t})}buildToolbarSearch(){const e=document.createElement("span");return e.classList.add("BRtoolbarSection","BRtoolbarSectionSearch"),e.innerHTML='\n <form class="BRbooksearch desktop">\n <input type="search" name="query" class="BRsearchInput" value="" placeholder="Search inside"/>\n <button type="submit" class="BRsearchSubmit">\n <img src="'.concat(this.br.options.imagesBaseURL,'icon_search_button.svg" />\n </button>\n </form>\n '),e}renderPins(e){e.forEach(e=>{const t=this.br.book.leafNumToIndex(e.par[0].page),r=this.br.constructor.util.cssPercentage(t,this.br.book.getNumLeafs()-1);let n=e.html;if(n.length>200){const t=Math.max(0,n.indexOf("<mark>")-100);0!=t&&(n="…"+e.html.substring(t).replace(/^\S+/,""))}a("<div>").addClass("BRsearch").css({left:r}).attr("title","Search result").append('\n <div class="BRquery">\n <main>'.concat(n,"</main>\n <footer>Page ").concat(e.displayPageNumber,"</footer>\n </div>\n ")).appendTo(this.br.$(".BRnavline")).on("mouseenter",e=>{const t=e.currentTarget,r=t.querySelector(".BRquery"),n=r.getBoundingClientRect(),s=t.getBoundingClientRect(),i=2*parseInt(getComputedStyle(r).paddingLeft);n.x-i<0&&r.style.setProperty("transform","translateX(-".concat(s.left-i,"px)")),a(".BRsearch,.BRchapter").removeClass("front"),a(e.target).addClass("front")}).on("mouseleave",e=>a(e.target).removeClass("front")).on("click",()=>{this.br.plugins.search.jumpToMatch(e.matchIndex)})})}toggleSearchPending(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.br.showProgressPopup("Search results will appear below...",()=>this.progressPopupClosed()):this.br.removeProgressPopup()}progressPopupClosed(){this.toggleSearchPending(),this.cancelSearch()}renderErrorModal(){const e="".concat(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?"":"The text may still be processing. ","Please try again.");this.renderModalMessage("\n Sorry, there was an error with your search.\n <br />\n ".concat(e,"\n ")),this.delayModalRemovalFor(4e3)}renderBookNotIndexedModal(){this.renderModalMessage("\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n "),this.delayModalRemovalFor(5e3)}renderResultsEmptyModal(){this.renderModalMessage("No matches were found."),this.delayModalRemovalFor(2e3)}renderModalMessage(e){const t=document.createElement("div");t.classList.add("BRprogresspopup","search_modal"),t.innerHTML=e,this.br.refs.$br[0].append(t)}delayModalRemovalFor(e){setTimeout(this.br.removeProgressPopup.bind(this.br),e)}submitHandler(e){e.preventDefault();const t=e.target.querySelector('[name="query"]').value;return!!t.length&&(this.br.search(t),this.emptyMatches(),this.toggleSearchPending(!0),!1)}handleSearchCallback(e,t){let r=t.results,n=t.options;this.matches=r.matches,this.setCurrentMatchIndex(),this.teardownSearchNavigation(),this.renderSearchNavigation(),this.bindSearchNavigationEvents(),this.renderPins(r.matches),this.toggleSearchPending(!1),n.goToFirstResult?a(document).one("BookReader:pageChanged",()=>{this.br.resize()}):this.br.resize()}handleSearchStarted(){this.emptyMatches(),this.br.plugins.search.removeSearchHilites(),this.removeResultPins(),this.toggleSearchPending(!0),this.teardownSearchNavigation(),this.setQuery(this.br.plugins.search.searchTerm)}handleSearchCallbackError(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.toggleSearchPending(!1);const r=null==t||null===(e=t.detail)||void 0===e||null===(e=e.props)||void 0===e||null===(e=e.results)||void 0===e?void 0:e.indexed;this.renderErrorModal(r)}handleSearchCallbackBookNotIndexed(){this.toggleSearchPending(!1),this.renderBookNotIndexedModal()}handleSearchCallbackEmpty(){this.toggleSearchPending(!1),this.renderResultsEmptyModal()}bindEvents(){const e="BookReader:";window.addEventListener("".concat(e,"SearchCallbackError"),this.handleSearchCallbackError.bind(this)),a(document).on("".concat(e,"SearchCallback"),this.handleSearchCallback.bind(this)).on("".concat(e,"SearchStarted"),this.handleSearchStarted.bind(this)).on("".concat(e,"SearchCallbackBookNotIndexed"),this.handleSearchCallbackBookNotIndexed.bind(this)).on("".concat(e,"SearchCallbackEmpty"),this.handleSearchCallbackEmpty.bind(this)).on("".concat(e,"pageChanged"),this.updateSearchNavigation.bind(this)),this.dom.toolbarSearch.querySelector("form").addEventListener("submit",this.submitHandler.bind(this))}};function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,s,a,i,o=[],c=!0,h=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){h=!0,s=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw s}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e,t,r){const s=(0,n.Nt)((0,n.Zn)(t)),a=(0,n.Nt)((0,n.Zn)(r)),i=new RegExp("".concat(s,"([^]+?)").concat(a),"g");return(0,n.Zn)(e).replace(i,"<mark>$1</mark>").replace(/(\b)- /g,"$1")}r(4864);var l=r(6869),u=r(8965),d=r(9748),g=r(1669),m=r(1669);function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,s,a,i,o=[],c=!0,h=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){h=!0,s=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw s}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}const f=window.BookReader;class v extends l.S{constructor(){var e,t,r;super(...arguments),e=this,t="options",r={enabled:!0,preTag:"{{{",postTag:"}}}",searchInsideUrl:"/fulltext/inside.php?"+["q={{query|urlencode}}","pre_tag={{preTag|urlencode}}","post_tag={{postTag|urlencode}}"].join("&"),initialSearchTerm:null,goToFirstResult:!1},(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}setup(e){super.setup(e),this.searchTerm="",this.searchResults=null,this.searchInsideUrl=this.options.searchInsideUrl,this.enabled=this.options.enabled,this.searchXHR=null,this._searchBoxesByIndex={},this.enabled?this.searchView=new i({br:this.br,searchCancelledCallback:()=>{this._cancelSearch(),this.br.trigger("SearchCanceled",{term:this.searchTerm,instance:this.br})}}):this.searchView=null}init(){var e;super.init(),this.enabled&&(this.searchView.init(),this.options.initialSearchTerm?this.search(this.options.initialSearchTerm,{goToFirstResult:this.options.goToFirstResult,suppressFragmentChange:!1}):"search"===(null===(e=this.br.urlPlugin)||void 0===e?void 0:e.getUrlParam("focus"))&&this.searchView.toggleSidebar())}_configureToolbar(e){if(this.enabled)return this.searchView.dom.toolbarSearch&&e.find(".BRtoolbarSectionInfo").after(this.searchView.dom.toolbarSearch),e}_configurePageContainer(e){if(this.enabled&&e.page&&e.page.index in this._searchBoxesByIndex){const t=e.page.index,r=this._searchBoxesByIndex[t];(0,s.KL)("searchHiliteLayer",r,e.page,e.$container[0],r.map(e=>"match-index-".concat(e.matchIndex)))}return e}async search(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=g.extend({},{goToFirstResult:!1,disablePopup:!1,suppressFragmentChange:!1,error:null,success:null},t);this.suppressFragmentChange=r.suppressFragmentChange,this.searchCancelled=!1,this.searchTerm=e.replace(/\//g," "),r.suppressFragmentChange||this.br.trigger(f.eventNames.fragmentChange);const n=(0,u.gT)(this.options.searchInsideUrl,this.br.options.vars,{query:e,preTag:this.options.preTag,postTag:this.options.postTag});this.br.trigger("SearchStarted",{term:this.searchTerm,instance:this.br}),(e=>{if(this.searchCancelled)return;const t=e.error||!e.matches.length,n="function"==typeof r.error,s="function"==typeof r.success;t?(console.error("Search Inside Response Error",e.error||"matches.length == 0"),n?r.error.call(this,e,r):this.BRSearchCallbackError(e)):s?r.success.call(this,e,r):this.BRSearchCallback(e,r)})(await m.ajax({url:n,cache:!0,xhrFields:{withCredentials:this.br.protected},beforeSend:e=>{this.searchXHR=e}}))}_cancelSearch(){var e;null===(e=this.searchXHR)||void 0===e||e.abort(),this.searchView.clearSearchFieldAndResults(!1),this.searchTerm="",this.searchXHR=null,this.searchCancelled=!0,this.searchResults=null}cancelSearchRequest(){this.searchCancelled=!0,null!==this.searchXHR&&(this._cancelSearch(),this.searchView.toggleSearchPending(),this.br.trigger("SearchCanceled",{term:this.searchTerm,instance:this.br}))}BRSearchCallback(e,t){const r=(0,d.YH)(this.br.options.bookLanguage);!function(e,t,r,n,s){for(const i of e.matches.entries()){var a=o(i,2);const e=a[0],c=a[1];c.matchIndex=e,c.displayPageNumber=t(c.par[0].page),c.html=h(c.text,r,n),c.lang=s;for(const t of c.par)for(const r of t.boxes)r.matchIndex=e}}(e,e=>this.br.book.getPageNum(this.br.book.leafNumToIndex(e)),this.options.preTag,this.options.postTag,r),this.searchResults=e||null,this.updateSearchHilites(),this.br.removeProgressPopup(),t.goToFirstResult&&this.jumpToMatch(0),this.br.trigger("SearchCallback",{results:e,options:t,instance:this.br})}BRSearchCallbackError(e){this._BRSearchCallbackError(e)}_BRSearchCallbackError(e){this.searchResults=e;const t={term:this.searchTerm,results:e,instance:this.br};if(e.error)this.br.trigger("SearchCallbackError",t);else if(0==e.matches.length){if(!1===e.indexed)return void this.br.trigger("SearchCallbackBookNotIndexed",t);this.br.trigger("SearchCallbackEmpty",t)}}updateSearchHilites(){var e;const t=(null===(e=this.searchResults)||void 0===e?void 0:e.matches)||[],r={};this.removeSearchHilites();for(const e of t)for(const t of e.par[0].boxes){const e=this.br.book.leafNumToIndex(t.page);(r[e]||(r[e]=[])).push(t)}for(const e of Object.entries(r)){var n=b(e,2);const t=n[0],r=n[1],a=parseFloat(t),i=this.br.book.getPage(a),o=this.br.getActivePageContainerElementsForIndex(a);for(const e of o)(0,s.KL)("searchHiliteLayer",r,i,e,r.map(e=>"match-index-".concat(e.matchIndex)))}this._searchBoxesByIndex=r}removeSearchHilites(){m(this.br.getActivePageContainerElements()).find(".searchHiliteLayer").remove()}async jumpToMatch(e){var t;const r=null===(t=this.searchResults)||void 0===t?void 0:t.matches[e],s=this.br.book,a=s.leafNumToIndex(r.par[0].page),i=s.getPage(a),o=Math.abs(this.br.currentIndex()-a)<3;let c=!1;if(!i.isViewable){const e=await fetch("/services/bookreader/request_page?"+new URLSearchParams({id:this.br.options.bookId,subprefix:this.br.options.subPrefix,leafNum:i.leafNum})).then(e=>e.json());for(const t of e.value)s.getPage(s.leafNumToIndex(t)).makeViewable();e.value.length||(s.getPage(a).makeViewable(),c=!0),this.br._modes.mode1Up.mode1UpLit.updatePages(),this.br.activeMode==this.br._modes.mode1Up&&await this.br._modes.mode1Up.mode1UpLit.updateComplete}this.br._isIndexDisplayed(a)||(this.suppressFragmentChange=!1,this.br.jumpToIndex(a,{ariaLive:!0})),c&&s.getPage(a).makeViewable(!1);const h=await(0,n.wt)(()=>m("rect.match-index-".concat(r.matchIndex)),{until:e=>e.length>0});h.length&&(h.css("animation","none"),this.br.scrollIntoView(h[0],{block:"center",inline:"center",behavior:o?"smooth":"auto"}),await new Promise(e=>setTimeout(e,100)),h.removeAttr("style"))}removeSearchResults(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.removeSearchHilites(),this.searchTerm=null,this.searchResults=null,e||this.br.trigger(f.eventNames.fragmentChange)}}null==f||f.registerPlugin("search",v)},9748:(t,r,n)=>{n.d(r,{$x:()=>h,ND:()=>c,YH:()=>a,_4:()=>i}),n(4423),n(3792),n(3362),n(2953);const s={"zh-hans":"中文 (Zhōngwén)"};function a(e){if(!e)return null;if(e=e.toLocaleLowerCase(),s[e])return e;const t=o(e,["iso639_1"])||o(e,["iso639_2T"])||o(e,["iso639_2B","name","nativeName"]);return t?t.iso639_1:null}function i(e){if(!e)return null;if(e=e.toLocaleLowerCase(),s[e])return s[e];const t=o(e,["iso639_1"])||o(e,["iso639_2T"])||o(e,["iso639_2B","name","nativeName"]);return null!=t&&t.nativeName?t.nativeName.split(", ")[0]:null}function o(t,r){if(!t)return null;t=t.toLowerCase();for(const s of e)for(const e of r){var n;if(null!==(n=s[e])&&void 0!==n&&n.toLowerCase().split(", ").includes(t))return s}return null}function c(){try{return!!window.localStorage}catch(e){return!1}}const h=-1!=location.toString().indexOf("_debugReadAloud=true")},8965:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e){const t=e.match(/\S+/g);return t?t.length:0}function a(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i;return null==e?void 0:e.replace(/\{\{([^}]*?)\}\}/g,(e,a)=>{if(!a)return e;const i=function(e){if(Array.isArray(e))return e}(h=a.split("|").map(e=>e.trim()))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(h)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(h)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),o=i[0],c=n(i).slice(1);var h;if(!(o in r)&&!(o in t))return e;const l=o in r?r[o]:o in t?t[o]:null;return c.map(e=>s[e]).reduce((e,t)=>t(e),l&&l.toString())})}r.d(t,{gT:()=>a,rj:()=>s}),r(9463),r(3792),r(2712),r(7495),r(5440),r(2762),r(2953);const i={urlencode:encodeURIComponent}}};import{__webpack_require__ as t}from"../ia-bookreader.js";t.C({__webpack_esm_ids__,__webpack_esm_modules__});const r=t(631).u;export{r as SearchPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.search.js.map
|