@internetarchive/bookreader 5.0.0-24-sortingstate-1 → 5.0.0-24-sortingstate-2
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/BookReader.js +1 -4
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/bookreader-component-bundle.js +16 -22
- package/BookReader/bookreader-component-bundle.js.map +1 -1
- package/BookReader/icons/1up.svg +1 -12
- package/BookReader/icons/2up.svg +1 -15
- package/BookReader/icons/advance.svg +3 -26
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -1
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -17
- package/BookReader/icons/fullscreen_exit.svg +1 -17
- package/BookReader/icons/hamburger.svg +1 -15
- package/BookReader/icons/left-arrow.svg +1 -12
- package/BookReader/icons/magnify-minus.svg +1 -16
- package/BookReader/icons/magnify-plus.svg +1 -17
- package/BookReader/icons/magnify.svg +1 -15
- package/BookReader/icons/pause.svg +1 -23
- package/BookReader/icons/play.svg +1 -22
- package/BookReader/icons/playback-speed.svg +1 -34
- package/BookReader/icons/read-aloud.svg +1 -22
- package/BookReader/icons/review.svg +3 -22
- package/BookReader/icons/thumbnails.svg +1 -17
- package/BookReader/icons/voice.svg +1 -1
- package/BookReader/icons/volume-full.svg +1 -22
- package/BookReader/images/BRicons.svg +5 -94
- package/BookReader/images/books_graphic.svg +1 -177
- package/BookReader/images/icon_book.svg +1 -12
- package/BookReader/images/icon_bookmark.svg +1 -12
- package/BookReader/images/icon_gear.svg +1 -14
- package/BookReader/images/icon_hamburger.svg +1 -20
- package/BookReader/images/icon_home.svg +1 -21
- package/BookReader/images/icon_info.svg +1 -11
- package/BookReader/images/icon_one_page.svg +1 -8
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -15
- package/BookReader/images/icon_search_button.svg +1 -8
- package/BookReader/images/icon_share.svg +1 -9
- package/BookReader/images/icon_skip-ahead.svg +1 -6
- package/BookReader/images/icon_skip-back.svg +2 -13
- package/BookReader/images/icon_speaker.svg +1 -18
- package/BookReader/images/icon_speaker_open.svg +1 -10
- package/BookReader/images/icon_thumbnails.svg +1 -12
- package/BookReader/images/icon_toc.svg +1 -5
- package/BookReader/images/icon_two_pages.svg +1 -9
- package/BookReader/images/marker_chap-off.svg +1 -11
- package/BookReader/images/marker_chap-on.svg +1 -11
- package/BookReader/images/marker_srch-on.svg +1 -11
- package/BookReader/jquery-1.10.1.js +2 -108
- package/BookReader/plugins/plugin.archive_analytics.js +1 -170
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -163
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +1 -333
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.iframe.js +1 -72
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.mobile_nav.js +1 -332
- package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
- package/BookReader/plugins/plugin.resume.js +1 -241
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1263
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +1 -839
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +2 -9114
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +46 -33
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -326
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/webcomponents-bundle.js +2 -411
- package/BookReader/webcomponents-bundle.js.map +1 -1
- package/package.json +1 -1
- package/src/BookNavigator/volumes/volumes-provider.js +1 -1
- package/src/BookReader.js +0 -4
- package/src/plugins/plugin.url.js +22 -16
- package/tests/jest/plugins/plugin.url.test.js +4 -4
- package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +6 -6
@@ -54,24 +54,26 @@ __webpack_require__.r(__webpack_exports__);
|
|
54
54
|
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_19__);
|
55
55
|
/* harmony import */ var core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! core-js/modules/es.object.entries.js */ "./node_modules/core-js/modules/es.object.entries.js");
|
56
56
|
/* harmony import */ var core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_20__);
|
57
|
-
/* harmony import */ var
|
58
|
-
/* harmony import */ var
|
59
|
-
/* harmony import */ var
|
60
|
-
/* harmony import */ var
|
61
|
-
/* harmony import */ var
|
62
|
-
/* harmony import */ var
|
63
|
-
/* harmony import */ var
|
64
|
-
/* harmony import */ var
|
65
|
-
/* harmony import */ var
|
66
|
-
/* harmony import */ var
|
67
|
-
/* harmony import */ var
|
68
|
-
/* harmony import */ var
|
69
|
-
/* harmony import */ var
|
70
|
-
/* harmony import */ var
|
71
|
-
/* harmony import */ var
|
72
|
-
/* harmony import */ var
|
73
|
-
/* harmony import */ var
|
74
|
-
/* harmony import */ var
|
57
|
+
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ "./node_modules/core-js/modules/es.string.search.js");
|
58
|
+
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_21__);
|
59
|
+
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js");
|
60
|
+
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_22__);
|
61
|
+
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js");
|
62
|
+
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_23__);
|
63
|
+
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js");
|
64
|
+
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_24__);
|
65
|
+
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js");
|
66
|
+
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_25__);
|
67
|
+
/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! core-js/modules/es.array.from.js */ "./node_modules/core-js/modules/es.array.from.js");
|
68
|
+
/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_26__);
|
69
|
+
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ "./node_modules/core-js/modules/es.object.get-prototype-of.js");
|
70
|
+
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_27__);
|
71
|
+
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! core-js/modules/es.reflect.construct.js */ "./node_modules/core-js/modules/es.reflect.construct.js");
|
72
|
+
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_28__);
|
73
|
+
/* harmony import */ var core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! core-js/modules/es.reflect.get.js */ "./node_modules/core-js/modules/es.reflect.get.js");
|
74
|
+
/* harmony import */ var core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_29__);
|
75
|
+
/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js");
|
76
|
+
/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_30__);
|
75
77
|
/* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery");
|
76
78
|
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
77
79
|
|
@@ -140,6 +142,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
140
142
|
|
141
143
|
|
142
144
|
|
145
|
+
|
143
146
|
|
144
147
|
|
145
148
|
/* global BookReader */
|
@@ -368,7 +371,8 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
368
371
|
|
369
372
|
_classCallCheck(this, UrlPlugin);
|
370
373
|
|
371
|
-
this.bookReaderOptions = options;
|
374
|
+
this.bookReaderOptions = options; // the canonical order of elements is important in the path and query string
|
375
|
+
|
372
376
|
this.urlSchema = [{
|
373
377
|
name: 'page',
|
374
378
|
position: 'path',
|
@@ -404,7 +408,8 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
404
408
|
/**
|
405
409
|
* Parse JSON object URL state to string format
|
406
410
|
* Arrange path names in an order that it is positioned on the urlSchema
|
407
|
-
* @param {object}
|
411
|
+
* @param {object} urlSchema
|
412
|
+
* @param {string} urlState
|
408
413
|
* @returns {string}
|
409
414
|
*/
|
410
415
|
|
@@ -452,17 +457,17 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
452
457
|
* /page/n7/mode/2up => {page: 'n7', mode: '2up'}
|
453
458
|
* /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}
|
454
459
|
* @param {array} urlSchema
|
455
|
-
* @param {string}
|
460
|
+
* @param {string} urlString
|
456
461
|
* @returns {object}
|
457
462
|
*/
|
458
463
|
|
459
464
|
}, {
|
460
465
|
key: "urlStringToUrlState",
|
461
|
-
value: function urlStringToUrlState(urlSchema,
|
462
|
-
var urlState = {}; // Fetch searchParams from given {
|
466
|
+
value: function urlStringToUrlState(urlSchema, urlString) {
|
467
|
+
var urlState = {}; // Fetch searchParams from given {urlString}
|
463
468
|
// Note: whole URL path is needed for URLSearchParams
|
464
469
|
|
465
|
-
var urlPath = new URL(
|
470
|
+
var urlPath = new URL(urlString, 'http://example.com');
|
466
471
|
var urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());
|
467
472
|
var urlStrSplitSlashObj = Object.fromEntries(urlPath.pathname.match(/[^\\/]+\/[^\\/]+/g).map(function (x) {
|
468
473
|
return x.split('/');
|
@@ -472,7 +477,8 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
472
477
|
return Object.keys(_object).some(function (value) {
|
473
478
|
return value == _key;
|
474
479
|
});
|
475
|
-
};
|
480
|
+
}; // Add path objects to urlState
|
481
|
+
|
476
482
|
|
477
483
|
urlSchema.filter(function (schema) {
|
478
484
|
return schema.position == 'path';
|
@@ -483,13 +489,21 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
483
489
|
|
484
490
|
var hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);
|
485
491
|
var hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;
|
486
|
-
|
487
|
-
if (
|
492
|
+
|
493
|
+
if (hasDeprecatedKey) {
|
494
|
+
urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];
|
495
|
+
return;
|
496
|
+
}
|
497
|
+
|
498
|
+
if (hasPropertyKey) {
|
499
|
+
urlState[schema.name] = urlStrSplitSlashObj[schema.name];
|
500
|
+
return;
|
501
|
+
}
|
488
502
|
}); // Add searchParams to urlState
|
489
503
|
// Check if Object value is a Boolean and convert value to Boolean
|
490
504
|
// Otherwise, return Object value
|
491
505
|
|
492
|
-
var
|
506
|
+
var isBooleanValue = function isBooleanValue(value) {
|
493
507
|
return value === 'true' || (value === 'false' ? false : value);
|
494
508
|
};
|
495
509
|
|
@@ -498,7 +512,7 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
498
512
|
key = _ref2[0],
|
499
513
|
value = _ref2[1];
|
500
514
|
|
501
|
-
urlState[key] =
|
515
|
+
urlState[key] = isBooleanValue(value);
|
502
516
|
});
|
503
517
|
return urlState;
|
504
518
|
}
|
@@ -589,14 +603,13 @@ var UrlPlugin = /*#__PURE__*/function () {
|
|
589
603
|
}
|
590
604
|
/**
|
591
605
|
* Will read either the hash or URL and return the bookreader fragment
|
592
|
-
* @param {string} location
|
593
|
-
* @return {string}
|
594
606
|
*/
|
595
607
|
|
596
608
|
}, {
|
597
609
|
key: "pullFromAddressBar",
|
598
|
-
value: function pullFromAddressBar(
|
599
|
-
var
|
610
|
+
value: function pullFromAddressBar() {
|
611
|
+
var location = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.location;
|
612
|
+
var path = this.urlMode === 'history' ? location.pathname.substr(this.urlHistoryBasePath.length) + location.search : location.hash.substr(1);
|
600
613
|
this.urlState = this.urlStringToUrlState(this.urlSchema, path);
|
601
614
|
}
|
602
615
|
}]);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = 'hash';\n this.urlHistoryBasePath = '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlSchema, urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/$/, '')}`;\n const concatenatedPath = `/${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `/${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {array} urlSchema\n * @param {string} str\n * @returns {object}\n */\n urlStringToUrlState(urlSchema, str) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URLSearchParams\n const urlPath = new URL(str, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const urlStrSplitSlashObj = Object.fromEntries(urlPath.pathname\n .match(/[^\\\\/]+\\/[^\\\\/]+/g)\n .map(x => x.split('/'))\n );\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n if (!urlStrSplitSlashObj[schema.name] && schema.default) {\n return urlState[schema.name] = schema.default;\n }\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey)\n return urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n\n if (hasPropertyKey)\n return urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n });\n\n // Add searchParams to urlState\n // Check if Object value is a Boolean and convert value to Boolean\n // Otherwise, return Object value\n const isBoolean = value => value === 'true' || (value === 'false' ? false : value);\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = isBoolean(value);\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlSchema, this.urlState);\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${urlStrPath}`;\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + urlStrPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n * @param {string} location\n * @return {string}\n */\n pullFromAddressBar (location) {\n const path = this.urlMode === 'history'\n ? location.substr(this.urlHistoryBasePath.length)\n : location.substr(1);\n this.urlState = this.urlStringToUrlState(this.urlSchema, path);\n }\n}\nexport class BookreaderUrlPlugin extends BookReader {\n\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n"],"names":["jQuery","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlMode","urlHistoryBasePath","urlTrackedParams","urlTrackIndex0","prototype","setup","super_","options","call","locationPollId","oldLocationHash","oldUserHash","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","length","substr","urlReadFragment","clearInterval","updateHash","newFragment","hasFragmentChange","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","setInterval","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","window","history","replaceState","baseWithoutSlash","replace","newFragmentWithSlash","newUrlPath","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","location","url","URLSearchParams","has","q","get","pathname","hash","urlReadHashFragment","UrlPlugin","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlLocationPollId","searchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","concatenatedPath","toString","str","urlPath","URL","urlSearchParamsObj","fromEntries","entries","urlStrSplitSlashObj","match","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","hasDeprecatedKey","isBoolean","pushToAddressBar","urlStrPath","urlStateToUrlString","urlStringToUrlState","path","BookreaderUrlPlugin","urlPlugin","listenForHashChanges"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = 'hash';\n this.urlHistoryBasePath = '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {object} urlSchema\n * @param {string} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlSchema, urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/$/, '')}`;\n const concatenatedPath = `/${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `/${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {array} urlSchema\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlSchema, urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {urlString}\n // Note: whole URL path is needed for URLSearchParams\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const urlStrSplitSlashObj = Object.fromEntries(urlPath.pathname\n .match(/[^\\\\/]+\\/[^\\\\/]+/g)\n .map(x => x.split('/'))\n );\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n if (!urlStrSplitSlashObj[schema.name] && schema.default) {\n return urlState[schema.name] = schema.default;\n }\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n // Check if Object value is a Boolean and convert value to Boolean\n // Otherwise, return Object value\n const isBooleanValue = value => value === 'true' || (value === 'false' ? false : value);\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = isBooleanValue(value);\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlSchema, this.urlState);\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${urlStrPath}`;\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + urlStrPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(this.urlSchema, path);\n }\n}\n\nexport class BookreaderUrlPlugin extends BookReader {\n\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n"],"names":["jQuery","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlMode","urlHistoryBasePath","urlTrackedParams","urlTrackIndex0","prototype","setup","super_","options","call","locationPollId","oldLocationHash","oldUserHash","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","length","substr","urlReadFragment","clearInterval","updateHash","newFragment","hasFragmentChange","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","setInterval","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","window","history","replaceState","baseWithoutSlash","replace","newFragmentWithSlash","newUrlPath","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","location","url","URLSearchParams","has","q","get","pathname","hash","urlReadHashFragment","UrlPlugin","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlLocationPollId","searchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","urlStrSplitSlashObj","match","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","hasDeprecatedKey","isBooleanValue","pushToAddressBar","urlStrPath","urlStateToUrlString","urlStringToUrlState","path","search","BookreaderUrlPlugin","urlPlugin","listenForHashChanges"],"sourceRoot":""}
|