├── .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 [](https://david-dm.org/LulumiProject/lulumi-browser) [](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 |
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 | Try Again
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 |
2 | #app
3 | router-view
4 |
5 |
6 |
11 |
12 |
27 |
--------------------------------------------------------------------------------
/src/renderer/commandPalette/components/CPMainView.vue:
--------------------------------------------------------------------------------
1 |
2 | spotlight
3 |
4 |
5 |
30 |
--------------------------------------------------------------------------------
/src/renderer/commandPalette/components/CPMainView/Spotlight.vue:
--------------------------------------------------------------------------------
1 |
2 | div(@keydown.tab="handleClear")
3 | .overlay
4 | SearchBar(ref="searchBar")
5 | hits(ref="hits")
6 |
7 |
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 |
2 | #app
3 | router-view
4 |
5 |
6 |
11 |
12 |
43 |
--------------------------------------------------------------------------------
/src/renderer/mainBrowserWindow/components/BrowserMainView/SwipeArrow.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | #left-swipe-arrow
4 | awesome-icon(name="arrow-left")
5 | #right-swipe-arrow
6 | awesome-icon(name="arrow-right")
7 |
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 |
2 | #app
3 | router-view
4 |
5 |
6 |
12 |
13 |
72 |
--------------------------------------------------------------------------------
/src/renderer/playbooksView/components/PlaybooksView.vue:
--------------------------------------------------------------------------------
1 |
2 | vue-logics(width="100vw", height="100vh")
3 |
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 |
2 | #app
3 | router-view
4 |
5 |
6 |
43 |
44 |
103 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView.vue:
--------------------------------------------------------------------------------
1 |
2 | #page-wrapper
3 | h1#about-name(ref="h1") {{ $t('about.aboutPage.title') }}
4 | h2#about-desc(ref="h2")
5 | li(v-for="data in datas.about")
6 | router-link(:to="`/${data[1]}`", :key="$route.path") {{ getURL(data[0]) }}
7 |
8 |
9 |
23 |
24 |
29 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Lulumi.vue:
--------------------------------------------------------------------------------
1 |
2 | #page-wrapper
3 | h1#lulumi-name(ref="h1", style="text-align: center;") {{ $t('about.lulumiPage.title') }}
4 | el-table(:data="Array.from(lulumi)", stripe)
5 | el-table-column(prop="key", :label="$t('about.lulumiPage.item')", width="200", align="center")
6 | el-table-column(:label="$t('about.lulumiPage.value')", width="180", align="center")
7 | template(slot-scope="scope", v-if="scope.row !== undefined")
8 | a.cell(v-if="scope.row.key === 'rev'",
9 | :href="`https://github.com/LulumiProject/lulumi-browser/commit/${scope.row.value}`")
10 | | {{ scope.row.value.substring(0, 7) }}
11 | .cell(v-else-if="scope.row.key === 'userData'",
12 | style="color: cornflowerblue; cursor: pointer;",
13 | @click="openPath(scope.row.value)") {{ scope.row.value }}
14 | .cell(v-else) {{ scope.row.value }}
15 |
16 |
17 |
47 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Newtab.vue:
--------------------------------------------------------------------------------
1 |
2 | #page-wrapper
3 | h1#newtab-name {{ $t('about.newtabPage.title') }}
4 |
5 |
6 |
31 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences.vue:
--------------------------------------------------------------------------------
1 |
2 | el-row#preferences-menu
3 | el-col(:span="4")
4 | el-menu#menu(background-color="#545c64",
5 | text-color="#fff",
6 | active-text-color="#ffd04b",
7 | :router="true")
8 | div(v-for="(data, index) in datas.preferences", :key="index")
9 | el-menu-item(:index="`${path}/${data[1]}`") {{ data[0] }}
10 | el-col(:span="18", :offset="1")
11 | router-view
12 |
13 |
14 |
35 |
36 |
47 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences/Auth.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | h1 {{ $t('about.preferencesPage.authPage.title') }}
4 | div
5 | el-input(
6 | placeholder="Username",
7 | @change="setAuth",
8 | v-model.trim="username",
9 | :autofocus="true",
10 | ref="input")
11 | template(slot="prepend") {{ $t('about.preferencesPage.authPage.username') }}
12 | div(style="margin-top: 15px;")
13 | el-input(
14 | placeholder="Password",
15 | @change="setAuth",
16 | v-model.trim="password",
17 | :autofocus="true",
18 | ref="input")
19 | template(slot="prepend") {{ $t('about.preferencesPage.authPage.password') }}
20 |
21 |
22 |
65 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences/Homepage.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | h1 {{ $t('about.preferencesPage.homePage.title') }}
4 | el-input(
5 | placeholder="Input homepage you want",
6 | @change="setHomepage",
7 | v-model.trim="homepage",
8 | :autofocus="true",
9 | ref="input")
10 | template(slot="prepend") {{ $t('about.preferencesPage.homePage.homepage') }}
11 |
12 |
13 |
51 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences/Language.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | h1 {{ $t('about.preferencesPage.languagePage.title') }}
4 | el-select(
5 | :placeholder="lang",
6 | v-model.trim="lang",
7 | @change="setLang",)
8 | el-option(v-for="item in options", :label="item.label", :value="item.value", :key="item.value")
9 |
10 |
11 |
69 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences/PDFViewer.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | h1 {{ $t('about.preferencesPage.pdfViewerPage.title') }}
4 | el-select(
5 | :placeholder="pdfViewer",
6 | v-model.trim="pdfViewer",
7 | @change="setPDFViewer",)
8 | el-option(v-for="item in options", :label="item.label", :value="item.value", :key="item.value")
9 |
10 |
11 |
60 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences/Proxy.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | h1 {{ $t('about.preferencesPage.proxyPage.title') }}
4 | div
5 | el-input(
6 | placeholder="The location of the PAC file",
7 | @change="setProxy",
8 | v-model.trim="pacScript",
9 | :autofocus="true",
10 | ref="input")
11 | template(slot="prepend") {{ $t('about.preferencesPage.proxyPage.pacScript') }}
12 | div(style="margin-top: 15px;")
13 | el-input(
14 | placeholder="The rules indicating which proxies to use",
15 | @change="setProxy",
16 | v-model.trim="proxyRules",
17 | :autofocus="true",
18 | ref="input")
19 | template(slot="prepend") {{ $t('about.preferencesPage.proxyPage.proxyRules') }}
20 | div(style="margin-top: 15px;")
21 | el-input(
22 | placeholder="The rules indicating which URLs should bypass the proxy settings",
23 | @change="setProxy",
24 | v-model.trim="proxyBypassRules",
25 | :autofocus="true",
26 | ref="input")
27 | template(slot="prepend") {{ $t('about.preferencesPage.proxyPage.proxyBypassRules') }}
28 |
29 |
30 |
76 |
--------------------------------------------------------------------------------
/src/renderer/preferenceView/components/AboutMainView/Preferences/TabConfig.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | h1 {{ $t('about.preferencesPage.tabConfigPage.title') }}
4 | div
5 | el-input(
6 | placeholder="Input default opening url you want",
7 | @change="setTabConfig",
8 | v-model.trim="defaultUrl",
9 | :autofocus="true",
10 | ref="input")
11 | template(slot="prepend") {{ $t('about.preferencesPage.tabConfigPage.url') }}
12 | div(style="margin-top: 15px;")
13 | el-input(
14 | placeholder="Input default favicon url you want",
15 | @change="setTabConfig",
16 | v-model.trim="tabFavicon",
17 | :autofocus="true",
18 | ref="input")
19 | template(slot="prepend") {{ $t('about.preferencesPage.tabConfigPage.favicon') }}
20 | template(slot="append")
21 | i.preview(:class="`el-icon-${tabFavicon}`")
22 | div {{ `<i class="el-icon-${tabFavicon}"></i>` }}
23 | hr
24 | | Ref:
25 | a(href="https://element.eleme.io/#/en-US/component/icon", target="_blank")
26 | | https://element.eleme.io/#/en-US/component/icon
27 |
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
--------------------------------------------------------------------------------