@internetarchive/bookreader 5.0.0-24-sortingstate-7 → 5.0.0-24-sortingstate-11

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.
@@ -28998,7 +28998,7 @@ var svg = function svg(strings) {
28998
28998
  /***/ (function(module) {
28999
28999
 
29000
29000
  "use strict";
29001
- module.exports = JSON.parse('{"name":"@internetarchive/bookreader","version":"5.0.0-24-sortingstate-7","description":"The Internet Archive BookReader.","repository":{"type":"git","url":"git+https://github.com/internetarchive/bookreader.git"},"publishConfig":{"access":"public"},"module":"src/BookNavigator/BookNavigator.js","keywords":["online","bookreader","interface","ebooks","internet archive"],"author":"Internet Archive","license":"AGPL-3.0","bugs":{"url":"https://github.com/internetarchive/bookreader/issues"},"homepage":"https://github.com/internetarchive/bookreader#readme","private":false,"dependencies":{"@internetarchive/ia-activity-indicator":"^0.0.1","@internetarchive/ia-icons":"^1.2.2","@internetarchive/ia-menu-slider":"^1.1.0","@internetarchive/ia-sharing-options":"^0.1.2","@internetarchive/icon-bookmark":"^1.1.3","@internetarchive/icon-collapse-sidebar":"^1.1.0","@internetarchive/icon-edit-pencil":"1.1.5","@internetarchive/icon-magnify-minus":"^1.2.3","@internetarchive/icon-magnify-plus":"^1.2.3","@internetarchive/icon-search":"^1.2.3","@internetarchive/modal-manager":"^0.1.0","@juggle/resize-observer":"^3.3.1","lit-element":"^2.4.0","lit-html":"^1.3.0"},"devDependencies":{"@babel/core":"7.15.0","@babel/eslint-parser":"^7.15.7","@babel/plugin-proposal-class-properties":"^7.14.5","@babel/plugin-proposal-decorators":"^7.14.5","@babel/preset-env":"7.15.0","@open-wc/testing":"^2.5.33","@open-wc/testing-karma":"^4.0.9","@types/jest":"27.0.1","@webcomponents/webcomponentsjs":"^2.6.0","babel-loader":"8.2.2","codecov":"3.8.3","concurrently":"6.0.2","core-js":"3.16.2","cpx2":"3.0.0","eslint":"^7.32.0","eslint-plugin-no-jquery":"^2.6.0","eslint-plugin-testcafe":"0.2.1","hammerjs":"^2.0.8","http-server":"0.12.3","iso-language-codes":"1.1.0","jest":"27.0.6","jquery":"1.11.3","jquery-colorbox":"1.6.4","jquery-ui":"1.12.1","jquery-ui-touch-punch":"0.2.3","jquery.browser":"0.1.0","jquery.mmenu":"5.6.5","karma-coverage":"^2.0.3","live-server":"1.2.1","node-fetch":"2.6.1","regenerator-runtime":"0.13.9","sass":"1.38.2","sinon":"11.1.2","soundmanager2":"2.97.20170602","svgo":"2.4.0","testcafe":"^1.16.1","testcafe-browser-provider-browserstack":"^1.13.2-alpha.1","webpack":"5.51.1","webpack-cli":"4.8.0"},"jest":{"testEnvironment":"jsdom","transformIgnorePatterns":["node_modules/(?!(lit-html|lit-element|lit)/)"],"moduleNameMapper":{"^@/(.*)$":"<rootDir>/$1"},"setupFiles":["./src/jquery-wrapper.js"],"roots":["<rootDir>/src/","<rootDir>/tests/jest/"],"coverageDirectory":"<rootDir>/coverage-jest"},"scripts":{"preversion":"npm run test && node scripts/preversion.js","version":"node scripts/version.js","postversion":"node scripts/postversion.js","build":"npm run clean && npm run build-js && npm run build-css && npm run build-assets","build-assets":"npx cpx \\"src/assets/**/*\\" BookReader && npx svgo -f BookReader/icons && npx svgo -f BookReader/images","build-assets:watch":"npx cpx --watch --verbose \\"src/assets/**/*\\" BookReader","build-js":"npx webpack","build-js:watch":"npx webpack --mode=development --watch","build-css":"npx sass --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css","build-css:watch":"npx sass --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css","clean":"rm -r BookReader/ || true","lint":"npx eslint src/ tests/ *.js","lint:fix":"npx eslint --fix src/ tests/ *.js","serve":"npx http-server . --port 8000","serve-live":"npx live-server . --port 8000 --watch=index.html,BookReader,BookReaderDemo","serve-dev":"npm run build-css && npx concurrently --kill-others npm:serve-live npm:build-*:watch","test":"npm run test-jest && npm run test-karma","test:e2e":"npm run build && npx testcafe","test:e2e:dev":"npx testcafe --live --dev","test-jest:watch":"npx jest --watch","test-jest":"npx jest --coverage --colors","test-karma":"npx karma start --coverage","test-karma:watch":"npx karma start --auto-watch=true --single-run=false","DOCS:update:test-deps":"If CI succeeds, these should be good to update","update:test-deps":"npm i @babel/eslint-parser@latest @open-wc/testing@latest @open-wc/testing-karma@latest @types/jest@latest codecov@latest eslint@latest eslint-plugin-testcafe@latest jest@latest karma-coverage@latest sinon@latest testcafe@latest","DOCS:update:build-deps":"These can cause strange changes, so do an npm run build + check file size (git diff --stat), and check the site is as expected","update:build-deps":"npm i @babel/core@latest @babel/preset-env@latest babel-loader@latest core-js@latest regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest","codecov":"npx codecov"}}');
29001
+ module.exports = JSON.parse('{"name":"@internetarchive/bookreader","version":"5.0.0-24-sortingstate-11","description":"The Internet Archive BookReader.","repository":{"type":"git","url":"git+https://github.com/internetarchive/bookreader.git"},"publishConfig":{"access":"public"},"module":"src/BookNavigator/BookNavigator.js","keywords":["online","bookreader","interface","ebooks","internet archive"],"author":"Internet Archive","license":"AGPL-3.0","bugs":{"url":"https://github.com/internetarchive/bookreader/issues"},"homepage":"https://github.com/internetarchive/bookreader#readme","private":false,"dependencies":{"@internetarchive/ia-activity-indicator":"^0.0.1","@internetarchive/ia-icons":"^1.2.2","@internetarchive/ia-menu-slider":"^1.1.0","@internetarchive/ia-sharing-options":"^0.1.2","@internetarchive/icon-bookmark":"^1.1.3","@internetarchive/icon-collapse-sidebar":"^1.1.0","@internetarchive/icon-edit-pencil":"1.1.5","@internetarchive/icon-magnify-minus":"^1.2.3","@internetarchive/icon-magnify-plus":"^1.2.3","@internetarchive/icon-search":"^1.2.3","@internetarchive/modal-manager":"^0.1.0","@juggle/resize-observer":"^3.3.1","lit-element":"^2.4.0","lit-html":"^1.3.0"},"devDependencies":{"@babel/core":"7.15.0","@babel/eslint-parser":"^7.15.7","@babel/plugin-proposal-class-properties":"^7.14.5","@babel/plugin-proposal-decorators":"^7.14.5","@babel/preset-env":"7.15.0","@open-wc/testing":"^2.5.33","@open-wc/testing-karma":"^4.0.9","@types/jest":"27.0.1","@webcomponents/webcomponentsjs":"^2.6.0","babel-loader":"8.2.2","codecov":"3.8.3","concurrently":"6.0.2","core-js":"3.16.2","cpx2":"3.0.0","eslint":"^7.32.0","eslint-plugin-no-jquery":"^2.6.0","eslint-plugin-testcafe":"0.2.1","hammerjs":"^2.0.8","http-server":"0.12.3","iso-language-codes":"1.1.0","jest":"27.0.6","jquery":"1.11.3","jquery-colorbox":"1.6.4","jquery-ui":"1.12.1","jquery-ui-touch-punch":"0.2.3","jquery.browser":"0.1.0","jquery.mmenu":"5.6.5","karma-coverage":"^2.0.3","live-server":"1.2.1","node-fetch":"2.6.1","regenerator-runtime":"0.13.9","sass":"1.38.2","sinon":"11.1.2","soundmanager2":"2.97.20170602","svgo":"2.4.0","testcafe":"^1.16.1","testcafe-browser-provider-browserstack":"^1.13.2-alpha.1","webpack":"5.51.1","webpack-cli":"4.8.0"},"jest":{"testEnvironment":"jsdom","transformIgnorePatterns":["node_modules/(?!(lit-html|lit-element|lit)/)"],"moduleNameMapper":{"^@/(.*)$":"<rootDir>/$1"},"setupFiles":["./src/jquery-wrapper.js"],"roots":["<rootDir>/src/","<rootDir>/tests/jest/"],"coverageDirectory":"<rootDir>/coverage-jest"},"scripts":{"preversion":"npm run test && node scripts/preversion.js","version":"node scripts/version.js","postversion":"node scripts/postversion.js","build":"npm run clean && npm run build-js && npm run build-css && npm run build-assets","build-assets":"npx cpx \\"src/assets/**/*\\" BookReader && npx svgo -f BookReader/icons && npx svgo -f BookReader/images","build-assets:watch":"npx cpx --watch --verbose \\"src/assets/**/*\\" BookReader","build-js":"npx webpack","build-js:watch":"npx webpack --mode=development --watch","build-css":"npx sass --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css","build-css:watch":"npx sass --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css","clean":"rm -r BookReader/ || true","lint":"npx eslint src/ tests/ *.js","lint:fix":"npx eslint --fix src/ tests/ *.js","serve":"npx http-server . --port 8000","serve-live":"npx live-server . --port 8000 --watch=index.html,BookReader,BookReaderDemo","serve-dev":"npm run build-css && npx concurrently --kill-others npm:serve-live npm:build-*:watch","test":"npm run test-jest && npm run test-karma","test:e2e":"npm run build && npx testcafe","test:e2e:dev":"npx testcafe --live --dev","test-jest:watch":"npx jest --watch","test-jest":"npx jest --coverage --colors","test-karma":"npx karma start --coverage","test-karma:watch":"npx karma start --auto-watch=true --single-run=false","DOCS:update:test-deps":"If CI succeeds, these should be good to update","update:test-deps":"npm i @babel/eslint-parser@latest @open-wc/testing@latest @open-wc/testing-karma@latest @types/jest@latest codecov@latest eslint@latest eslint-plugin-testcafe@latest jest@latest karma-coverage@latest sinon@latest testcafe@latest","DOCS:update:build-deps":"These can cause strange changes, so do an npm run build + check file size (git diff --stat), and check the site is as expected","update:build-deps":"npm i @babel/core@latest @babel/preset-env@latest babel-loader@latest core-js@latest regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest","codecov":"npx codecov"}}');
29002
29002
 
29003
29003
  /***/ })
29004
29004
 
@@ -400,7 +400,7 @@ var UrlPlugin = /*#__PURE__*/function () {
400
400
  }];
