UNPKG

201 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/electron/renderer/index.ts"],"names":[],"mappings":"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","sourcesContent":["// ==LICENSE-BEGIN==\n// Copyright 2017 European Digital Reading Lab. All rights reserved.\n// Licensed to the Readium Foundation under one or more contributor license agreements.\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file exposed on Github (readium) in the project repository.\n// ==LICENSE-END==\n\nimport * as path from \"path\";\n\nimport {\n IEventPayload_R2_EVENT_READIUMCSS,\n} from \"@r2-navigator-js/electron/common/events\";\nimport {\n IReadiumCSS,\n readiumCSSDefaults,\n} from \"@r2-navigator-js/electron/common/readium-css-settings\";\nimport {\n READIUM2_ELECTRON_HTTP_PROTOCOL,\n convertCustomSchemeToHttpUrl,\n} from \"@r2-navigator-js/electron/common/sessions\";\nimport { getURLQueryParams } from \"@r2-navigator-js/electron/renderer/common/querystring\";\nimport {\n LocatorExtended,\n TTSStateEnum,\n getCurrentReadingLocation,\n handleLinkLocator,\n handleLinkUrl,\n installNavigatorDOM,\n isLocatorVisible,\n navLeftOrRight,\n readiumCssOnOff,\n setEpubReadingSystemInfo,\n setReadingLocationSaver,\n setReadiumCssJsonGetter,\n ttsClickEnable,\n ttsListen,\n ttsNext,\n ttsPause,\n ttsPlay,\n ttsPrevious,\n ttsResume,\n ttsStop,\n} from \"@r2-navigator-js/electron/renderer/index\";\nimport {\n initGlobalConverters_OPDS,\n} from \"@r2-opds-js/opds/init-globals\";\nimport {\n initGlobalConverters_GENERIC,\n initGlobalConverters_SHARED,\n} from \"@r2-shared-js/init-globals\";\nimport { Locator } from \"@r2-shared-js/models/locator\";\nimport { IStringMap } from \"@r2-shared-js/models/metadata-multilang\";\nimport { Publication } from \"@r2-shared-js/models/publication\";\nimport { Link } from \"@r2-shared-js/models/publication-link\";\nimport { debounce } from \"debounce\";\nimport { ipcRenderer } from \"electron\";\nimport { JSON as TAJSON } from \"ta-json-x\";\nimport * as throttle from \"throttleit\";\n\nimport {\n IEventPayload_R2_EVENT_LCP_LSD_RENEW,\n IEventPayload_R2_EVENT_LCP_LSD_RENEW_RES,\n IEventPayload_R2_EVENT_LCP_LSD_RETURN,\n IEventPayload_R2_EVENT_LCP_LSD_RETURN_RES,\n IEventPayload_R2_EVENT_TRY_LCP_PASS,\n IEventPayload_R2_EVENT_TRY_LCP_PASS_RES,\n R2_EVENT_LCP_LSD_RENEW,\n R2_EVENT_LCP_LSD_RENEW_RES,\n R2_EVENT_LCP_LSD_RETURN,\n R2_EVENT_LCP_LSD_RETURN_RES,\n R2_EVENT_TRY_LCP_PASS,\n R2_EVENT_TRY_LCP_PASS_RES,\n} from \"../common/events\";\nimport { IStore } from \"../common/store\";\nimport { StoreElectron } from \"../common/store-electron\";\nimport { HTML_COLORS } from \"./colours\";\nimport { setupDragDrop } from \"./drag-drop\";\nimport {\n IRiotOptsLinkList,\n IRiotOptsLinkListItem,\n IRiotTagLinkList,\n riotMountLinkList,\n} from \"./riots/linklist/index_\";\nimport {\n IRiotOptsLinkListGroup,\n IRiotOptsLinkListGroupItem,\n IRiotTagLinkListGroup,\n riotMountLinkListGroup,\n} from \"./riots/linklistgroup/index_\";\nimport {\n IRiotOptsLinkTree,\n IRiotOptsLinkTreeItem,\n IRiotTagLinkTree,\n riotMountLinkTree,\n} from \"./riots/linktree/index_\";\nimport {\n IRiotOptsMenuSelect,\n IRiotOptsMenuSelectItem,\n IRiotTagMenuSelect,\n riotMountMenuSelect,\n} from \"./riots/menuselect/index_\";\n\nimport SystemFonts = require(\"system-font-families\");\n\n// import { consoleRedirect } from \"@r2-navigator-js/electron/renderer/common/console-redirect\";\n// // const releaseConsoleRedirect =\n// consoleRedirect(\"r2:testapp#electron/renderer/index\", process.stdout, process.stderr, true);\n\nconst IS_DEV = (process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"dev\");\n\nconst queryParams = getURLQueryParams();\n\n// import { registerProtocol } from \"@r2-navigator-js/electron/renderer/common/protocol\";\n// registerProtocol();\n\nconst readiumCssDefaultsJson: IReadiumCSS = readiumCSSDefaults;\nconst readiumCssKeys = Object.keys(readiumCSSDefaults);\n// console.log(readiumCssKeys);\nreadiumCssKeys.forEach((key: string) => {\n const value = (readiumCSSDefaults as any)[key];\n // console.log(key, \" => \", value);\n if (typeof value === \"undefined\") {\n (readiumCssDefaultsJson as any)[key] = null;\n } else {\n (readiumCssDefaultsJson as any)[key] = value;\n }\n});\n\nconst electronStore: IStore = new StoreElectron(\"readium2-testapp\", {\n basicLinkTitles: true,\n readiumCSS: readiumCssDefaultsJson,\n readiumCSSEnable: false,\n});\n\nconst electronStoreLCP: IStore = new StoreElectron(\"readium2-testapp-lcp\", {});\n\n// console.log(window.location);\n// console.log(document.baseURI);\n// console.log(document.URL);\n\ninitGlobalConverters_OPDS();\ninitGlobalConverters_SHARED();\ninitGlobalConverters_GENERIC();\n\n// tslint:disable-next-line:no-string-literal\nconst pubServerRoot = queryParams[\"pubServerRoot\"];\nconsole.log(pubServerRoot);\n\nlet _publication: Publication | undefined;\n\nconst computeReadiumCssJsonMessage = (): IEventPayload_R2_EVENT_READIUMCSS => {\n\n const on = electronStore.get(\"readiumCSSEnable\");\n if (on) {\n let cssJson = electronStore.get(\"readiumCSS\");\n console.log(\"---- readiumCSS -----\");\n console.log(cssJson);\n console.log(\"-----\");\n if (!cssJson) {\n cssJson = readiumCSSDefaults;\n }\n const jsonMsg: IEventPayload_R2_EVENT_READIUMCSS = {\n setCSS: cssJson,\n urlRoot: pubServerRoot,\n };\n return jsonMsg;\n } else {\n return { setCSS: undefined }; // reset all (disable ReadiumCSS)\n }\n};\nsetReadiumCssJsonGetter(computeReadiumCssJsonMessage);\n\nsetEpubReadingSystemInfo({ name: \"Readium2 test app\", version: \"0.0.1-alpha.1\" });\n\ninterface IReadingLocation {\n doc: string;\n loc: string | undefined; // legacy\n locCfi: string;\n locCssSelector: string;\n locProgression: number;\n locPosition: number;\n}\n\nfunction isFixedLayout(publication: Publication, link: Link | undefined): boolean {\n if (link && link.Properties) {\n if (link.Properties.Layout === \"fixed\") {\n return true;\n }\n if (typeof link.Properties.Layout !== \"undefined\") {\n return false;\n }\n }\n if (publication &&\n publication.Metadata &&\n publication.Metadata.Rendition) {\n return publication.Metadata.Rendition.Layout === \"fixed\";\n }\n return false;\n}\n\nfunction sanitizeText(str: string): string {\n // tslint:disable-next-line:max-line-length\n return str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\n/g, \" \").replace(/\\s\\s+/g, \" \").trim();\n}\n\nfunction onChangeReadingProgressionSlider() {\n const positionSelector = document.getElementById(\"positionSelector\") as HTMLElement;\n const mdcSlider = (positionSelector as any).mdcSlider;\n if (typeof mdcSlider.functionMode === \"undefined\") {\n return;\n }\n\n if (mdcSlider.functionMode === \"fixed-layout\" ||\n mdcSlider.functionMode === \"reflow-scrolled\") {\n if (_publication && _publication.Spine) {\n const zeroBasedIndex = mdcSlider.value - 1;\n const foundLink = _publication.Spine.find((_link, i) => {\n return zeroBasedIndex === i;\n });\n if (foundLink) {\n const locator = {\n href: foundLink.Href,\n locations: {\n cfi: undefined,\n cssSelector: undefined,\n position: undefined,\n progression: undefined,\n },\n };\n handleLinkLocator(locator);\n }\n }\n return;\n }\n\n // if (mdcSlider.functionMode === \"reflow-scrolled\") {\n // const currentPos = getCurrentReadingLocation(); // LocatorExtended\n // if (!currentPos) {\n // return;\n // }\n // const locator = {\n // href: currentPos.locator.href,\n // locations: {\n // cfi: undefined,\n // cssSelector: undefined,\n // position: undefined,\n\n // // zero-based percentage, reaches 100% unlike scroll offset\n // progression: mdcSlider.value / 100,\n // },\n // };\n // handleLinkLocator(locator);\n // return;\n // }\n\n if (mdcSlider.functionMode === \"reflow-paginated\") {\n const currentPos = getCurrentReadingLocation(); // LocatorExtended\n if (!currentPos) {\n return;\n }\n\n const locator = {\n href: currentPos.locator.href,\n locations: {\n cfi: undefined,\n cssSelector: undefined,\n position: undefined,\n\n // zero-based percentage, does not reach 100% (column/spread begin)\n progression: (mdcSlider.value - 1) / mdcSlider.max,\n },\n };\n handleLinkLocator(locator);\n }\n}\n\nfunction updateReadingProgressionSlider(locatorExtended: LocatorExtended | undefined) {\n const locator = locatorExtended ? locatorExtended.locator : undefined;\n\n const positionSelector = document.getElementById(\"positionSelector\") as HTMLElement;\n positionSelector.style.visibility = \"visible\";\n const positionSelectorValue = document.getElementById(\"positionSelectorValue\") as HTMLElement;\n const mdcSlider = (positionSelector as any).mdcSlider;\n\n let foundLink: Link | undefined;\n let spineIndex = -1;\n if (_publication && locator) {\n if (_publication.Spine) {\n foundLink = _publication.Spine.find((link, i) => {\n const ok = link.Href === locator.href;\n if (ok) {\n spineIndex = i;\n }\n return ok;\n });\n }\n if (!foundLink && _publication.Resources) {\n foundLink = _publication.Resources.find((link) => {\n return link.Href === locator.href;\n });\n }\n }\n const fixedLayout = (locatorExtended && locatorExtended.docInfo) ?\n locatorExtended.docInfo.isFixedLayout :\n (_publication ? isFixedLayout(_publication, foundLink) : false);\n\n let label = (foundLink && foundLink.Title) ? sanitizeText(foundLink.Title) : undefined;\n if (!label || !label.length) {\n label = (locator && locator.title) ? sanitizeText(locator.title) : undefined;\n }\n if (!label || !label.length) {\n label = foundLink ? foundLink.Href : undefined;\n }\n\n if (fixedLayout) {\n if (spineIndex >= 0 && _publication && _publication.Spine) {\n\n mdcSlider.functionMode = \"fixed-layout\";\n\n if (_publication.Spine.length === 1) {\n positionSelector.style.visibility = \"hidden\";\n }\n if (mdcSlider.min !== 1) {\n mdcSlider.min = 1;\n }\n if (mdcSlider.max !== _publication.Spine.length) {\n mdcSlider.max = _publication.Spine.length;\n }\n if (mdcSlider.step !== 1) {\n mdcSlider.step = 1;\n }\n mdcSlider.value = spineIndex + 1;\n\n const pagePosStr = `Page ${spineIndex + 1} / ${_publication.Spine.length}`;\n // if (label) {\n // positionSelectorValue.innerHTML = `[<strong>${label}</strong>] ` + pagePosStr;\n // } else {\n // positionSelectorValue.textContent = pagePosStr;\n // }\n positionSelectorValue.textContent = pagePosStr;\n return;\n }\n } else {\n const current = getCurrentReadingLocation(); // LocatorExtended\n if (!current || !current.paginationInfo ||\n (typeof current.paginationInfo.isTwoPageSpread === \"undefined\") ||\n (typeof current.paginationInfo.spreadIndex === \"undefined\") ||\n (typeof current.paginationInfo.currentColumn === \"undefined\") ||\n (typeof current.paginationInfo.totalColumns === \"undefined\")) {\n\n if (spineIndex >= 0 && _publication && _publication.Spine) {\n\n mdcSlider.functionMode = \"reflow-scrolled\";\n\n if (_publication.Spine.length === 1) {\n positionSelector.style.visibility = \"hidden\";\n }\n if (mdcSlider.min !== 1) {\n mdcSlider.min = 1;\n }\n if (mdcSlider.max !== _publication.Spine.length) {\n mdcSlider.max = _publication.Spine.length;\n }\n if (mdcSlider.step !== 1) {\n mdcSlider.step = 1;\n }\n mdcSlider.value = spineIndex + 1;\n\n const pagePosStr = `Chapter ${spineIndex + 1} / ${_publication.Spine.length}`;\n if (label) {\n positionSelectorValue.innerHTML = `[<strong>${label}</strong>] ` + pagePosStr;\n } else {\n positionSelectorValue.textContent = pagePosStr;\n }\n return;\n }\n\n // const percent = (!locator || !locator.locations.progression) ? 0 :\n // Math.round(locator.locations.progression * 10) * 10;\n // if (mdcSlider.min !== 0) {\n // mdcSlider.min = 0;\n // }\n // if (mdcSlider.max !== 100) {\n // mdcSlider.max = 100;\n // }\n // if (mdcSlider.step !== 1) {\n // mdcSlider.step = 1;\n // }\n // mdcSlider.value = percent;\n // positionSelectorValue.textContent = percent + \"%\";\n // return;\n } else {\n\n mdcSlider.functionMode = \"reflow-paginated\";\n\n const totalColumns = current.paginationInfo.totalColumns;\n const totalSpreads = Math.ceil(totalColumns / 2);\n const totalSpreadsOrColumns = current.paginationInfo.isTwoPageSpread ? totalSpreads : totalColumns;\n\n const nColumn = current.paginationInfo.currentColumn + 1;\n const nSpread = current.paginationInfo.spreadIndex + 1;\n const nSpreadOrColumn = current.paginationInfo.isTwoPageSpread ? nSpread : nColumn;\n\n if (totalSpreadsOrColumns === 1) {\n positionSelector.style.visibility = \"hidden\";\n }\n if (mdcSlider.min !== 1) {\n mdcSlider.min = 1;\n }\n if (mdcSlider.max !== totalSpreadsOrColumns) {\n mdcSlider.max = totalSpreadsOrColumns;\n }\n if (mdcSlider.step !== 1) {\n mdcSlider.step = 1;\n }\n mdcSlider.value = nSpreadOrColumn;\n\n const nSpreadColumn = (current.paginationInfo.spreadIndex * 2) + 1;\n\n const pageStr = current.paginationInfo.isTwoPageSpread ?\n ((nSpreadColumn + 1) <= totalColumns ? `Pages ${nSpreadColumn}-${nSpreadColumn + 1} / ${totalColumns}` :\n `Page ${nSpreadColumn} / ${totalColumns}`) : `Page ${nColumn} / ${totalColumns}`;\n if (label) {\n positionSelectorValue.innerHTML = `[<strong>${label}</strong>] ` + pageStr;\n } else {\n positionSelectorValue.textContent = pageStr;\n }\n return;\n }\n }\n\n // default fallback\n mdcSlider.functionMode = undefined;\n positionSelector.style.visibility = \"hidden\";\n if (mdcSlider.min !== 0) {\n mdcSlider.min = 0;\n }\n if (mdcSlider.max !== 100) {\n mdcSlider.max = 100;\n }\n if (mdcSlider.step !== 1) {\n mdcSlider.step = 1;\n }\n mdcSlider.value = 0;\n positionSelectorValue.textContent = \"\";\n}\n\nconst _bookmarks: Locator[] = [];\n\nfunction getBookmarkMenuGroupLabel(bookmark: Locator): string {\n return bookmark.title ? `${bookmark.title} (${bookmark.href})` : `${bookmark.href}`;\n}\n\nfunction refreshBookmarksMenu() {\n\n const bookmarksEl = document.getElementById(\"reader_controls_BOOKMARKS\");\n const tagBookmarks: IRiotTagLinkListGroup = (bookmarksEl as any)._tag;\n\n const bookmarksListGroups =\n ((tagBookmarks.opts as IRiotOptsLinkListGroup).linksgroup as IRiotOptsLinkListGroupItem[]);\n for (let i = bookmarksListGroups.length - 1; i >= 0; i--) { // remove all\n bookmarksListGroups.splice(i, 1);\n }\n\n let sortedBookmarks: Locator[];\n if (_publication) {\n sortedBookmarks = [];\n for (const bookmark of _bookmarks) {\n sortedBookmarks.push(bookmark);\n\n let foundLink: Link | undefined;\n let spineIndex = -1;\n if (_publication.Spine) {\n foundLink = _publication.Spine.find((link, i) => {\n const ok = link.Href === bookmark.href;\n if (ok) {\n spineIndex = i;\n }\n return ok;\n });\n if (foundLink) {\n (bookmark as any).sortIndex = spineIndex;\n }\n }\n if (!foundLink && _publication.Resources) {\n foundLink = _publication.Resources.find((link) => {\n return link.Href === bookmark.href;\n });\n if (foundLink) {\n (bookmark as any).sortIndex = -1;\n } else {\n (bookmark as any).sortIndex = -2;\n }\n }\n }\n\n sortedBookmarks.sort((l1, l2) => {\n if ((l1 as any).sortIndex === -2) {\n if ((l2 as any).sortIndex === -2) {\n return 0; // l1 \"equal\" l2\n } else if ((l2 as any).sortIndex === -1) {\n return 1; // l1 \"greater than\" l2\n } else {\n return 1; // l1 \"greater than\" l2\n }\n }\n if ((l1 as any).sortIndex === -1) {\n if ((l2 as any).sortIndex === -2) {\n return -1; // l1 \"less than\" l2\n } else if ((l2 as any).sortIndex === -1) {\n return 0; // l1 \"equal\" l2\n } else {\n return 1; // l1 \"greater than\" l2\n }\n }\n\n if ((l1 as any).sortIndex !== (l2 as any).sortIndex ||\n typeof l1.locations.progression === \"undefined\" ||\n typeof l2.locations.progression === \"undefined\") {\n\n return (l1 as any).sortIndex - (l2 as any).sortIndex;\n }\n\n return l1.locations.progression - l2.locations.progression;\n });\n\n } else { // should never happen!\n sortedBookmarks = _bookmarks;\n }\n\n for (const bookmark of sortedBookmarks) {\n const label = getBookmarkMenuGroupLabel(bookmark);\n\n let listgroup: IRiotOptsLinkListGroupItem | undefined = bookmarksListGroups.find((lg) => {\n return lg.label === label;\n });\n if (!listgroup) {\n listgroup = {\n label,\n links: [],\n };\n bookmarksListGroups.push(listgroup);\n }\n if (bookmark.locations.cssSelector) {\n const link: IRiotOptsLinkListItem = {\n href: bookmark.href + \"#r2loc(\" + bookmark.locations.cssSelector + \")\",\n\n title: (typeof bookmark.locations.progression !== \"undefined\") ?\n // tslint:disable-next-line:max-line-length\n `Bookmark #${listgroup.links.length + 1} (${Math.round(bookmark.locations.progression * 1000) / 10}%)` :\n `Bookmark #${listgroup.links.length + 1}`,\n };\n listgroup.links.push(link);\n }\n }\n tagBookmarks.update();\n}\n\nfunction visualDebugBookmarks() {\n\n refreshBookmarksMenu();\n\n const current = getCurrentReadingLocation(); // LocatorExtended\n\n if ((window as any).READIUM2) {\n if ((window as any).READIUM2.debugItems) {\n\n let cssSelector = \"\";\n let first = true;\n for (const bookmark of _bookmarks) {\n if (!current || current.locator.href !== bookmark.href) {\n continue;\n }\n if (bookmark.locations.cssSelector) {\n cssSelector += first ? \"\" : \", \";\n cssSelector += `${bookmark.locations.cssSelector}`;\n first = false;\n }\n }\n\n const cssClass = \"R2_DEBUG_VISUALS_BOOKMARKS\";\n const cssStyles = `:root[style] .R2_DEBUG_VISUALS_BOOKMARKS, :root .R2_DEBUG_VISUALS_BOOKMARKS {\n outline-color: #b43519 !important;\n outline-style: solid !important;\n outline-width: 3px !important;\n outline-offset: 0px !important;\n\n background-color: #fee3dd !important;\n }`;\n (window as any).READIUM2.debugItems(cssSelector, cssClass, undefined); // clear\n if (cssSelector.length && (window as any).READIUM2.DEBUG_VISUALS) {\n setTimeout(() => {\n (window as any).READIUM2.debugItems(cssSelector, cssClass, cssStyles); // set all\n }, 100);\n }\n }\n }\n}\n\nfunction addCurrentVisibleBookmark() {\n const current = getCurrentReadingLocation(); // LocatorExtended\n if (current && current.locator) {\n const found = _bookmarks.find((locator) => {\n return locator.href === current.locator.href &&\n // locator.locations.cfi === current.locator.locations.cfi &&\n // locator.locations.progression === current.locator.locations.progression &&\n // locator.locations.position === current.locator.locations.position &&\n locator.locations.cssSelector === current.locator.locations.cssSelector;\n });\n if (!found) {\n _bookmarks.push(current.locator);\n }\n }\n}\nfunction removeAllBookmarks(): Locator[] {\n const removed: Locator[] = [];\n for (let i = _bookmarks.length - 1; i >= 0; i--) {\n const bookmark = _bookmarks[i];\n removed.push(bookmark);\n _bookmarks.splice(i, 1);\n }\n return removed;\n}\nasync function removeAllCurrentVisibleBookmarks(): Promise<Locator[]> {\n return new Promise(async (resolve, _reject) => {\n const removed: Locator[] = [];\n for (let i = _bookmarks.length - 1; i >= 0; i--) {\n const bookmark = _bookmarks[i];\n try {\n const visible = await isLocatorVisible(bookmark);\n if (visible) {\n removed.push(bookmark);\n _bookmarks.splice(i, 1);\n }\n } catch (err) {\n console.log(err);\n }\n }\n resolve(removed);\n });\n}\nasync function isAnyBookmarkVisible(): Promise<boolean> {\n return new Promise(async (resolve, _reject) => {\n for (const bookmark of _bookmarks) {\n try {\n const visible = await isLocatorVisible(bookmark);\n if (visible) {\n resolve(true);\n return;\n }\n } catch (err) {\n console.log(err);\n }\n }\n resolve(false);\n });\n}\nfunction refreshBookmarksState() {\n // tslint:disable-next-line:no-floating-promises\n (async () => {\n const buttonBookmarkTOGGLE = document.getElementById(\"bookmarkTOGGLE\") as HTMLElement;\n try {\n const atLeastOneBookmarkIsVisible = await isAnyBookmarkVisible();\n (buttonBookmarkTOGGLE as any).mdcButton.on = atLeastOneBookmarkIsVisible;\n } catch (err) {\n console.log(err);\n }\n })();\n}\nfunction refreshBookmarksStore() {\n let obj = electronStore.get(\"bookmarks\");\n if (!obj) {\n obj = {};\n }\n obj[pathDecoded] = [];\n _bookmarks.forEach((bookmark) => {\n obj[pathDecoded].push(bookmark);\n });\n electronStore.set(\"bookmarks\", obj);\n}\nfunction initBookmarksFromStore() {\n let obj = electronStore.get(\"bookmarks\");\n if (!obj) {\n obj = {};\n }\n removeAllBookmarks();\n if (obj[pathDecoded]) {\n // _bookmarks = [];\n obj[pathDecoded].forEach((bookmark: Locator) => {\n _bookmarks.push(bookmark);\n });\n }\n}\n\nelectronStore.onChanged(\"bookmarks\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n initBookmarksFromStore();\n\n visualDebugBookmarks();\n refreshBookmarksState();\n});\n\nconst saveReadingLocation = (location: LocatorExtended) => {\n\n updateReadingProgressionSlider(location);\n\n let obj = electronStore.get(\"readingLocation\");\n if (!obj) {\n obj = {};\n }\n obj[pathDecoded] = {\n doc: location.locator.href,\n loc: undefined,\n locCfi: location.locator.locations.cfi,\n locCssSelector: location.locator.locations.cssSelector,\n locPosition: location.locator.locations.position,\n locProgression: location.locator.locations.progression,\n } as IReadingLocation;\n electronStore.set(\"readingLocation\", obj);\n\n visualDebugBookmarks();\n refreshBookmarksState();\n};\nsetReadingLocationSaver(saveReadingLocation);\n\n// import * as path from \"path\";\n// import { setLcpNativePluginPath } from \"@r2-streamer-js/parser/epub/lcp\";\n// // tslint:disable-next-line:no-string-literal\n// const lcpPluginBase64 = queryParams[\"lcpPlugin\"];\n// if (lcpPluginBase64) {\n// const lcpPlugin = new Buffer(lcpPluginBase64, \"base64\").toString(\"utf8\");\n// setLcpNativePluginPath(lcpPlugin);\n// } else {\n// setLcpNativePluginPath(path.join(process.cwd(), \"LCP\", \"lcp.node\"));\n// }\n\n// tslint:disable-next-line:no-string-literal\nconst publicationJsonUrl = queryParams[\"pub\"];\nconsole.log(publicationJsonUrl);\nconst publicationJsonUrl_ = publicationJsonUrl.startsWith(READIUM2_ELECTRON_HTTP_PROTOCOL) ?\n convertCustomSchemeToHttpUrl(publicationJsonUrl) : publicationJsonUrl;\nconsole.log(publicationJsonUrl_);\n\n// tslint:disable-next-line:no-string-literal\nconst isHttpWebPubWithoutLCP = queryParams[\"isHttpWebPub\"];\nconsole.log(isHttpWebPubWithoutLCP);\n\nlet pathDecoded = \"\";\nif (isHttpWebPubWithoutLCP) {\n pathDecoded = publicationJsonUrl;\n} else {\n const pathBase64 = publicationJsonUrl_.\n replace(/.*\\/pub\\/(.*)\\/manifest.json.*/, \"$1\");\n // replace(\"*-URL_LCP_PASS_PLACEHOLDER-*\", \"\"); // lcpBeginToken + lcpEndToken\n console.log(pathBase64);\n pathDecoded = new Buffer(decodeURIComponent(pathBase64), \"base64\").toString(\"utf8\");\n console.log(pathDecoded);\n}\nconst pathFileName = pathDecoded.substr(\n pathDecoded.replace(/\\\\/g, \"/\").lastIndexOf(\"/\") + 1,\n pathDecoded.length - 1);\nconsole.log(pathFileName);\n\n// tslint:disable-next-line:no-string-literal\nconst lcpHint = queryParams[\"lcpHint\"];\n\nelectronStore.onChanged(\"readiumCSS.colCount\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n console.log(\"readiumCSS.colCount: \", oldValue, \" => \", newValue);\n\n const radioColCountAutoEl = document.getElementById(\"radioColCountAuto\") as HTMLInputElement;\n radioColCountAutoEl.checked = newValue === \"auto\";\n\n const radioColCount1El = document.getElementById(\"radioColCount1\") as HTMLInputElement;\n radioColCount1El.checked = newValue === \"1\";\n\n const radioColCount2El = document.getElementById(\"radioColCount2\") as HTMLInputElement;\n radioColCount2El.checked = newValue === \"2\";\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.night\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n if (newValue) {\n // const sepiaSwitchEl = document.getElementById(\"sepia_switch\") as HTMLElement;\n // const sepiaSwitch = (sepiaSwitchEl as any).mdcSwitch;\n // if (sepiaSwitch.checked) {\n // sepiaSwitch.checked = false;\n // }\n if (electronStore.get(\"readiumCSS.sepia\")) {\n electronStore.set(\"readiumCSS.sepia\", false);\n }\n if (electronStore.get(\"readiumCSS.backgroundColor\")) {\n electronStore.set(\"readiumCSS.backgroundColor\", null);\n }\n if (electronStore.get(\"readiumCSS.textColor\")) {\n electronStore.set(\"readiumCSS.textColor\", null);\n }\n }\n\n // const nightSwitch = document.getElementById(\"night_switch-input\") as HTMLInputElement;\n const nightSwitchEl = document.getElementById(\"night_switch\") as HTMLElement;\n const nightSwitch = (nightSwitchEl as any).mdcSwitch;\n nightSwitch.checked = newValue;\n\n // TODO DARK THEME UI\n // if (newValue) {\n // document.body.classList.add(\"mdc-theme--dark\");\n // } else {\n // document.body.classList.remove(\"mdc-theme--dark\");\n // }\n\n const darkenSwitchEl = document.getElementById(\"darken_switch\") as HTMLElement;\n const darkenSwitch = (darkenSwitchEl as any).mdcSwitch;\n darkenSwitch.disabled = !newValue;\n if (!newValue) {\n electronStore.set(\"readiumCSS.darken\", false);\n }\n\n const invertSwitchEl = document.getElementById(\"invert_switch\") as HTMLElement;\n const invertSwitch = (invertSwitchEl as any).mdcSwitch;\n invertSwitch.disabled = !newValue;\n if (!newValue) {\n electronStore.set(\"readiumCSS.invert\", false);\n }\n\n const nightDiv = document.getElementById(\"night_div\") as HTMLElement;\n nightDiv.style.display = newValue ? \"block\" : \"none\";\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.sepia\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n if (newValue) {\n // const nightSwitchEl = document.getElementById(\"night_switch\") as HTMLElement;\n // const nightSwitch = (nightSwitchEl as any).mdcSwitch;\n // if (nightSwitch.checked) {\n // nightSwitch.checked = false;\n // }\n if (electronStore.get(\"readiumCSS.night\")) {\n electronStore.set(\"readiumCSS.night\", false);\n }\n if (electronStore.get(\"readiumCSS.backgroundColor\")) {\n electronStore.set(\"readiumCSS.backgroundColor\", null);\n }\n if (electronStore.get(\"readiumCSS.textColor\")) {\n electronStore.set(\"readiumCSS.textColor\", null);\n }\n }\n\n const sepiaSwitchEl = document.getElementById(\"sepia_switch\") as HTMLElement;\n const sepiaSwitch = (sepiaSwitchEl as any).mdcSwitch;\n sepiaSwitch.checked = newValue;\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.darken\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n const darkenSwitchEl = document.getElementById(\"darken_switch\") as HTMLElement;\n const darkenSwitch = (darkenSwitchEl as any).mdcSwitch;\n darkenSwitch.checked = newValue;\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.invert\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n const invertSwitchEl = document.getElementById(\"invert_switch\") as HTMLElement;\n const invertSwitch = (invertSwitchEl as any).mdcSwitch;\n invertSwitch.checked = newValue;\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.textAlign\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n // const justifySwitch = document.getElementById(\"justify_switch-input\") as HTMLInputElement;\n const justifySwitchEl = document.getElementById(\"justify_switch\") as HTMLElement;\n const justifySwitch = (justifySwitchEl as any).mdcSwitch;\n justifySwitch.checked = (newValue === \"justify\");\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.noFootnotes\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n // const footnotesSwitch = document.getElementById(\"footnotes_switch-input\") as HTMLInputElement;\n const footnotesSwitchEl = document.getElementById(\"footnotes_switch\") as HTMLElement;\n const footnotesSwitch = (footnotesSwitchEl as any).mdcSwitch;\n footnotesSwitch.checked = newValue ? false : true;\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.reduceMotion\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n // const reduceMotionSwitch = document.getElementById(\"reduceMotion_switch-input\") as HTMLInputElement;\n const reduceMotionSwitchEl = document.getElementById(\"reduceMotion_switch\") as HTMLElement;\n const reduceMotionSwitch = (reduceMotionSwitchEl as any).mdcSwitch;\n reduceMotionSwitch.checked = newValue ? true : false;\n\n refreshReadiumCSS();\n});\n\nelectronStore.onChanged(\"readiumCSS.paged\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n // const paginateSwitch = document.getElementById(\"paginate_switch-input\") as HTMLInputElement;\n const paginateSwitchEl = document.getElementById(\"paginate_switch\") as HTMLElement;\n const paginateSwitch = (paginateSwitchEl as any).mdcSwitch;\n paginateSwitch.checked = newValue;\n\n const colCountRadiosEl = document.getElementById(\"colCountRadios\") as HTMLElement;\n if (newValue) {\n colCountRadiosEl.style.display = \"block\";\n } else {\n colCountRadiosEl.style.display = \"none\";\n }\n\n refreshReadiumCSS();\n});\n\nconst refreshReadiumCSS = debounce(() => {\n readiumCssOnOff();\n}, 500);\n\n// super hacky, but necessary :(\n// https://github.com/material-components/material-components-web/issues/1017#issuecomment-340068426\nfunction ensureSliderLayout() {\n setTimeout(() => {\n document.querySelectorAll(\".settingSlider\").forEach((elem) => {\n if ((elem as any).mdcSlider) {\n (elem as any).mdcSlider.layout();\n }\n // if ((elem as any).mdcSwitch) {\n // (elem as any).mdcSwitch.layout();\n // }\n });\n }, 100);\n}\n\nelectronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n const stylingWrapper = document.getElementById(\"stylingWrapper\") as HTMLElement;\n stylingWrapper.style.display = newValue ? \"block\" : \"none\";\n if (newValue) {\n ensureSliderLayout();\n }\n\n // const readiumcssSwitch = document.getElementById(\"readiumcss_switch-input\") as HTMLInputElement;\n const readiumcssSwitchEl = document.getElementById(\"readiumcss_switch\") as HTMLElement;\n const readiumcssSwitch = (readiumcssSwitchEl as any).mdcSwitch;\n readiumcssSwitch.checked = newValue;\n\n refreshReadiumCSS();\n\n // const justifySwitch = document.getElementById(\"justify_switch-input\") as HTMLInputElement;\n const justifySwitchEl = document.getElementById(\"justify_switch\") as HTMLElement;\n const justifySwitch = (justifySwitchEl as any).mdcSwitch;\n justifySwitch.disabled = !newValue;\n\n // const footnotesSwitch = document.getElementById(\"footnotes_switch-input\") as HTMLInputElement;\n const footnotesSwitchEl = document.getElementById(\"footnotes_switch\") as HTMLElement;\n const footnotesSwitch = (footnotesSwitchEl as any).mdcSwitch;\n footnotesSwitch.disabled = !newValue;\n\n // const reduceMotionSwitch = document.getElementById(\"reduceMotion_switch-input\") as HTMLInputElement;\n const reduceMotionSwitchEl = document.getElementById(\"reduceMotion_switch\") as HTMLElement;\n const reduceMotionSwitch = (reduceMotionSwitchEl as any).mdcSwitch;\n reduceMotionSwitch.disabled = !newValue;\n\n // const paginateSwitch = document.getElementById(\"paginate_switch-input\") as HTMLInputElement;\n const paginateSwitchEl = document.getElementById(\"paginate_switch\") as HTMLElement;\n const paginateSwitch = (paginateSwitchEl as any).mdcSwitch;\n paginateSwitch.disabled = !newValue;\n\n // const nightSwitch = document.getElementById(\"night_switch-input\") as HTMLInputElement;\n const nightSwitchEl = document.getElementById(\"night_switch\") as HTMLElement;\n const nightSwitch = (nightSwitchEl as any).mdcSwitch;\n nightSwitch.disabled = !newValue;\n // if (!newValue) {\n // electronStore.set(\"readiumCSS.night\", false);\n // }\n\n const sepiaSwitchEl = document.getElementById(\"sepia_switch\") as HTMLElement;\n const sepiaSwitch = (sepiaSwitchEl as any).mdcSwitch;\n sepiaSwitch.disabled = !newValue;\n // if (!newValue) {\n // electronStore.set(\"readiumCSS.sepia\", false);\n // }\n\n const darkenSwitchEl = document.getElementById(\"darken_switch\") as HTMLElement;\n const darkenSwitch = (darkenSwitchEl as any).mdcSwitch;\n darkenSwitch.disabled = !newValue;\n // if (!newValue) {\n // electronStore.set(\"readiumCSS.darken\", false);\n // }\n\n const invertSwitchEl = document.getElementById(\"invert_switch\") as HTMLElement;\n const invertSwitch = (invertSwitchEl as any).mdcSwitch;\n invertSwitch.disabled = !newValue;\n // if (!newValue) {\n // electronStore.set(\"readiumCSS.invert\", false);\n // }\n});\n\nelectronStore.onChanged(\"basicLinkTitles\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n // const basicSwitch = document.getElementById(\"nav_basic_switch-input\") as HTMLInputElement;\n const basicSwitchEl = document.getElementById(\"nav_basic_switch\") as HTMLElement;\n const basicSwitch = (basicSwitchEl as any).mdcSwitch;\n basicSwitch.checked = !newValue;\n});\n\nfunction visualDebug(doDebug: boolean) {\n\n if ((window as any).READIUM2) {\n if ((window as any).READIUM2.debug) {\n (window as any).READIUM2.debug(doDebug);\n }\n // (window as any).READIUM2.DEBUG_VISUALS ? false : true\n }\n visualDebugBookmarks();\n}\n\nelectronStore.onChanged(\"visualDebug\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n const debugSwitchEl = document.getElementById(\"visual_debug_switch\") as HTMLElement;\n const debugSwitch = (debugSwitchEl as any).mdcSwitch;\n debugSwitch.checked = newValue;\n\n visualDebug(debugSwitch.checked);\n});\n\nlet snackBar: any;\nlet drawer: any;\n\nwindow.onerror = (err) => {\n console.log(\"window.onerror:\");\n console.log(err);\n};\n\nipcRenderer.on(R2_EVENT_TRY_LCP_PASS_RES, (\n _event: any,\n payload: IEventPayload_R2_EVENT_TRY_LCP_PASS_RES) => {\n\n if (!payload.okay && payload.error) {\n let message: string;\n if (typeof payload.error === \"string\") {\n message = payload.error;\n } else {\n switch (payload.error as number) {\n case 0: {\n message = \"NONE: \" + payload.error;\n break;\n }\n case 1: {\n message = \"INCORRECT PASSPHRASE: \" + payload.error;\n break;\n }\n case 11: {\n message = \"LICENSE_OUT_OF_DATE: \" + payload.error;\n break;\n }\n case 101: {\n message = \"CERTIFICATE_REVOKED: \" + payload.error;\n break;\n }\n case 102: {\n message = \"CERTIFICATE_SIGNATURE_INVALID: \" + payload.error;\n break;\n }\n case 111: {\n message = \"LICENSE_SIGNATURE_DATE_INVALID: \" + payload.error;\n break;\n }\n case 112: {\n message = \"LICENSE_SIGNATURE_INVALID: \" + payload.error;\n break;\n }\n case 121: {\n message = \"CONTEXT_INVALID: \" + payload.error;\n break;\n }\n case 131: {\n message = \"CONTENT_KEY_DECRYPT_ERROR: \" + payload.error;\n break;\n }\n case 141: {\n message = \"USER_KEY_CHECK_INVALID: \" + payload.error;\n break;\n }\n case 151: {\n message = \"CONTENT_DECRYPT_ERROR: \" + payload.error;\n break;\n }\n default: {\n message = \"Unknown error?! \" + payload.error;\n }\n }\n }\n\n setTimeout(() => {\n showLcpDialog(message);\n }, 500);\n\n // DRMErrorCode (from r2-lcp-client)\n // 1 === NO CORRECT PASSPHRASE / UERKEY IN GIVEN ARRAY\n // // No error\n // NONE = 0,\n // /**\n // WARNING ERRORS > 10\n // **/\n // // License is out of date (check start and end date)\n // LICENSE_OUT_OF_DATE = 11,\n // /**\n // CRITICAL ERRORS > 100\n // **/\n // // Certificate has been revoked in the CRL\n // CERTIFICATE_REVOKED = 101,\n // // Certificate has not been signed by CA\n // CERTIFICATE_SIGNATURE_INVALID = 102,\n // // License has been issued by an expired certificate\n // LICENSE_SIGNATURE_DATE_INVALID = 111,\n // // License signature does not match\n // LICENSE_SIGNATURE_INVALID = 112,\n // // The drm context is invalid\n // CONTEXT_INVALID = 121,\n // // Unable to decrypt encrypted content key from user key\n // CONTENT_KEY_DECRYPT_ERROR = 131,\n // // User key check invalid\n // USER_KEY_CHECK_INVALID = 141,\n // // Unable to decrypt encrypted content from content key\n // CONTENT_DECRYPT_ERROR = 151\n return;\n }\n\n if (payload.passSha256Hex) {\n const lcpStore = electronStoreLCP.get(\"lcp\");\n if (!lcpStore) {\n const lcpObj: any = {};\n const pubLcpObj: any = lcpObj[pathDecoded] = {};\n pubLcpObj.sha = payload.passSha256Hex;\n\n electronStoreLCP.set(\"lcp\", lcpObj);\n } else {\n const pubLcpStore = lcpStore[pathDecoded];\n if (pubLcpStore) {\n pubLcpStore.sha = payload.passSha256Hex;\n } else {\n lcpStore[pathDecoded] = {\n sha: payload.passSha256Hex,\n };\n }\n electronStoreLCP.set(\"lcp\", lcpStore);\n }\n\n // if (publicationJsonUrl.indexOf(\"URL_LCP_PASS_PLACEHOLDER\") > 0) {\n // let pazz = Buffer.from(payload.passSha256Hex).toString(\"base64\");\n // pazz = encodeURIComponent_RFC3986(pazz);\n // publicationJsonUrl = publicationJsonUrl.replace(\"URL_LCP_PASS_PLACEHOLDER\", pazz);\n // console.log(publicationJsonUrl);\n // }\n }\n\n startNavigatorExperiment();\n});\n\nlet lcpDialog: any;\n\nfunction showLcpDialog(message?: string) {\n\n // dialog.lastFocusedTarget = evt.target;\n\n const lcpPassHint = document.getElementById(\"lcpPassHint\") as HTMLElement;\n lcpPassHint.textContent = lcpHint;\n\n if (message) {\n const lcpPassMessage = document.getElementById(\"lcpPassMessage\") as HTMLElement;\n lcpPassMessage.textContent = message;\n }\n\n lcpDialog.open();\n setTimeout(() => {\n const lcpPassInput = document.getElementById(\"lcpPassInput\") as HTMLElement;\n lcpPassInput.focus();\n setTimeout(() => {\n lcpPassInput.classList.add(\"no-focus-outline\");\n }, 500);\n }, 800);\n}\n\nfunction installKeyboardMouseFocusHandler() {\n let dateLastKeyboardEvent = new Date();\n let dateLastMouseEvent = new Date();\n\n // // DEBUG\n // document.body.addEventListener(\"focus\", (ev: any) => {\n // console.log(\"focus:\");\n // console.log(ev.target);\n // if (ev.target.tagName.toLowerCase() === \"webview\") {\n // console.log(\"preventing...\");\n // ev.preventDefault();\n // ev.stopPropagation();\n // }\n // }, true);\n // document.body.addEventListener(\"focusin\", (ev: any) => {\n // console.log(\"focusin:\");\n // console.log(ev.target);\n // if (ev.target.tagName.toLowerCase() === \"webview\") {\n // console.log(\"preventing...\");\n // ev.preventDefault();\n // ev.stopPropagation();\n // }\n // });\n // // DEBUG\n\n document.body.addEventListener(\"focusin\", debounce((ev: any) => {\n const focusWasTriggeredByMouse = dateLastMouseEvent > dateLastKeyboardEvent;\n if (focusWasTriggeredByMouse) {\n if (ev.target && ev.target.classList) {\n ev.target.classList.add(\"no-focus-outline\");\n }\n }\n }, 500));\n document.body.addEventListener(\"focusout\", (ev: any) => {\n if (ev.target && ev.target.classList) {\n ev.target.classList.remove(\"no-focus-outline\");\n }\n });\n document.body.addEventListener(\"mousedown\", () => {\n dateLastMouseEvent = new Date();\n });\n document.body.addEventListener(\"keydown\", () => {\n dateLastKeyboardEvent = new Date();\n });\n}\n\nconst initLineHeightSelector = () => {\n\n const lineHeightSelectorDefault = 150;\n\n const lineHeightSelectorValue = document.getElementById(\"lineHeightSelectorValue\") as HTMLElement;\n\n const lineHeightSelector = document.getElementById(\"lineHeightSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(lineHeightSelector);\n (lineHeightSelector as any).mdcSlider = slider;\n // const step = lineHeightSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.lineHeight\");\n if (val) {\n slider.value = parseFloat(val) * 100;\n } else {\n slider.value = lineHeightSelectorDefault;\n }\n lineHeightSelectorValue.textContent = slider.value + \"%\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.lineHeight\", \"\" + (event.detail.value / 100));\n lineHeightSelectorValue.textContent = event.detail.value + \"%\";\n });\n\n electronStore.onChanged(\"readiumCSS.lineHeight\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue) * 100) : lineHeightSelectorDefault);\n lineHeightSelectorValue.textContent = slider.value + \"%\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initPageMarginSelector = () => {\n\n const pageMarginsSelectorDefault = 100;\n\n const pageMarginsSelectorValue = document.getElementById(\"pageMarginsSelectorValue\") as HTMLElement;\n\n const pageMarginsSelector = document.getElementById(\"pageMarginsSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(pageMarginsSelector);\n (pageMarginsSelector as any).mdcSlider = slider;\n // const step = pageMarginsSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.pageMargins\");\n if (val) {\n slider.value = parseFloat(val) * 100;\n } else {\n slider.value = pageMarginsSelectorDefault;\n }\n pageMarginsSelectorValue.textContent = slider.value + \"%\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.pageMargins\", \"\" + (event.detail.value / 100));\n pageMarginsSelectorValue.textContent = event.detail.value + \"%\";\n });\n\n electronStore.onChanged(\"readiumCSS.pageMargins\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue) * 100) : pageMarginsSelectorDefault);\n pageMarginsSelectorValue.textContent = slider.value + \"%\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initTypeScaleSelector = () => {\n\n const typeScaleSelectorDefault = 120;\n\n const typeScaleSelectorValue = document.getElementById(\"typeScaleSelectorValue\") as HTMLElement;\n\n const typeScaleSelector = document.getElementById(\"typeScaleSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(typeScaleSelector);\n (typeScaleSelector as any).mdcSlider = slider;\n // const step = typeScaleSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.typeScale\");\n if (val) {\n slider.value = parseFloat(val) * 100;\n } else {\n slider.value = typeScaleSelectorDefault;\n }\n typeScaleSelectorValue.textContent = slider.value + \"%\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.typeScale\", \"\" + (event.detail.value / 100));\n typeScaleSelectorValue.textContent = event.detail.value + \"%\";\n });\n\n electronStore.onChanged(\"readiumCSS.typeScale\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue) * 100) : typeScaleSelectorDefault);\n typeScaleSelectorValue.textContent = slider.value + \"%\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initLetterSpacingSelector = () => {\n\n const letterSpacingSelectorDefault = 0;\n\n const letterSpacingSelectorValue = document.getElementById(\"letterSpacingSelectorValue\") as HTMLElement;\n\n const letterSpacingSelector = document.getElementById(\"letterSpacingSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(letterSpacingSelector);\n (letterSpacingSelector as any).mdcSlider = slider;\n // const step = letterSpacingSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.letterSpacing\");\n if (val) {\n slider.value = parseFloat(val.replace(\"rem\", \"\")) * 100;\n } else {\n slider.value = letterSpacingSelectorDefault;\n }\n letterSpacingSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.letterSpacing\", (event.detail.value / 100) + \"rem\");\n letterSpacingSelectorValue.textContent = (event.detail.value / 100).toFixed(2) + \"rem\";\n });\n\n electronStore.onChanged(\"readiumCSS.letterSpacing\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue.replace(\"rem\", \"\")) * 100) : letterSpacingSelectorDefault);\n letterSpacingSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initWordSpacingSelector = () => {\n\n const wordSpacingSelectorDefault = 0;\n\n const wordSpacingSelectorValue = document.getElementById(\"wordSpacingSelectorValue\") as HTMLElement;\n\n const wordSpacingSelector = document.getElementById(\"wordSpacingSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(wordSpacingSelector);\n (wordSpacingSelector as any).mdcSlider = slider;\n // const step = wordSpacingSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.wordSpacing\");\n if (val) {\n slider.value = parseFloat(val.replace(\"rem\", \"\")) * 100;\n } else {\n slider.value = wordSpacingSelectorDefault;\n }\n wordSpacingSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.wordSpacing\", (event.detail.value / 100) + \"rem\");\n wordSpacingSelectorValue.textContent = (event.detail.value / 100).toFixed(2) + \"rem\";\n });\n\n electronStore.onChanged(\"readiumCSS.wordSpacing\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue.replace(\"rem\", \"\")) * 100) : wordSpacingSelectorDefault);\n wordSpacingSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initParaSpacingSelector = () => {\n\n const paraSpacingSelectorDefault = 0;\n\n const paraSpacingSelectorValue = document.getElementById(\"paraSpacingSelectorValue\") as HTMLElement;\n\n const paraSpacingSelector = document.getElementById(\"paraSpacingSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(paraSpacingSelector);\n (paraSpacingSelector as any).mdcSlider = slider;\n // const step = paraSpacingSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.paraSpacing\");\n if (val) {\n slider.value = parseFloat(val.replace(\"rem\", \"\")) * 100;\n } else {\n slider.value = paraSpacingSelectorDefault;\n }\n paraSpacingSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.paraSpacing\", (event.detail.value / 100) + \"rem\");\n paraSpacingSelectorValue.textContent = (event.detail.value / 100).toFixed(2) + \"rem\";\n });\n\n electronStore.onChanged(\"readiumCSS.paraSpacing\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue.replace(\"rem\", \"\")) * 100) : paraSpacingSelectorDefault);\n paraSpacingSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initParaIndentSelector = () => {\n\n const paraIndentSelectorDefault = 200;\n\n const paraIndentSelectorValue = document.getElementById(\"paraIndentSelectorValue\") as HTMLElement;\n\n const paraIndentSelector = document.getElementById(\"paraIndentSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(paraIndentSelector);\n (paraIndentSelector as any).mdcSlider = slider;\n // const step = paraIndentSelector.getAttribute(\"data-step\") as string;\n // console.log(\"step: \" + step);\n // slider.step = parseFloat(step);\n // console.log(\"slider.step: \" + slider.step);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.paraIndent\");\n if (val) {\n slider.value = parseFloat(val.replace(\"rem\", \"\")) * 100;\n } else {\n slider.value = paraIndentSelectorDefault;\n }\n paraIndentSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n electronStore.set(\"readiumCSS.paraIndent\", (event.detail.value / 100) + \"rem\");\n paraIndentSelectorValue.textContent = (event.detail.value / 100).toFixed(2) + \"rem\";\n });\n\n electronStore.onChanged(\"readiumCSS.paraIndent\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseFloat(newValue.replace(\"rem\", \"\")) * 100) : paraIndentSelectorDefault);\n paraIndentSelectorValue.textContent = (slider.value / 100).toFixed(2) + \"rem\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initFontSizeSelector = () => {\n\n const fontSizeSelectorDefault = 100;\n\n const fontSizeSelectorValue = document.getElementById(\"fontSizeSelectorValue\") as HTMLElement;\n\n const fontSizeSelector = document.getElementById(\"fontSizeSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(fontSizeSelector);\n (fontSizeSelector as any).mdcSlider = slider;\n\n // const drawerElement = document.getElementById(\"drawer\") as HTMLElement;\n // const funcClose = () => {\n // drawerElement.removeEventListener(\"MDCTemporaryDrawer:close\", funcClose);\n // console.log(\"MDCTemporaryDrawer:close\");\n\n // const funcOpen = () => {\n // drawerElement.removeEventListener(\"MDCTemporaryDrawer:open\", funcOpen);\n // console.log(\"MDCTemporaryDrawer:open\");\n\n // setTimeout(() => {\n // console.log(\"SLIDER LAYOUT\");\n // slider.layout();\n // }, 1000);\n // };\n // drawerElement.addEventListener(\"MDCTemporaryDrawer:open\", funcOpen);\n // };\n // drawerElement.addEventListener(\"MDCTemporaryDrawer:close\", funcClose);\n\n slider.disabled = !electronStore.get(\"readiumCSSEnable\");\n const val = electronStore.get(\"readiumCSS.fontSize\");\n if (val) {\n slider.value = parseInt(val.replace(\"%\", \"\"), 10);\n } else {\n slider.value = fontSizeSelectorDefault;\n }\n fontSizeSelectorValue.textContent = slider.value + \"%\";\n\n // console.log(slider.min);\n // console.log(slider.max);\n // console.log(slider.value);\n // console.log(slider.step);\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n slider.disabled = !newValue;\n });\n\n // slider.listen(\"MDCSlider:input\", (event: any) => {\n // console.log(event.detail.value);\n // });\n slider.listen(\"MDCSlider:change\", (event: any) => {\n // console.log(event.detail.value);\n const percent = event.detail.value + \"%\";\n electronStore.set(\"readiumCSS.fontSize\", percent);\n fontSizeSelectorValue.textContent = percent;\n });\n\n electronStore.onChanged(\"readiumCSS.fontSize\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n\n slider.value = (newValue ? (parseInt(newValue.replace(\"%\", \"\"), 10)) : fontSizeSelectorDefault);\n fontSizeSelectorValue.textContent = slider.value + \"%\";\n\n refreshReadiumCSS();\n });\n};\n\nconst initTextColorSelector = () => {\n initColorSelector(\"textColor\", \"Text colour\");\n};\n\nconst initBackgroundColorSelector = () => {\n initColorSelector(\"backgroundColor\", \"Background colour\");\n};\n\nconst initColorSelector = (who: string, label: string) => {\n const ID_PREFIX = who + \"Select_\";\n\n const options: IRiotOptsMenuSelectItem[] = [];\n options.push({\n id: ID_PREFIX,\n label: \"default\",\n });\n Object.keys(HTML_COLORS).forEach((colorName) => {\n const colorCode = (HTML_COLORS as any)[colorName];\n options.push({\n id: ID_PREFIX + colorName,\n label: colorName,\n style: `border: 10px solid ${colorCode};`,\n });\n });\n\n const currentColorCode = electronStore.get(\"readiumCSS.\" + who);\n let foundColorName: string | undefined;\n const colorNames = Object.keys(HTML_COLORS);\n for (const colorName of colorNames) {\n const colorCode = (HTML_COLORS as any)[colorName];\n if (currentColorCode === colorCode) {\n foundColorName = colorName;\n break;\n }\n }\n let selectedID = ID_PREFIX;\n if (foundColorName) {\n selectedID = ID_PREFIX + foundColorName;\n }\n\n const foundItem = options.find((item) => {\n return item.id === selectedID;\n });\n if (!foundItem) {\n selectedID = options[0].id;\n }\n const opts: IRiotOptsMenuSelect = {\n disabled: !electronStore.get(\"readiumCSSEnable\"),\n label,\n options,\n selected: selectedID,\n };\n const tag = riotMountMenuSelect(\"#\" + who + \"Select\", opts)[0] as IRiotTagMenuSelect;\n\n tag.on(\"selectionChanged\", (index: number) => {\n if (!index) {\n electronStore.set(\"readiumCSS.\" + who, null);\n return;\n }\n // console.log(\"selectionChanged\");\n // console.log(index);\n const id = tag.getIdForIndex(index);\n // console.log(id);\n if (!id) {\n return;\n }\n // const element = tag.root.ownerDocument.getElementById(val) as HTMLElement;\n // console.log(element.textContent);\n const colorName = id.replace(ID_PREFIX, \"\");\n // console.log(id);\n const colorCode = (HTML_COLORS as any)[colorName] || undefined;\n electronStore.set(\"readiumCSS.\" + who, colorCode);\n });\n\n function updateLabelColor(colorCode: string | undefined) {\n if (tag.root) {\n const labelText = tag.root.querySelector(\".mdc-select__selected-text\");\n if (labelText) {\n (labelText as HTMLElement).style.border = colorCode ? `6px solid ${colorCode}` : \"none\";\n }\n }\n }\n\n electronStore.onChanged(\"readiumCSS.\" + who, (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n // console.log(\"onDidChange\");\n // console.log(newValue);\n\n // newValue can be null!\n\n if (newValue) {\n if (electronStore.get(\"readiumCSS.night\")) {\n electronStore.set(\"readiumCSS.night\", false);\n }\n if (electronStore.get(\"readiumCSS.sepia\")) {\n electronStore.set(\"readiumCSS.sepia\", false);\n }\n }\n\n updateLabelColor(newValue);\n\n let foundColor: string | undefined;\n if (newValue) {\n const colNames = Object.keys(HTML_COLORS);\n for (const colName of colNames) {\n const colCode = (HTML_COLORS as any)[colName];\n if (newValue === colCode) {\n foundColor = colName;\n break;\n }\n }\n }\n if (foundColor) {\n tag.setSelectedItem(ID_PREFIX + foundColor);\n } else {\n tag.setSelectedItem(ID_PREFIX);\n }\n\n refreshReadiumCSS();\n });\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n tag.setDisabled(!newValue);\n });\n\n updateLabelColor(electronStore.get(\"readiumCSS.\" + who));\n};\n\nconst initFontSelector = () => {\n\n const ID_PREFIX = \"fontselect_\";\n\n const options: IRiotOptsMenuSelectItem[] =\n [{\n id: ID_PREFIX + \"DEFAULT\",\n label: \"Default font\",\n }, {\n id: ID_PREFIX + \"OLD\",\n label: \"Old Style\",\n style: \"font-family: \\\"Iowan Old Style\\\", \\\"Sitka Text\\\", Palatino, \\\"Book Antiqua\\\", serif;\",\n }, {\n id: ID_PREFIX + \"MODERN\",\n label: \"Modern\",\n style: \"font-family: Athelas, Constantia, Georgia, serif;\",\n }, {\n id: ID_PREFIX + \"SANS\",\n label: \"Sans\",\n style: \"font-family: -apple-system, system-ui, BlinkMacSystemFont,\" +\n \" \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", Arial, sans-serif;\",\n }, {\n id: ID_PREFIX + \"HUMAN\",\n label: \"Humanist\",\n style: \"font-family: Seravek, Calibri, Roboto, Arial, sans-serif;\",\n }, {\n id: ID_PREFIX + \"DYS\",\n label: \"Readable (dys)\",\n style: \"font-family: AccessibleDfa;\",\n }, {\n id: ID_PREFIX + \"DUO\",\n label: \"Duospace\",\n style: \"font-family: \\\"IA Writer Duospace\\\", Consolas, monospace;\",\n }, {\n id: ID_PREFIX + \"MONO\",\n label: \"Monospace\",\n style: \"font-family: \\\"Andale Mono\\\", Consolas, monospace;\",\n }];\n let selectedID = ID_PREFIX + electronStore.get(\"readiumCSS.font\");\n const foundItem = options.find((item) => {\n return item.id === selectedID;\n });\n if (!foundItem) {\n selectedID = options[0].id;\n }\n const opts: IRiotOptsMenuSelect = {\n disabled: !electronStore.get(\"readiumCSSEnable\"),\n label: \"Font name\",\n options,\n selected: selectedID,\n };\n const tag = riotMountMenuSelect(\"#fontSelect\", opts)[0] as IRiotTagMenuSelect;\n\n tag.on(\"selectionChanged\", (index: number) => {\n // console.log(\"selectionChanged\");\n // console.log(index);\n let id = tag.getIdForIndex(index);\n // console.log(id);\n if (!id) {\n return;\n }\n // const element = tag.root.ownerDocument.getElementById(val) as HTMLElement;\n // console.log(element.textContent);\n id = id.replace(ID_PREFIX, \"\");\n // console.log(id);\n electronStore.set(\"readiumCSS.font\", id);\n });\n\n function updateLabelFont(newValue: string) {\n if (tag.root) {\n const label = tag.root.querySelector(\".mdc-select__selected-text\");\n if (label) {\n let fontFamily: string | undefined = newValue;\n if (fontFamily === \"DEFAULT\") {\n fontFamily = undefined;\n } else if (fontFamily === \"DUO\") {\n // fontFamily = \"IA Writer Duospace\";\n } else if (fontFamily === \"DYS\") {\n // fontFamily = \"AccessibleDfa\";\n } else if (fontFamily === \"OLD\") {\n // fontFamily = options[1].style; // \"oldStyleTf\";\n } else if (fontFamily === \"MODERN\") {\n // fontFamily = options[2].style; // \"modernTf\";\n } else if (fontFamily === \"SANS\") {\n // fontFamily = \"sansTf\";\n } else if (fontFamily === \"HUMAN\") {\n // fontFamily = \"humanistTf\";\n } else if (fontFamily === \"MONO\") {\n // fontFamily = \"monospaceTf\";\n } else if (fontFamily === \"JA\") {\n // fontFamily = \"serif-ja\";\n } else if (fontFamily === \"JA-SANS\") {\n // fontFamily = \"sans-serif-ja\";\n } else if (fontFamily === \"JA-V\") {\n // fontFamily = \"serif-ja-v\";\n } else if (fontFamily === \"JA_V_SANS\") {\n // fontFamily = \"sans-serif-ja-v\";\n } else {\n (label as HTMLElement).style.fontFamily = fontFamily;\n return;\n }\n if (!fontFamily) {\n label.removeAttribute(\"style\");\n } else {\n const idToFind = ID_PREFIX + newValue;\n const optionFound = options.find((item) => {\n return item.id === idToFind;\n });\n if (!optionFound || !optionFound.style) {\n label.removeAttribute(\"style\");\n return;\n }\n label.setAttribute(\"style\", optionFound.style);\n }\n }\n }\n }\n\n electronStore.onChanged(\"readiumCSS.font\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n // console.log(\"onDidChange\");\n // console.log(newValue);\n tag.setSelectedItem(ID_PREFIX + newValue);\n\n updateLabelFont(newValue);\n\n refreshReadiumCSS();\n });\n\n electronStore.onChanged(\"readiumCSSEnable\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n tag.setDisabled(!newValue);\n });\n\n setTimeout(async () => {\n\n let _sysFonts: string[] = [];\n const systemFonts = new SystemFonts.default();\n // const sysFonts = systemFonts.getFontsSync();\n try {\n _sysFonts = await systemFonts.getFonts();\n // console.log(_sysFonts);\n } catch (err) {\n console.log(err);\n }\n if (_sysFonts && _sysFonts.length) {\n const arr = ((tag.opts as IRiotOptsMenuSelect).options as IRiotOptsMenuSelectItem[]);\n const divider: IRiotOptsMenuSelectItem = {\n id: ID_PREFIX + \"_\",\n label: \"_\",\n };\n arr.push(divider);\n _sysFonts.forEach((sysFont) => {\n if (sysFont.startsWith(\".\")) {\n return;\n }\n const option: IRiotOptsMenuSelectItem = {\n id: ID_PREFIX + sysFont, // .replace(/ /g, \"_\"),\n label: sysFont,\n style: \"font-family: \" + sysFont + \";\",\n };\n arr.push(option);\n });\n let newSelectedID = ID_PREFIX + electronStore.get(\"readiumCSS.font\");\n const newFoundItem = options.find((item) => {\n return item.id === newSelectedID;\n });\n if (!newFoundItem) {\n newSelectedID = arr[0].id;\n }\n (tag.opts as IRiotOptsMenuSelect).selected = newSelectedID;\n tag.update();\n }\n\n updateLabelFont(electronStore.get(\"readiumCSS.font\"));\n }, 100);\n};\n\n// window.addEventListener(\"load\", () => {\n// });\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n\n setupDragDrop();\n\n (window as any).mdc.menu.MDCMenuFoundation.numbers.TRANSITION_DURATION_MS = 200;\n\n // TODO this seems to hijack MDC slider thumb change\n window.document.addEventListener(\"keydown\", (ev: KeyboardEvent) => {\n if (drawer.open) {\n return;\n }\n if ((ev.target as any).mdcSlider) {\n return;\n }\n\n if (ev.keyCode === 37) { // left\n navLeftOrRight(true);\n } else if (ev.keyCode === 39) { // right\n navLeftOrRight(false);\n }\n });\n\n setTimeout(() => {\n // material-components-web\n (window as any).mdc.autoInit();\n }, 500);\n\n window.document.title = \"Readium2 [ \" + pathFileName + \"]\";\n\n const h1 = document.getElementById(\"pubTitle\") as HTMLElement;\n h1.textContent = pathFileName;\n\n installKeyboardMouseFocusHandler();\n\n // TODO DARK THEME\n // if (electronStore.get(\"readiumCSS.night\")) {\n // document.body.classList.add(\"mdc-theme--dark\");\n // } else {\n // document.body.classList.remove(\"mdc-theme--dark\");\n // }\n\n const drawerElement = document.getElementById(\"drawer\") as HTMLElement;\n drawer = new (window as any).mdc.drawer.MDCDrawer(drawerElement);\n (drawerElement as any).mdcTemporaryDrawer = drawer;\n const drawerButton = document.getElementById(\"drawerButton\") as HTMLElement;\n drawerButton.addEventListener(\"click\", () => {\n drawer.open = true;\n });\n // drawerElement.addEventListener(\"click\", (ev) => {\n // const allMenus = drawerElement.querySelectorAll(\".mdc-menu\");\n // const openedMenus: Node[] = [];\n // allMenus.forEach((elem) => {\n // if ((elem as any).mdcSimpleMenu && (elem as any).mdcSimpleMenu.open) {\n // openedMenus.push(elem);\n // }\n // });\n\n // let needsToCloseMenus = true;\n // let currElem: Node | null = ev.target as Node;\n // while (currElem) {\n // if (openedMenus.indexOf(currElem) >= 0) {\n // needsToCloseMenus = false;\n // break;\n // }\n // currElem = currElem.parentNode;\n // }\n // if (needsToCloseMenus) {\n // openedMenus.forEach((elem) => {\n // (elem as any).mdcSimpleMenu.open = false;\n // let ss = (elem.parentNode as HTMLElement).querySelector(\".mdc-select__selected-text\");\n // if (ss) {\n // (ss as HTMLElement).style.transform = \"initial\";\n // (ss as HTMLElement).style.opacity = \"1\";\n // (ss as HTMLElement).focus();\n // }\n // ss = (elem.parentNode as HTMLElement).querySelector(\".mdc-select__label\");\n // if (ss) {\n // (ss as HTMLElement).style.transform = \"initial\";\n // (ss as HTMLElement).style.opacity = \"1\";\n // (ss as HTMLElement).focus();\n // }\n // });\n // } else {\n // console.log(\"NOT CLOSING MENU\");\n // }\n // }, true);\n\n initTextColorSelector();\n initBackgroundColorSelector();\n initFontSelector();\n initFontSizeSelector();\n initLineHeightSelector();\n initTypeScaleSelector();\n initPageMarginSelector();\n initWordSpacingSelector();\n initParaSpacingSelector();\n initParaIndentSelector();\n initLetterSpacingSelector();\n\n // const nightSwitch = document.getElementById(\"night_switch-input\") as HTMLInputElement;\n const nightSwitchEl = document.getElementById(\"night_switch\") as HTMLElement;\n const nightSwitch = new (window as any).mdc.switchControl.MDCSwitch(nightSwitchEl);\n (nightSwitchEl as any).mdcSwitch = nightSwitch;\n nightSwitch.checked = electronStore.get(\"readiumCSS.night\");\n\n const nightDiv = document.getElementById(\"night_div\") as HTMLElement;\n nightDiv.style.display = nightSwitch.checked ? \"block\" : \"none\";\n\n nightSwitchEl.addEventListener(\"change\", (_event: any) => {\n // nightSwitch.handleChange(\"change\", (_event: any) => {\n const checked = nightSwitch.checked;\n electronStore.set(\"readiumCSS.night\", checked);\n });\n nightSwitch.disabled = !electronStore.get(\"readiumCSSEnable\");\n\n const sepiaSwitchEl = document.getElementById(\"sepia_switch\") as HTMLElement;\n const sepiaSwitch = new (window as any).mdc.switchControl.MDCSwitch(sepiaSwitchEl);\n (sepiaSwitchEl as any).mdcSwitch = sepiaSwitch;\n sepiaSwitch.checked = electronStore.get(\"readiumCSS.sepia\");\n sepiaSwitchEl.addEventListener(\"change\", (_event: any) => {\n const checked = sepiaSwitch.checked;\n electronStore.set(\"readiumCSS.sepia\", checked);\n });\n sepiaSwitch.disabled = !electronStore.get(\"readiumCSSEnable\");\n\n const invertSwitchEl = document.getElementById(\"invert_switch\") as HTMLElement;\n const invertSwitch = new (window as any).mdc.switchControl.MDCSwitch(invertSwitchEl);\n (invertSwitchEl as any).mdcSwitch = invertSwitch;\n invertSwitch.checked = electronStore.get(\"readiumCSS.invert\");\n invertSwitchEl.addEventListener(\"change\", (_event: any) => {\n const checked = invertSwitch.checked;\n electronStore.set(\"readiumCSS.invert\", checked);\n });\n invertSwitch.disabled = !nightSwitch.checked || !electronStore.get(\"readiumCSSEnable\");\n\n const darkenSwitchEl = document.getElementById(\"darken_switch\") as HTMLElement;\n const darkenSwitch = new (window as any).mdc.switchControl.MDCSwitch(darkenSwitchEl);\n (darkenSwitchEl as any).mdcSwitch = darkenSwitch;\n darkenSwitch.checked = electronStore.get(\"readiumCSS.darken\");\n darkenSwitchEl.addEventListener(\"change\", (_event: any) => {\n const checked = darkenSwitch.checked;\n electronStore.set(\"readiumCSS.darken\", checked);\n });\n darkenSwitch.disabled = !nightSwitch.checked || !electronStore.get(\"readiumCSSEnable\");\n\n // const justifySwitch = document.getElementById(\"justify_switch-input\") as HTMLInputElement;\n const justifySwitchEl = document.getElementById(\"justify_switch\") as HTMLElement;\n const justifySwitch = new (window as any).mdc.switchControl.MDCSwitch(justifySwitchEl);\n (justifySwitchEl as any).mdcSwitch = justifySwitch;\n justifySwitch.checked = electronStore.get(\"readiumCSS.textAlign\") === \"justify\";\n justifySwitchEl.addEventListener(\"change\", (_event: any) => {\n // justifySwitch.handleChange(\"change\", (_event: any) => {\n const checked = justifySwitch.checked;\n electronStore.set(\"readiumCSS.textAlign\", checked ? \"justify\" : \"initial\");\n });\n justifySwitch.disabled = !electronStore.get(\"readiumCSSEnable\");\n\n // const footnotesSwitch = document.getElementById(\"footnotes_switch-input\") as HTMLInputElement;\n const footnotesSwitchEl = document.getElementById(\"footnotes_switch\") as HTMLElement;\n const footnotesSwitch = new (window as any).mdc.switchControl.MDCSwitch(footnotesSwitchEl);\n (footnotesSwitchEl as any).mdcSwitch = footnotesSwitch;\n footnotesSwitch.checked = electronStore.get(\"readiumCSS.noFootnotes\") ? false : true;\n footnotesSwitchEl.addEventListener(\"change\", (_event: any) => {\n // footnotesSwitch.handleChange(\"change\", (_event: any) => {\n const checked = footnotesSwitch.checked;\n electronStore.set(\"readiumCSS.noFootnotes\", checked ? false : true);\n });\n footnotesSwitch.disabled = !electronStore.get(\"readiumCSSEnable\");\n\n // const reduceMotionSwitch = document.getElementById(\"reduceMotion_switch-input\") as HTMLInputElement;\n const reduceMotionSwitchEl = document.getElementById(\"reduceMotion_switch\") as HTMLElement;\n const reduceMotionSwitch = new (window as any).mdc.switchControl.MDCSwitch(reduceMotionSwitchEl);\n (reduceMotionSwitchEl as any).mdcSwitch = reduceMotionSwitch;\n reduceMotionSwitch.checked = electronStore.get(\"readiumCSS.reduceMotion\") ? true : false;\n reduceMotionSwitchEl.addEventListener(\"change\", (_event: any) => {\n // footnotesSwitch.handleChange(\"change\", (_event: any) => {\n const checked = reduceMotionSwitch.checked;\n electronStore.set(\"readiumCSS.reduceMotion\", checked ? true : false);\n });\n reduceMotionSwitch.disabled = !electronStore.get(\"readiumCSSEnable\");\n\n // const paginateSwitch = document.getElementById(\"paginate_switch-input\") as HTMLInputElement;\n const paginateSwitchEl = document.getElementById(\"paginate_switch\") as HTMLElement;\n const paginateSwitch = new (window as any).mdc.switchControl.MDCSwitch(paginateSwitchEl);\n (paginateSwitchEl as any).mdcSwitch = paginateSwitch;\n paginateSwitch.checked = electronStore.get(\"readiumCSS.paged\");\n paginateSwitchEl.addEventListener(\"change\", (_event: any) => {\n // paginateSwitch.handleChange(\"change\", (_event: any) => {\n const checked = paginateSwitch.checked;\n electronStore.set(\"readiumCSS.paged\", checked);\n\n const colCountRadiosEl = document.getElementById(\"colCountRadios\") as HTMLElement;\n if (checked) {\n colCountRadiosEl.style.display = \"block\";\n } else {\n colCountRadiosEl.style.display = \"none\";\n }\n });\n paginateSwitch.disabled = !electronStore.get(\"readiumCSSEnable\");\n\n const colCountRadiosElem = document.getElementById(\"colCountRadios\") as HTMLElement;\n if (paginateSwitch.checked) {\n colCountRadiosElem.style.display = \"block\";\n } else {\n colCountRadiosElem.style.display = \"none\";\n }\n\n const radioColCountAutoEl = document.getElementById(\"radioColCountAuto\") as HTMLInputElement;\n radioColCountAutoEl.checked = electronStore.get(\"readiumCSS.colCount\") === \"auto\";\n radioColCountAutoEl.addEventListener(\"change\", () => {\n if (radioColCountAutoEl.checked) {\n electronStore.set(\"readiumCSS.colCount\", \"auto\");\n }\n });\n const radioColCount1El = document.getElementById(\"radioColCount1\") as HTMLInputElement;\n radioColCount1El.checked = electronStore.get(\"readiumCSS.colCount\") === \"1\";\n radioColCount1El.addEventListener(\"change\", () => {\n if (radioColCount1El.checked) {\n electronStore.set(\"readiumCSS.colCount\", \"1\");\n }\n });\n const radioColCount2El = document.getElementById(\"radioColCount2\") as HTMLInputElement;\n radioColCount2El.checked = electronStore.get(\"readiumCSS.colCount\") === \"2\";\n radioColCount2El.addEventListener(\"change\", () => {\n if (radioColCount2El.checked) {\n electronStore.set(\"readiumCSS.colCount\", \"2\");\n }\n });\n\n // const readiumcssSwitch = document.getElementById(\"readiumcss_switch-input\") as HTMLInputElement;\n const readiumcssSwitchEl = document.getElementById(\"readiumcss_switch\") as HTMLElement;\n const readiumcssSwitch = new (window as any).mdc.switchControl.MDCSwitch(readiumcssSwitchEl);\n (readiumcssSwitchEl as any).mdcSwitch = readiumcssSwitch;\n readiumcssSwitch.checked = electronStore.get(\"readiumCSSEnable\");\n const stylingWrapper = document.getElementById(\"stylingWrapper\") as HTMLElement;\n stylingWrapper.style.display = readiumcssSwitch.checked ? \"block\" : \"none\";\n if (readiumcssSwitch.checked) {\n ensureSliderLayout();\n }\n readiumcssSwitchEl.addEventListener(\"change\", (_event: any) => {\n // readiumcssSwitch.handleChange(\"change\", (_event: any) => {\n const checked = readiumcssSwitch.checked;\n electronStore.set(\"readiumCSSEnable\", checked);\n });\n\n // const basicSwitch = document.getElementById(\"nav_basic_switch-input\") as HTMLInputElement;\n const basicSwitchEl = document.getElementById(\"nav_basic_switch\") as HTMLElement;\n const basicSwitch = new (window as any).mdc.switchControl.MDCSwitch(basicSwitchEl);\n (basicSwitchEl as any).mdcSwitch = basicSwitch;\n basicSwitch.checked = !electronStore.get(\"basicLinkTitles\");\n basicSwitchEl.addEventListener(\"change\", (_event: any) => {\n // basicSwitch.handleChange(\"change\", (_event: any) => {\n const checked = basicSwitch.checked;\n electronStore.set(\"basicLinkTitles\", !checked);\n\n setTimeout(() => {\n snackBar.labelText = `Link URLs now ${checked ? \"shown\" : \"hidden\"}.`;\n snackBar.actionButtonText = \"OK\";\n snackBar.open();\n }, 500);\n });\n\n const debugSwitchEl = document.getElementById(\"visual_debug_switch\") as HTMLElement;\n const debugSwitch = new (window as any).mdc.switchControl.MDCSwitch(debugSwitchEl);\n (debugSwitchEl as any).mdcSwitch = debugSwitch;\n debugSwitch.checked = electronStore.get(\"visualDebug\");\n debugSwitchEl.addEventListener(\"change\", (_event: any) => {\n const checked = debugSwitch.checked;\n electronStore.set(\"visualDebug\", checked);\n\n setTimeout(() => {\n snackBar.labelText = `Visual debugging now ${checked ? \"enabled\" : \"disabled\"}.`;\n snackBar.actionButtonText = \"OK\";\n snackBar.open();\n }, 500);\n });\n\n const snackBarElem = document.getElementById(\"snackbar\") as HTMLElement;\n snackBar = new (window as any).mdc.snackbar.MDCSnackbar(snackBarElem);\n (snackBarElem as any).mdcSnackbar = snackBar;\n\n // drawerElement.addEventListener(\"MDCTemporaryDrawer:open\", () => {\n // console.log(\"MDCTemporaryDrawer:open\");\n // });\n // drawerElement.addEventListener(\"MDCTemporaryDrawer:close\", () => {\n // console.log(\"MDCTemporaryDrawer:close\");\n // });\n\n // const menuFactory = (menuEl: HTMLElement) => {\n // console.log(\"menuEl:\");\n // console.log(menuEl);\n // const menu = new (window as any).mdc.menu.MDCMenu(menuEl);\n // (menuEl as any).mdcSimpleMenu = menu;\n // return menu;\n // };\n\n const selectElement = document.getElementById(\"nav-select\") as HTMLElement;\n const navSelector = new (window as any).mdc.select.MDCSelect(selectElement); // , undefined, menuFactory\n (selectElement as any).mdcSelect = navSelector;\n navSelector.listen(\"MDCSelect:change\", (ev: any) => {\n // console.log(\"MDCSelect:change\");\n // console.log(ev);\n // console.log(ev.detail);\n // console.log(ev.detail.index); // ev.detail.selectedIndex\n // console.log(ev.detail.value);\n\n // console.log(ev.detail.selectedOptions[0].textContent);\n\n const activePanel = document.querySelector(\".tabPanel.active\");\n if (activePanel) {\n activePanel.classList.remove(\"active\");\n }\n const newActivePanel = document.querySelector(\".tabPanel:nth-child(\" + (ev.detail.index + 1) + \")\");\n if (newActivePanel) {\n newActivePanel.classList.add(\"active\");\n\n const div = document.getElementById(\"reader_controls_STYLES\") as HTMLElement;\n if (newActivePanel === div) {\n ensureSliderLayout();\n }\n }\n });\n\n const diagElem = document.querySelector(\"#lcpDialog\");\n const lcpPassInput = document.getElementById(\"lcpPassInput\") as HTMLInputElement;\n lcpDialog = new (window as any).mdc.dialog.MDCDialog(diagElem);\n (diagElem as any).mdcDialog = lcpDialog;\n\n lcpDialog.listen(\"MDCDialog:opened\", () => {\n console.log(\"MDCDialog:opened\");\n });\n\n lcpDialog.listen(\"MDCDialog:closed\", (event: any) => {\n console.log(\"MDCDialog:closed\");\n\n if (event.detail.action === \"close\") {\n console.log(\"MDCDialog:ACTION:close\");\n\n setTimeout(() => {\n showLcpDialog();\n }, 10);\n } else if (event.detail.action === \"accept\") {\n\n console.log(\"MDCDialog:ACTION:accept\");\n\n const lcpPass = lcpPassInput.value;\n\n const payload: IEventPayload_R2_EVENT_TRY_LCP_PASS = {\n isSha256Hex: false,\n lcpPass,\n publicationFilePath: pathDecoded,\n };\n ipcRenderer.send(R2_EVENT_TRY_LCP_PASS, payload);\n } else {\n console.log(\"!! MDCDialog:ACTION:\" + event.detail.action);\n\n setTimeout(() => {\n showLcpDialog();\n }, 10);\n }\n });\n\n const positionSelector = document.getElementById(\"positionSelector\") as HTMLElement;\n const slider = new (window as any).mdc.slider.MDCSlider(positionSelector);\n (positionSelector as any).mdcSlider = slider;\n\n slider.listen(\"MDCSlider:change\", (_event: any) => {\n onChangeReadingProgressionSlider();\n });\n\n if (lcpPassInput) {\n lcpPassInput.addEventListener(\"keyup\", (ev) => {\n if (ev.keyCode === 13) {\n ev.preventDefault();\n const lcpDialogAcceptButton = document.getElementById(\"lcpDialogAcceptButton\") as HTMLElement;\n lcpDialogAcceptButton.click();\n }\n });\n }\n\n if (lcpHint) {\n\n let lcpPassSha256Hex: string | undefined;\n const lcpStore = electronStoreLCP.get(\"lcp\");\n if (lcpStore) {\n const pubLcpStore = lcpStore[pathDecoded];\n if (pubLcpStore && pubLcpStore.sha) {\n lcpPassSha256Hex = pubLcpStore.sha;\n }\n }\n if (lcpPassSha256Hex) {\n const payload: IEventPayload_R2_EVENT_TRY_LCP_PASS = {\n isSha256Hex: true,\n lcpPass: lcpPassSha256Hex,\n publicationFilePath: pathDecoded,\n };\n ipcRenderer.send(R2_EVENT_TRY_LCP_PASS, payload);\n } else {\n showLcpDialog();\n }\n } else {\n startNavigatorExperiment();\n }\n\n const buttonClearReadingLocations = document.getElementById(\"buttonClearReadingLocations\") as HTMLElement;\n buttonClearReadingLocations.addEventListener(\"click\", () => {\n electronStore.set(\"readingLocation\", {});\n\n electronStore.set(\"bookmarks\", {});\n\n drawer.open = false;\n setTimeout(() => {\n snackBar.labelText = \"Reading locations / bookmarks reset.\";\n snackBar.actionButtonText = \"OK\";\n snackBar.open();\n }, 500);\n });\n\n const buttonClearSettings = document.getElementById(\"buttonClearSettings\") as HTMLElement;\n buttonClearSettings.addEventListener(\"click\", () => {\n // electronStore.clear();\n // electronStore.store = electronStore.getDefaults();\n electronStore.set(undefined, electronStore.getDefaults());\n\n drawer.open = false;\n setTimeout(() => {\n snackBar.labelText = \"Settings reset.\";\n snackBar.actionButtonText = \"OK\";\n snackBar.open();\n }, 500);\n });\n\n const buttonClearSettingsStyle = document.getElementById(\"buttonClearSettingsStyle\") as HTMLElement;\n buttonClearSettingsStyle.addEventListener(\"click\", () => {\n\n electronStore.set(\"readiumCSS\", electronStore.getDefaults().readiumCSS);\n\n // drawer.open = false;\n // setTimeout(() => {\n // snackBar.labelText = \"Default styles.\";\n // snackBar.actionButtonText = \"OK\";\n // snackBar.open();\n // }, 500);\n });\n\n const buttonOpenSettings = document.getElementById(\"buttonOpenSettings\") as HTMLElement;\n buttonOpenSettings.addEventListener(\"click\", () => {\n if ((electronStore as any).reveal) {\n (electronStore as any).reveal();\n }\n });\n\n const buttonOpenLcpSettings = document.getElementById(\"buttonOpenLcpSettings\") as HTMLElement;\n buttonOpenLcpSettings.addEventListener(\"click\", () => {\n if ((electronStoreLCP as any).reveal) {\n (electronStoreLCP as any).reveal();\n }\n ipcRenderer.send(\"R2_EVENT_LCP_LSD_OPEN_SETTINGS\");\n });\n\n const buttonLSDRenew = document.getElementById(\"buttonLSDRenew\") as HTMLElement;\n buttonLSDRenew.addEventListener(\"click\", () => {\n const payload: IEventPayload_R2_EVENT_LCP_LSD_RENEW = {\n endDateStr: undefined, // no explicit end date\n publicationFilePath: pathDecoded,\n };\n ipcRenderer.send(R2_EVENT_LCP_LSD_RENEW, payload);\n\n drawer.open = false;\n setTimeout(() => {\n snackBar.labelText = \"LCP LSD renew message sent.\";\n snackBar.actionButtonText = \"OK\";\n snackBar.open();\n }, 500);\n });\n\n const buttonLSDReturn = document.getElementById(\"buttonLSDReturn\") as HTMLElement;\n buttonLSDReturn.addEventListener(\"click\", () => {\n const payload: IEventPayload_R2_EVENT_LCP_LSD_RETURN = {\n publicationFilePath: pathDecoded,\n };\n ipcRenderer.send(R2_EVENT_LCP_LSD_RETURN, payload);\n\n drawer.open = false;\n setTimeout(() => {\n snackBar.labelText = \"LCP LSD return message sent.\";\n snackBar.actionButtonText = \"OK\";\n snackBar.open();\n }, 500);\n });\n\n // const buttonDevTools = document.getElementById(\"buttonDevTools\") as HTMLElement;\n // buttonDevTools.addEventListener(\"click\", () => {\n // ipcRenderer.send(R2_EVENT_DEVTOOLS, \"test\");\n // });\n\n document.querySelectorAll(\"#tabsPanels .mdc-switch__native-control\").forEach((elem) => {\n elem.addEventListener(\"focusin\", (ev) => {\n\n // .mdc-switch__thumb-underlay div\n // tslint:disable-next-line:max-line-length\n (((ev.target as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).style.setProperty(\"--mdc-ripple-fg-scale\", \"1.7\");\n // tslint:disable-next-line:max-line-length\n (((ev.target as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).style.setProperty(\"--mdc-ripple-fg-size\", \"28px\");\n // tslint:disable-next-line:max-line-length\n (((ev.target as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).style.setProperty(\"--mdc-ripple-left\", \"10px\");\n // tslint:disable-next-line:max-line-length\n (((ev.target as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).style.setProperty(\"--mdc-ripple-top\", \"10px\");\n\n // .switchWrap div\n // tslint:disable-next-line:max-line-length\n (((((ev.target as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).parentElement as HTMLElement).classList.add(\"keyboardfocus\");\n });\n elem.addEventListener(\"focusout\", (ev) => {\n // .switchWrap div\n // tslint:disable-next-line:max-line-length\n (((((ev.target as HTMLElement).parentElement as HTMLElement).parentNode as HTMLElement).parentNode as HTMLElement).parentNode as HTMLElement).classList.remove(\"keyboardfocus\");\n });\n });\n});\n\nipcRenderer.on(R2_EVENT_LCP_LSD_RENEW_RES, (_event: any, payload: IEventPayload_R2_EVENT_LCP_LSD_RENEW_RES) => {\n console.log(\"R2_EVENT_LCP_LSD_RENEW_RES\");\n console.log(payload.okay);\n console.log(payload.error);\n console.log(payload.lsd);\n});\n\nipcRenderer.on(R2_EVENT_LCP_LSD_RETURN_RES, (_event: any, payload: IEventPayload_R2_EVENT_LCP_LSD_RETURN_RES) => {\n console.log(\"R2_EVENT_LCP_LSD_RETURN_RES\");\n console.log(payload.okay);\n console.log(payload.error);\n console.log(payload.lsd);\n});\n\nfunction startNavigatorExperiment() {\n\n const drawerButton = document.getElementById(\"drawerButton\") as HTMLElement;\n drawerButton.focus();\n\n // tslint:disable-next-line:no-floating-promises\n (async () => {\n\n let response: Response;\n try {\n // https://github.com/electron/electron/blob/v3.0.0/docs/api/breaking-changes.md#webframe\n // publicationJsonUrl is READIUM2_ELECTRON_HTTP_PROTOCOL (see convertCustomSchemeToHttpUrl)\n // publicationJsonUrl_ is https://127.0.0.1:PORT\n response = await fetch(publicationJsonUrl_);\n } catch (e) {\n console.log(e);\n console.log(publicationJsonUrl_);\n return;\n }\n if (!response.ok) {\n console.log(\"BAD RESPONSE?!\");\n }\n // response.headers.forEach((arg0: any, arg1: any) => {\n // console.log(arg0 + \" => \" + arg1);\n // });\n\n let _publicationJSON: any | undefined;\n try {\n _publicationJSON = await response.json();\n } catch (e) {\n console.log(e);\n }\n if (!_publicationJSON) {\n return;\n }\n // const pubJson = global.JSON.parse(publicationStr);\n\n _publication = TAJSON.deserialize<Publication>(_publicationJSON, Publication);\n\n if (_publication.Metadata && _publication.Metadata.Title) {\n let title: string | undefined;\n if (typeof _publication.Metadata.Title === \"string\") {\n title = _publication.Metadata.Title;\n } else {\n const keys = Object.keys(_publication.Metadata.Title as IStringMap);\n if (keys && keys.length) {\n title = (_publication.Metadata.Title as IStringMap)[keys[0]];\n }\n }\n\n if (title) {\n const h1 = document.getElementById(\"pubTitle\") as HTMLElement;\n h1.textContent = title;\n h1.setAttribute(\"title\", title);\n // h1.addEventListener(\"click\", (_event: any) => {\n // });\n }\n }\n\n initBookmarksFromStore();\n\n const buttonBookmarkTOGGLE = document.getElementById(\"bookmarkTOGGLE\") as HTMLElement;\n buttonBookmarkTOGGLE.addEventListener(\"MDCIconButtonToggle:change\", async (_event) => {\n if ((event as any).detail.isOn) {\n addCurrentVisibleBookmark();\n } else {\n try {\n const removed = await removeAllCurrentVisibleBookmarks();\n console.log(\"removed bookmarks:\");\n removed.forEach((bookmark) => {\n console.log(JSON.stringify(bookmark, null, 4));\n });\n } catch (err) {\n console.log(err);\n }\n }\n visualDebugBookmarks();\n refreshBookmarksStore();\n });\n const mdcButtonBookmarkTOGGLE = new (window as any).mdc.iconButton.MDCIconButtonToggle(buttonBookmarkTOGGLE);\n (buttonBookmarkTOGGLE as any).mdcButton = mdcButtonBookmarkTOGGLE;\n\n // const buttonBookmarkHighlightTOGGLE = document.getElementById(\"bookmarkHighlightTOGGLE\") as HTMLElement;\n // buttonBookmarkHighlightTOGGLE.addEventListener(\"MDCIconButtonToggle:change\", async (_event) => {\n // const bookmarkHighlightTOGGLELabel =\n // document.getElementById(\"bookmarkHighlightTOGGLELabel\") as HTMLElement;\n // if ((event as any).detail.isOn) {\n // bookmarkHighlightTOGGLELabel.textContent = \"hide bookmarks\";\n // } else {\n // bookmarkHighlightTOGGLELabel.textContent = \"show bookmarks\";\n // }\n // });\n // const mdcButtonBookmarkHighlightTOGGLE =\n // new (window as any).mdc.iconButton.MDCIconButtonToggle(buttonBookmarkHighlightTOGGLE);\n // (buttonBookmarkHighlightTOGGLE as any).mdcButton = mdcButtonBookmarkHighlightTOGGLE;\n\n const buttonttsPLAYPAUSE = document.getElementById(\"ttsPLAYPAUSE\") as HTMLElement;\n buttonttsPLAYPAUSE.addEventListener(\"MDCIconButtonToggle:change\", (event) => {\n // console.log(\"MDCIconButtonToggle:change\");\n // console.log((event as any).detail.isOn);\n\n if ((event as any).detail.isOn) {\n if (_ttsState === TTSStateEnum.PAUSED) {\n ttsResume();\n } else {\n ttsPlay();\n }\n } else {\n ttsPause();\n }\n });\n const mdcButtonttsPLAYPAUSE = new (window as any).mdc.iconButton.MDCIconButtonToggle(buttonttsPLAYPAUSE);\n (buttonttsPLAYPAUSE as any).mdcButton = mdcButtonttsPLAYPAUSE;\n // console.log(\"(buttonttsPLAYPAUSE as any).mdcButton.on\");\n // console.log((buttonttsPLAYPAUSE as any).mdcButton.on);\n\n // const buttonttsPLAY = document.getElementById(\"ttsPLAY\") as HTMLElement;\n // buttonttsPLAY.addEventListener(\"click\", (_event) => {\n // ttsPlay();\n // });\n // const buttonttsPAUSE = document.getElementById(\"ttsPAUSE\") as HTMLElement;\n // buttonttsPAUSE.addEventListener(\"click\", (_event) => {\n // ttsPause();\n // });\n const buttonttsSTOP = document.getElementById(\"ttsSTOP\") as HTMLElement;\n buttonttsSTOP.addEventListener(\"click\", (_event) => {\n ttsStop();\n });\n // const buttonttsRESUME = document.getElementById(\"ttsRESUME\") as HTMLElement;\n // buttonttsRESUME.addEventListener(\"click\", (_event) => {\n // ttsResume();\n // });\n const buttonttsNEXT = document.getElementById(\"ttsNEXT\") as HTMLElement;\n buttonttsNEXT.addEventListener(\"click\", (_event) => {\n ttsNext();\n });\n const buttonttsPREVIOUS = document.getElementById(\"ttsPREVIOUS\") as HTMLElement;\n buttonttsPREVIOUS.addEventListener(\"click\", (_event) => {\n ttsPrevious();\n });\n\n // const buttonttsENABLE = document.getElementById(\"ttsENABLE\") as HTMLElement;\n // buttonttsENABLE.addEventListener(\"click\", (_event) => {\n // ttsEnableToggle();\n // });\n\n // const buttonttsDISABLE = document.getElementById(\"ttsDISABLE\") as HTMLElement;\n // buttonttsDISABLE.addEventListener(\"click\", (_event) => {\n // ttsEnableToggle();\n // });\n\n const buttonttsTOGGLE = document.getElementById(\"ttsTOGGLE\") as HTMLElement;\n buttonttsTOGGLE.addEventListener(\"MDCIconButtonToggle:change\", (_event) => {\n ttsEnableToggle();\n });\n const mdcButtonttsTOGGLE = new (window as any).mdc.iconButton.MDCIconButtonToggle(buttonttsTOGGLE);\n (buttonttsTOGGLE as any).mdcButton = mdcButtonttsTOGGLE;\n\n let _ttsState: TTSStateEnum | undefined;\n refreshTtsUiState();\n\n ttsListen((ttsState: TTSStateEnum) => {\n if (!_ttsEnabled) {\n return;\n }\n _ttsState = ttsState;\n refreshTtsUiState();\n });\n\n function refreshTtsUiState() {\n if (_ttsState === TTSStateEnum.PAUSED) {\n // console.log(\"refreshTtsUiState _ttsState === TTSStateEnum.PAUSED\");\n // console.log((buttonttsPLAYPAUSE as any).mdcButton.on);\n (buttonttsPLAYPAUSE as any).mdcButton.on = false;\n // buttonttsPLAY.style.display = \"none\";\n // buttonttsRESUME.style.display = \"inline-block\";\n // buttonttsPAUSE.style.display = \"none\";\n buttonttsPLAYPAUSE.style.display = \"inline-block\";\n buttonttsSTOP.style.display = \"inline-block\";\n buttonttsPREVIOUS.style.display = \"inline-block\";\n buttonttsNEXT.style.display = \"inline-block\";\n } else if (_ttsState === TTSStateEnum.STOPPED) {\n // console.log(\"refreshTtsUiState _ttsState === TTSStateEnum.STOPPED\");\n // console.log((buttonttsPLAYPAUSE as any).mdcButton.on);\n (buttonttsPLAYPAUSE as any).mdcButton.on = false;\n // buttonttsPLAY.style.display = \"inline-block\";\n // buttonttsRESUME.style.display = \"none\";\n // buttonttsPAUSE.style.display = \"none\";\n buttonttsPLAYPAUSE.style.display = \"inline-block\";\n buttonttsSTOP.style.display = \"none\";\n buttonttsPREVIOUS.style.display = \"none\";\n buttonttsNEXT.style.display = \"none\";\n } else if (_ttsState === TTSStateEnum.PLAYING) {\n // console.log(\"refreshTtsUiState _ttsState === TTSStateEnum.PLAYING\");\n // console.log((buttonttsPLAYPAUSE as any).mdcButton.on);\n (buttonttsPLAYPAUSE as any).mdcButton.on = true;\n // buttonttsPLAY.style.display = \"none\";\n // buttonttsRESUME.style.display = \"none\";\n // buttonttsPAUSE.style.display = \"inline-block\";\n buttonttsPLAYPAUSE.style.display = \"inline-block\";\n buttonttsSTOP.style.display = \"inline-block\";\n buttonttsPREVIOUS.style.display = \"inline-block\";\n buttonttsNEXT.style.display = \"inline-block\";\n } else {\n // console.log(\"refreshTtsUiState _ttsState === undefined\");\n // console.log((buttonttsPLAYPAUSE as any).mdcButton.on);\n (buttonttsPLAYPAUSE as any).mdcButton.on = false;\n // buttonttsPLAY.style.display = \"none\";\n // buttonttsRESUME.style.display = \"none\";\n // buttonttsPAUSE.style.display = \"none\";\n buttonttsPLAYPAUSE.style.display = \"none\";\n buttonttsSTOP.style.display = \"none\";\n buttonttsPREVIOUS.style.display = \"none\";\n buttonttsNEXT.style.display = \"none\";\n }\n }\n\n // buttonttsDISABLE.style.display = \"none\";\n let _ttsEnabled = false;\n function ttsEnableToggle() {\n if (_ttsEnabled) {\n // buttonttsENABLE.style.display = \"inline-block\";\n // buttonttsDISABLE.style.display = \"none\";\n ttsClickEnable(false);\n _ttsEnabled = false;\n _ttsState = undefined;\n refreshTtsUiState();\n ttsStop();\n } else {\n // buttonttsENABLE.style.display = \"none\";\n // buttonttsDISABLE.style.display = \"inline-block\";\n ttsClickEnable(true);\n _ttsEnabled = true;\n _ttsState = TTSStateEnum.STOPPED;\n refreshTtsUiState();\n ttsStop();\n }\n }\n\n const buttonNavLeft = document.getElementById(\"buttonNavLeft\") as HTMLElement;\n buttonNavLeft.addEventListener(\"click\", (_event) => {\n navLeftOrRight(true);\n });\n\n const buttonNavRight = document.getElementById(\"buttonNavRight\") as HTMLElement;\n buttonNavRight.addEventListener(\"click\", (_event) => {\n navLeftOrRight(false);\n });\n\n const onWheel = throttle((ev: WheelEvent) => {\n\n console.log(\"wheel: \" + ev.deltaX + \" - \" + ev.deltaY);\n\n if (ev.deltaY < 0 || ev.deltaX < 0) {\n navLeftOrRight(true);\n } else if (ev.deltaY > 0 || ev.deltaX > 0) {\n navLeftOrRight(false);\n }\n }, 300);\n buttonNavLeft.addEventListener(\"wheel\", onWheel);\n buttonNavRight.addEventListener(\"wheel\", onWheel);\n\n const FAKE_URL = \"https://dummy.me/\";\n const optsBookmarks: IRiotOptsLinkListGroup = {\n basic: electronStore.get(\"basicLinkTitles\"),\n handleLink: (href: string) => {\n href = href.substr(FAKE_URL.length);\n const fragToken = \"#r2loc(\";\n const i = href.indexOf(fragToken);\n if (i > 0) {\n const j = i + fragToken.length;\n const cssSelector = href.substr(j, href.length - j - 1);\n href = href.substr(0, i);\n const locator = {\n href,\n locations: {\n cssSelector,\n },\n };\n handleLinkLocator_(locator);\n }\n },\n linksgroup: [] as IRiotOptsLinkListGroupItem[],\n url: FAKE_URL, // publicationJsonUrl,\n };\n const tagBookmarks =\n riotMountLinkListGroup(\"#reader_controls_BOOKMARKS\", optsBookmarks)[0] as IRiotTagLinkListGroup;\n electronStore.onChanged(\"basicLinkTitles\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n tagBookmarks.setBasic(newValue);\n });\n\n if (_publication.Spine && _publication.Spine.length) {\n\n const opts: IRiotOptsLinkList = {\n basic: true,\n fixBasic: true, // always single-line list items (no title)\n handleLink: handleLink_,\n links: (_publicationJSON.spine || _publicationJSON.readingOrder) as IRiotOptsLinkListItem[],\n url: publicationJsonUrl,\n };\n // const tag =\n riotMountLinkList(\"#reader_controls_SPINE\", opts);\n }\n\n if (_publication.TOC && _publication.TOC.length) {\n\n const opts: IRiotOptsLinkTree = {\n basic: electronStore.get(\"basicLinkTitles\"),\n handleLink: handleLink_,\n links: _publicationJSON.toc as IRiotOptsLinkTreeItem[],\n url: publicationJsonUrl,\n };\n const tag = riotMountLinkTree(\"#reader_controls_TOC\", opts)[0] as IRiotTagLinkTree;\n\n electronStore.onChanged(\"basicLinkTitles\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n tag.setBasic(newValue);\n });\n }\n if (_publication.PageList && _publication.PageList.length) {\n\n const opts: IRiotOptsLinkList = {\n basic: electronStore.get(\"basicLinkTitles\"),\n handleLink: handleLink_,\n links: _publicationJSON[\"page-list\"] as IRiotOptsLinkListItem[],\n url: publicationJsonUrl,\n };\n const tag = riotMountLinkList(\"#reader_controls_PAGELIST\", opts)[0] as IRiotTagLinkList;\n\n electronStore.onChanged(\"basicLinkTitles\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n tag.setBasic(newValue);\n });\n }\n\n const landmarksData: IRiotOptsLinkListGroupItem[] = [];\n if (_publication.Landmarks && _publication.Landmarks.length) {\n landmarksData.push({\n label: \"Main\",\n links: _publicationJSON.landmarks as IRiotOptsLinkListItem[],\n });\n }\n if (_publication.LOT && _publication.LOT.length) {\n landmarksData.push({\n label: \"Tables\",\n links: _publicationJSON.lot as IRiotOptsLinkListItem[],\n });\n }\n if (_publication.LOI && _publication.LOI.length) {\n landmarksData.push({\n label: \"Illustrations\",\n links: _publicationJSON.loi as IRiotOptsLinkListItem[],\n });\n }\n if (_publication.LOV && _publication.LOV.length) {\n landmarksData.push({\n label: \"Video\",\n links: _publicationJSON.lov as IRiotOptsLinkListItem[],\n });\n }\n if (_publication.LOA && _publication.LOA.length) {\n landmarksData.push({\n label: \"Audio\",\n links: _publicationJSON.loa as IRiotOptsLinkListItem[],\n });\n }\n if (landmarksData.length) {\n const opts: IRiotOptsLinkListGroup = {\n basic: electronStore.get(\"basicLinkTitles\"),\n handleLink: handleLink_,\n linksgroup: landmarksData,\n url: publicationJsonUrl,\n };\n const tag = riotMountLinkListGroup(\"#reader_controls_LANDMARKS\", opts)[0] as IRiotTagLinkListGroup;\n\n electronStore.onChanged(\"basicLinkTitles\", (newValue: any, oldValue: any) => {\n if (typeof newValue === \"undefined\" || typeof oldValue === \"undefined\") {\n return;\n }\n tag.setBasic(newValue);\n });\n }\n\n const readStore = electronStore.get(\"readingLocation\");\n let location: Locator | undefined;\n if (readStore) {\n const obj = readStore[pathDecoded] as IReadingLocation;\n if (obj && obj.doc) {\n if (obj.loc) {\n location = { href: obj.doc, locations: { cfi: undefined, cssSelector: obj.loc } };\n } else if (obj.locCssSelector) {\n location = { href: obj.doc, locations: { cfi: undefined, cssSelector: obj.locCssSelector } };\n }\n if (obj.locCfi) {\n if (!location) {\n location = { href: obj.doc, locations: { cfi: obj.locCfi, cssSelector: \"body\" } };\n } else {\n location.locations.cfi = obj.locCfi;\n }\n }\n }\n }\n\n // necessary otherwise focus steal for links in publication documents!\n drawer.open = true;\n setTimeout(() => {\n drawer.open = false;\n\n let preloadPath = \"./preload.js\";\n\n // TODO: REEEALLY HACKY! (and does not work in release bundle mode, only with dist/ exploded code)\n let distTarget: string | undefined;\n const dirnameSlashed = __dirname.replace(/\\\\/g, \"/\");\n if (dirnameSlashed.indexOf(\"/dist/es5\") > 0) {\n distTarget = \"es5\";\n } else if (dirnameSlashed.indexOf(\"/dist/es6-es2015\") > 0) {\n distTarget = \"es6-es2015\";\n } else if (dirnameSlashed.indexOf(\"/dist/es7-es2016\") > 0) {\n distTarget = \"es7-es2016\";\n } else if (dirnameSlashed.indexOf(\"/dist/es8-es2017\") > 0) {\n distTarget = \"es8-es2017\";\n }\n if (distTarget) {\n preloadPath = path.join(process.cwd(),\n \"node_modules/r2-navigator-js/dist/\" +\n distTarget\n + \"/src/electron/renderer/webview/preload.js\");\n }\n\n preloadPath = IS_DEV ? preloadPath : `${dirnameSlashed}/preload.js`;\n preloadPath = preloadPath.replace(/\\\\/g, \"/\");\n // preloadPath = \"file://\" + preloadPath;\n console.log(preloadPath);\n\n const rootHtmlElementID = \"publication_viewport\";\n const rootHtmlElement = document.getElementById(rootHtmlElementID) as HTMLElement;\n if (!rootHtmlElement) {\n console.log(\"!rootHtmlElement ???\");\n return;\n }\n\n // rootHtmlElement.addEventListener(DOM_EVENT_HIDE_VIEWPORT, () => {\n // hideWebView();\n // });\n // rootHtmlElement.addEventListener(DOM_EVENT_SHOW_VIEWPORT, () => {\n // unhideWebView();\n // });\n\n let foundLink: Link | undefined;\n if (_publication && location) {\n if (_publication.Spine) {\n foundLink = _publication.Spine.find((link) => {\n return typeof location !== \"undefined\" &&\n link.Href === location.href;\n });\n }\n if (!foundLink && _publication.Resources) {\n foundLink = _publication.Resources.find((link) => {\n return typeof location !== \"undefined\" &&\n link.Href === location.href;\n });\n }\n }\n // console.log(location);\n const locatorExtended: LocatorExtended | undefined = location ? {\n docInfo: {\n isFixedLayout: isFixedLayout(_publication as Publication, foundLink),\n isRightToLeft: false,\n isVerticalWritingMode: false,\n },\n locator: location,\n paginationInfo: undefined,\n selectionInfo: undefined,\n } : undefined;\n updateReadingProgressionSlider(locatorExtended);\n\n installNavigatorDOM(_publication as Publication, publicationJsonUrl,\n rootHtmlElementID,\n preloadPath,\n location);\n }, 500);\n })();\n}\n\n// const ELEMENT_ID_HIDE_PANEL = \"r2_navigator_reader_chrome_HIDE\";\n// let _viewHideInterval: NodeJS.Timer | undefined;\n// const unhideWebView = () => {\n// if (window) { // skip this\n// return;\n// }\n// if (_viewHideInterval) {\n// clearInterval(_viewHideInterval);\n// _viewHideInterval = undefined;\n// }\n// const hidePanel = document.getElementById(ELEMENT_ID_HIDE_PANEL) as HTMLElement;\n// if (!hidePanel || hidePanel.style.display === \"none\") {\n// return;\n// }\n// if (hidePanel) {\n// hidePanel.style.display = \"none\";\n// }\n// };\n// const hideWebView = () => {\n// if (window) { // skip this\n// return;\n// }\n// const hidePanel = document.getElementById(ELEMENT_ID_HIDE_PANEL) as HTMLElement;\n// if (hidePanel && hidePanel.style.display !== \"block\") {\n// hidePanel.style.display = \"block\";\n// _viewHideInterval = setInterval(() => {\n// console.log(\"unhideWebView FORCED\");\n// unhideWebView();\n// }, 5000);\n// }\n// };\n\nfunction handleLink_(href: string) {\n if (drawer.open) {\n drawer.open = false;\n setTimeout(() => {\n handleLinkUrl(href);\n }, 200);\n } else {\n handleLinkUrl(href);\n }\n}\n\nfunction handleLinkLocator_(locator: Locator) {\n if (drawer.open) {\n drawer.open = false;\n setTimeout(() => {\n handleLinkLocator(locator);\n }, 200);\n } else {\n handleLinkLocator(locator);\n }\n}\n"]}
\No newline at end of file