├── .electron-vue ├── build.js ├── config.js ├── dev-client-command-palette.js ├── dev-client-main-browser-window.js ├── dev-client-playbooks-view.js ├── dev-client-preference-view.js ├── dev-client-recommender.js ├── dev-client-search-worker.js ├── dev-runner.js ├── webpack.dll.config.js ├── webpack.main.config.js └── webpack.renderer.config.js ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── .nvmrc ├── .vscode ├── launch.json └── settings.json ├── .yarnrc ├── LICENSE.txt ├── README.md ├── ava.config.js ├── babel.config.js ├── build └── icons │ ├── icon.icns │ ├── icon.ico │ └── icon.png ├── builds └── .gitkeep ├── code-of-conduct.md ├── dist └── .gitkeep ├── docs └── state.md ├── extensions └── .gitkeep ├── package.json ├── src ├── helper │ ├── i18n │ │ ├── en-US.js │ │ ├── zh-CN.js │ │ └── zh-TW.js │ ├── pages │ │ ├── error │ │ │ ├── error.js │ │ │ └── index.html │ │ └── pagebase.css │ └── pdfjs │ │ ├── LICENSE │ │ ├── build │ │ ├── pdf.js │ │ ├── pdf.js.map │ │ ├── pdf.worker.js │ │ └── pdf.worker.js.map │ │ └── web │ │ ├── cmaps │ │ ├── 78-EUC-H.bcmap │ │ ├── 78-EUC-V.bcmap │ │ ├── 78-H.bcmap │ │ ├── 78-RKSJ-H.bcmap │ │ ├── 78-RKSJ-V.bcmap │ │ ├── 78-V.bcmap │ │ ├── 78ms-RKSJ-H.bcmap │ │ ├── 78ms-RKSJ-V.bcmap │ │ ├── 83pv-RKSJ-H.bcmap │ │ ├── 90ms-RKSJ-H.bcmap │ │ ├── 90ms-RKSJ-V.bcmap │ │ ├── 90msp-RKSJ-H.bcmap │ │ ├── 90msp-RKSJ-V.bcmap │ │ ├── 90pv-RKSJ-H.bcmap │ │ ├── 90pv-RKSJ-V.bcmap │ │ ├── Add-H.bcmap │ │ ├── Add-RKSJ-H.bcmap │ │ ├── Add-RKSJ-V.bcmap │ │ ├── Add-V.bcmap │ │ ├── Adobe-CNS1-0.bcmap │ │ ├── Adobe-CNS1-1.bcmap │ │ ├── Adobe-CNS1-2.bcmap │ │ ├── Adobe-CNS1-3.bcmap │ │ ├── Adobe-CNS1-4.bcmap │ │ ├── Adobe-CNS1-5.bcmap │ │ ├── Adobe-CNS1-6.bcmap │ │ ├── Adobe-CNS1-UCS2.bcmap │ │ ├── Adobe-GB1-0.bcmap │ │ ├── Adobe-GB1-1.bcmap │ │ ├── Adobe-GB1-2.bcmap │ │ ├── Adobe-GB1-3.bcmap │ │ ├── Adobe-GB1-4.bcmap │ │ ├── Adobe-GB1-5.bcmap │ │ ├── Adobe-GB1-UCS2.bcmap │ │ ├── Adobe-Japan1-0.bcmap │ │ ├── Adobe-Japan1-1.bcmap │ │ ├── Adobe-Japan1-2.bcmap │ │ ├── Adobe-Japan1-3.bcmap │ │ ├── Adobe-Japan1-4.bcmap │ │ ├── Adobe-Japan1-5.bcmap │ │ ├── Adobe-Japan1-6.bcmap │ │ ├── Adobe-Japan1-UCS2.bcmap │ │ ├── Adobe-Korea1-0.bcmap │ │ ├── Adobe-Korea1-1.bcmap │ │ ├── Adobe-Korea1-2.bcmap │ │ ├── Adobe-Korea1-UCS2.bcmap │ │ ├── B5-H.bcmap │ │ ├── B5-V.bcmap │ │ ├── B5pc-H.bcmap │ │ ├── B5pc-V.bcmap │ │ ├── CNS-EUC-H.bcmap │ │ ├── CNS-EUC-V.bcmap │ │ ├── CNS1-H.bcmap │ │ ├── CNS1-V.bcmap │ │ ├── CNS2-H.bcmap │ │ ├── CNS2-V.bcmap │ │ ├── ETHK-B5-H.bcmap │ │ ├── ETHK-B5-V.bcmap │ │ ├── ETen-B5-H.bcmap │ │ ├── ETen-B5-V.bcmap │ │ ├── ETenms-B5-H.bcmap │ │ ├── ETenms-B5-V.bcmap │ │ ├── EUC-H.bcmap │ │ ├── EUC-V.bcmap │ │ ├── Ext-H.bcmap │ │ ├── Ext-RKSJ-H.bcmap │ │ ├── Ext-RKSJ-V.bcmap │ │ ├── Ext-V.bcmap │ │ ├── GB-EUC-H.bcmap │ │ ├── GB-EUC-V.bcmap │ │ ├── GB-H.bcmap │ │ ├── GB-V.bcmap │ │ ├── GBK-EUC-H.bcmap │ │ ├── GBK-EUC-V.bcmap │ │ ├── GBK2K-H.bcmap │ │ ├── GBK2K-V.bcmap │ │ ├── GBKp-EUC-H.bcmap │ │ ├── GBKp-EUC-V.bcmap │ │ ├── GBT-EUC-H.bcmap │ │ ├── GBT-EUC-V.bcmap │ │ ├── GBT-H.bcmap │ │ ├── GBT-V.bcmap │ │ ├── GBTpc-EUC-H.bcmap │ │ ├── GBTpc-EUC-V.bcmap │ │ ├── GBpc-EUC-H.bcmap │ │ ├── GBpc-EUC-V.bcmap │ │ ├── H.bcmap │ │ ├── HKdla-B5-H.bcmap │ │ ├── HKdla-B5-V.bcmap │ │ ├── HKdlb-B5-H.bcmap │ │ ├── HKdlb-B5-V.bcmap │ │ ├── HKgccs-B5-H.bcmap │ │ ├── HKgccs-B5-V.bcmap │ │ ├── HKm314-B5-H.bcmap │ │ ├── HKm314-B5-V.bcmap │ │ ├── HKm471-B5-H.bcmap │ │ ├── HKm471-B5-V.bcmap │ │ ├── HKscs-B5-H.bcmap │ │ ├── HKscs-B5-V.bcmap │ │ ├── Hankaku.bcmap │ │ ├── Hiragana.bcmap │ │ ├── KSC-EUC-H.bcmap │ │ ├── KSC-EUC-V.bcmap │ │ ├── KSC-H.bcmap │ │ ├── KSC-Johab-H.bcmap │ │ ├── KSC-Johab-V.bcmap │ │ ├── KSC-V.bcmap │ │ ├── KSCms-UHC-H.bcmap │ │ ├── KSCms-UHC-HW-H.bcmap │ │ ├── KSCms-UHC-HW-V.bcmap │ │ ├── KSCms-UHC-V.bcmap │ │ ├── KSCpc-EUC-H.bcmap │ │ ├── KSCpc-EUC-V.bcmap │ │ ├── Katakana.bcmap │ │ ├── LICENSE │ │ ├── NWP-H.bcmap │ │ ├── NWP-V.bcmap │ │ ├── RKSJ-H.bcmap │ │ ├── RKSJ-V.bcmap │ │ ├── Roman.bcmap │ │ ├── UniCNS-UCS2-H.bcmap │ │ ├── UniCNS-UCS2-V.bcmap │ │ ├── UniCNS-UTF16-H.bcmap │ │ ├── UniCNS-UTF16-V.bcmap │ │ ├── UniCNS-UTF32-H.bcmap │ │ ├── UniCNS-UTF32-V.bcmap │ │ ├── UniCNS-UTF8-H.bcmap │ │ ├── UniCNS-UTF8-V.bcmap │ │ ├── UniGB-UCS2-H.bcmap │ │ ├── UniGB-UCS2-V.bcmap │ │ ├── UniGB-UTF16-H.bcmap │ │ ├── UniGB-UTF16-V.bcmap │ │ ├── UniGB-UTF32-H.bcmap │ │ ├── UniGB-UTF32-V.bcmap │ │ ├── UniGB-UTF8-H.bcmap │ │ ├── UniGB-UTF8-V.bcmap │ │ ├── UniJIS-UCS2-H.bcmap │ │ ├── UniJIS-UCS2-HW-H.bcmap │ │ ├── UniJIS-UCS2-HW-V.bcmap │ │ ├── UniJIS-UCS2-V.bcmap │ │ ├── UniJIS-UTF16-H.bcmap │ │ ├── UniJIS-UTF16-V.bcmap │ │ ├── UniJIS-UTF32-H.bcmap │ │ ├── UniJIS-UTF32-V.bcmap │ │ ├── UniJIS-UTF8-H.bcmap │ │ ├── UniJIS-UTF8-V.bcmap │ │ ├── UniJIS2004-UTF16-H.bcmap │ │ ├── UniJIS2004-UTF16-V.bcmap │ │ ├── UniJIS2004-UTF32-H.bcmap │ │ ├── UniJIS2004-UTF32-V.bcmap │ │ ├── UniJIS2004-UTF8-H.bcmap │ │ ├── UniJIS2004-UTF8-V.bcmap │ │ ├── UniJISPro-UCS2-HW-V.bcmap │ │ ├── UniJISPro-UCS2-V.bcmap │ │ ├── UniJISPro-UTF8-V.bcmap │ │ ├── UniJISX0213-UTF32-H.bcmap │ │ ├── UniJISX0213-UTF32-V.bcmap │ │ ├── UniJISX02132004-UTF32-H.bcmap │ │ ├── UniJISX02132004-UTF32-V.bcmap │ │ ├── UniKS-UCS2-H.bcmap │ │ ├── UniKS-UCS2-V.bcmap │ │ ├── UniKS-UTF16-H.bcmap │ │ ├── UniKS-UTF16-V.bcmap │ │ ├── UniKS-UTF32-H.bcmap │ │ ├── UniKS-UTF32-V.bcmap │ │ ├── UniKS-UTF8-H.bcmap │ │ ├── UniKS-UTF8-V.bcmap │ │ ├── V.bcmap │ │ └── WP-Symbol.bcmap │ │ ├── compressed.tracemonkey-pldi-09.pdf │ │ ├── debugger.js │ │ ├── images │ │ ├── annotation-check.svg │ │ ├── annotation-comment.svg │ │ ├── annotation-help.svg │ │ ├── annotation-insert.svg │ │ ├── annotation-key.svg │ │ ├── annotation-newparagraph.svg │ │ ├── annotation-noicon.svg │ │ ├── annotation-note.svg │ │ ├── annotation-paragraph.svg │ │ ├── findbarButton-next-rtl.png │ │ ├── findbarButton-next-rtl@2x.png │ │ ├── findbarButton-next.png │ │ ├── findbarButton-next@2x.png │ │ ├── findbarButton-previous-rtl.png │ │ ├── findbarButton-previous-rtl@2x.png │ │ ├── findbarButton-previous.png │ │ ├── findbarButton-previous@2x.png │ │ ├── grab.cur │ │ ├── grabbing.cur │ │ ├── loading-icon.gif │ │ ├── loading-small.png │ │ ├── loading-small@2x.png │ │ ├── secondaryToolbarButton-documentProperties.png │ │ ├── secondaryToolbarButton-documentProperties@2x.png │ │ ├── secondaryToolbarButton-firstPage.png │ │ ├── secondaryToolbarButton-firstPage@2x.png │ │ ├── secondaryToolbarButton-handTool.png │ │ ├── secondaryToolbarButton-handTool@2x.png │ │ ├── secondaryToolbarButton-lastPage.png │ │ ├── secondaryToolbarButton-lastPage@2x.png │ │ ├── secondaryToolbarButton-rotateCcw.png │ │ ├── secondaryToolbarButton-rotateCcw@2x.png │ │ ├── secondaryToolbarButton-rotateCw.png │ │ ├── secondaryToolbarButton-rotateCw@2x.png │ │ ├── secondaryToolbarButton-selectTool.png │ │ ├── secondaryToolbarButton-selectTool@2x.png │ │ ├── shadow.png │ │ ├── texture.png │ │ ├── toolbarButton-bookmark.png │ │ ├── toolbarButton-bookmark@2x.png │ │ ├── toolbarButton-download.png │ │ ├── toolbarButton-download@2x.png │ │ ├── toolbarButton-menuArrows.png │ │ ├── toolbarButton-menuArrows@2x.png │ │ ├── toolbarButton-openFile.png │ │ ├── toolbarButton-openFile@2x.png │ │ ├── toolbarButton-pageDown-rtl.png │ │ ├── toolbarButton-pageDown-rtl@2x.png │ │ ├── toolbarButton-pageDown.png │ │ ├── toolbarButton-pageDown@2x.png │ │ ├── toolbarButton-pageUp-rtl.png │ │ ├── toolbarButton-pageUp-rtl@2x.png │ │ ├── toolbarButton-pageUp.png │ │ ├── toolbarButton-pageUp@2x.png │ │ ├── toolbarButton-presentationMode.png │ │ ├── toolbarButton-presentationMode@2x.png │ │ ├── toolbarButton-print.png │ │ ├── toolbarButton-print@2x.png │ │ ├── toolbarButton-search.png │ │ ├── toolbarButton-search@2x.png │ │ ├── toolbarButton-secondaryToolbarToggle-rtl.png │ │ ├── toolbarButton-secondaryToolbarToggle-rtl@2x.png │ │ ├── toolbarButton-secondaryToolbarToggle.png │ │ ├── toolbarButton-secondaryToolbarToggle@2x.png │ │ ├── toolbarButton-sidebarToggle-rtl.png │ │ ├── toolbarButton-sidebarToggle-rtl@2x.png │ │ ├── toolbarButton-sidebarToggle.png │ │ ├── toolbarButton-sidebarToggle@2x.png │ │ ├── toolbarButton-viewAttachments.png │ │ ├── toolbarButton-viewAttachments@2x.png │ │ ├── toolbarButton-viewOutline-rtl.png │ │ ├── toolbarButton-viewOutline-rtl@2x.png │ │ ├── toolbarButton-viewOutline.png │ │ ├── toolbarButton-viewOutline@2x.png │ │ ├── toolbarButton-viewThumbnail.png │ │ ├── toolbarButton-viewThumbnail@2x.png │ │ ├── toolbarButton-zoomIn.png │ │ ├── toolbarButton-zoomIn@2x.png │ │ ├── toolbarButton-zoomOut.png │ │ ├── toolbarButton-zoomOut@2x.png │ │ ├── treeitem-collapsed-rtl.png │ │ ├── treeitem-collapsed-rtl@2x.png │ │ ├── treeitem-collapsed.png │ │ ├── treeitem-collapsed@2x.png │ │ ├── treeitem-expanded.png │ │ └── treeitem-expanded@2x.png │ │ ├── locale │ │ ├── ach │ │ │ └── viewer.properties │ │ ├── af │ │ │ └── viewer.properties │ │ ├── ak │ │ │ └── viewer.properties │ │ ├── an │ │ │ └── viewer.properties │ │ ├── ar │ │ │ └── viewer.properties │ │ ├── as │ │ │ └── viewer.properties │ │ ├── ast │ │ │ └── viewer.properties │ │ ├── az │ │ │ └── viewer.properties │ │ ├── be │ │ │ └── viewer.properties │ │ ├── bg │ │ │ └── viewer.properties │ │ ├── bn-BD │ │ │ └── viewer.properties │ │ ├── bn-IN │ │ │ └── viewer.properties │ │ ├── br │ │ │ └── viewer.properties │ │ ├── bs │ │ │ └── viewer.properties │ │ ├── ca │ │ │ └── viewer.properties │ │ ├── cs │ │ │ └── viewer.properties │ │ ├── csb │ │ │ └── viewer.properties │ │ ├── cy │ │ │ └── viewer.properties │ │ ├── da │ │ │ └── viewer.properties │ │ ├── de │ │ │ └── viewer.properties │ │ ├── el │ │ │ └── viewer.properties │ │ ├── en-GB │ │ │ └── viewer.properties │ │ ├── en-US │ │ │ └── viewer.properties │ │ ├── en-ZA │ │ │ └── viewer.properties │ │ ├── eo │ │ │ └── viewer.properties │ │ ├── es-AR │ │ │ └── viewer.properties │ │ ├── es-CL │ │ │ └── viewer.properties │ │ ├── es-ES │ │ │ └── viewer.properties │ │ ├── es-MX │ │ │ └── viewer.properties │ │ ├── et │ │ │ └── viewer.properties │ │ ├── eu │ │ │ └── viewer.properties │ │ ├── fa │ │ │ └── viewer.properties │ │ ├── ff │ │ │ └── viewer.properties │ │ ├── fi │ │ │ └── viewer.properties │ │ ├── fr │ │ │ └── viewer.properties │ │ ├── fy-NL │ │ │ └── viewer.properties │ │ ├── ga-IE │ │ │ └── viewer.properties │ │ ├── gd │ │ │ └── viewer.properties │ │ ├── gl │ │ │ └── viewer.properties │ │ ├── gu-IN │ │ │ └── viewer.properties │ │ ├── he │ │ │ └── viewer.properties │ │ ├── hi-IN │ │ │ └── viewer.properties │ │ ├── hr │ │ │ └── viewer.properties │ │ ├── hu │ │ │ └── viewer.properties │ │ ├── hy-AM │ │ │ └── viewer.properties │ │ ├── id │ │ │ └── viewer.properties │ │ ├── is │ │ │ └── viewer.properties │ │ ├── it │ │ │ └── viewer.properties │ │ ├── ja │ │ │ └── viewer.properties │ │ ├── ka │ │ │ └── viewer.properties │ │ ├── kk │ │ │ └── viewer.properties │ │ ├── km │ │ │ └── viewer.properties │ │ ├── kn │ │ │ └── viewer.properties │ │ ├── ko │ │ │ └── viewer.properties │ │ ├── ku │ │ │ └── viewer.properties │ │ ├── lg │ │ │ └── viewer.properties │ │ ├── lij │ │ │ └── viewer.properties │ │ ├── locale.properties │ │ ├── lt │ │ │ └── viewer.properties │ │ ├── lv │ │ │ └── viewer.properties │ │ ├── mai │ │ │ └── viewer.properties │ │ ├── mk │ │ │ └── viewer.properties │ │ ├── ml │ │ │ └── viewer.properties │ │ ├── mn │ │ │ └── viewer.properties │ │ ├── mr │ │ │ └── viewer.properties │ │ ├── ms │ │ │ └── viewer.properties │ │ ├── my │ │ │ └── viewer.properties │ │ ├── nb-NO │ │ │ └── viewer.properties │ │ ├── nl │ │ │ └── viewer.properties │ │ ├── nn-NO │ │ │ └── viewer.properties │ │ ├── nso │ │ │ └── viewer.properties │ │ ├── oc │ │ │ └── viewer.properties │ │ ├── or │ │ │ └── viewer.properties │ │ ├── pa-IN │ │ │ └── viewer.properties │ │ ├── pl │ │ │ └── viewer.properties │ │ ├── pt-BR │ │ │ └── viewer.properties │ │ ├── pt-PT │ │ │ └── viewer.properties │ │ ├── rm │ │ │ └── viewer.properties │ │ ├── ro │ │ │ └── viewer.properties │ │ ├── ru │ │ │ └── viewer.properties │ │ ├── rw │ │ │ └── viewer.properties │ │ ├── sah │ │ │ └── viewer.properties │ │ ├── si │ │ │ └── viewer.properties │ │ ├── sk │ │ │ └── viewer.properties │ │ ├── sl │ │ │ └── viewer.properties │ │ ├── son │ │ │ └── viewer.properties │ │ ├── sq │ │ │ └── viewer.properties │ │ ├── sr │ │ │ └── viewer.properties │ │ ├── sv-SE │ │ │ └── viewer.properties │ │ ├── sw │ │ │ └── viewer.properties │ │ ├── ta-LK │ │ │ └── viewer.properties │ │ ├── ta │ │ │ └── viewer.properties │ │ ├── te │ │ │ └── viewer.properties │ │ ├── th │ │ │ └── viewer.properties │ │ ├── tl │ │ │ └── viewer.properties │ │ ├── tn │ │ │ └── viewer.properties │ │ ├── tr │ │ │ └── viewer.properties │ │ ├── uk │ │ │ └── viewer.properties │ │ ├── ur │ │ │ └── viewer.properties │ │ ├── vi │ │ │ └── viewer.properties │ │ ├── wo │ │ │ └── viewer.properties │ │ ├── xh │ │ │ └── viewer.properties │ │ ├── zh-CN │ │ │ └── viewer.properties │ │ ├── zh-TW │ │ │ └── viewer.properties │ │ └── zu │ │ │ └── viewer.properties │ │ ├── viewer.css │ │ ├── viewer.html │ │ ├── viewer.js │ │ └── viewer.js.map ├── main │ ├── api │ │ ├── listeners.ts │ │ └── lulumi-extension.ts │ ├── constants.ts │ ├── index.dev.ts │ ├── index.ts │ ├── lib │ │ ├── auto-updater.ts │ │ ├── fetch.ts │ │ ├── i18n.ts │ │ ├── menu.ts │ │ ├── promisify.ts │ │ ├── session.ts │ │ └── view.ts │ └── playbook │ │ └── index.js ├── preloads │ ├── extension-preload.ts │ ├── popup-preload.ts │ ├── require-preload.ts │ └── webview-preload.ts ├── renderer │ ├── api │ │ ├── api-factory.ts │ │ ├── event.ts │ │ ├── extension-service.ts │ │ ├── inject-to.ts │ │ ├── ipc-event.ts │ │ ├── port.ts │ │ └── web-request-event.ts │ ├── commandPalette │ │ ├── App.vue │ │ ├── components │ │ │ ├── CPMainView.vue │ │ │ └── CPMainView │ │ │ │ ├── Hits.vue │ │ │ │ ├── SearchBar.vue │ │ │ │ └── Spotlight.vue │ │ ├── i18n.ts │ │ ├── index.ejs │ │ ├── js │ │ │ └── recommender.js │ │ ├── main.ts │ │ └── router │ │ │ └── index.ts │ ├── lib │ │ ├── image-util.ts │ │ ├── pretty-size.ts │ │ ├── time-util.ts │ │ └── url-util.ts │ ├── mainBrowserWindow │ │ ├── App.vue │ │ ├── components │ │ │ ├── BrowserMainView.vue │ │ │ └── BrowserMainView │ │ │ │ ├── Download.vue │ │ │ │ ├── Navbar.vue │ │ │ │ ├── Notification.vue │ │ │ │ ├── StatusBar.vue │ │ │ │ ├── SwipeArrow.vue │ │ │ │ ├── Tab.vue │ │ │ │ ├── Tabs.vue │ │ │ │ └── assets │ │ │ │ └── logo.png │ │ ├── constants.ts │ │ ├── css │ │ │ ├── el-autocomplete.less │ │ │ ├── el-badge.less │ │ │ ├── el-input.less │ │ │ ├── el-popover.less │ │ │ └── el-progress.less │ │ ├── fonts │ │ │ └── Cascadia.ttf │ │ ├── i18n.ts │ │ ├── index.ejs │ │ ├── js │ │ │ └── search-worker.js │ │ ├── main.ts │ │ └── router │ │ │ └── index.ts │ ├── playbooksView │ │ ├── App.vue │ │ ├── components │ │ │ └── PlaybooksView.vue │ │ ├── fonts │ │ │ └── Cascadia.ttf │ │ ├── i18n.ts │ │ ├── index.ejs │ │ ├── main.ts │ │ ├── router │ │ │ └── index.ts │ │ └── store │ │ │ ├── actions.ts │ │ │ ├── getters.ts │ │ │ ├── index.ts │ │ │ ├── modules │ │ │ ├── index.ts │ │ │ └── main.ts │ │ │ └── mutation-types.ts │ └── preferenceView │ │ ├── App.vue │ │ ├── components │ │ ├── AboutMainView.vue │ │ └── AboutMainView │ │ │ ├── Downloads.vue │ │ │ ├── Extensions.vue │ │ │ ├── History.vue │ │ │ ├── Lulumi.vue │ │ │ ├── Newtab.vue │ │ │ ├── Preferences.vue │ │ │ └── Preferences │ │ │ ├── Auth.vue │ │ │ ├── Homepage.vue │ │ │ ├── Language.vue │ │ │ ├── PDFViewer.vue │ │ │ ├── Proxy.vue │ │ │ ├── SearchEngineProvider.vue │ │ │ └── TabConfig.vue │ │ ├── i18n.ts │ │ ├── index.ejs │ │ ├── main.ts │ │ ├── router │ │ └── index.ts │ │ └── store │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── modules │ │ ├── guest.ts │ │ └── index.ts │ │ └── mutation-types.ts ├── shared │ └── store │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── mainStore.ts │ │ ├── modules │ │ ├── browser.ts │ │ └── index.ts │ │ ├── mutation-types.ts │ │ └── rendererStore.ts ├── tsconfig.json └── typings │ ├── lulumi.d.ts │ ├── vue-augmentation.d.ts │ └── vue-component.d.ts ├── static ├── icons │ ├── icon.png │ └── icons.svg └── vendor-manifest.json ├── test ├── .eslintrc ├── e2e │ ├── index.js │ ├── init.js │ ├── specs │ │ ├── ControlGroup.spec.js │ │ ├── Launch.spec.js │ │ └── Protocol.spec.js │ └── utils.js ├── unit │ ├── about.js │ ├── about.karma.conf.js │ ├── lib │ │ └── fakeElectron.js │ ├── renderer.js │ ├── renderer.karma.conf.js │ └── specs │ │ ├── about │ │ └── AboutMainView.spec.js │ │ └── renderer │ │ └── BrowserMainView.spec.js └── userData │ └── .gitkeep ├── tsconfig.json ├── tsfmt.json ├── userData └── .gitkeep └── yarn.lock /.electron-vue/config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const config = { 4 | // Name of electron app 5 | // Will be used in production builds 6 | name: 'lulumi-browser', 7 | 8 | // Use ESLint (extends `airbnb`) 9 | // Further changes can be made in `.eslintrc.js` 10 | eslint: true, 11 | 12 | // express port 13 | port: 9080, 14 | 15 | // electron-packager options 16 | // https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-packager.html 17 | building: { 18 | arch: 'x64', 19 | asar: { 20 | unpackDir: 'static', 21 | }, 22 | dir: path.resolve(__dirname, '../'), 23 | icon: path.resolve(__dirname, '../build/icons/icon'), 24 | ignore: /(^\/(src|test|build|extensions|userData|tslint|\.\w+|README|yarn))|\.gitkeep/, 25 | out: path.resolve(__dirname, '../builds'), 26 | overwrite: true, 27 | platform: process.env.BUILD_TARGET || 'all', 28 | }, 29 | }; 30 | 31 | config.building.name = config.name; 32 | 33 | module.exports = config; 34 | -------------------------------------------------------------------------------- /.electron-vue/dev-client-command-palette.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?name=command-palette&reload=true') 2 | 3 | hotClient.subscribe((event) => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | if (event.action === 'reload') { 12 | window.location.reload() 13 | } 14 | 15 | /** 16 | * Notify `mainWindow` when `renderer` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Renderer Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /.electron-vue/dev-client-main-browser-window.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?name=main-browser-window&reload=true') 2 | 3 | hotClient.subscribe((event) => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | // if (event.action === 'reload') { 12 | // window.location.reload() 13 | // } 14 | 15 | /** 16 | * Notify `mainWindow` when `main` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Main Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /.electron-vue/dev-client-playbooks-view.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?name=playbooks-view&reload=true') 2 | 3 | hotClient.subscribe((event) => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | // if (event.action === 'reload') { 12 | // window.location.reload() 13 | // } 14 | 15 | /** 16 | * Notify `mainWindow` when `renderer` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Renderer Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /.electron-vue/dev-client-preference-view.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?name=preference-view&reload=true') 2 | 3 | hotClient.subscribe((event) => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | // if (event.action === 'reload') { 12 | // window.location.reload() 13 | // } 14 | 15 | /** 16 | * Notify `mainWindow` when `renderer` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Renderer Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /.electron-vue/dev-client-recommender.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?name=recommender&reload=true') 2 | 3 | hotClient.subscribe((event) => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | // if (event.action === 'reload') { 12 | // window.location.reload() 13 | // } 14 | 15 | /** 16 | * Notify `mainWindow` when `worker` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Worker Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /.electron-vue/dev-client-search-worker.js: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?name=search-worker&reload=true') 2 | 3 | hotClient.subscribe((event) => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | // if (event.action === 'reload') { 12 | // window.location.reload() 13 | // } 14 | 15 | /** 16 | * Notify `mainWindow` when `worker` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Worker Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /.electron-vue/webpack.dll.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const webpack = require('webpack') 3 | const VueLoaderPlugin = require('vue-loader/lib/plugin') 4 | 5 | module.exports = { 6 | entry: { 7 | vendor: [ 8 | 'collect.js', 9 | 'css-element-queries', 10 | 'fuse.js', 11 | 'nanoid', 12 | 'rxjs', 13 | 'vue/dist/vue.esm.js', 14 | 'vue-i18n', 15 | 'vue-router', 16 | 'vuex' 17 | ] 18 | }, 19 | mode: 'production', 20 | module: { 21 | rules: [ 22 | { 23 | test: /\.vue$/, 24 | use: { 25 | loader: 'vue-loader' 26 | } 27 | }, 28 | { 29 | test: /\.js$/, 30 | use: { 31 | loader: 'babel-loader' 32 | }, 33 | exclude: /node_modules/ 34 | } 35 | ] 36 | }, 37 | output: { 38 | filename: '[name].dll.js', 39 | library: '[name]_library', 40 | path: path.join(__dirname, '../dist') 41 | }, 42 | performance: { hints: false }, 43 | plugins: [ 44 | new webpack.DllPlugin({ 45 | path: path.join(__dirname, '../static', '[name]-manifest.json'), 46 | name: '[name]_library' 47 | }), 48 | new VueLoaderPlugin() 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | test/unit/** 2 | test/e2e/** 3 | src/helper/pages/** 4 | src/helper/pdfjs/** 5 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint-config-airbnb-base", 4 | "plugin:@typescript-eslint/recommended", 5 | "plugin:vue/vue3-recommended" 6 | ], 7 | "plugins": [ 8 | "@typescript-eslint" 9 | ], 10 | "parser": "vue-eslint-parser", 11 | "parserOptions": { 12 | "parser": "@typescript-eslint/parser", 13 | "project": "tsconfig.json", 14 | "tsconfigRootDir": "src", 15 | "ecmaVersion": 2019, 16 | "extraFileExtensions": [".vue"] 17 | }, 18 | "rules": { 19 | "no-implied-eval": "error", 20 | "no-trailing-spaces": [ 21 | "error", 22 | { "ignoreComments": true } 23 | ], 24 | "semi": "error", 25 | "@typescript-eslint/type-annotation-spacing": "error", 26 | "camelcase": "error", 27 | "max-len": [ 28 | "error", 29 | { "code": 100 } 30 | ], 31 | "no-console": [ 32 | "error", 33 | { "allow": ["warn", "error"] } 34 | ], 35 | "radix": "error", 36 | "indent": "off", 37 | "@typescript-eslint/indent": ["error", 2], 38 | "comma-dangle": [ 39 | "error", 40 | "only-multiline" 41 | ], 42 | "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", 43 | "lines-between-class-members": "off", 44 | "@typescript-eslint/no-explicit-any": "off", 45 | "@typescript-eslint/explicit-function-return-type": "off", 46 | "arrow-parens": [ 47 | "error", 48 | "as-needed", 49 | { "requireForBlockBody": true } 50 | ], 51 | "object-curly-newline": [ 52 | "error", 53 | { "consistent": true } 54 | ], 55 | "no-return-assign": "off", 56 | "@typescript-eslint/no-this-alias": "off", 57 | "@typescript-eslint/no-non-null-assertion": "off", 58 | "no-param-reassign": [ 59 | "error", 60 | { "props": false } 61 | ], 62 | "no-loop-func": "off", 63 | "import/extensions": "off", 64 | "import/no-extraneous-dependencies": "off", 65 | "vue/component-tags-order": [ 66 | "error", 67 | { "order": ["template", "script", "style"] } 68 | ], 69 | "class-methods-use-this": "off", 70 | "no-underscore-dangle": "off", 71 | "operator-linebreak": [ 72 | "error", 73 | "after", 74 | { "overrides": { "?": "before", ":": "before" } } 75 | ], 76 | "@typescript-eslint/no-var-requires" : "off", 77 | "prefer-object-spread": "off", 78 | "prefer-rest-params": "off", 79 | "global-require": "off", 80 | "func-names": [ 81 | "error", 82 | "as-needed" 83 | ], 84 | "max-classes-per-file": "off", 85 | "no-prototype-builtins": "off", 86 | "@typescript-eslint/no-unused-vars": [ 87 | "error", 88 | { "args": "after-used" } 89 | ], 90 | "import/newline-after-import": "off", 91 | "no-control-regex": "off", 92 | "@typescript-eslint/explicit-module-boundary-types": "off", 93 | "@typescript-eslint/member-delimiter-style": "error" 94 | }, 95 | "settings": { 96 | "import/resolver": { 97 | "node": { 98 | "extensions": [".js", ".ts"] 99 | } 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.js text eol=lf 3 | *.ts text eol=lf 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [qazbnm456] 2 | patreon: boik 3 | custom: https://medium.com/@qazbnm456 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | yarn-error.log 3 | dist/* 4 | builds/* 5 | extensions/* 6 | userData/* 7 | test/userData/* 8 | coverage 9 | node_modules/ 10 | npm-debug.log 11 | npm-debug.log.* 12 | thumbs.db 13 | !.gitkeep 14 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // 使用 IntelliSense 以得知可用的 Node.js 偵錯屬性。 3 | // 暫留以檢視現有屬性的描述。 4 | // 如需詳細資訊,請瀏覽: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Debug Main Process (attach)", 9 | "type": "node", 10 | "request": "attach", 11 | "cwd": "${workspaceRoot}", 12 | "smartStep": true, 13 | "sourceMaps": true, 14 | "protocol": "inspector", 15 | "port": 9222, 16 | "timeout": 20000 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite the default settings 2 | { 3 | "editor.detectIndentation": false, 4 | "editor.tabSize": 2, 5 | "files.eol": "\n", 6 | "files.trimTrailingWhitespace": true, 7 | "typescript.tsdk": "node_modules/typescript/lib" 8 | } 9 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | registry "https://registry.npmjs.org/" 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lulumi-browser [![Dependencies Status](https://david-dm.org/LulumiProject/lulumi-browser/status.svg)](https://david-dm.org/LulumiProject/lulumi-browser) [![devDependencies Status](https://david-dm.org/LulumiProject/lulumi-browser/dev-status.svg)](https://david-dm.org/LulumiProject/lulumi-browser?type=dev) 2 | 3 | > Lulumi-browser is a lightweight browser coded with Vue.js 2 and Electron. 4 | 5 |

6 | Lulumi-browser 7 |

8 | 9 | If you like this and would like to support it. Check out my [patreon page](https://www.patreon.com/boik) :)
And don't forget to check out my [repos](https://github.com/qazbnm456) 🐾 or say *hi* on my [Twitter](https://twitter.com/qazbnm456) as well! 10 | 11 | ## Build Setup 12 | 13 | ``` bash 14 | # install dependencies 15 | $ yarn install --ignore-engines 16 | 17 | # prebuild the vendor.dll.js, which is a must-have file that will be used across main.js, renderer.js, and about.js. 18 | $ yarn run build:dll 19 | 20 | # serve with hot reload at localhost:9080 21 | $ yarn run dev 22 | 23 | # build electron applications for all platforms 24 | $ yarn run build 25 | 26 | # build the electron application for the specific target platform 27 | $ yarn run build:darwin # macOS 28 | $ yarn run build:linux # Linux 29 | $ yarn run build:mas # Mac AppStore 30 | $ yarn run build:win32 # Windows 31 | 32 | # lint all JS/Vue component files in `src/` 33 | $ yarn run lint 34 | 35 | # lint and fix 36 | $ yarn run lint:fix 37 | 38 | # test the electron application for production 39 | $ yarn run test 40 | ``` 41 | 42 | ## API support (experimental) 43 | 44 | - https://github.com/LulumiProject/lulumi-browser/issues/19 45 | 46 | ## Code of Conduct 47 | 48 | Please note that this project is released with a [Contributor Code of Conduct](code-of-conduct.md). By participating in this project you agree to abide by its terms. 49 | 50 | --- 51 | 52 | This project was generated with [electron-vue](https://github.com/SimulatedGREG/electron-vue)@[1c165f7](https://github.com/SimulatedGREG/electron-vue/commit/1c165f7c5e56edaf48be0fbb70838a1af26bb015) and developed by [@qazbnm456](https://github.com/qazbnm456). 53 | -------------------------------------------------------------------------------- /ava.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | files: [ 3 | "test/e2e/index.js" 4 | ], 5 | concurrency: 5, 6 | failWithoutAssertions: false, 7 | require: [ 8 | "@babel/register" 9 | ] 10 | }; 11 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports = function(api) { 4 | const env = api.env(); 5 | 6 | let testEnv = false; 7 | 8 | const envOpts = { 9 | targets: { 10 | node: "10.18.0", 11 | } 12 | }; 13 | 14 | switch (env) { 15 | // Configs used during bundling builds. 16 | case "test": 17 | testEnv = true; 18 | break; 19 | case "development": 20 | case "production": 21 | envOpts.modules = false; 22 | break; 23 | } 24 | 25 | const config = { 26 | comments: false, 27 | plugins: [["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-class-properties", { "loose" : true }]], 28 | presets: [["@babel/preset-env", envOpts], ["@babel/preset-typescript", envOpts]] 29 | }; 30 | 31 | return config; 32 | }; 33 | -------------------------------------------------------------------------------- /build/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/build/icons/icon.icns -------------------------------------------------------------------------------- /build/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/build/icons/icon.ico -------------------------------------------------------------------------------- /build/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/build/icons/icon.png -------------------------------------------------------------------------------- /builds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/builds/.gitkeep -------------------------------------------------------------------------------- /code-of-conduct.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at boik@tdohacker.org. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [http://contributor-covenant.org/version/1/4][version] 72 | 73 | [homepage]: http://contributor-covenant.org 74 | [version]: http://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /dist/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/dist/.gitkeep -------------------------------------------------------------------------------- /docs/state.md: -------------------------------------------------------------------------------- 1 | # Vuex 2 | 3 | Lulumi browser takes advantage of using [vuex](https://github.com/vuejs/vuex) to store lots of information. If you are not familiar with it, I suggest taking a look at its [guide](https://vuex.vuejs.org/). 4 | 5 | # State 6 | 7 | ```javascript 8 | { 9 | tabId: number, 10 | tabs: { 11 | id: number, 12 | windowId: number, 13 | url: string, 14 | statusText: string | boolean, 15 | favicon: string | null, 16 | title: string | null, 17 | isLoading: boolean, 18 | isSearching: boolean, 19 | canGoBack: boolean, 20 | canGoForward: boolean, 21 | canRefresh: boolean, 22 | error: boolean, 23 | hasMedia: boolean, 24 | isAudioMuted: boolean, 25 | pageActionMapping: { 26 | extensionId: { 27 | enabled: boolean, 28 | }, 29 | }, 30 | extensionsMetadata: { 31 | extensionId: { 32 | browserActionIcon: string, 33 | pageActionIcon: string, 34 | badgeText: string, 35 | badgeBackgroundColor: string, 36 | }, 37 | }, 38 | }, 39 | currentTabIndexes: number[], 40 | currentSearchEngine: { 41 | name: string, // 'Google' 42 | search: string, // 'https://www.google.com/search?q=' 43 | autocomplete: string, // 'https://suggestqueries.google.com/complete/search?client=youtube&q=' 44 | }, 45 | homepage: string, 46 | pdfViewer: string, // 'pdf-viewer' or 'PDF.js' 47 | tabConfig: { 48 | defaultUrl: string, 49 | defaultFavicon: string, 50 | lulumiFavicon: string, 51 | }, 52 | lang: string, // 'en', 'zh-CN, 'zh-TW' 53 | downloads: [{ 54 | getReceivedBytes: number, 55 | totalBytes: number, 56 | startTime: number, 57 | webContentsId: number, 58 | name: string, 59 | url: string, 60 | isPaused: boolean, 61 | canResume: boolean, 62 | state: string, 63 | savePath: string | null, 64 | dataState: string, 65 | }], 66 | history: [{ 67 | title: string, 68 | url: string, 69 | favicon: string, 70 | label: string, 71 | time: string, 72 | }], 73 | windows: [{ 74 | id: number, 75 | width: number, 76 | height: number, 77 | left: number, 78 | top: number, 79 | focused: boolean, 80 | state: string, 81 | type: string, 82 | }], 83 | } 84 | ``` 85 | -------------------------------------------------------------------------------- /extensions/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/extensions/.gitkeep -------------------------------------------------------------------------------- /src/helper/pages/error/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | error 6 | 7 | 8 | 9 |
10 |

11 |

12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/helper/pages/pagebase.css: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | width: 100%; 4 | height: 100%; 5 | padding: 0; 6 | margin: 0; 7 | box-sizing: border-box; 8 | font-family: ".SFNSText-Regular", 'Helvetica Neue', 'Arial', sans-serif; 9 | background-color: #eee; 10 | } 11 | 12 | body.dark-mode { 13 | background-color: rgb(33, 37, 43); 14 | color: lightgrey 15 | } 16 | 17 | #page-wrapper { 18 | width: auto; 19 | height: auto; 20 | position: absolute; 21 | top: 50%; 22 | left: 50%; 23 | transform: translate(-50%, -50%); 24 | max-width: 600px; 25 | } 26 | h1 { 27 | font-size: 2.75em; 28 | font-family: ".SFNSDisplay-Light", 'Helvetica Neue', 'Arial', sans-serif; 29 | font-weight: normal; 30 | margin-bottom: 0.25em; 31 | margin-top: 0; 32 | } 33 | h2 { 34 | font-size: 1.15em; 35 | font-weight: normal; 36 | margin-top: 0; 37 | } 38 | button { 39 | -webkit-appearance: none; 40 | color: inherit; 41 | font-size: 1.1em; 42 | padding: 0.5em 1em; 43 | border: 0; 44 | background-color: rgba(0, 0, 0, 0.1); 45 | margin-top: 0.5em; 46 | cursor: pointer; 47 | } 48 | button.secondary-button { 49 | padding: 0.5em; 50 | margin-left: -0.5em; 51 | margin-right: 2em; 52 | transition: 0.1s; 53 | background: none; 54 | opacity: 0.6; 55 | text-decoration: underline; 56 | } 57 | button.secondary-button:hover { 58 | opacity: 0.8; 59 | background: rgba(0, 0, 0, 0.05); 60 | cursor: pointer; 61 | } 62 | button.secondary-button { 63 | float: left; 64 | } 65 | button.primary-button { 66 | float: right; 67 | } 68 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Add-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Add-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Add-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Add-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Add-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Add-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Add-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Add-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-0.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-1.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-3.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-4.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-5.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/B5pc-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/B5pc-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/B5pc-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/B5pc-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/CNS-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/CNS-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/CNS-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/CNS-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/CNS1-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/CNS1-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/CNS1-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/CNS1-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/CNS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/CNS2-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/CNS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/CNS2-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/ETHK-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/ETHK-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/ETHK-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/ETHK-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/ETen-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/ETen-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/ETen-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/ETen-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/ETenms-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/ETenms-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/ETenms-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/ETenms-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Ext-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Ext-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Ext-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Ext-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GB-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GB-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GB-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GB-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GB-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GB-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GB-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GB-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBK-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBK-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBK-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBK-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBK2K-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBK2K-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBK2K-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBK2K-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBKp-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBKp-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBKp-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBKp-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBT-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBT-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBT-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBT-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBT-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBT-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBT-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBT-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBpc-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/GBpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/GBpc-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKdla-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKdla-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKdla-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKdla-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKdlb-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKdlb-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKdlb-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKdlb-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKgccs-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKgccs-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKgccs-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKgccs-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKm314-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKm314-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKm314-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKm314-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKm471-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKm471-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKm471-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKm471-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKscs-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKscs-B5-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/HKscs-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/HKscs-B5-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Hankaku.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Hankaku.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Hiragana.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Hiragana.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSC-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSC-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSC-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSC-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSC-Johab-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSC-Johab-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSC-Johab-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSC-Johab-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSCms-UHC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSCms-UHC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSCms-UHC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSCms-UHC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Katakana.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Katakana.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/LICENSE: -------------------------------------------------------------------------------- 1 | %%Copyright: ----------------------------------------------------------- 2 | %%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. 3 | %%Copyright: All rights reserved. 4 | %%Copyright: 5 | %%Copyright: Redistribution and use in source and binary forms, with or 6 | %%Copyright: without modification, are permitted provided that the 7 | %%Copyright: following conditions are met: 8 | %%Copyright: 9 | %%Copyright: Redistributions of source code must retain the above 10 | %%Copyright: copyright notice, this list of conditions and the following 11 | %%Copyright: disclaimer. 12 | %%Copyright: 13 | %%Copyright: Redistributions in binary form must reproduce the above 14 | %%Copyright: copyright notice, this list of conditions and the following 15 | %%Copyright: disclaimer in the documentation and/or other materials 16 | %%Copyright: provided with the distribution. 17 | %%Copyright: 18 | %%Copyright: Neither the name of Adobe Systems Incorporated nor the names 19 | %%Copyright: of its contributors may be used to endorse or promote 20 | %%Copyright: products derived from this software without specific prior 21 | %%Copyright: written permission. 22 | %%Copyright: 23 | %%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 24 | %%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 25 | %%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 26 | %%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27 | %%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 28 | %%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29 | %%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 30 | %%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 31 | %%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 | %%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 | %%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 34 | %%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | %%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | %%Copyright: ----------------------------------------------------------- 37 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/NWP-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/NWP-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/NWP-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/NWP-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/Roman.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/Roman.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/V.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/cmaps/WP-Symbol.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/cmaps/WP-Symbol.bcmap -------------------------------------------------------------------------------- /src/helper/pdfjs/web/compressed.tracemonkey-pldi-09.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/compressed.tracemonkey-pldi-09.pdf -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-help.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 16 | 18 | 21 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-insert.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-key.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-newparagraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-noicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-note.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 14 | 21 | 28 | 35 | 42 | 43 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/annotation-paragraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-next-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-next-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-next-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-next-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-next.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-next@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-previous-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-previous-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-previous-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-previous-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-previous.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/findbarButton-previous@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/findbarButton-previous@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/grab.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/grab.cur -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/grabbing.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/grabbing.cur -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/loading-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/loading-icon.gif -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/loading-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/loading-small.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/loading-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/loading-small@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-documentProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-documentProperties.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-documentProperties@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-documentProperties@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-firstPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-firstPage.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-firstPage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-firstPage@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-handTool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-handTool.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-handTool@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-handTool@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-lastPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-lastPage.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-lastPage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-lastPage@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCcw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCcw@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCw.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-rotateCw@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-selectTool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-selectTool.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/secondaryToolbarButton-selectTool@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/secondaryToolbarButton-selectTool@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/shadow.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/texture.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-bookmark.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-bookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-bookmark@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-download.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-download@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-download@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-menuArrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-menuArrows.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-menuArrows@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-menuArrows@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-openFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-openFile.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-openFile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-openFile@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageDown-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageDown-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageDown-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageDown-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageDown.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageDown@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageDown@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageUp-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageUp-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageUp-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageUp-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageUp.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-pageUp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-pageUp@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-presentationMode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-presentationMode.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-presentationMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-presentationMode@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-print.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-print@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-print@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-search.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-search@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-secondaryToolbarToggle@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-sidebarToggle-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-sidebarToggle-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-sidebarToggle-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-sidebarToggle-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-sidebarToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-sidebarToggle.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-sidebarToggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-sidebarToggle@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewAttachments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewAttachments.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewAttachments@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewAttachments@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewOutline-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewOutline-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewOutline-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewOutline-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewOutline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewOutline.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewOutline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewOutline@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewThumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewThumbnail.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-viewThumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-viewThumbnail@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-zoomIn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-zoomIn.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-zoomIn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-zoomIn@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-zoomOut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-zoomOut.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/toolbarButton-zoomOut@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/toolbarButton-zoomOut@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/treeitem-collapsed-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/treeitem-collapsed-rtl.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/treeitem-collapsed-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/treeitem-collapsed-rtl@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/treeitem-collapsed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/treeitem-collapsed.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/treeitem-collapsed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/treeitem-collapsed@2x.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/treeitem-expanded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/treeitem-expanded.png -------------------------------------------------------------------------------- /src/helper/pdfjs/web/images/treeitem-expanded@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/helper/pdfjs/web/images/treeitem-expanded@2x.png -------------------------------------------------------------------------------- /src/main/constants.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | const lulumiRootPath = process.env.NODE_ENV === 'development' 4 | ? path.resolve(__dirname, '../../') 5 | : path.resolve(__dirname, '../'); 6 | const lulumiHelperPath = process.env.NODE_ENV === 'development' 7 | ? path.resolve(lulumiRootPath, 'src', 'helper') 8 | : path.resolve(lulumiRootPath, 'dist'); 9 | const lulumiPreloadPath = process.env.NODE_ENV === 'development' 10 | ? `http://localhost:${require('../../.electron-vue/config').port}` 11 | : path.resolve(lulumiRootPath, 'dist'); 12 | 13 | export default { 14 | lulumiRootPath, 15 | lulumiHelperPath, 16 | lulumiPreloadPath, 17 | devUserData: `${path.resolve(lulumiRootPath, 'userData')}`, 18 | testUserData: `${path.resolve(lulumiRootPath, 'test', 'userData')}`, 19 | lulumiPagesCustomProtocol: 'lulumi', 20 | lulumiPDFJSPath: `${path.resolve(lulumiHelperPath, 'pdfjs')}`, 21 | lulumiRev: 'c3a3ffb5c4dcdd688c886d5f20f542379064ad2c', 22 | }; 23 | -------------------------------------------------------------------------------- /src/main/index.dev.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file is used specifically and only for development. It installs 3 | * `vue-devtools`. There shouldn't be any need to 4 | * modify this file, but it can be used to extend your development 5 | * environment. 6 | */ 7 | 8 | /* eslint-disable no-console */ 9 | 10 | const { app } = require('electron'); 11 | 12 | if (typeof process.env.NODE_ENV === 'string') { 13 | // we don't have to reassign the value to `process.env.NODE_ENV` 14 | // since above webpack 4, the value has been set automatically 15 | // in built files according to the `mode` variable 16 | } else { 17 | // Set environment for development 18 | process.env.NODE_ENV = 'development'; 19 | } 20 | 21 | app.on('browser-window-created', (event, window) => { 22 | window.webContents.once('dom-ready', () => { 23 | window.webContents.openDevTools({ mode: 'bottom', active: false }); 24 | }); 25 | }); 26 | 27 | // Install `vue-devtools` 28 | require('electron').app.whenReady().then(() => { 29 | require('devtron').install(); 30 | const { default: installExtension, VUEJS_DEVTOOLS } = require('electron-devtools-installer'); 31 | installExtension(VUEJS_DEVTOOLS) 32 | .then() 33 | .catch((err) => { 34 | console.error(`(lulumi-browser) Unable to install \`vue-devtools\`: \n${err}`); 35 | }); 36 | }); 37 | 38 | // Require `main` process to boot app 39 | require('./index'); 40 | -------------------------------------------------------------------------------- /src/main/lib/auto-updater.ts: -------------------------------------------------------------------------------- 1 | import { app, autoUpdater, ipcMain } from 'electron'; 2 | 3 | const platform = process.platform === 'darwin' 4 | ? 'osx' 5 | : process.platform; 6 | const FEED_URL = `https://updater-for-lulumi-browser.herokuapp.com/update/${platform}`; 7 | const version = app.getVersion(); 8 | 9 | export default { 10 | init(): any { 11 | autoUpdater.on(('error' as any), (err, msg) => { 12 | // eslint-disable-next-line no-console 13 | console.error(`Error fetching updates, ${msg} (${err.stack})`); 14 | }); 15 | 16 | autoUpdater.setFeedURL({ url: `${FEED_URL}/${version}` }); 17 | 18 | setTimeout(() => autoUpdater.checkForUpdates(), 1000 * 10); 19 | setInterval(() => autoUpdater.checkForUpdates(), 1000 * 60 * 5); 20 | }, 21 | listen(windows: any): void { 22 | autoUpdater.once('update-downloaded', (event, releaseNotes, releaseName) => { 23 | Object.keys(windows).forEach((key) => { 24 | const id = parseInt(key, 10); 25 | const window = windows[id]; 26 | window.webContents.send('update-available', { 27 | releaseNotes, 28 | releaseName, 29 | }); 30 | }); 31 | }); 32 | ipcMain.once('quit-and-install', (event, data) => { 33 | if (data.accept) { 34 | autoUpdater.quitAndInstall(); 35 | } 36 | }); 37 | }, 38 | }; 39 | -------------------------------------------------------------------------------- /src/main/lib/fetch.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable max-len */ 2 | 3 | import { net } from 'electron'; 4 | 5 | export default function fetch(url: string, callback: ({ body: string, error: any, ok: boolean }) => any): void { 6 | let bodyData = ''; 7 | const urlRequest = net.request(url); 8 | urlRequest.on('response', (response) => { 9 | if (response.statusCode === 200) { 10 | response.on('data', (chunk) => { 11 | bodyData += chunk.toString(); 12 | }); 13 | response.on('error', (err) => { 14 | callback({ 15 | body: '', 16 | error: err, 17 | ok: false, 18 | }); 19 | }); 20 | response.on('end', () => { 21 | if (callback) { 22 | callback({ 23 | body: bodyData, 24 | error: '', 25 | ok: true, 26 | }); 27 | } 28 | }); 29 | } else { 30 | callback({ 31 | body: '', 32 | error: `${url} is not reachable.`, 33 | ok: false, 34 | }); 35 | } 36 | }); 37 | urlRequest.end(); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/lib/i18n.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueI18n from 'vue-i18n'; 3 | import { readFileSync } from 'fs'; 4 | import { app } from 'electron'; 5 | import * as path from 'path'; 6 | 7 | import enElement from 'element-ui/lib/locale/lang/en'; 8 | import zhElement from 'element-ui/lib/locale/lang/zh-CN'; 9 | import zhTWElement from 'element-ui/lib/locale/lang/zh-TW'; 10 | 11 | import * as enUS from '../../helper/i18n/en-US'; 12 | import * as zhCN from '../../helper/i18n/zh-CN'; 13 | import * as zhTW from '../../helper/i18n/zh-TW'; 14 | 15 | const langPath: string = path.join(app.getPath('userData'), 'lululmi-lang'); 16 | 17 | let lang = ''; 18 | try { 19 | lang = readFileSync(langPath, 'utf8'); 20 | } catch (langError) { 21 | lang = app.getLocaleCountryCode(); 22 | if (lang === 'TW') { 23 | lang = '"zh-TW"'; 24 | } else if (lang === 'CN') { 25 | lang = '"zh-CN"'; 26 | } else { 27 | lang = '"en-US"'; 28 | } 29 | } 30 | lang = JSON.parse(lang); 31 | 32 | Vue.use(VueI18n); 33 | 34 | export default new VueI18n({ 35 | locale: lang, 36 | messages: { 37 | 'en-US': Object.assign(enElement, enUS.appMenu), 38 | 'zh-CN': Object.assign(zhElement, zhCN.appMenu), 39 | 'zh-TW': Object.assign(zhTWElement, zhTW.appMenu), 40 | }, 41 | }); 42 | -------------------------------------------------------------------------------- /src/main/lib/promisify.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-confusing-arrow */ 2 | 3 | export default (func, ...promisifyArgs) => new Promise((resolve, reject) => { 4 | func(...promisifyArgs, (err, ...cbRest) => err ? reject(err) : resolve(cbRest)); 5 | }); 6 | -------------------------------------------------------------------------------- /src/main/playbook/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/main/playbook/index.js -------------------------------------------------------------------------------- /src/preloads/extension-preload.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable max-len */ 2 | 3 | import { ipcRenderer } from 'electron'; 4 | 5 | import injectTo from '../renderer/api/inject-to'; 6 | 7 | let guestInstanceId = -1; 8 | const guestInstanceIndex = process.argv.findIndex(e => e.includes('--guest-instance-id=')); 9 | if (guestInstanceIndex !== -1) { 10 | guestInstanceId = parseInt( 11 | process.argv[guestInstanceIndex].substr( 12 | process.argv[guestInstanceIndex].indexOf('=') + 1 13 | ), 14 | 10 15 | ); 16 | } 17 | 18 | const globalObject = global as any; 19 | 20 | process.once('loaded', () => { 21 | const { hostname } = globalObject.location; // hostname equals extensionId 22 | const context: any = {}; 23 | globalObject.scriptType = 'event'; 24 | injectTo(guestInstanceId, hostname, globalObject.scriptType, context); 25 | globalObject.lulumi = context.lulumi; 26 | globalObject.chrome = globalObject.lulumi; 27 | 28 | globalObject.ipcRenderer = ipcRenderer; 29 | 30 | ipcRenderer.once(`lulumi-extension-${hostname}-going-removed`, () => { 31 | // remove all the registered things related to this extension 32 | Object.values(globalObject.lulumi.webRequest).forEach(v => (v as any).removeAllListeners()); 33 | globalObject.lulumi.contextMenus.removeAll(() => { 34 | // removeBackgroundPages of src/main/api/lulumi-extension.ts 35 | ipcRenderer.send(`lulumi-extension-${hostname}-local-shortcut-unregister`); 36 | // removeBackgroundPages of src/main/api/listeners.ts 37 | ipcRenderer.send(`remove-lulumi-extension-${hostname}`); 38 | // removeBackgroundPages of src/main/api/lulumi-extension.ts 39 | ipcRenderer.send(`lulumi-extension-${hostname}-clean-done`); 40 | }); 41 | }); 42 | ipcRenderer.on('lulumi-runtime-send-message', (_, external, message, sender) => { 43 | if (external) { 44 | globalObject.lulumi.runtime.onMessageExternal.emit(message, sender); 45 | } else { 46 | globalObject.lulumi.runtime.onMessage.emit(message, sender); 47 | } 48 | }); 49 | ipcRenderer.on('lulumi-runtime-before-connect', (_, extensionId, connectInfo, responseScriptType, webContentsId) => { 50 | globalObject.lulumi.runtime.beforeConnect( 51 | extensionId, 52 | connectInfo, 53 | responseScriptType, 54 | webContentsId 55 | ); 56 | }); 57 | ipcRenderer.on('lulumi-browser-action-clicked', (_, clickedTab) => { 58 | globalObject.lulumi.tabs.get(clickedTab.id, tab => globalObject.lulumi.browserAction.onClicked.emit(tab)); 59 | }); 60 | ipcRenderer.on('lulumi-page-action-clicked', (_, clickedTab) => { 61 | globalObject.lulumi.tabs.get(clickedTab.id, tab => globalObject.lulumi.pageAction.onClicked.emit(tab)); 62 | }); 63 | ipcRenderer.on('lulumi-commands-triggered', (_, command) => { 64 | globalObject.lulumi.commands.onCommand.emit(command); 65 | }); 66 | }); 67 | 68 | process.once('exit', () => { 69 | globalObject.lulumi.runtime.port.disconnect(); 70 | }); 71 | -------------------------------------------------------------------------------- /src/preloads/popup-preload.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable max-len */ 2 | 3 | import { ipcRenderer } from 'electron'; 4 | 5 | import injectTo from '../renderer/api/inject-to'; 6 | 7 | const resizeSensor = require('css-element-queries/src/ResizeSensor'); 8 | 9 | let guestInstanceId = -1; 10 | const guestInstanceIndex = process.argv.findIndex(e => e.includes('--guest-instance-id=')); 11 | if (guestInstanceIndex !== -1) { 12 | guestInstanceId = parseInt( 13 | process.argv[guestInstanceIndex].substr( 14 | process.argv[guestInstanceIndex].indexOf('=') + 1 15 | ), 16 | 10 17 | ); 18 | } 19 | 20 | const globalObject = global as any; 21 | 22 | process.once('loaded', () => { 23 | const { hostname } = globalObject.location; // hostname equals extensionId 24 | const context: Lulumi.Preload.Context = { lulumi: {} }; 25 | globalObject.scriptType = 'popup'; 26 | injectTo(guestInstanceId, hostname, globalObject.scriptType, context); 27 | globalObject.lulumi = context.lulumi; 28 | globalObject.chrome = globalObject.lulumi; 29 | 30 | globalObject.ipcRenderer = ipcRenderer; 31 | globalObject.ResizeSensor = resizeSensor; 32 | 33 | ipcRenderer.on('lulumi-runtime-before-connect', (event, extensionId, connectInfo, responseScriptType, webContentsId) => { 34 | globalObject.lulumi.runtime.beforeConnect( 35 | extensionId, 36 | connectInfo, 37 | responseScriptType, 38 | webContentsId 39 | ); 40 | }); 41 | }); 42 | 43 | process.once('exit', () => { 44 | globalObject.lulumi.runtime.port.disconnect(); 45 | }); 46 | -------------------------------------------------------------------------------- /src/preloads/require-preload.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable default-case */ 2 | 3 | export default { 4 | require(req: string): any { 5 | switch (req) { 6 | case 'vue-router': return require('vue-router'); 7 | case 'vuex': return require('vuex'); 8 | case 'vue-i18n': return require('vue-i18n'); 9 | } 10 | throw new Error(`cannot find module ${req}`); 11 | }, 12 | electronRequire(req: string): any { 13 | switch (req) { 14 | case 'electron': return require('electron'); 15 | case 'vue-router': return require('vue-router'); 16 | case 'vuex': return require('vuex'); 17 | case 'vue-i18n': return require('vue-i18n'); 18 | } 19 | throw new Error(`cannot find module ${req}`); 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /src/renderer/api/event.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-restricted-syntax */ 2 | 3 | class Event { 4 | listeners: ((...args: any) => any)[]; 5 | 6 | constructor() { 7 | this.listeners = []; 8 | } 9 | 10 | addListener(callback: (...args: any) => any): void { 11 | this.listeners.push(callback); 12 | } 13 | 14 | removeListener(callback: (...args: any) => any): void { 15 | this.listeners = this.listeners.filter(c => (c !== callback)); 16 | } 17 | 18 | emit(...args: any): void { 19 | for (const listener of this.listeners) { 20 | try { 21 | listener(...args); 22 | } catch (err) { 23 | // TODO: we got here becase we didn't clear all listeners related to certain extension 24 | // eslint-disable-next-line no-console 25 | // console.error(err); 26 | this.removeListener(listener); 27 | } 28 | } 29 | } 30 | } 31 | 32 | export default Event; 33 | -------------------------------------------------------------------------------- /src/renderer/api/ipc-event.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-bitwise */ 2 | 3 | import { ipcRenderer } from 'electron'; 4 | 5 | (String.prototype as any).hashCode = function hashCode() { 6 | let hash = 0; 7 | let i; 8 | let chr; 9 | 10 | if (this.length === 0) { 11 | return hash; 12 | } 13 | for (i = 0; i < this.length; i += 1) { 14 | chr = this.charCodeAt(i); 15 | hash = ((hash << 5) - hash) + chr; 16 | hash |= 0; // convert to 32bit integer 17 | } 18 | return hash; 19 | }; 20 | 21 | class Event { 22 | scope: string; 23 | event: string; 24 | listeners: string[]; 25 | 26 | constructor(scope: string, event: string) { 27 | this.scope = scope; 28 | this.event = event; 29 | this.listeners = []; 30 | } 31 | 32 | addListener(callback: (...args: any) => any): void { 33 | const digest = (callback.toString() as any).hashCode(); 34 | this.listeners.push(digest); 35 | ipcRenderer.on( 36 | `lulumi-${this.scope}-add-listener-${this.event}-result-${digest}`, (event, args) => { 37 | callback(...args); 38 | } 39 | ); 40 | ipcRenderer.send(`lulumi-${this.scope}-add-listener-${this.event}`, digest); 41 | } 42 | 43 | removeListener(callback: (...args: any) => any): void { 44 | const digest = (callback.toString() as any).hashCode(); 45 | this.listeners = this.listeners.filter(c => (c !== digest)); 46 | ipcRenderer.removeAllListeners( 47 | `lulumi-${this.scope}-add-listener-${this.event}-result-${digest}` 48 | ); 49 | ipcRenderer.send(`lulumi-${this.scope}-remove-listener-${this.event}`, digest); 50 | } 51 | 52 | emit(...args: any): void { 53 | ipcRenderer.send(`lulumi-${this.scope}-emit-${this.event}`, args); 54 | } 55 | } 56 | 57 | export default Event; 58 | -------------------------------------------------------------------------------- /src/renderer/api/web-request-event.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-bitwise */ 2 | 3 | import { ipcRenderer } from 'electron'; 4 | 5 | (String.prototype as any).hashCode = function hashCode() { 6 | let hash = 0; 7 | let i; 8 | let chr; 9 | 10 | if (this.length === 0) { 11 | return hash; 12 | } 13 | for (i = 0; i < this.length; i += 1) { 14 | chr = this.charCodeAt(i); 15 | hash = ((hash << 5) - hash) + chr; 16 | hash |= 0; // convert to 32bit integer 17 | } 18 | return hash; 19 | }; 20 | 21 | class Event { 22 | name: string; 23 | scope: string; 24 | event: string; 25 | listeners: ((details: any) => any)[]; 26 | 27 | constructor(name: string, scope: string, event: string) { 28 | this.name = name; // extension's name 29 | this.scope = scope; 30 | this.event = event; 31 | this.listeners = []; 32 | } 33 | 34 | addListener(callback: (details: any) => any, filter = {}): void { 35 | const digest = (callback.toString() as any).hashCode(); 36 | this.listeners.push(digest); 37 | ipcRenderer.on( 38 | `lulumi-${this.scope}-${this.event}-intercepted-${digest}`, (event, requestId, details) => { 39 | ipcRenderer.send( 40 | `lulumi-${this.scope}-${this.event}-response-${digest}-${requestId}`, callback(details) 41 | ); 42 | } 43 | ); 44 | ipcRenderer.send( 45 | `lulumi-${this.scope}-add-listener-${this.event}`, 46 | this.name, 47 | this.event, 48 | digest, 49 | filter, 50 | ); 51 | } 52 | 53 | removeListener(callback: (details: any) => any): void { 54 | const digest = (callback.toString() as any).hashCode(); 55 | this.listeners = this.listeners.filter(c => (c !== digest)); 56 | ipcRenderer.removeAllListeners(`lulumi-${this.scope}-${this.event}-intercepted-${digest}`); 57 | ipcRenderer.send(`lulumi-${this.scope}-remove-listener-${this.event}`, this.name, this.event); 58 | } 59 | 60 | removeAllListeners(): void { 61 | this.listeners.forEach(l => ipcRenderer.removeAllListeners( 62 | `lulumi-${this.scope}-${this.event}-intercepted-${l}` 63 | )); 64 | ipcRenderer.send( 65 | `lulumi-${this.scope}-remove-listener-${this.event}`, 66 | this.name, 67 | this.event, 68 | ); 69 | this.listeners = []; 70 | } 71 | } 72 | 73 | export default Event; 74 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/components/CPMainView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 30 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/components/CPMainView/Spotlight.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 28 | 29 | 41 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/i18n.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueI18n from 'vue-i18n'; 3 | import { ipcRenderer } from 'electron'; 4 | 5 | import enElement from 'element-ui/lib/locale/lang/en'; 6 | import zhElement from 'element-ui/lib/locale/lang/zh-CN'; 7 | import zhTWElement from 'element-ui/lib/locale/lang/zh-TW'; 8 | 9 | import * as enUS from '../../helper/i18n/en-US'; 10 | import * as zhCN from '../../helper/i18n/zh-CN'; 11 | import * as zhTW from '../../helper/i18n/zh-TW'; 12 | 13 | const lang = ipcRenderer.sendSync('request-lang'); 14 | 15 | Vue.use(VueI18n); 16 | 17 | export default new VueI18n({ 18 | locale: lang, 19 | messages: { 20 | 'en-US': Object.assign(enElement, enUS.commandPalette), 21 | 'zh-CN': Object.assign(zhElement, zhCN.commandPalette), 22 | 'zh-TW': Object.assign(zhTWElement, zhTW.commandPalette), 23 | }, 24 | }); 25 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | command-palette 5 | <% if (htmlWebpackPlugin.options.nodeModules) { %> 6 | 7 | 10 | <% } %> 11 | 12 | 13 |
14 | 15 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/js/recommender.js: -------------------------------------------------------------------------------- 1 | import * as Comlink from 'comlink'; 2 | import Fuse from 'fuse.js'; 3 | 4 | function browsingHistories(suggestionItems, niddle) { 5 | const fuse = new Fuse(suggestionItems, { 6 | shouldSort: true, 7 | threshold: 0.4, 8 | includeMatches: true, 9 | keys: [{ 10 | name: 'value', 11 | weight: 0.7, 12 | }, { 13 | name: 'title', 14 | weight: 0.3, 15 | }], 16 | }); 17 | return fuse.search(niddle); 18 | } 19 | 20 | function onlineSearch(niddle) { 21 | return fetch(`https://api.github.com/search/repositories?q=${niddle}&sort=stars&order=desc`) 22 | .then(r => r.json()) 23 | .then(r => r.items) 24 | .catch(); 25 | } 26 | 27 | Comlink.expose({ 28 | browsingHistories, 29 | onlineSearch, 30 | }); 31 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueInputAutowidth from 'vue-input-autowidth'; 3 | import Electron from 'vue-electron'; 4 | import 'element-ui/lib/theme-chalk/index.css'; 5 | import 'modern-normalize/modern-normalize.css'; 6 | 7 | import App from './App.vue'; 8 | import router from './router'; 9 | import store from '../../shared/store/rendererStore'; 10 | import i18n from './i18n'; 11 | 12 | Vue.use(VueInputAutowidth); 13 | Vue.use(Electron); 14 | 15 | if (process.env.NODE_ENV === 'production') { 16 | Vue.config.productionTip = false; 17 | Vue.config.devtools = false; 18 | } 19 | 20 | new Vue({ 21 | i18n, 22 | router, 23 | store, 24 | name: 'Root', 25 | components: { App }, 26 | render(h) { 27 | return h('App'); 28 | }, 29 | }).$mount('#app'); 30 | -------------------------------------------------------------------------------- /src/renderer/commandPalette/router/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | 4 | import CPMainView from '../components/CPMainView.vue'; 5 | 6 | Vue.use(Router); 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'command-palette-main-view', 13 | component: CPMainView, 14 | }, 15 | { 16 | path: '*', 17 | redirect: '/', 18 | }, 19 | ], 20 | }); 21 | -------------------------------------------------------------------------------- /src/renderer/lib/image-util.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple class for fetching images from URLs or files. 3 | * @class imageUtil 4 | */ 5 | const imageUtil = { 6 | /** 7 | * Extracts the image from a valid URL. 8 | * @param {String} input The input value. 9 | * @returns {String} The found image encoded by base64. 10 | */ 11 | getBase64FromImageUrl(input: string): Promise { 12 | return new Promise((resolve, reject) => { 13 | const img: HTMLImageElement = new (window as any).Image(); 14 | img.setAttribute('crossOrigin', 'anonymous'); 15 | img.onerror = () => { 16 | reject(); 17 | }; 18 | img.onload = () => { 19 | const canvas = document.createElement('canvas'); 20 | canvas.width = img.naturalWidth; 21 | canvas.height = img.naturalHeight; 22 | canvas.getContext('2d')! 23 | .drawImage(img, 0, 0); 24 | resolve(canvas.toDataURL()); 25 | }; 26 | img.src = input; 27 | }); 28 | }, 29 | 30 | /** 31 | * Puts the image from a imageData object. 32 | * @param {ImageData} imageData The input imageData object. 33 | * @param {Number} size The size. 34 | * @returns {String} The image encoded by base64. 35 | */ 36 | getBase64FromImageData(imageData: ImageData, size: number): string { 37 | const canvas = document.createElement('canvas'); 38 | canvas.width = size; 39 | canvas.height = size; 40 | const data = new ImageData(new Uint8ClampedArray(imageData.data), size, size); 41 | canvas.getContext('2d')!.putImageData(data, 0, 0); 42 | return canvas.toDataURL('image/png'); 43 | }, 44 | 45 | /** 46 | * Extracts the scheme from a filepath. 47 | * @param {String} path The filepath. 48 | * @param {String} size The size of returned icon (small, normal, large). 49 | * @returns {String} The found image encoded by base64. 50 | */ 51 | async getBase64FromFileIcon(path: string, size: any = 'normal'): Promise { 52 | try { 53 | const icon = await require('electron').remote.app.getFileIcon(path, { size }); 54 | if (icon) { 55 | return icon.toDataURL(); 56 | } 57 | return ''; 58 | } catch (err) { 59 | return ''; 60 | } 61 | }, 62 | 63 | /** 64 | * Extracts the valid image from a URL. 65 | * @param {String} input The input value. 66 | * @param {Function} cb The callback function. 67 | */ 68 | getWorkingImageUrl(input: string, cb: (boolean) => any): void { 69 | const img = new (window as any).Image(); 70 | img.onload = () => cb(true); 71 | img.onerror = () => cb(false); 72 | img.src = input; 73 | }, 74 | }; 75 | 76 | export default imageUtil; 77 | -------------------------------------------------------------------------------- /src/renderer/lib/pretty-size.ts: -------------------------------------------------------------------------------- 1 | const sizes = [ 2 | 'Bytes', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 3 | ]; 4 | 5 | const prettySize = { 6 | /** 7 | * Pretty print a size from bytes 8 | * @method pretty 9 | * @param {Number} size The number to pretty print 10 | * @param {Boolean} [nospace=false] Don't print a space 11 | * @param {Boolean} [one=false] Only print one character 12 | */ 13 | process(size: number, nospace = false, one = false): string { 14 | let mysize = ''; 15 | let outF: string; 16 | 17 | sizes.forEach((f, id) => { 18 | let first = ''; 19 | if (one) { 20 | first = f.slice(0, 1); 21 | } 22 | 23 | const s: number = 1024 ** id; 24 | let fixed: string; 25 | if (size >= s) { 26 | fixed = String((size / s).toFixed(1)); 27 | if (fixed.indexOf('.0') === fixed.length - 2) { 28 | fixed = fixed.slice(0, -2); 29 | } 30 | mysize = fixed + (nospace ? '' : ' ') + first; 31 | } 32 | }); 33 | 34 | // zero handling 35 | // always prints in Bytes 36 | if (!mysize) { 37 | outF = (one ? sizes[0].slice(0, 1) : sizes[0]); 38 | mysize = `0${nospace ? '' : ' '}${outF}`; 39 | } 40 | 41 | return mysize; 42 | }, 43 | }; 44 | 45 | export default prettySize; 46 | -------------------------------------------------------------------------------- /src/renderer/lib/time-util.ts: -------------------------------------------------------------------------------- 1 | const timeUtil = { 2 | 3 | /** 4 | * Gets current time based on locale of browser. 5 | * @returns {String} The current locale time. 6 | */ 7 | getLocaleCurrentTime(): string { 8 | const date = new Date(); 9 | return date.toLocaleString(); 10 | }, 11 | 12 | /** 13 | * Gets the time value in milliseconds. 14 | * @returns {Number} The current time milliseconds. 15 | */ 16 | getMillisecondsTime(): number { 17 | return new Date().getTime(); 18 | }, 19 | }; 20 | 21 | export default timeUtil; 22 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | 43 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/components/BrowserMainView/SwipeArrow.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 36 | 37 | 73 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/components/BrowserMainView/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/renderer/mainBrowserWindow/components/BrowserMainView/assets/logo.png -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/css/el-badge.less: -------------------------------------------------------------------------------- 1 | .el-badge__content.is-fixed { 2 | top: 80%; 3 | right: 16px; 4 | } 5 | .el-badge__content { 6 | border-radius: 3px; 7 | font-size: 10px; 8 | height: 10px; 9 | line-height: 10px; 10 | padding: 0 10%; 11 | } 12 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/css/el-input.less: -------------------------------------------------------------------------------- 1 | #dropdown > .el-input > .el-input__icon { 2 | color: #000; 3 | } 4 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/css/el-popover.less: -------------------------------------------------------------------------------- 1 | .download-list__popper { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-around; 5 | } 6 | 7 | .el-popover { 8 | padding: 2px 0px; 9 | 10 | &[x-placement^=bottom] { 11 | margin-top: 2px; 12 | } 13 | } 14 | 15 | .my-autocomplete { 16 | .popper__arrow { 17 | display: none; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/css/el-progress.less: -------------------------------------------------------------------------------- 1 | .el-progress__text { 2 | font-size: 13px !important; 3 | } 4 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/fonts/Cascadia.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/renderer/mainBrowserWindow/fonts/Cascadia.ttf -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/i18n.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueI18n from 'vue-i18n'; 3 | 4 | import enElement from 'element-ui/lib/locale/lang/en'; 5 | import zhElement from 'element-ui/lib/locale/lang/zh-CN'; 6 | import zhTWElement from 'element-ui/lib/locale/lang/zh-TW'; 7 | 8 | import enUS from '../../helper/i18n/en-US'; 9 | import zhCN from '../../helper/i18n/zh-CN'; 10 | import zhTW from '../../helper/i18n/zh-TW'; 11 | 12 | const lang = require('electron').ipcRenderer.sendSync('request-lang'); 13 | 14 | Vue.use(VueI18n); 15 | 16 | export default new VueI18n({ 17 | locale: lang, 18 | messages: { 19 | 'en-US': Object.assign(enElement, enUS), 20 | 'zh-CN': Object.assign(zhElement, zhCN), 21 | 'zh-TW': Object.assign(zhTWElement, zhTW), 22 | }, 23 | }); 24 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | lulumi-browser 5 | <% if (htmlWebpackPlugin.options.nodeModules) { %> 6 | 7 | 10 | <% } %> 11 | 12 | 13 |
14 | 15 | <% if (!require('process').browser) { %> 16 | 19 | <% } %> 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/js/search-worker.js: -------------------------------------------------------------------------------- 1 | import * as Comlink from 'comlink'; 2 | import Fuse from 'fuse.js'; 3 | 4 | function search(suggestionItems, niddle) { 5 | const fuse = new Fuse(suggestionItems, { 6 | shouldSort: true, 7 | threshold: 0.4, 8 | includeMatches: true, 9 | keys: [{ 10 | name: 'value', 11 | weight: 0.7, 12 | }, { 13 | name: 'title', 14 | weight: 0.3, 15 | }], 16 | }); 17 | return fuse.search(niddle); 18 | } 19 | 20 | Comlink.expose(search); 21 | -------------------------------------------------------------------------------- /src/renderer/mainBrowserWindow/router/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | 4 | import BrowserMainView from '../components/BrowserMainView.vue'; 5 | 6 | Vue.use(Router); 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'browser-main-view', 13 | component: BrowserMainView, 14 | }, 15 | { 16 | path: '*', 17 | redirect: '/', 18 | }, 19 | ], 20 | }); 21 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 72 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/components/PlaybooksView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | 26 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/fonts/Cascadia.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/renderer/playbooksView/fonts/Cascadia.ttf -------------------------------------------------------------------------------- /src/renderer/playbooksView/i18n.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueI18n from 'vue-i18n'; 3 | 4 | import enElement from 'element-ui/lib/locale/lang/en'; 5 | import zhElement from 'element-ui/lib/locale/lang/zh-CN'; 6 | import zhTWElement from 'element-ui/lib/locale/lang/zh-TW'; 7 | 8 | import * as enUS from '../../helper/i18n/en-US'; 9 | import * as zhCN from '../../helper/i18n/zh-CN'; 10 | import * as zhTW from '../../helper/i18n/zh-TW'; 11 | 12 | interface Window extends Lulumi.API.GlobalObject { 13 | ipcRenderer: Electron.IpcRenderer; 14 | } 15 | 16 | declare const window: Window; 17 | 18 | const lang = window.ipcRenderer.sendSync('request-lang'); 19 | 20 | Vue.use(VueI18n); 21 | 22 | export default new VueI18n({ 23 | locale: lang, 24 | messages: { 25 | 'en-US': Object.assign(enElement, enUS.playbooks), 26 | 'zh-CN': Object.assign(zhElement, zhCN.playbooks), 27 | 'zh-TW': Object.assign(zhTWElement, zhTW.playbooks), 28 | }, 29 | }); 30 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | playbooks-view 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | import { Message } from 'element-ui'; 4 | import 'element-ui/lib/theme-chalk/index.css'; 5 | 6 | import VueLogics from 'vue-logics'; 7 | import 'vue-logics/theme/default/logics.min.css'; 8 | 9 | import 'modern-normalize/modern-normalize.css'; 10 | 11 | import App from './App.vue'; 12 | import router from './router'; 13 | import store from './store'; 14 | import i18n from './i18n'; 15 | 16 | Vue.use(VueLogics); 17 | 18 | Vue.prototype.$message = Message; 19 | 20 | if (process.env.NODE_ENV === 'production') { 21 | Vue.config.productionTip = false; 22 | Vue.config.devtools = false; 23 | } 24 | 25 | new Vue({ 26 | i18n, 27 | router, 28 | store, 29 | name: 'Root', 30 | components: { App }, 31 | render(h) { 32 | return h('App'); 33 | }, 34 | }).$mount('#app'); 35 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/router/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | 4 | import PlaybooksView from '../components/PlaybooksView.vue'; 5 | 6 | Vue.use(Router); 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'playbooks-view', 13 | component: PlaybooksView, 14 | }, 15 | { 16 | path: '*', 17 | redirect: '/', 18 | }, 19 | ], 20 | }); 21 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/store/actions.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | 3 | export const actions = { 4 | }; 5 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/store/getters.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | 3 | export const getters = { 4 | }; 5 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/store/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | import { actions } from './actions'; 4 | import { getters } from './getters'; 5 | import modules from './modules'; 6 | 7 | Vue.use(Vuex); 8 | 9 | export default new Vuex.Store({ 10 | actions, 11 | getters, 12 | modules, 13 | strict: process.env.NODE_ENV !== 'production', 14 | }); 15 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/store/modules/index.ts: -------------------------------------------------------------------------------- 1 | import { ModuleTree } from 'vuex'; 2 | 3 | interface RequireContext extends __WebpackModuleApi.RequireContext { 4 | default: any; 5 | } 6 | 7 | const files = require.context('.', false, /\.ts$/); 8 | const modules: ModuleTree = {}; 9 | 10 | files.keys().forEach((key) => { 11 | if (key === './index.ts') return; 12 | modules[key.replace(/(\.\/|\.ts)/g, '')] = (files(key) as RequireContext).default; 13 | }); 14 | 15 | export default modules; 16 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/store/modules/main.ts: -------------------------------------------------------------------------------- 1 | const state = { 2 | }; 3 | 4 | const mutations = { 5 | }; 6 | 7 | export default { 8 | state, 9 | mutations, 10 | }; 11 | -------------------------------------------------------------------------------- /src/renderer/playbooksView/store/mutation-types.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/src/renderer/playbooksView/store/mutation-types.ts -------------------------------------------------------------------------------- /src/renderer/preferenceView/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 43 | 44 | 103 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 23 | 24 | 29 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Lulumi.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 47 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Newtab.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 31 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 35 | 36 | 47 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences/Auth.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences/Homepage.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 51 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences/Language.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 69 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences/PDFViewer.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 60 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences/Proxy.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 76 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/components/AboutMainView/Preferences/TabConfig.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 72 | 73 | 78 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/i18n.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueI18n from 'vue-i18n'; 3 | 4 | import enElement from 'element-ui/lib/locale/lang/en'; 5 | import zhElement from 'element-ui/lib/locale/lang/zh-CN'; 6 | import zhTWElement from 'element-ui/lib/locale/lang/zh-TW'; 7 | 8 | import * as enUS from '../../helper/i18n/en-US'; 9 | import * as zhCN from '../../helper/i18n/zh-CN'; 10 | import * as zhTW from '../../helper/i18n/zh-TW'; 11 | 12 | declare const ipcRenderer: Electron.IpcRenderer; 13 | 14 | const lang = ipcRenderer.sendSync('request-lang'); 15 | 16 | Vue.use(VueI18n); 17 | 18 | export default new VueI18n({ 19 | locale: lang, 20 | messages: { 21 | 'en-US': Object.assign(enElement, enUS.guest), 22 | 'zh-CN': Object.assign(zhElement, zhCN.guest), 23 | 'zh-TW': Object.assign(zhTWElement, zhTW.guest), 24 | }, 25 | }); 26 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | lulumi-browser 5 | 6 | 7 |
8 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import { Message } from 'element-ui'; 3 | import 'element-ui/lib/theme-chalk/index.css'; 4 | import 'modern-normalize/modern-normalize.css'; 5 | 6 | import App from './App.vue'; 7 | import router from './router'; 8 | import store from './store'; 9 | import i18n from './i18n'; 10 | 11 | Vue.prototype.$message = Message; 12 | 13 | if (process.env.NODE_ENV === 'production') { 14 | Vue.config.productionTip = false; 15 | Vue.config.devtools = false; 16 | } 17 | 18 | new Vue({ 19 | i18n, 20 | router, 21 | store, 22 | name: 'Root', 23 | components: { App }, 24 | render(h) { 25 | return h('App'); 26 | }, 27 | }).$mount('#app'); 28 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/router/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | 4 | import AboutMainView from '../components/AboutMainView.vue'; 5 | import Lulumi from '../components/AboutMainView/Lulumi.vue'; 6 | import Preferences from '../components/AboutMainView/Preferences.vue'; 7 | import SearchEngineProvider from '../components/AboutMainView/Preferences/SearchEngineProvider.vue'; 8 | import Homepage from '../components/AboutMainView/Preferences/Homepage.vue'; 9 | import PDFViewer from '../components/AboutMainView/Preferences/PDFViewer.vue'; 10 | import TabConfig from '../components/AboutMainView/Preferences/TabConfig.vue'; 11 | import Language from '../components/AboutMainView/Preferences/Language.vue'; 12 | import Proxy from '../components/AboutMainView/Preferences/Proxy.vue'; 13 | import Auth from '../components/AboutMainView/Preferences/Auth.vue'; 14 | import Downloads from '../components/AboutMainView/Downloads.vue'; 15 | import History from '../components/AboutMainView/History.vue'; 16 | import Extensions from '../components/AboutMainView/Extensions.vue'; 17 | import Newtab from '../components/AboutMainView/Newtab.vue'; 18 | 19 | Vue.use(Router); 20 | 21 | export default new Router({ 22 | routes: [ 23 | { 24 | path: '/', 25 | name: 'about-main-view', 26 | component: AboutMainView, 27 | }, 28 | { 29 | path: '/lulumi', 30 | name: 'lulumi', 31 | component: Lulumi, 32 | }, 33 | { 34 | path: '/preferences', 35 | component: Preferences, 36 | children: [ 37 | { 38 | path: 'search', 39 | name: 'search-engine-provider', 40 | component: SearchEngineProvider, 41 | }, 42 | { 43 | path: 'homepage', 44 | name: 'homepage', 45 | component: Homepage, 46 | }, 47 | { 48 | path: 'pdfViewer', 49 | name: 'pdfViewer', 50 | component: PDFViewer, 51 | }, 52 | { 53 | path: 'tab', 54 | name: 'tab-config', 55 | component: TabConfig, 56 | }, 57 | { 58 | path: 'language', 59 | name: 'language', 60 | component: Language, 61 | }, 62 | { 63 | path: 'proxy', 64 | name: 'proxy', 65 | component: Proxy, 66 | }, 67 | { 68 | path: 'auth', 69 | name: 'auth', 70 | component: Auth, 71 | }, 72 | { 73 | path: '', 74 | name: 'preferences', 75 | component: Preferences, 76 | redirect: 'search', 77 | }, 78 | ], 79 | }, 80 | { 81 | path: '/downloads', 82 | name: 'downloads', 83 | component: Downloads, 84 | }, 85 | { 86 | path: '/history', 87 | name: 'history', 88 | component: History, 89 | }, 90 | { 91 | path: '/extensions', 92 | name: 'extensions', 93 | component: Extensions, 94 | }, 95 | { 96 | path: '/newtab', 97 | name: 'newtab', 98 | component: Newtab, 99 | }, 100 | { 101 | path: '*', 102 | redirect: '/', 103 | }, 104 | ], 105 | }); 106 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/store/actions.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | 3 | import * as types from './mutation-types'; 4 | 5 | export const actions = { 6 | updateAbout({ commit }, data: any): void { 7 | commit(types.UPDATE_ABOUT, data); 8 | }, 9 | updateExtensions({ commit }, data: any): void { 10 | commit(types.UPDATE_EXTENSIONS, data); 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/store/getters.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | 3 | export const getters = { 4 | about(state: any): void { 5 | return state.guest.about; 6 | }, 7 | extensions(state: any): void { 8 | return state.guest.extensions; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/store/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | import { actions } from './actions'; 4 | import { getters } from './getters'; 5 | import modules from './modules'; 6 | 7 | Vue.use(Vuex); 8 | 9 | export default new Vuex.Store({ 10 | actions, 11 | getters, 12 | modules, 13 | strict: process.env.NODE_ENV !== 'production', 14 | }); 15 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/store/modules/guest.ts: -------------------------------------------------------------------------------- 1 | import * as types from '../mutation-types'; 2 | 3 | const state = { 4 | about: { 5 | about: [], 6 | lulumi: [], 7 | preferences: [], 8 | }, 9 | extensions: {}, 10 | }; 11 | 12 | const mutations = { 13 | [types.UPDATE_ABOUT](stateContext: any, data: any): void { 14 | stateContext.about.about = data.about; 15 | stateContext.about.lulumi = data.lulumi; 16 | stateContext.about.preferences = data.preferences; 17 | if (data.path) { 18 | stateContext.about.path = data.path; 19 | } 20 | }, 21 | [types.UPDATE_EXTENSIONS](stateContext: any, data: any): void { 22 | stateContext.extensions = data; 23 | }, 24 | }; 25 | 26 | export default { 27 | state, 28 | mutations, 29 | }; 30 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/store/modules/index.ts: -------------------------------------------------------------------------------- 1 | import { ModuleTree } from 'vuex'; 2 | 3 | interface RequireContext extends __WebpackModuleApi.RequireContext { 4 | default: any; 5 | } 6 | 7 | const files = require.context('.', false, /\.ts$/); 8 | const modules: ModuleTree = {}; 9 | 10 | files.keys().forEach((key) => { 11 | if (key === './index.ts') return; 12 | modules[key.replace(/(\.\/|\.ts)/g, '')] = (files(key) as RequireContext).default; 13 | }); 14 | 15 | export default modules; 16 | -------------------------------------------------------------------------------- /src/renderer/preferenceView/store/mutation-types.ts: -------------------------------------------------------------------------------- 1 | export const UPDATE_ABOUT = 'UPDATE_ABOUT'; 2 | export const UPDATE_EXTENSIONS = 'UPDATE_EXTENSIONS'; 3 | -------------------------------------------------------------------------------- /src/shared/store/getters.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | 3 | import { Config } from 'electron'; 4 | 5 | interface BrowserState extends Lulumi.Store.State { 6 | browser: Lulumi.Store.State; 7 | } 8 | 9 | export const getters = { 10 | pid(state: BrowserState): number { 11 | return state.browser.tabId; 12 | }, 13 | tabs(state: BrowserState): Lulumi.Store.TabObject[] { 14 | return state.browser.tabs; 15 | }, 16 | tabsOrder(state: BrowserState): number[][] { 17 | return state.browser.tabsOrder; 18 | }, 19 | currentTabIndexes(state: BrowserState): number[] { 20 | return state.browser.currentTabIndexes; 21 | }, 22 | searchEngine(state: BrowserState): Lulumi.Store.SearchEngineObject[] { 23 | return state.browser.searchEngine; 24 | }, 25 | currentSearchEngine(state: BrowserState): Lulumi.Store.SearchEngineObject { 26 | return state.browser.currentSearchEngine; 27 | }, 28 | autoFetch(state: BrowserState): boolean { 29 | return state.browser.autoFetch; 30 | }, 31 | homepage(state: BrowserState): string { 32 | return state.browser.homepage; 33 | }, 34 | pdfViewer(state: BrowserState): string { 35 | return state.browser.pdfViewer; 36 | }, 37 | tabConfig(state: BrowserState): Lulumi.Store.TabConfig { 38 | return state.browser.tabConfig; 39 | }, 40 | lang(state: BrowserState): string { 41 | return state.browser.lang; 42 | }, 43 | proxyConfig(state: BrowserState): Config { 44 | return state.browser.proxyConfig; 45 | }, 46 | auth(state: BrowserState): { username: string; password: string } { 47 | return state.browser.auth; 48 | }, 49 | downloads(state: BrowserState): Lulumi.Store.DownloadItem[] { 50 | return state.browser.downloads; 51 | }, 52 | history(state: BrowserState): Lulumi.Store.TabHistory[] { 53 | return state.browser.history; 54 | }, 55 | lastOpenedTabs(state: BrowserState): Lulumi.Store.LastOpenedTabObject[] { 56 | return state.browser.lastOpenedTabs; 57 | }, 58 | permissions(state: BrowserState): any { 59 | return state.browser.permissions; 60 | }, 61 | certificates(state: BrowserState): Lulumi.Store.Certificates { 62 | return state.browser.certificates; 63 | }, 64 | windows(state: BrowserState): Lulumi.Store.LulumiBrowserWindowProperty[] { 65 | return state.browser.windows; 66 | }, 67 | extensionInfoDict(state: BrowserState): Lulumi.Store.ExtensionInfoDict { 68 | return state.browser.extensionInfoDict; 69 | }, 70 | }; 71 | -------------------------------------------------------------------------------- /src/shared/store/modules/index.ts: -------------------------------------------------------------------------------- 1 | import { ModuleTree } from 'vuex'; 2 | 3 | interface RequireContext extends __WebpackModuleApi.RequireContext { 4 | default: any; 5 | } 6 | 7 | const files = require.context('.', false, /\.ts$/); 8 | const modules: ModuleTree = {}; 9 | 10 | files.keys().forEach((key) => { 11 | if (key === './index.ts') return; 12 | modules[key.replace(/(\.\/|\.ts)/g, '')] = (files(key) as RequireContext).default; 13 | }); 14 | 15 | export default modules; 16 | -------------------------------------------------------------------------------- /src/shared/store/mutation-types.ts: -------------------------------------------------------------------------------- 1 | export const INCREMENT_TAB_ID = 'INCREMENT_TAB_ID'; 2 | 3 | export const CREATE_TAB = 'CREATE_TAB'; 4 | export const CLOSE_TAB = 'CLOSE_TAB'; 5 | export const CLOSE_ALL_TABS = 'CLOSE_ALL_TABS'; 6 | export const CLICK_TAB = 'CLICK_TAB'; 7 | 8 | export const SET_BROWSER_VIEW_ID = 'SET_BROWSER_VIEW_ID'; 9 | export const DID_START_LOADING = 'DID_START_LOADING'; 10 | export const DID_NAVIGATE = 'DID_NAVIGATE'; 11 | export const PAGE_TITLE_UPDATED = 'PAGE_TITLE_UPDATED'; 12 | export const DOM_READY = 'DOM_READY'; 13 | export const DID_FRAME_FINISH_LOAD = 'DID_FRAME_FINISH_LOAD'; 14 | export const PAGE_FAVICON_UPDATED = 'PAGE_FAVICON_UPDATED'; 15 | export const DID_STOP_LOADING = 'DID_STOP_LOADING'; 16 | export const DID_FAIL_LOAD = 'DID_FAIL_LOAD'; 17 | export const UPDATE_TARGET_URL = 'UPDATE_TARGET_URL'; 18 | export const MEDIA_STARTED_PLAYING = 'MEDIA_STARTED_PLAYING'; 19 | export const MEDIA_PAUSED = 'MEDIA_PAUSED'; 20 | export const TOGGLE_AUDIO = 'TOGGLE_AUDIO'; 21 | export const UPDATE_CERTIFICATE = 'UPDATE_CERTIFICATE'; 22 | export const UPDATE_EXTENSION_METADATA = 'UPDATE_EXTENSION_METADATA'; 23 | 24 | export const SET_CURRENT_SEARCH_ENGINE_PROVIDER = 'SET_CURRENT_SEARCH_ENGINE_PROVIDER'; 25 | export const SET_HOMEPAGE = 'SET_HOMEPAGE'; 26 | export const SET_PDF_VIEWER = 'SET_PDF_VIEWER'; 27 | export const SET_TAB_CONFIG = 'SET_TAB_CONFIG'; 28 | export const SET_LANG = 'SET_LANG'; 29 | export const SET_PROXY_CONFIG = 'SET_PROXY_CONFIG'; 30 | export const SET_AUTH = 'SET_AUTH'; 31 | export const SET_DOWNLOADS = 'SET_DOWNLOADS'; 32 | export const SET_HISTORY = 'SET_HISTORY'; 33 | export const SET_TABS_ORDER = 'SET_TABS_ORDER'; 34 | export const SET_PAGE_ACTION = 'SET_PAGE_ACTION'; 35 | export const CLEAR_PAGE_ACTION = 'CLEAR_PAGE_ACTION'; 36 | export const CREATE_DOWNLOAD_TASK = 'CREATE_DOWNLOAD_TASK'; 37 | export const UPDATE_DOWNLOADS_PROGRESS = 'UPDATE_DOWNLOADS_PROGRESS'; 38 | export const COMPLETE_DOWNLOADS_PROGRESS = 'COMPLETE_DOWNLOADS_PROGRESS'; 39 | export const CLOSE_DOWNLOAD_BAR = 'CLOSE_DOWNLOAD_BAR'; 40 | 41 | export const SET_PERMISSIONS = 'SET_PERMISSIONS'; 42 | 43 | export const UPDATE_MAPPINGS = 'UPDATE_MAPPINGS'; 44 | 45 | export const SET_LULUMI_STATE = 'SET_LULUMI_STATE'; 46 | 47 | export const CREATE_WINDOW = 'CREATE_WINDOW'; 48 | export const CLOSE_WINDOW = 'CLOSE_WINDOW'; 49 | export const UPDATE_WINDOW_PROPERTY = 'UPDATE_WINDOW_PROPERTY'; 50 | 51 | export const ADD_EXTENSION = 'ADD_EXTENSION'; 52 | export const REMOVE_EXTENSION = 'REMOVE_EXTENSION'; 53 | export const UPDATE_EXTENSION = 'UPDATE_EXTENSION'; 54 | -------------------------------------------------------------------------------- /src/shared/store/rendererStore.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | import { ipcRenderer } from 'electron'; 4 | 5 | import { actions } from './actions'; 6 | import { getters } from './getters'; 7 | import modules from './modules'; 8 | 9 | Vue.use(Vuex); 10 | 11 | if (!(process.env.NODE_ENV === 'test' && process.env.TEST_ENV === 'unit')) { 12 | const state = ipcRenderer.sendSync('vuex-connect'); 13 | 14 | Object.keys(modules).forEach((module) => { 15 | modules[module].state = { 16 | ...modules[module].state, 17 | ...state[module], 18 | }; 19 | }); 20 | } 21 | 22 | const store = new Vuex.Store({ 23 | actions, 24 | getters, 25 | modules, 26 | strict: process.env.NODE_ENV !== 'production', 27 | }); 28 | 29 | if (!(process.env.NODE_ENV === 'test' && process.env.TEST_ENV === 'unit')) { 30 | (store as Lulumi.Store.CustomStore).dispatch = function dispatch(type, ...payload) { 31 | let newType = type; 32 | let newPayload = payload; 33 | if (typeof type === 'object' && type.type && arguments.length === 1) { 34 | newPayload = [type.payload]; 35 | newType = type.type; 36 | } 37 | 38 | ipcRenderer.send('vuex-action', { 39 | type: newType, 40 | payload: newPayload, 41 | }); 42 | }; 43 | 44 | ipcRenderer.on('vuex-apply-mutation', (event, mutation) => { 45 | store.commit(mutation.type, mutation.payload); 46 | }); 47 | } 48 | 49 | export default store; 50 | -------------------------------------------------------------------------------- /src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "esnext", 4 | "moduleResolution": "node", 5 | "target": "es6", 6 | "noEmit": true, 7 | "noImplicitAny": false, 8 | "removeComments": false, 9 | "experimentalDecorators": true, 10 | "emitDecoratorMetadata": true, 11 | "sourceMap": true, 12 | "noImplicitReturns": true, 13 | "noFallthroughCasesInSwitch": true, 14 | "noUnusedLocals": true, 15 | "skipLibCheck": true, 16 | "strictNullChecks": true, 17 | "lib": [ 18 | "dom", 19 | "dom.iterable", 20 | "es7", 21 | "es2017.object" 22 | ], 23 | "typeRoots": [ 24 | "../node_modules/@types", 25 | "./typings" 26 | ] 27 | }, 28 | "exclude": [ 29 | "../node_modules" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /src/typings/vue-augmentation.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-undef */ 2 | 3 | // eslint-disable-next-line spaced-comment 4 | /// 5 | 6 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 7 | import Vue from 'vue'; 8 | 9 | // augment types of Vue.$electron 10 | declare module 'vue/types/vue' { 11 | interface BrowserWindow { 12 | static createWindow( 13 | options?: Electron.BrowserWindowConstructorOptions, 14 | callback?: (eventName: string) => void): Electron.BrowserWindow; 15 | } 16 | interface Remote extends Electron.Remote { 17 | BrowserWindow: BrowserWindow & typeof Electron.BrowserWindow; 18 | } 19 | interface MyElectron { 20 | clipboard: Electron.Clipboard; 21 | crashReporter: Electron.CrashReporter; 22 | desktopCapturer: Electron.DesktopCapturer; 23 | ipcRenderer: Electron.IpcRenderer; 24 | nativeImage: typeof Electron.NativeImage; 25 | remote: Remote; 26 | screen: Electron.Screen; 27 | shell: Electron.Shell; 28 | webFrame: Electron.WebFrame; 29 | } 30 | 31 | // eslint-disable-next-line no-shadow 32 | interface Vue { 33 | $electron: MyElectron; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/typings/vue-component.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue'; 3 | 4 | export default Vue; 5 | } 6 | -------------------------------------------------------------------------------- /static/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/static/icons/icon.png -------------------------------------------------------------------------------- /test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "assert": true, 7 | "expect": true, 8 | "should": true, 9 | "__static": true 10 | }, 11 | "rules": { 12 | "func-names": 0, 13 | "prefer-arrow-callback": 0 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /test/e2e/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // Set BABEL_ENV to use proper env config 4 | process.env.BABEL_ENV = 'test'; 5 | 6 | // Attach Chai APIs to global scope 7 | const { expect, should, assert } = require('chai'); 8 | global.expect = expect; 9 | global.should = should; 10 | global.assert = assert; 11 | 12 | // Initilization 13 | require('./init'); 14 | -------------------------------------------------------------------------------- /test/e2e/init.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import utils from './utils'; 3 | 4 | test.beforeEach(async (t) => { 5 | await utils.startApp.call(t.context); 6 | utils.addCommands.call(t.context); 7 | }); 8 | 9 | test.afterEach.always('cleanup', async (t) => { 10 | await utils.stopApp.call(t.context); 11 | }); 12 | 13 | // Require all JS files in `./specs` for Mocha to consume 14 | require('require-dir')('./specs'); 15 | -------------------------------------------------------------------------------- /test/e2e/specs/ControlGroup.spec.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import { keys } from '../utils'; 3 | 4 | const urlInput = '#url-input'; 5 | const controlGroup = '.control-group'; 6 | 7 | test.serial('has the functional control group', async (t) => { 8 | const app = t.context.app; 9 | const el = await app.client 10 | .waitForBrowserWindow() 11 | .waitForVisible(urlInput) 12 | .click(urlInput) 13 | .elementActive(); 14 | 15 | await app.client 16 | .elementIdValue(el.value.ELEMENT, 'https://example.com/') 17 | .elementIdValue(el.value.ELEMENT, keys.ENTER); 18 | 19 | await app.client 20 | .waitForUrl('https://example.com/') 21 | .waitForBrowserWindow() 22 | .waitForVisible(urlInput) 23 | .waitForExist(controlGroup); 24 | 25 | expect(await app.client.waitForExist('#browser-navbar__refresh.enabled')).to.equal(true); 26 | 27 | await app.client 28 | .waitForUrl('https://example.com/') 29 | .loadUrl('lulumi://about/#/lulumi') 30 | .waitForBrowserWindow(); 31 | 32 | expect(await app.client 33 | .waitForExist('#browser-navbar__goBack.enabled')).to.equal(true); 34 | expect(await app.client 35 | .waitForExist('#browser-navbar__goForward.disabled')).to.equal(true); 36 | 37 | await app.client 38 | .waitForExist('#browser-navbar__goBack.enabled') 39 | .click('#browser-navbar__goBack.enabled'); 40 | 41 | expect(await app.client 42 | .waitForExist('#browser-navbar__goBack.enabled')).to.equal(true); 43 | expect(await app.client 44 | .waitForExist('#browser-navbar__goForward.enabled')).to.equal(true); 45 | }); 46 | -------------------------------------------------------------------------------- /test/e2e/specs/Launch.spec.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | 3 | test.serial('has everything set up', async (t) => { 4 | const app = t.context.app; 5 | const win = await app.client 6 | .waitUntilWindowLoaded() 7 | .browserWindow; 8 | 9 | expect(await win.isMinimized()).to.equal(false); 10 | expect(await win.isDevToolsOpened()).to.equal(false); 11 | expect(await win.isVisible()).to.equal(true); 12 | 13 | const { width, height } = await win.getBounds(); 14 | expect(width).to.above(0); 15 | expect(height).to.above(0); 16 | 17 | expect(await app.client.getWindowCount()).to.equal(1); 18 | }); 19 | -------------------------------------------------------------------------------- /test/e2e/specs/Protocol.spec.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import { keys } from '../utils'; 3 | 4 | const urlInput = '#url-input'; 5 | 6 | test.serial('has working about: handlers for redirecting requests to lulumi: protocol', async (t) => { 7 | const app = t.context.app; 8 | const el = await app.client 9 | .waitForVisible(urlInput) 10 | .click(urlInput) 11 | .elementActive(); 12 | 13 | await app.client 14 | .elementIdValue(el.value.ELEMENT, 'about:newtab') 15 | .elementIdValue(el.value.ELEMENT, keys.ENTER); 16 | 17 | expect(await app.client 18 | .tabByIndex(1) // tabByIndex(0) is command-palatte page 19 | .waitForVisible('#app') 20 | .elementActive() 21 | .getUrl()).to.equal('lulumi://about/#/newtab'); 22 | }); 23 | -------------------------------------------------------------------------------- /test/unit/about.js: -------------------------------------------------------------------------------- 1 | // require all test files (files that ends with .spec.js) 2 | const testsContext = require.context('./specs/about', true, /\.spec$/) 3 | testsContext.keys().forEach(testsContext) 4 | 5 | // require all src files except some files for coverage. 6 | // you can also change this to match only the subset of files that 7 | // you want coverage for. 8 | const srcContext = require.context('../../src/renderer/preferenceView', true, /^\.\/(?!main|i18n|index(\.ts|\.ejs)?$)/) 9 | srcContext.keys().forEach(srcContext) 10 | 11 | // disable security warnings 12 | process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true 13 | -------------------------------------------------------------------------------- /test/unit/about.karma.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const path = require('path') 4 | const merge = require('webpack-merge') 5 | const webpack = require('webpack') 6 | 7 | const baseConfigs = require('../../.electron-vue/webpack.renderer.config') 8 | const projectRoot = path.resolve(__dirname, '../../src/renderer/preferenceView') 9 | 10 | // Set BABEL_ENV to use proper preset config 11 | process.env.BABEL_ENV = 'test' 12 | 13 | let webpackConfig = merge(baseConfigs[2], { 14 | devtool: '#inline-source-map', 15 | plugins: [ 16 | new webpack.DefinePlugin({ 17 | 'process.env.NODE_ENV': '"test"', 18 | 'process.env.TEST_ENV': '"unit"' 19 | }) 20 | ] 21 | }) 22 | 23 | // don't treat dependencies as externals 24 | delete webpackConfig.entry 25 | delete webpackConfig.externals 26 | delete webpackConfig.output.libraryTarget 27 | 28 | // change to 'electron-renderer' in order to preload some lazy loading modules 29 | webpackConfig.target = 'electron-renderer'; 30 | 31 | module.exports = (config) => { 32 | config.set({ 33 | browsers: ['visibleElectron'], 34 | client: { 35 | useIframe: false 36 | }, 37 | coverageReporter: { 38 | dir: './coverage', 39 | reporters: [ 40 | { type: 'lcov', subdir: '.' }, 41 | { type: 'text-summary' } 42 | ] 43 | }, 44 | customLaunchers: { 45 | visibleElectron: { 46 | base: 'Electron', 47 | browserWindowOptions: { 48 | show: true, 49 | webPreferences: { 50 | contextIsolation: false, 51 | nodeIntegration: true 52 | } 53 | } 54 | } 55 | }, 56 | frameworks: ['mocha', 'chai'], 57 | files: ['./about.js'], 58 | preprocessors: { 59 | './about.js': ['webpack', 'sourcemap'] 60 | }, 61 | reporters: ['spec', 'coverage'], 62 | singleRun: true, 63 | webpack: webpackConfig, 64 | webpackMiddleware: { 65 | noInfo: true 66 | } 67 | }) 68 | } 69 | -------------------------------------------------------------------------------- /test/unit/lib/fakeElectron.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-unused-vars */ 2 | 3 | const fakeElectron = { 4 | BrowserWindow: { 5 | getFocusedWindow() { 6 | return { 7 | id: 1, 8 | }; 9 | }, 10 | getActiveWindow() { 11 | return { 12 | id: 1, 13 | }; 14 | }, 15 | }, 16 | ipcMain: { 17 | on() { }, 18 | send() { }, 19 | }, 20 | ipcRenderer: { 21 | on() { }, 22 | send() { }, 23 | }, 24 | remote: { 25 | app: { 26 | on() { 27 | }, 28 | }, 29 | clipboard: { 30 | readText() { return ''; }, 31 | }, 32 | getCurrentWindow() { 33 | return { 34 | on: () => {}, 35 | isFocused: () => true, 36 | isFullScreen: () => false, 37 | isMaximized: () => false, 38 | webContents: {}, 39 | }; 40 | }, 41 | Menu: { 42 | buildFromTemplate: template => require('./fakeElectronMenu'), 43 | }, 44 | }, 45 | app: { 46 | on() { 47 | }, 48 | getPath: param => `${process.cwd()}/${param}`, 49 | getVersion: () => '0.14.0', 50 | setLocale: (locale) => {}, 51 | exit: () => {}, 52 | }, 53 | clipboard: { 54 | writeText() { 55 | }, 56 | }, 57 | dialog: { 58 | showOpenDialog() { }, 59 | }, 60 | shell: { 61 | openExternal() { 62 | }, 63 | showItemInFolder() { 64 | }, 65 | openPath() { 66 | }, 67 | beep() { 68 | }, 69 | moveItemToTrash() { 70 | }, 71 | }, 72 | session: { 73 | defaultSession: { 74 | partition: 'default', 75 | }, 76 | }, 77 | }; 78 | 79 | module.exports = fakeElectron; 80 | -------------------------------------------------------------------------------- /test/unit/renderer.js: -------------------------------------------------------------------------------- 1 | // require all test files (files that ends with .spec.js) 2 | const testsContext = require.context('./specs/renderer', true, /\.spec$/) 3 | testsContext.keys().forEach(testsContext) 4 | 5 | // require all src files except some files for coverage. 6 | // you can also change this to match only the subset of files that 7 | // you want coverage for. 8 | const srcContext = require.context('../../src/renderer/mainBrowserWindow', true, /^\.\/(?!main|i18n|index(\.ts|\.ejs)?$)/) 9 | srcContext.keys().forEach(srcContext) 10 | 11 | // disable security warnings 12 | process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true 13 | -------------------------------------------------------------------------------- /test/unit/renderer.karma.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const path = require('path') 4 | const merge = require('webpack-merge') 5 | const webpack = require('webpack') 6 | 7 | const baseConfigs = require('../../.electron-vue/webpack.renderer.config') 8 | 9 | // Set BABEL_ENV to use proper preset config 10 | process.env.BABEL_ENV = 'test' 11 | 12 | let webpackConfig = merge(baseConfigs[0], { 13 | devtool: '#inline-source-map', 14 | plugins: [ 15 | new webpack.DefinePlugin({ 16 | 'process.env.NODE_ENV': '"test"', 17 | 'process.env.TEST_ENV': '"unit"' 18 | }) 19 | ] 20 | }) 21 | 22 | // don't treat dependencies as externals 23 | delete webpackConfig.entry 24 | delete webpackConfig.externals 25 | delete webpackConfig.output.libraryTarget 26 | 27 | module.exports = (config) => { 28 | config.set({ 29 | browsers: ['visibleElectron'], 30 | client: { 31 | useIframe: false 32 | }, 33 | coverageReporter: { 34 | dir: './coverage', 35 | reporters: [ 36 | { type: 'lcov', subdir: '.' }, 37 | { type: 'text-summary' } 38 | ] 39 | }, 40 | customLaunchers: { 41 | visibleElectron: { 42 | base: 'Electron', 43 | browserWindowOptions: { 44 | show: true, 45 | webPreferences: { 46 | contextIsolation: false, 47 | nodeIntegration: true 48 | } 49 | } 50 | } 51 | }, 52 | frameworks: ['mocha', 'chai'], 53 | files: ['./renderer.js'], 54 | preprocessors: { 55 | './renderer.js': ['webpack', 'sourcemap'] 56 | }, 57 | reporters: ['spec', 'coverage'], 58 | singleRun: true, 59 | webpack: webpackConfig, 60 | webpackMiddleware: { 61 | noInfo: true 62 | } 63 | }) 64 | } 65 | -------------------------------------------------------------------------------- /test/unit/specs/about/AboutMainView.spec.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-unused-expressions */ 2 | 3 | import Vue from 'vue'; 4 | import ElementUI from 'element-ui'; 5 | 6 | import App from 'renderer/App'; 7 | 8 | import router from 'renderer/router'; 9 | import store from 'renderer/store'; 10 | 11 | Vue.prototype.$t = () => {}; 12 | Vue.use(ElementUI); 13 | 14 | Vue.config.productionTip = false; 15 | Vue.config.devtools = false; 16 | 17 | const config = { 18 | lulumiPagesCustomProtocol: 'lulumi', 19 | }; 20 | 21 | const about = { 22 | lulumi: [], 23 | about: [ 24 | [`${config.lulumiPagesCustomProtocol}://about/#/about`, 'about'], 25 | [`${config.lulumiPagesCustomProtocol}://about/#/lulumi`, 'lulumi'], 26 | [`${config.lulumiPagesCustomProtocol}://about/#/preferences`, 'preferences'], 27 | [`${config.lulumiPagesCustomProtocol}://about/#/downloads`, 'downloads'], 28 | [`${config.lulumiPagesCustomProtocol}://about/#/history`, 'history'], 29 | [`${config.lulumiPagesCustomProtocol}://about/#/extensions`, 'extensions'], 30 | ], 31 | }; 32 | 33 | let vm; 34 | describe('App.vue', () => { 35 | before(async () => { 36 | const Ctor = Vue.extend(App); 37 | vm = new Ctor({ 38 | el: document.createElement('div'), 39 | router, 40 | store, 41 | }).$mount(); 42 | vm.$store.dispatch('updateAbout', about); 43 | await vm.$nextTick(); 44 | }); 45 | 46 | describe('about/#/about', () => { 47 | it('has 6 lists', () => { 48 | expect(vm.$el.querySelectorAll('li').length).to.equal(6); 49 | }); 50 | }); 51 | 52 | describe('about/#/lulumi', () => { 53 | before(async () => { 54 | vm.$router.replace({ path: '/lulumi' }); 55 | await vm.$nextTick(); 56 | }); 57 | after(async () => { 58 | vm.$router.replace({ path: '/' }); 59 | await vm.$nextTick(); 60 | }); 61 | 62 | it('exists an element, and its id is \'lulumi-name\'', () => { 63 | expect(vm.$el.querySelector('#lulumi-name')).to.exist; 64 | }); 65 | }); 66 | 67 | describe('about/#/newtab', () => { 68 | before(async () => { 69 | vm.$router.replace({ path: '/newtab' }); 70 | await vm.$nextTick(); 71 | }); 72 | after(async () => { 73 | vm.$router.replace({ path: '/' }); 74 | await vm.$nextTick(); 75 | }); 76 | 77 | it('exists an element, and its id is \'newtab-name\'', () => { 78 | expect(vm.$el.querySelector('#newtab-name')).to.exist; 79 | }); 80 | }); 81 | }); 82 | -------------------------------------------------------------------------------- /test/userData/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/test/userData/.gitkeep -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /tsfmt.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabSize": 2, 3 | "indentSize": 2, 4 | "newLineCharacter": "\n", 5 | "convertTabsToSpaces": true, 6 | "insertSpaceAfterCommaDelimiter": true, 7 | "insertSpaceAfterSemicolonInForStatements": true, 8 | "insertSpaceBeforeAndAfterBinaryOperators": true, 9 | "insertSpaceAfterKeywordsInControlFlowStatements": true, 10 | "insertSpaceAfterFunctionKeywordForAnonymousFunctions": true, 11 | "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, 12 | "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, 13 | "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, 14 | "insertSpaceBeforeFunctionParenthesis": false, 15 | "placeOpenBraceOnNewLineForFunctions": false, 16 | "placeOpenBraceOnNewLineForControlBlocks": false 17 | } 18 | -------------------------------------------------------------------------------- /userData/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LulumiProject/lulumi-browser/24a46439c2c123aeda9710def0b67ec92b84e36c/userData/.gitkeep --------------------------------------------------------------------------------