401
401
  this.urlState = {};
402
402
  this.urlMode = this.bookReaderOptions.urlMode || 'hash';
403
- this.urlHistoryBasePath = '/';
403
+ this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';
404
404
  this.urlLocationPollId = null;
405
405
  this.oldLocationHash = null;
406
406
  this.oldUserHash = null;
@@ -408,7 +408,7 @@ var UrlPlugin = /*#__PURE__*/function () {
408
408
  /**
409
409
  * Parse JSON object URL state to string format
410
410
  * Arrange path names in an order that it is positioned on the urlSchema
411
- * @param {string} urlState
411
+ * @param {Object} urlState
412
412
  * @returns {string}
413
413
  */
414
414
 
@@ -560,11 +560,12 @@ var UrlPlugin = /*#__PURE__*/function () {
560
560
  }, {
561
561
  key: "pushToAddressBar",
562
562
  value: function pushToAddressBar() {
563
- var urlStrPath = this.urlStateToUrlString(this.urlSchema, this.urlState);
563
+ var urlStrPath = this.urlStateToUrlString(this.urlState);
564
564
 
565
565
  if (this.urlMode == 'history') {
566
566
  if (window.history && window.history.replaceState) {
567
567
  var newUrlPath = "".concat(this.urlHistoryBasePath).concat(urlStrPath);
568
+ console.log('newUrlPath: ', newUrlPath);
568
569
  window.history.replaceState({}, null, newUrlPath);
569
570
  }
570
571
  } else {
@@ -614,7 +615,7 @@ var UrlPlugin = /*#__PURE__*/function () {
614
615
  var location = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.location;
615
616
  var path = this.urlMode === 'history' ? location.pathname.substr(this.urlHistoryBasePath.length) + location.search : location.hash.substr(1);
616
617
  console.log('path: ', path);
617
- this.urlState = this.urlStringToUrlState(this.urlSchema, path);
618
+ this.urlState = this.urlStringToUrlState(path);
618
619
  }
619
620
  }]);
620
621
 
@@ -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 // 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 = this.bookReaderOptions.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 {string} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.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 = this.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 {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n console.log('urlString: ', 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 console.log('urlPath: ', urlPath);\n console.log('urlSearch: ', urlPath.searchParams, ' urlPath: ', urlPath.pathname);\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 this.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 console.log('path: ', path);\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","console","log","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":""}
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 = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.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(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.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 = this.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 {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n console.log('urlString: ', 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 console.log('urlPath: ', urlPath);\n console.log('urlSearch: ', urlPath.searchParams, ' urlPath: ', urlPath.pathname);\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 this.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.urlState);\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${urlStrPath}`;\n console.log('newUrlPath: ', newUrlPath);\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 console.log('path: ', path);\n this.urlState = this.urlStringToUrlState(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","console","log","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":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/bookreader",
3
- "version": "5.0.0-24-sortingstate-7",
3
+ "version": "5.0.0-24-sortingstate-11",
4
4
  "description": "The Internet Archive BookReader.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -213,7 +213,7 @@ export class UrlPlugin {
213
213
 
214
214
  this.urlState = {};
215
215
  this.urlMode = this.bookReaderOptions.urlMode || 'hash';
216
- this.urlHistoryBasePath = '/';
216
+ this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';
217
217
  this.urlLocationPollId = null;
218
218
  this.oldLocationHash = null;
219
219
  this.oldUserHash = null;
@@ -222,7 +222,7 @@ export class UrlPlugin {
222
222
  /**
223
223
  * Parse JSON object URL state to string format
224
224
  * Arrange path names in an order that it is positioned on the urlSchema
225
- * @param {string} urlState
225
+ * @param {Object} urlState
226
226
  * @returns {string}
227
227
  */
228
228
  urlStateToUrlString(urlState) {
@@ -343,10 +343,11 @@ export class UrlPlugin {
343
343
  * Push URL params to addressbar
344
344
  */
345
345
  pushToAddressBar() {
346
- const urlStrPath = this.urlStateToUrlString(this.urlSchema, this.urlState);
346
+ const urlStrPath = this.urlStateToUrlString(this.urlState);
347
347
  if (this.urlMode == 'history') {
348
348
  if (window.history && window.history.replaceState) {
349
349
  const newUrlPath = `${this.urlHistoryBasePath}${urlStrPath}`;
350
+ console.log('newUrlPath: ', newUrlPath);
350
351
  window.history.replaceState({}, null, newUrlPath);
351
352
  }
352
353
  } else {
@@ -386,7 +387,7 @@ export class UrlPlugin {
386
387
  ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)
387
388
  : location.hash.substr(1);
388
389
  console.log('path: ', path);
389
- this.urlState = this.urlStringToUrlState(this.urlSchema, path);
390
+ this.urlState = this.urlStringToUrlState(path);
390
391
  }
391
392
  }
392
393