├── .editorconfig ├── .gitattributes ├── .gitignore ├── .prettierignore ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .yarnrc.yml ├── Cpp ├── CMakeLists.txt ├── darwin │ ├── patch-src-shared-CLucene-LuceneThreads.h.diff │ └── patch-src-shared-CLucene-config-repl_tchar.h.diff ├── phpsword │ ├── config.m4 │ ├── phpmethods.cpp │ ├── phpsword.cpp │ └── phpsword.h ├── src │ ├── gbfxhtml_xs.cpp │ ├── include │ │ ├── gbfxhtmlxs.h │ │ ├── libxulsword.h │ │ ├── osisxhtmlxs.h │ │ ├── teixhtmlxs.h │ │ ├── thmlxhtmlxs.h │ │ └── xulsword.h │ ├── libxulsword.cpp │ ├── osisxhtml_xs.cpp │ ├── teixhtml_xs.cpp │ ├── thmlxhtml_xs.cpp │ ├── windows │ │ ├── dirent.cpp │ │ ├── dirent.h │ │ ├── fileops.cpp │ │ ├── fileops.h │ │ ├── stdint.h │ │ ├── windefs_clucene.h │ │ └── windefs_sword.h │ └── xulsword.cpp └── windows │ ├── clucene-TryRunResult-posix.cmake │ ├── clucene-build.patch │ ├── clucene-src.patch │ ├── libsword-src.patch │ └── toolchain.cmake ├── ReadMe.md ├── Vagrantfile ├── afterPack.mjs ├── assets ├── 9.png ├── b2.png ├── defaults │ ├── locales.conf │ └── resources │ │ └── fonts │ │ └── SILEOT.ttf ├── icon.icns ├── icon.ico ├── icon.png ├── icons │ ├── 1024x1024.png │ ├── 128x128.png │ ├── 16x16.png │ ├── 16x16 │ │ ├── Comms.png │ │ ├── Comms_note.png │ │ ├── Dicts.png │ │ ├── Dicts_note.png │ │ ├── Genbks.png │ │ ├── Genbks_note.png │ │ ├── Texts.png │ │ ├── Texts_note.png │ │ ├── crossrefs.png │ │ ├── dictlinks.png │ │ ├── folder.png │ │ ├── footnotes.png │ │ ├── headings.png │ │ ├── redwords.png │ │ ├── strongs.png │ │ ├── usernotes.png │ │ └── versenums.png │ ├── 20x20 │ │ └── media.svg │ ├── 24x24.png │ ├── 256x256.png │ ├── 32x32.png │ ├── 48x48.png │ ├── 512x512.png │ ├── 64x64.png │ └── 96x96.png ├── locales │ ├── crh-Cyrl │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── en │ │ ├── bibleBrowser.json │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ ├── widgets.json │ │ └── xulsword.json │ ├── fa │ │ ├── NT.png │ │ ├── OT.png │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── kk │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── ko │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── kum │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── ky-Arab │ │ ├── NT.png │ │ ├── OT.png │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── ky-Cyrl │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── languageNames.json │ ├── ru-CA │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── ru │ │ ├── bibleBrowser.json │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ ├── widgets.json │ │ └── xulsword.json │ ├── sl │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ ├── translator.txt │ │ └── xulsword.json │ ├── tk-Latn │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── tt-Cyrl │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── ug │ │ ├── NT.png │ │ ├── OT.png │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ ├── uz-Cyrl │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json │ └── uz-Latn │ │ ├── books.json │ │ ├── config.json │ │ ├── numbers.json │ │ └── xulsword.json ├── plus.svg ├── splash-overlay-crh-Cyrl.png ├── splash-overlay-fa.png ├── splash-overlay-kk.png ├── splash-overlay-ko.png ├── splash-overlay-kum.png ├── splash-overlay-ky-Arab.png ├── splash-overlay-ky-Cyrl.png ├── splash-overlay-ru-CA.png ├── splash-overlay-ru.png ├── splash-overlay-tk-Latn.png ├── splash-overlay-tt-Cyrl.png ├── splash-overlay-ug.png ├── splash-overlay-uz-Cyrl.png ├── splash-overlay-uz-Latn.png ├── splash-overlay.png ├── splash.png ├── xsb.ico └── xsm.ico ├── babel.config.mjs ├── build ├── app │ ├── package.json │ └── yarn.lock └── webapp │ ├── package.json │ └── yarn.lock ├── eslint.config.mjs ├── init.sh ├── libxulsword ├── .gitignore ├── Readme.md ├── bin │ ├── linux-x64-89 │ │ └── libxulsword.node │ ├── win32-ia32-89 │ │ └── libxulsword.node │ └── win32-x64-89 │ │ └── libxulsword.node ├── binding.gyp.renamed-to-prevent-rebuild ├── install.mjs ├── lib │ ├── .gitignore │ └── libxulsword.def ├── libxulsword.d.ts ├── libxulsword.mjs ├── package.json ├── src │ └── libxulsword.cpp └── yarn.lock ├── package.json ├── scripts ├── clean.mjs ├── createVerseMaps.pl ├── notarize.mjs ├── projectPaths.mjs └── setenv ├── src ├── cache.ts ├── clients │ ├── G.ts │ ├── analytics.ts │ ├── app │ │ ├── about │ │ │ ├── about.css │ │ │ └── about.tsx │ │ ├── bmManager │ │ │ ├── bmManager.css │ │ │ ├── bmManager.tsx │ │ │ ├── bmManagerH.tsx │ │ │ └── bookmarkItemIcon.tsx │ │ ├── bmProperties │ │ │ ├── bmProperties.css │ │ │ └── bmProperties.tsx │ │ ├── chooseFont │ │ │ ├── chooseFont.css │ │ │ ├── chooseFont.tsx │ │ │ └── chooseFontH.ts │ │ ├── copyPassage │ │ │ ├── copyPassage.css │ │ │ └── copyPassage.tsx │ │ ├── moduleManager │ │ │ ├── manager.css │ │ │ ├── manager.tsx │ │ │ ├── managerH.ts │ │ │ └── moduleManager.tsx │ │ ├── popupWin │ │ │ └── popupWin.tsx │ │ ├── printPassageWin │ │ │ └── printPassageWin.tsx │ │ ├── removeModule │ │ │ └── removeModule.tsx │ │ ├── root.html │ │ ├── searchHelpWin │ │ │ ├── searchHelpWin.css │ │ │ └── searchHelpWin.tsx │ │ ├── searchWin │ │ │ ├── searchWin.css │ │ │ └── searchWin.tsx │ │ ├── splash │ │ │ ├── splash.css │ │ │ └── splash.tsx │ │ ├── viewportWin │ │ │ └── viewportWin.tsx │ │ └── xulswordWin │ │ │ ├── xulswordWin.css │ │ │ └── xulswordWin.tsx │ ├── bookmarks.ts │ ├── commands.ts │ ├── common.tsx │ ├── components │ │ ├── atext │ │ │ ├── atext.css │ │ │ ├── atext.tsx │ │ │ ├── atextH.ts │ │ │ ├── zdictionary.ts │ │ │ ├── ztext.ts │ │ │ └── zversekey.ts │ │ ├── audioIcon │ │ │ ├── audioIcon.css │ │ │ └── audioIcon.tsx │ │ ├── chooser │ │ │ ├── chooser.css │ │ │ ├── chooser.tsx │ │ │ └── chooserH.ts │ │ ├── genbookChooser │ │ │ ├── genbookChooser.css │ │ │ └── genbookChooser.tsx │ │ ├── images │ │ │ ├── Bookmarks-toolbar.png │ │ │ ├── CommsWithNote.png │ │ │ ├── DictsWithNote.png │ │ │ ├── GenbksWithNote.png │ │ │ ├── Question.png │ │ │ ├── TextsWithNote.png │ │ │ ├── Warning.png │ │ │ ├── arm-icons.png │ │ │ ├── arrow-rtl.png │ │ │ ├── arrow.png │ │ │ ├── arrow │ │ │ │ ├── arrow-dn-dis.gif │ │ │ │ ├── arrow-dn-hov.gif │ │ │ │ ├── arrow-dn.gif │ │ │ │ ├── arrow-lft-dis.gif │ │ │ │ ├── arrow-lft-hov.gif │ │ │ │ ├── arrow-lft.gif │ │ │ │ ├── arrow-rit-dis.gif │ │ │ │ ├── arrow-rit-hov.gif │ │ │ │ ├── arrow-rit.gif │ │ │ │ ├── arrow-up-dis.gif │ │ │ │ ├── arrow-up-hov.gif │ │ │ │ └── arrow-up.gif │ │ │ ├── arrow2-rtl.png │ │ │ ├── arrow2.png │ │ │ ├── back.png │ │ │ ├── bottomArrow.png │ │ │ ├── close0.png │ │ │ ├── close1.png │ │ │ ├── crossrefs.png │ │ │ ├── dict.png │ │ │ ├── downArrow.png │ │ │ ├── draghandle.png │ │ │ ├── dropdown-menu.png │ │ │ ├── folder-item.png │ │ │ ├── footnotes.png │ │ │ ├── forward.png │ │ │ ├── headings.png │ │ │ ├── help.png │ │ │ ├── historymenu.png │ │ │ ├── information-32.png │ │ │ ├── listen-small.png │ │ │ ├── listen0.png │ │ │ ├── listen1.png │ │ │ ├── max.png │ │ │ ├── norm.png │ │ │ ├── open0.png │ │ │ ├── open1.png │ │ │ ├── pushpin0.png │ │ │ ├── pushpin1.png │ │ │ ├── pushpin2.png │ │ │ ├── search.png │ │ │ ├── shared.png │ │ │ ├── smallButtonDecrement.png │ │ │ ├── smallButtonIncrement.png │ │ │ ├── splash.jpg │ │ │ ├── topArrow.png │ │ │ ├── towindow.png │ │ │ ├── twisty-close.png │ │ │ ├── twisty-open.png │ │ │ ├── upArrow.png │ │ │ ├── versePerLine.png │ │ │ └── videohelp.png │ │ ├── libxul │ │ │ ├── bookselect.css │ │ │ ├── bookselect.tsx │ │ │ ├── boxes.css │ │ │ ├── boxes.tsx │ │ │ ├── button.css │ │ │ ├── button.tsx │ │ │ ├── checkbox.css │ │ │ ├── checkbox.tsx │ │ │ ├── deck.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dragsizer.css │ │ │ ├── dragsizer.tsx │ │ │ ├── grid.css │ │ │ ├── grid.tsx │ │ │ ├── groupbox.css │ │ │ ├── groupbox.tsx │ │ │ ├── image.tsx │ │ │ ├── label.css │ │ │ ├── label.tsx │ │ │ ├── menulist.css │ │ │ ├── menulist.tsx │ │ │ ├── menupopup.css │ │ │ ├── menupopup.tsx │ │ │ ├── modinfo.css │ │ │ ├── modinfo.tsx │ │ │ ├── modulemenu.tsx │ │ │ ├── print.css │ │ │ ├── print.tsx │ │ │ ├── printSettings.css │ │ │ ├── printSettings.tsx │ │ │ ├── radio.css │ │ │ ├── radio.tsx │ │ │ ├── selectAny.css │ │ │ ├── selectAny.tsx │ │ │ ├── selectOR.css │ │ │ ├── selectOR.tsx │ │ │ ├── selectVK.css │ │ │ ├── selectVK.tsx │ │ │ ├── spacer.tsx │ │ │ ├── stack.css │ │ │ ├── stack.tsx │ │ │ ├── table.css │ │ │ ├── table.tsx │ │ │ ├── textbox.css │ │ │ ├── textbox.tsx │ │ │ ├── treeview.css │ │ │ ├── treeview.tsx │ │ │ └── xul.tsx │ │ ├── popup │ │ │ ├── popup.css │ │ │ ├── popup.tsx │ │ │ ├── popupH.ts │ │ │ └── popupParentH.ts │ │ ├── printPassage │ │ │ ├── printPassage.css │ │ │ ├── printPassage.tsx │ │ │ └── printPassageH.tsx │ │ ├── search │ │ │ ├── search.css │ │ │ ├── search.tsx │ │ │ └── searchH.tsx │ │ ├── searchHelp │ │ │ ├── searchHelp.css │ │ │ └── searchHelp.tsx │ │ ├── tabs │ │ │ ├── tabs.css │ │ │ └── tabs.tsx │ │ ├── viewport │ │ │ ├── viewport.css │ │ │ ├── viewport.tsx │ │ │ └── viewportParentH.ts │ │ └── xulsword │ │ │ ├── history.tsx │ │ │ ├── xulsword.css │ │ │ ├── xulsword.tsx │ │ │ └── xulswordH.ts │ ├── contextData.ts │ ├── controller.tsx │ ├── global-htm.css │ ├── htmlData.ts │ ├── libsword.css │ ├── log.ts │ ├── renderPromise.ts │ ├── style.ts │ ├── verseKey.ts │ └── webapp │ │ ├── bibleBrowser │ │ ├── bibleBrowser.css │ │ ├── bibleBrowser.html │ │ ├── bibleBrowser.tsx │ │ ├── bibleBrowserParent.html │ │ ├── bibleBrowserParent.js │ │ └── defaultSettings.ts │ │ ├── build.sh │ │ ├── builder.pl │ │ ├── common.ts │ │ ├── prefs.ts │ │ ├── preload.ts │ │ ├── viewport.ts │ │ └── widgets │ │ ├── defaultSettings.ts │ │ ├── widgetMenulist.tsx │ │ ├── widgetOR.tsx │ │ ├── widgetVK.tsx │ │ ├── widgets.html │ │ └── widgets.tsx ├── commands.ts ├── common.ts ├── constant.ts ├── defaultPrefs.ts ├── extrefParser.ts ├── prefs.ts ├── preload.ts ├── refParser.ts ├── servers │ ├── allBkChsInV11n.ts │ ├── app │ │ ├── G.ts │ │ ├── commands.ts │ │ ├── components │ │ │ ├── commands.ts │ │ │ ├── module.ts │ │ │ └── window.ts │ │ ├── contextMenu.ts │ │ ├── mainMenu.ts │ │ ├── prefs.ts │ │ ├── preload.ts │ │ ├── server.ts │ │ └── viewport.ts │ ├── common.ts │ ├── components │ │ ├── bookmarks.ts │ │ ├── data.ts │ │ ├── dirs.ts │ │ ├── diskcache.ts │ │ ├── libsword.ts │ │ └── localFile.ts │ ├── fontfamily.ts │ ├── ftphttp.ts │ ├── handleG.ts │ ├── indexWorker.ts │ ├── parseSwordConf.ts │ ├── verseKey.ts │ ├── versetext.ts │ └── webapp │ │ ├── G.ts │ │ ├── build-server.sh │ │ ├── server.ts │ │ └── start-server.sh ├── subscription.ts ├── type.ts ├── verseKey.ts └── viewport.ts ├── tsconfig.json ├── util ├── comparecanon.pl ├── out.txt └── readCanons.pl ├── webpack.config.mjs └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Line endings can be a real problem when committing to a git repo from 2 | # both Windows and Linux/MacOS operating systems, and there are two 3 | # separate issues to deal with: 4 | # 5 | # NORMALIZATION (having consistent LF line endings in the repository) 6 | # There are two ways to normalize text file line endings. The first 7 | # solution is core.autocrlf, but this requires that each contributer be 8 | # responsible for setting it properly and it overrides all eol settings 9 | # in this .gitattributes file. The more reliable option is to use a 10 | # .gitattributes file containing '* text=auto' so that text files that 11 | # any contributer introduces to the repository will have their line 12 | # endings normalized to LF. 13 | 14 | # All text files committed to the repository are normalized to LF. Git 15 | # recognizes files encoded as ASCII or UTF-8 as text files. 16 | * text eol=lf 17 | 18 | # CHECKED OUT FILES (line endings of checked-out files) 19 | # All text files in this repository have LF line endings, but Windows 20 | # users may prefer checked-out files to have CRLF endings. There are two 21 | # ways to affect checked-out line endings. First, core.autocrlf=true 22 | # causes all checked out text files to have CRLF line endings, but 23 | # core.autocrlf overrides this .gitattributes file, meaning .sh files 24 | # would also get CRLF line endings for instance. The other option is 25 | # .gitattributes with '*.vcproj text eol=crlf', but these effect all 26 | # operating systems the same, and thus are only meaningful for operating 27 | # system centric text files and are overridden by core.autocrlf anyways 28 | # (and are thus unreliable). 29 | # 30 | 31 | # Denote files that are binary and should never be modified. 32 | *.docx binary 33 | *.idx binary 34 | *.png binary 35 | *.exe binary 36 | *.jpg binary 37 | *.jpeg binary 38 | *.ico binary 39 | *.icns binary 40 | *.eot binary 41 | *.otf binary 42 | *.ttf binary 43 | *.woff binary 44 | *.woff2 binary 45 | *.node binary 46 | *.gz binary 47 | /.yarn/releases/** binary 48 | /.yarn/plugins/** binary 49 | 50 | # UPSHOT: 51 | # Linux hosts may or may not have (it's redundant due to * text=auto): 52 | # core.autocrlf=input 53 | # Windows hosts may have (if CRLF text files are desired in checkout): 54 | # core.autocrlf=true 55 | # Otherwise Windows users will have LF line endings in checkout. 56 | # Either way, check-ins will be normalized to LF because of * text=auto 57 | 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # xulsword 2 | .vagrant 3 | archive 4 | archive.tgz 5 | branding.json 6 | assets/defaults/preferences/ 7 | assets/**/*missing.json 8 | Cpp/lib* 9 | Cpp/install* 10 | Cpp/zlib* 11 | Cpp/boost* 12 | Cpp/clucene* 13 | Cpp/sword* 14 | Cpp/build* 15 | Cpp/phpsword 16 | setenv 17 | 18 | # webapp 19 | profile_webapp 20 | 21 | node_modules 22 | # Note: it's not possible to re-include a directory or any file whose parent directory is excluded! 23 | #won't work: !node_modules/libxulsword 24 | 25 | build/release 26 | .dll 27 | **/dist 28 | src/**/*.d.ts 29 | src/**/*.d.ts.map 30 | src/**/*.js 31 | src/**/*.js.map 32 | 33 | # yarn 34 | **/.pnp.* 35 | **/.yarn/* 36 | !**/.yarn/patches 37 | !**/.yarn/plugins 38 | !**/.yarn/releases 39 | !**/.yarn/sdks 40 | !**/.yarn/versions 41 | 42 | .eslintcache 43 | 44 | .vscode/perl-lang/ 45 | .vstags 46 | 47 | # For MAC 48 | .DS_Store 49 | test-driver 50 | XUL.framework 51 | 52 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | assets 2 | build/release 3 | Cpp 4 | node_modules 5 | util 6 | src/xulsword/src/refParser.ts 7 | src/xulsword/src/renderer/htmlData.ts 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/.prettierrc -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["dbaeumer.vscode-eslint", "EditorConfig.EditorConfig"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "App", 11 | "runtimeExecutable": "yarn", 12 | "runtimeArgs": ["start:app"], 13 | "skipFiles": ["/**"], 14 | "outFiles": [ 15 | "${workspaceFolder}/build/app/dist/**/*", 16 | "${workspaceFolder}/node_modules/electron-devtools-installer/dist/utils.js" 17 | ] 18 | }, 19 | { 20 | "type": "node", 21 | "request": "launch", 22 | "name": "Web App", 23 | "runtimeExecutable": "yarn", 24 | "runtimeArgs": ["start:webapp"], 25 | "skipFiles": ["/**"], 26 | "outFiles": ["${workspaceFolder}/build/webapp/dist/**/*"] 27 | }, 28 | { 29 | "type": "node", 30 | "request": "launch", 31 | "name": "Web App Server", 32 | "runtimeExecutable": "node", 33 | "runtimeArgs": ["./build/webapp"], 34 | "preLaunchTask": "Build webapp server", 35 | "env": { "LD_LIBRARY_PATH": "./Cpp/lib" }, 36 | "skipFiles": ["/**"], 37 | "outFiles": ["${workspaceFolder}/build/webapp/dist/**/*"] 38 | }, 39 | { 40 | "name": "Attach to Process", 41 | "type": "node", 42 | "request": "attach", 43 | "processId": "${command:PickProcess}" 44 | } 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | ".babelrc": "jsonc", 4 | ".eslintrc": "jsonc", 5 | ".prettierrc": "jsonc", 6 | ".eslintignore": "ignore", 7 | "*.tcc": "cpp", 8 | "string": "cpp", 9 | "mutex": "cpp", 10 | "array": "cpp", 11 | "bit": "cpp", 12 | "cctype": "cpp", 13 | "chrono": "cpp", 14 | "clocale": "cpp", 15 | "cmath": "cpp", 16 | "condition_variable": "cpp", 17 | "cstdint": "cpp", 18 | "cstdio": "cpp", 19 | "cstdlib": "cpp", 20 | "cstring": "cpp", 21 | "ctime": "cpp", 22 | "cwchar": "cpp", 23 | "cwctype": "cpp", 24 | "deque": "cpp", 25 | "list": "cpp", 26 | "map": "cpp", 27 | "unordered_map": "cpp", 28 | "vector": "cpp", 29 | "exception": "cpp", 30 | "fstream": "cpp", 31 | "functional": "cpp", 32 | "initializer_list": "cpp", 33 | "iosfwd": "cpp", 34 | "iostream": "cpp", 35 | "istream": "cpp", 36 | "limits": "cpp", 37 | "memory": "cpp", 38 | "new": "cpp", 39 | "optional": "cpp", 40 | "ostream": "cpp", 41 | "ratio": "cpp", 42 | "sstream": "cpp", 43 | "stdexcept": "cpp", 44 | "streambuf": "cpp", 45 | "string_view": "cpp", 46 | "system_error": "cpp", 47 | "thread": "cpp", 48 | "type_traits": "cpp", 49 | "tuple": "cpp", 50 | "typeinfo": "cpp", 51 | "utility": "cpp", 52 | "hash_map": "cpp", 53 | "hash_set": "cpp", 54 | "cstddef": "cpp", 55 | "set": "cpp", 56 | "regex": "cpp" 57 | }, 58 | 59 | "editor.defaultFormatter": "esbenp.prettier-vscode", 60 | "javascript.validate.enable": false, 61 | "javascript.format.enable": false, 62 | "typescript.format.enable": false, 63 | 64 | "files.exclude": { 65 | "./src/*.js": true, 66 | "./src/*.d.ts": true, 67 | "./src/*.d.ts.map": true, 68 | "./src/*.js.map": true 69 | }, 70 | 71 | "search.exclude": { 72 | ".git": true, 73 | ".eslintcache": true, 74 | ".dll": true, 75 | "build/{release,app/dist}": true, 76 | "node_modules": true, 77 | "yarn.lock": true, 78 | "*.{css,sass,scss}.d.ts": true 79 | }, 80 | "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", 81 | "cmake.sourceDirectory": "${workspaceFolder}/Cpp", 82 | "emmet.excludeLanguages": ["typescriptreact"], 83 | "typescript.tsdk": "node_modules/typescript/lib" 84 | } 85 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "shell", 6 | "label": "Build webapp server", 7 | "command": "${workspaceFolder}/src/servers/webapp/build-server.sh" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /Cpp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 2.8) 2 | project (xulswordProj) 3 | 4 | set(xulswordProj_VERSION_MAJOR "$ENV{LIBXULSWORD_MAJOR}") 5 | set(xulswordProj_VERSION_MINOR "$ENV{LIBXULSWORD_MINOR}") 6 | set(xulswordProj_VERSION_REVISION "$ENV{LIBXULSWORD_REVIS}") 7 | 8 | set(CMAKE_SKIP_BUILD_RPATH FALSE) 9 | set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 10 | set(CMAKE_INSTALL_RPATH "") 11 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) 12 | 13 | # -Wl,--no-undefined flags are required by GCC to make it check shared library dependencies 14 | set(CMAKE_LINKER_FLAGS "-Wl,-undefined,error -static-libgcc -static-libstdc++ ${CMAKE_SHARED_LINKER_FLAGS}") 15 | set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-undefined,error -static-libgcc -static-libstdc++ ${CMAKE_SHARED_LINKER_FLAGS}") 16 | 17 | # sword does not install all the sword headers, so use the local include dir 18 | include_directories(./src/include ./sword/include ${CMAKE_INCLUDE_PATH}) 19 | link_directories(${CMAKE_LIBRARY_PATH}) 20 | 21 | add_library(xulsword-static SHARED ./src/xulsword.cpp ./src/libxulsword.cpp) 22 | 23 | # set this so swmodule.cpp will allow CLucene searching 24 | add_definitions(-DUSELUCENE) 25 | 26 | # For Linux cross-compilation to Windows 27 | IF(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 28 | # Use same CLucene compilation flags and definitions: 29 | set(CMAKE_CXX_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -DNDEBUG -D_REENTRANT -D_UCS2 -D_UNICODE ${CMAKE_CXX_FLAGS}") 30 | add_definitions(-DWIN32 -D_WIN32 -DBUILDING_LIBRARY) 31 | # Windows requires that the type of import target library (dll or a) be 32 | # decided by headers. CLucene shared headers require the definition of 33 | # MAKE_CLUCENE_XX_LIB to allow import from an .a type library. 34 | target_compile_definitions(xulsword-static PUBLIC -DMAKE_CLUCENE_CORE_LIB -DMAKE_CLUCENE_SHARED_LIB) 35 | 36 | target_link_libraries (xulsword-static libsword.a libclucene-core-static.a libclucene-shared-static.a zlibstatic.a) 37 | ELSE(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 38 | target_link_libraries (xulsword-static libsword.a libclucene-core-static.a libclucene-shared-static.a libz.a) 39 | ENDIF(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 40 | 41 | install(TARGETS xulsword-static DESTINATION "${LIB_INSTALL_DIR}") 42 | -------------------------------------------------------------------------------- /Cpp/darwin/patch-src-shared-CLucene-LuceneThreads.h.diff: -------------------------------------------------------------------------------- 1 | https://sourceforge.net/p/clucene/bugs/219/ 2 | --- a/src/shared/CLucene/LuceneThreads.h 3 | +++ b/src/shared/CLucene/LuceneThreads.h 4 | @@ -7,6 +7,9 @@ 5 | #ifndef _LuceneThreads_h 6 | #define _LuceneThreads_h 7 | 8 | +#if defined(_CL_HAVE_PTHREAD) 9 | + #include 10 | +#endif 11 | 12 | CL_NS_DEF(util) 13 | class CLuceneThreadIdCompare; 14 | -------------------------------------------------------------------------------- /Cpp/phpsword/config.m4: -------------------------------------------------------------------------------- 1 | PHP_ARG_ENABLE(phpsword, 2 | [Whether to enable the "phpsword" extension], 3 | [ --enable-phpsword Enable "phpsword" extension support]) 4 | 5 | if test $PHP_PHPSWORD != "no"; then 6 | AC_DEFINE([PHPSWORD], [1], [Compiling phpsword]) 7 | AC_DEFINE([ZEND_EXTENSION_API_NO], [20220829], [Zend API version]) 8 | PHP_REQUIRE_CXX() 9 | PHP_SUBST(PHPSWORD_SHARED_LIBADD) 10 | 11 | PHP_ADD_INCLUDE(../src/include) 12 | PHP_ADD_INCLUDE(../install/usr/local/include) 13 | PHP_ADD_INCLUDE(../sword/include) 14 | PHP_ADD_INCLUDE(../sword/include/internal/regex) 15 | 16 | # /usr is before ../install in case sword and clucene are installed at /usr 17 | PHP_ADD_LIBPATH(/usr/local/lib) 18 | PHP_ADD_LIBPATH(../install/usr/local/lib) 19 | 20 | PHP_ADD_LIBRARY(stdc++, 1, PHPSWORD_SHARED_LIBADD) 21 | 22 | # Don't even try to get phpize to link these libraries statically. After Googling and trying 23 | # reasonable things, phpize and configure never produced the necessary linker flags. So the 24 | # script staticlib.sh can be used for static linking instead. 25 | PHP_ADD_LIBRARY(sword, 1, PHPSWORD_SHARED_LIBADD) 26 | PHP_ADD_LIBRARY(clucene-core, 1, PHPSWORD_SHARED_LIBADD) 27 | PHP_ADD_LIBRARY(clucene-shared, 1, PHPSWORD_SHARED_LIBADD) 28 | 29 | PHP_NEW_EXTENSION(phpsword, phpsword.cpp ../src/xulsword.cpp, $ext_shared) 30 | fi 31 | -------------------------------------------------------------------------------- /Cpp/phpsword/phpsword.h: -------------------------------------------------------------------------------- 1 | #ifndef PHP_PHPSWORD_H 2 | #define PHP_PHPSWORD_H 3 | 4 | #define PHP_PHPSWORD_EXTNAME "phpsword" 5 | #define PHP_PHPSWORD_EXTVER "7.3.0" 6 | 7 | #ifdef HAVE_CONFIG_H 8 | #include "config.h" 9 | #endif 10 | 11 | extern "C" { 12 | #include "php.h" 13 | } 14 | 15 | extern zend_module_entry phpsword_module_entry; 16 | #define phpext_phpsword_ptr &phpsword_module_entry; 17 | 18 | #endif /* PHP_PHPSWORD_H */ 19 | -------------------------------------------------------------------------------- /Cpp/src/include/gbfxhtmlxs.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * 3 | * gbfxhtml.h - Implementation of GBFXHTML 4 | * 5 | * $Id: gbfxhtml.h 2833 2013-06-29 06:40:28Z chrislit $ 6 | * 7 | * Copyright 2011-2013 CrossWire Bible Society (http://www.crosswire.org) 8 | * CrossWire Bible Society 9 | * P. O. Box 2528 10 | * Tempe, AZ 85280-2528 11 | * 12 | * This program is free software; you can redistribute it and/or modify it 13 | * under the terms of the GNU General Public License as published by the 14 | * Free Software Foundation version 2. 15 | * 16 | * This program is distributed in the hope that it will be useful, but 17 | * WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * General Public License for more details. 20 | * 21 | */ 22 | 23 | #ifndef GBFXHTMLXS_H 24 | #define GBFXHTMLXS_H 25 | 26 | #include 27 | 28 | SWORD_NAMESPACE_START 29 | 30 | /** this filter converts GBF text to classed XHTML text 31 | */ 32 | class GBFXHTMLXS : public SWBasicFilter { 33 | bool renderNoteNumbers; 34 | protected: 35 | class MyUserData : public BasicFilterUserData { 36 | public: 37 | MyUserData(const SWModule *module, const SWKey *key); 38 | bool hasFootnotePreTag; 39 | SWBuf version; 40 | }; 41 | virtual BasicFilterUserData *createUserData(const SWModule *module, const SWKey *key) { 42 | return new MyUserData(module, key); 43 | } 44 | virtual bool handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData); 45 | public: 46 | GBFXHTMLXS(); 47 | virtual const char *getHeader() const; 48 | void setRenderNoteNumbers(bool val = true) { renderNoteNumbers = val; } 49 | }; 50 | 51 | SWORD_NAMESPACE_END 52 | #endif 53 | -------------------------------------------------------------------------------- /Cpp/src/include/osisxhtmlxs.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * 3 | * osisxhtml.h - Render filter for classed XHTML of an OSIS module 4 | * 5 | * $Id: osisxhtml.h 2833 2013-06-29 06:40:28Z chrislit $ 6 | * 7 | * Copyright 2011-2013 CrossWire Bible Society (http://www.crosswire.org) 8 | * CrossWire Bible Society 9 | * P. O. Box 2528 10 | * Tempe, AZ 85280-2528 11 | * 12 | * This program is free software; you can redistribute it and/or modify it 13 | * under the terms of the GNU General Public License as published by the 14 | * Free Software Foundation version 2. 15 | * 16 | * This program is distributed in the hope that it will be useful, but 17 | * WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * General Public License for more details. 20 | * 21 | */ 22 | 23 | #ifndef OSISXHTMLXS_H 24 | #define OSISXHTMLXS_H 25 | 26 | #include 27 | 28 | SWORD_NAMESPACE_START 29 | 30 | /** this filter converts OSIS text to classed XHTML 31 | */ 32 | class OSISXHTMLXS : public SWBasicFilter { 33 | protected: 34 | 35 | class TagStack; 36 | // used by derived classes so we have it in the header 37 | virtual BasicFilterUserData *createUserData(const SWModule *module, const SWKey *key); 38 | virtual bool handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData); 39 | 40 | 41 | class MyUserDataXS : public BasicFilterUserData { 42 | public: 43 | bool osisQToTick; 44 | bool inXRefNote; 45 | bool isBiblicalText; 46 | int suspendLevel; 47 | SWBuf wordsOfChristStart; 48 | SWBuf wordsOfChristEnd; 49 | bool wordsOfChrist; 50 | TagStack *quoteStack; 51 | TagStack *hiStack; 52 | TagStack *titleStack; 53 | TagStack *lineStack; 54 | int consecutiveNewlines; 55 | SWBuf lastTransChange; 56 | SWBuf w; 57 | SWBuf fn; 58 | SWBuf version; 59 | 60 | // variables unique to OSISXHTMLXS 61 | SWBuf referenceTag; 62 | TagStack *htmlTagStack; // used to insure rendered HTML tags are all closed 63 | TagStack *pStack; // used for OSIS

to render them as HTML

64 | 65 | MyUserDataXS(const SWModule *module, const SWKey *key); 66 | ~MyUserDataXS(); 67 | }; 68 | 69 | public: 70 | OSISXHTMLXS(); 71 | void outHtmlTag(const char * t, SWBuf &o, MyUserDataXS *u); 72 | 73 | // redefinition of virtual function defined in SWBasicFilter 74 | char processText(SWBuf &text, const SWKey *key = 0, const SWModule *module = 0); 75 | }; 76 | 77 | SWORD_NAMESPACE_END 78 | #endif 79 | -------------------------------------------------------------------------------- /Cpp/src/include/teixhtmlxs.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * 3 | * osisxhtml.h - Render filter for classed XHTML of an OSIS module 4 | * 5 | * $Id: osisxhtml.h 2833 2013-06-29 06:40:28Z chrislit $ 6 | * 7 | * Copyright 2011-2013 CrossWire Bible Society (http://www.crosswire.org) 8 | * CrossWire Bible Society 9 | * P. O. Box 2528 10 | * Tempe, AZ 85280-2528 11 | * 12 | * This program is free software; you can redistribute it and/or modify it 13 | * under the terms of the GNU General Public License as published by the 14 | * Free Software Foundation version 2. 15 | * 16 | * This program is distributed in the hope that it will be useful, but 17 | * WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * General Public License for more details. 20 | * 21 | */ 22 | 23 | #ifndef TEIXHTMLXS_H 24 | #define TEIXHTMLXS_H 25 | 26 | #include 27 | 28 | SWORD_NAMESPACE_START 29 | 30 | /** this filter converts OSIS text to classed XHTML 31 | */ 32 | class TEIXHTMLXS : public SWBasicFilter { 33 | protected: 34 | 35 | class TagStack; 36 | // used by derived classes so we have it in the header 37 | virtual BasicFilterUserData *createUserData(const SWModule *module, const SWKey *key); 38 | virtual bool handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData); 39 | 40 | 41 | class MyUserDataXS : public BasicFilterUserData { 42 | public: 43 | bool osisQToTick; 44 | bool inXRefNote; 45 | bool isBiblicalText; 46 | int suspendLevel; 47 | SWBuf wordsOfChristStart; 48 | SWBuf wordsOfChristEnd; 49 | bool wordsOfChrist; 50 | TagStack *quoteStack; 51 | TagStack *hiStack; 52 | TagStack *titleStack; 53 | TagStack *lineStack; 54 | int consecutiveNewlines; 55 | SWBuf lastTransChange; 56 | SWBuf w; 57 | SWBuf fn; 58 | SWBuf version; 59 | 60 | // variables unique to TEIXHTMLXS 61 | SWBuf referenceTag; 62 | TagStack *htmlTagStack; // used to insure rendered HTML tags are all closed 63 | TagStack *pStack; // used for OSIS

to render them as HTML

64 | 65 | MyUserDataXS(const SWModule *module, const SWKey *key); 66 | ~MyUserDataXS(); 67 | }; 68 | 69 | public: 70 | TEIXHTMLXS(); 71 | void outHtmlTag(const char * t, SWBuf &o, MyUserDataXS *u); 72 | 73 | // redefinition of virtual function defined in SWBasicFilter 74 | char processText(SWBuf &text, const SWKey *key = 0, const SWModule *module = 0); 75 | }; 76 | 77 | SWORD_NAMESPACE_END 78 | #endif 79 | -------------------------------------------------------------------------------- /Cpp/src/include/thmlxhtmlxs.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * 3 | * thmlxhtml.h - Implementation of ThMLXHTML 4 | * 5 | * $Id: thmlxhtml.h 3192 2014-04-19 17:26:34Z scribe $ 6 | * 7 | * Copyright 2011-2013 CrossWire Bible Society (http://www.crosswire.org) 8 | * CrossWire Bible Society 9 | * P. O. Box 2528 10 | * Tempe, AZ 85280-2528 11 | * 12 | * This program is free software; you can redistribute it and/or modify it 13 | * under the terms of the GNU General Public License as published by the 14 | * Free Software Foundation version 2. 15 | * 16 | * This program is distributed in the hope that it will be useful, but 17 | * WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * General Public License for more details. 20 | * 21 | */ 22 | 23 | #ifndef _THMLXHTMLXS_H 24 | #define _THMLXHTMLXS_H 25 | 26 | #include 27 | #include 28 | 29 | SWORD_NAMESPACE_START 30 | 31 | /** this filter converts ThML text to classed XHTML 32 | */ 33 | class ThMLXHTMLXS : public SWBasicFilter { 34 | SWBuf imgPrefix; 35 | bool renderNoteNumbers; 36 | protected: 37 | class MyUserData : public BasicFilterUserData { 38 | public: 39 | MyUserData(const SWModule *module, const SWKey *key);//: BasicFilterUserData(module, key) {} 40 | bool inscriptRef; 41 | char secHeadLevel; 42 | bool isBiblicalText; 43 | SWBuf version; 44 | XMLTag startTag; 45 | }; 46 | virtual BasicFilterUserData *createUserData(const SWModule *module, const SWKey *key) { 47 | return new MyUserData(module, key); 48 | } 49 | virtual bool handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData); 50 | public: 51 | ThMLXHTMLXS(); 52 | virtual const char *getImagePrefix() { return imgPrefix.c_str(); } 53 | virtual void setImagePrefix(const char *newImgPrefix) { imgPrefix = newImgPrefix; } 54 | virtual const char *getHeader() const; 55 | void setRenderNoteNumbers(bool val = true) { renderNoteNumbers = val; } 56 | }; 57 | 58 | SWORD_NAMESPACE_END 59 | 60 | #endif 61 | -------------------------------------------------------------------------------- /Cpp/src/windows/dirent.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Declaration of POSIX directory browsing functions and types for Win32. 4 | 5 | Kevlin Henney (mailto:kevlin@acm.org), March 1997. 6 | 7 | Copyright Kevlin Henney, 1997. All rights reserved. 8 | 9 | Permission to use, copy, modify, and distribute this software and its 10 | documentation for any purpose is hereby granted without fee, provided 11 | that this copyright and permissions notice appear in all copies and 12 | derivatives, and that no charge may be made for the software and its 13 | documentation except to cover cost of distribution. 14 | 15 | */ 16 | #ifndef DIRENT_INCLUDED 17 | #define DIRENT_INCLUDED 18 | 19 | #define MAX_DIR_NAME 10000 20 | 21 | typedef struct DIR DIR; 22 | 23 | struct dirent 24 | { 25 | char *d_name; 26 | }; 27 | 28 | /* 29 | WINDOWS: normal utf8 dirent functions must be replaced by these functions 30 | which take UTF-8 file name inputs, convert them to wide-char UTF16 strings, 31 | and then call the native wide-char file functions. Windows API does NOT 32 | understand UTF-8! 33 | */ 34 | 35 | DIR *opendir(const char *); 36 | int closedir(DIR *); 37 | struct dirent *readdir(DIR *); 38 | void rewinddir(DIR *); 39 | 40 | #endif 41 | 42 | -------------------------------------------------------------------------------- /Cpp/src/windows/fileops.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Declaration of POSIX directory browsing functions and types for Win32. 4 | 5 | Kevlin Henney (mailto:kevlin@acm.org), March 1997. 6 | 7 | Copyright Kevlin Henney, 1997. All rights reserved. 8 | 9 | Permission to use, copy, modify, and distribute this software and its 10 | documentation for any purpose is hereby granted without fee, provided 11 | that this copyright and permissions notice appear in all copies and 12 | derivatives, and that no charge may be made for the software and its 13 | documentation except to cover cost of distribution. 14 | 15 | */ 16 | #ifndef FILEOPS_INCLUDED 17 | #define FILEOPS_INCLUDED 18 | 19 | #include 20 | #include 21 | #include "dirent.h" 22 | 23 | /* 24 | WINDOWS: these other low level functions must be replaced by functions 25 | which take UTF-8 file name inputs, convert them to wide-char UTF16 strings, 26 | and then call the native wide-char functions. Windows API does NOT 27 | understand UTF-8! 28 | */ 29 | 30 | int wn_open(const char *path, int mode, int perms); 31 | int wn_access(const char *path, int mode); 32 | long wn_findfirst(const char *name, struct _wfinddata_t *fileinfo); 33 | int wn_mkdir(char *dirname ); 34 | FILE *wn_fdopen(int fd, const char *mode); 35 | FILE *wn_fopen(const char *file, const char *mode); 36 | int wn_rename(const char *from, const char *to); 37 | char *wn_fullpath(char *absPath, const char *relPath, size_t maxlen); 38 | int wn_stat64(const char *file, struct _stat64 * fileinfo); 39 | int wn_stati64(const char *path, struct _stati64 *buffer); 40 | int wn_unlink(const char * file); 41 | HANDLE wn_CreateFile(const char *file, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); 42 | const char *wn_getenv(const char *varname); 43 | 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /Cpp/src/windows/windefs_clucene.h: -------------------------------------------------------------------------------- 1 | /* Window's file operation routines do not understand utf8, so any non-ascii 2 | * chars in path names will not resolve correctly. The fileops.h routines 3 | * replace the native windows versions. They convert utf8 to utf16 so that 4 | * non-ascii path names resolve. All native file operations must be defined (or 5 | * re-defined as the case may be) as their fileops.h counterpart (see below). 6 | */ 7 | 8 | // Following are all the Microsoft library headers effected by re-defines. 9 | // Including them all before the #defines below insures proper redefinition 10 | // of file functions. 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | // FILE *wn_fopen(const char *file, const char *mode); 22 | #define fopen(name, mode) wn_fopen(name, mode) 23 | 24 | // int wn_mkdir(char *dirname ); 25 | #define _mkdir(dirname) wn_mkdir(dirname) 26 | 27 | // int wn_unlink(const char * file); 28 | #define _unlink(name) wn_unlink(name) 29 | 30 | // const char *wn_getenv(const char *varname); 31 | #define getenv(par) wn_getenv(par) 32 | 33 | // int wn_stat(const char *file, struct __stat * fileinfo); 34 | //#define fileStat _stati64 35 | //#define _stati64(file,info) wn_stati64(file,info) 36 | #define _stat64(file,info) wn_stat64(file,info) 37 | 38 | // int wn_open(const char *path, int mode, int perms); 39 | #define _open wn_open 40 | 41 | // int wn_rename(const char *from, const char *to); 42 | #undef _rename 43 | #define _rename wn_rename 44 | 45 | // char *wn_fullpath(char *absPath, const char *relPath, size_t maxlen); 46 | #undef _realpath 47 | #define _realpath(rel,abs) wn_fullpath(abs,rel,CL_MAX_PATH) 48 | 49 | // the following were not used in CLucene 0.9.21b 50 | // FILE *wn_fdopen(int fd, const char *mode); 51 | #define _fdopen wn_fdopen 52 | 53 | // int wn_access(const char *path, int mode); 54 | #define _access wn_access 55 | 56 | // long wn_findfirst(const char *name, struct _wfinddata_t *fileinfo); 57 | #undef _findfirst 58 | #define _findfirst wn_findfirst 59 | -------------------------------------------------------------------------------- /Cpp/src/windows/windefs_sword.h: -------------------------------------------------------------------------------- 1 | /* Window's file operation routines do not understand utf8, so any non-ascii 2 | * chars in path names will not resolve correctly. The fileops.h routines 3 | * replace the native windows versions. They convert utf8 to utf16 so that 4 | * non-ascii path names resolve. All native file operations must be defined (or 5 | * re-defined as the case may be) as their fileops.h counterpart (see below). 6 | */ 7 | 8 | // Following are all the Microsoft library headers effected by re-defines. 9 | // Including them all before the #defines below insures proper redefinition 10 | // of file functions. 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | // FILE *wn_fopen(const char *file, const char *mode); 23 | #define F_OPEN(name, mode) wn_fopen(name, mode) 24 | #define fopen(name, mode) wn_fopen(name, mode) 25 | 26 | // FILE *wn_fdopen(int fd, const char *mode); 27 | #define fdopen(fd,mode) wn_fdopen(fd,mode) 28 | 29 | // int wn_access(const char *path, int mode); 30 | #define access(path,mode) wn_access(path,mode) 31 | #define _access(path,mode) wn_access(path,mode) // for untgz.c 32 | 33 | // int wn_mkdir(char *dirname ); 34 | #define mkdir(dirname) wn_mkdir(dirname) 35 | #define _mkdir(dirname) wn_mkdir(dirname) // for untgz.c 36 | 37 | // int wn_unlink(const char * file); 38 | #define unlink(name) wn_unlink(name) 39 | #define _unlink(name) wn_unlink(name) // for untgz.c 40 | 41 | // const char *wn_getenv(const char *varname); 42 | #define getenv(par) wn_getenv(par) 43 | 44 | // int wn_stat(const char *file, struct __stat * fileinfo); 45 | #define stat(path,stats) wn_stat64(path,stats) 46 | 47 | // HANDLE CreateFile(...) 48 | #define CreateFile(fileName,acess,smode,secAttribs,crdisp,flags,tfile) wn_CreateFile(fileName,acess,smode,secAttribs,crdisp,flags,tfile) // for untgz.c 49 | 50 | // int wn_open(const char *path, int mode, int perms); 51 | /* the identifier "open" is used for other functions and so cannot be 52 | re-defined. See filemgr.cpp for manual redefinitions. 53 | #define open wn_open 54 | */ 55 | 56 | // these are not utilized in SWORD 1.6.2, but are used in CLucene. 57 | // long wn_findfirst(const char *name, struct _wfinddata_t *fileinfo); 58 | // int wn_rename(const char *from, const char *to); 59 | // char *wn_fullpath(char *absPath, const char *relPath, size_t maxlen); 60 | // int wn_stat64(const char *file, struct __stat64 * fileinfo); 61 | -------------------------------------------------------------------------------- /Cpp/windows/clucene-build.patch: -------------------------------------------------------------------------------- 1 | diff -ru build/src/shared/CLucene/_clucene-config.h build-new/src/shared/CLucene/_clucene-config.h 2 | --- build/src/shared/CLucene/_clucene-config.h 2022-11-30 10:54:14.307777593 -0800 3 | +++ build-new/src/shared/CLucene/_clucene-config.h 2022-11-30 10:55:45.051773703 -0800 4 | @@ -68,7 +68,7 @@ 5 | /* undef _read _read */ 6 | #define _cl_open _open 7 | /* undef _write _write */ 8 | -#define _snprintf snprintf 9 | +/* #define _snprintf snprintf */ 10 | /* undef _mkdir _mkdir */ 11 | /* undef _unlink _unlink */ 12 | /* undef _ftime _ftime */ 13 | diff -ru build/src/shared/CLucene/clucene-config.h build-new/src/shared/CLucene/clucene-config.h 14 | --- build/src/shared/CLucene/clucene-config.h 2022-11-30 10:54:14.307777593 -0800 15 | +++ build-new/src/shared/CLucene/clucene-config.h 2022-11-30 10:55:45.051773703 -0800 16 | @@ -61,7 +61,7 @@ 17 | /* #undef LUCENE_DISABLE_HASHING */ 18 | 19 | /* Define if you have POSIX threads libraries and header files. */ 20 | -#define _CL_HAVE_PTHREAD 1 21 | +/*#define _CL_HAVE_PTHREAD 1*/ 22 | 23 | /* Define if you have Win32 threads libraries and header files. */ 24 | #define _CL_HAVE_WIN32_THREADS 1 25 | -------------------------------------------------------------------------------- /Cpp/windows/clucene-src.patch: -------------------------------------------------------------------------------- 1 | diff -ru ./src/core/CLucene/store/MMapInput.cpp ../clucene-new/src/core/CLucene/store/MMapInput.cpp 2 | --- ./src/core/CLucene/store/MMapInput.cpp 2022-11-30 09:59:14.427919076 -0800 3 | +++ ../clucene-new/src/core/CLucene/store/MMapInput.cpp 2022-11-30 10:01:18.543913755 -0800 4 | @@ -31,6 +31,9 @@ 5 | #endif 6 | #include 7 | 8 | +CL_NS_DEF(store) 9 | +CL_NS_USE(util) 10 | + 11 | #if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) 12 | typedef int HANDLE; 13 | 14 | @@ -80,10 +83,6 @@ 15 | extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetLastError(); 16 | #endif 17 | 18 | - 19 | -CL_NS_DEF(store) 20 | -CL_NS_USE(util) 21 | - 22 | class MMapIndexInput::Internal: LUCENE_BASE{ 23 | public: 24 | uint8_t* data; 25 | diff -ru ./src/core/CMakeLists.txt ../clucene-new/src/core/CMakeLists.txt 26 | --- ./src/core/CMakeLists.txt 2011-03-16 17:21:07.000000000 -0700 27 | +++ ../clucene-new/src/core/CMakeLists.txt 2022-12-02 09:50:47.719818951 -0800 28 | @@ -207,6 +207,13 @@ 29 | add_library(clucene-core-static STATIC 30 | ${clucene_core_Files} ${clucene_shared_Files} ${HEADERS} 31 | ) 32 | + 33 | + # Windows requires that the type of import target library (dll or a) be 34 | + # decided by headers. CLucene shared headers require the definition of 35 | + # MAKE_CLUCENE_SHARED_LIB to allow import from an .a type library. 36 | + IF(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 37 | + target_compile_definitions(clucene-core-static PUBLIC -DMAKE_CLUCENE_SHARED_LIB) 38 | + ENDIF(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 39 | 40 | SET_TARGET_PROPERTIES(clucene-core-static PROPERTIES 41 | VERSION ${CLUCENE_VERSION} 42 | diff -ru ./src/shared/CLucene/LuceneThreads.h ../clucene-new/src/shared/CLucene/LuceneThreads.h 43 | --- ./src/shared/CLucene/LuceneThreads.h 2022-11-30 09:59:14.431919076 -0800 44 | +++ ../clucene-new/src/shared/CLucene/LuceneThreads.h 2022-11-30 10:01:18.547913755 -0800 45 | @@ -7,6 +7,8 @@ 46 | #ifndef _LuceneThreads_h 47 | #define _LuceneThreads_h 48 | 49 | +#include 50 | +#include 51 | 52 | CL_NS_DEF(util) 53 | class CLuceneThreadIdCompare; 54 | diff -ru ./src/shared/cmake/MacroCheckGccVisibility.cmake ../clucene-new/src/shared/cmake/MacroCheckGccVisibility.cmake 55 | --- ./src/shared/cmake/MacroCheckGccVisibility.cmake 2022-11-30 09:59:14.435919076 -0800 56 | +++ ../clucene-new/src/shared/cmake/MacroCheckGccVisibility.cmake 2022-11-30 10:07:49.967896972 -0800 57 | @@ -26,7 +26,7 @@ 58 | 59 | # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the patch level, handle this here: 60 | if (NOT _gcc_version) 61 | - string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}") 62 | + string (REGEX REPLACE ".*\\(GCC\\).* ([3-9]\\.[0-9]).*" "\\1.0" _gcc_version "${_gcc_version_info}") 63 | endif (NOT _gcc_version) 64 | endif (NOT _gcc_version) 65 | 66 | -------------------------------------------------------------------------------- /Cpp/windows/libsword-src.patch: -------------------------------------------------------------------------------- 1 | diff -ru CMakeLists.txt CMakeLists.txt 2 | --- CMakeLists.txt 2022-11-30 17:40:44.698731851 -0800 3 | +++ CMakeLists.txt 2022-11-30 17:53:44.546698415 -0800 4 | @@ -271,13 +271,14 @@ 5 | ############################################################################################## 6 | # Our build test 7 | # 8 | - 9 | -ADD_EXECUTABLE(buildtest buildtest.cpp) 10 | -IF(BUILDING_STATIC) 11 | - TARGET_LINK_LIBRARIES(buildtest sword_static) 12 | -ELSE(BUILDING_STATIC) 13 | - TARGET_LINK_LIBRARIES(buildtest sword) 14 | -ENDIF(BUILDING_STATIC) 15 | +IF(SWORD_BUILD_TESTS) 16 | + ADD_EXECUTABLE(buildtest buildtest.cpp) 17 | + IF(BUILDING_STATIC) 18 | + TARGET_LINK_LIBRARIES(buildtest sword_static) 19 | + ELSE(BUILDING_STATIC) 20 | + TARGET_LINK_LIBRARIES(buildtest sword) 21 | + ENDIF(BUILDING_STATIC) 22 | +ENDIF(SWORD_BUILD_TESTS) 23 | 24 | ############################################################################################## 25 | # Installing the library, headers, utilies, etc 26 | @@ -316,3 +317,25 @@ 27 | IF(SWORD_BUILD_TESTS STREQUAL "Yes") 28 | ADD_SUBDIRECTORY("${CMAKE_CURRENT_SOURCE_DIR}/tests") 29 | ENDIF(SWORD_BUILD_TESTS STREQUAL "Yes") 30 | + 31 | +# For Linux cross-compilation to Windows 32 | +IF(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 33 | + # Use same CLucene compilation flags: 34 | + set(CMAKE_CXX_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -DNDEBUG -D_REENTRANT -D_UCS2 -D_UNICODE ${CMAKE_CXX_FLAGS}") 35 | + add_definitions(-DWIN32 -D_WIN32 -DBUILDING_LIBRARY) 36 | + 37 | + # Windows requires that the type of import target library (dll or a) be 38 | + # decided by headers. CLucene shared headers require the definition of 39 | + # MAKE_CLUCENE_XX_LIB to allow import from an .a type library. 40 | + target_compile_definitions(sword_static PUBLIC -DMAKE_CLUCENE_CORE_LIB -DMAKE_CLUCENE_SHARED_LIB) 41 | + 42 | + add_library(libwsock32 SHARED IMPORTED) 43 | + find_library(SOCKLIB libwsock32 NAMES libwsock32.a PATHS "/usr/x86_64-w64-mingw32/lib") 44 | + message(STATUS "${SOCKLIB}") 45 | + IF(TARGET sword_static) 46 | + target_link_libraries(sword_static ${SOCKLIB}) 47 | + ENDIF(TARGET sword_static) 48 | + IF(TARGET sword) 49 | + target_link_libraries(sword ${SOCKLIB}) 50 | + ENDIF(TARGET sword) 51 | +ENDIF(CMAKE_TOOLCHAIN_FILE MATCHES "windows") 52 | 53 | diff -ru include/ftplib.h include/ftplib.h 54 | --- include/ftplib.h 2022-11-30 17:40:49.410731649 -0800 55 | +++ include/ftplib.h 2022-11-30 17:52:19.574702058 -0800 56 | @@ -94,7 +94,6 @@ 57 | #endif /* (_FTPLIB_NO_COMPAT) */ 58 | /* end v1 compatibility stuff */ 59 | 60 | -GLOBALREF int ftplib_debug; 61 | GLOBALREF void FtpInit(void); 62 | GLOBALREF char *FtpLastResponse(netbuf *nControl); 63 | GLOBALREF int FtpConnect(const char *host, netbuf **nControl); 64 | -------------------------------------------------------------------------------- /Cpp/windows/toolchain.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_SYSTEM_NAME Windows) 2 | 3 | IF($ENV{TOOLCHAIN_PREFIX} STREQUAL "x86_64-w64-mingw32") 4 | 5 | set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) 6 | 7 | ENDIF($ENV{TOOLCHAIN_PREFIX} STREQUAL "x86_64-w64-mingw32") 8 | 9 | IF($ENV{TOOLCHAIN_PREFIX} STREQUAL "i686-w64-mingw32") 10 | 11 | set(TOOLCHAIN_PREFIX i686-w64-mingw32) 12 | 13 | ENDIF($ENV{TOOLCHAIN_PREFIX} STREQUAL "i686-w64-mingw32") 14 | 15 | # cross compilers to use for C and C++ 16 | IF($ENV{GCCSTD} STREQUAL "win32") 17 | 18 | set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) 19 | set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) 20 | set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX} /usr/lib/gcc/${TOOLCHAIN_PREFIX}/9.3-win32) 21 | 22 | ENDIF($ENV{GCCSTD} STREQUAL "win32") 23 | 24 | IF($ENV{GCCSTD} STREQUAL "posix") 25 | 26 | set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc-posix) 27 | set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++-posix) 28 | set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX} /usr/lib/gcc/${TOOLCHAIN_PREFIX}/9.3-posix) 29 | 30 | ENDIF($ENV{GCCSTD} STREQUAL "posix") 31 | 32 | set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) 33 | 34 | # modify default behavior of FIND_XXX() commands to 35 | # search for headers/libs in the target environment and 36 | # search for programs in the build host environment 37 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 38 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 39 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 40 | 41 | # Needed by Clucene 42 | set(CMAKE_CXX_FLAGS "-Wno-narrowing -fpermissive") 43 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 5 | VAGRANTFILE_API_VERSION = "2" 6 | 7 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 8 | 9 | config.vm.box = "ubuntu/jammy64" 10 | 11 | config.vm.provision :shell, :path => "init.sh", privileged: false 12 | 13 | # Set forward_x11 to true for the VM to display GUIs through host 14 | config.ssh.forward_x11 = true 15 | 16 | config.vm.provider "virtualbox" do |vb| 17 | # Set the RAM for your Vagrant VM 18 | vb.memory = 4000 19 | end 20 | 21 | end 22 | 23 | 24 | -------------------------------------------------------------------------------- /afterPack.mjs: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | const keepLocales = ['en', 'ru', 'fa', 'ko']; 5 | const localeDirName = 'locales'; 6 | 7 | export default async function (context) { 8 | console.log(`Running ./afterPack.mjs ... `); 9 | // Remove 7 MB from AppImage by removing unnecessary Chrome locales 10 | const dir = path.join(context.appOutDir, localeDirName); 11 | const deleted = []; 12 | if (fs.existsSync(dir)) { 13 | fs.readdirSync(dir).forEach((pak) => { 14 | if (!keepLocales.includes(pak.replace(/\.pak$/, ''))) { 15 | fs.rmSync(path.join(dir, pak)); 16 | deleted.push(pak); 17 | } 18 | }); 19 | console.log(`Deleted ${deleted.length} unnecessary Chrome locales.`); 20 | } 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /assets/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/9.png -------------------------------------------------------------------------------- /assets/b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/b2.png -------------------------------------------------------------------------------- /assets/defaults/resources/fonts/SILEOT.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/defaults/resources/fonts/SILEOT.ttf -------------------------------------------------------------------------------- /assets/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icon.icns -------------------------------------------------------------------------------- /assets/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icon.ico -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icon.png -------------------------------------------------------------------------------- /assets/icons/1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/1024x1024.png -------------------------------------------------------------------------------- /assets/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/128x128.png -------------------------------------------------------------------------------- /assets/icons/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16.png -------------------------------------------------------------------------------- /assets/icons/16x16/Comms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Comms.png -------------------------------------------------------------------------------- /assets/icons/16x16/Comms_note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Comms_note.png -------------------------------------------------------------------------------- /assets/icons/16x16/Dicts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Dicts.png -------------------------------------------------------------------------------- /assets/icons/16x16/Dicts_note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Dicts_note.png -------------------------------------------------------------------------------- /assets/icons/16x16/Genbks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Genbks.png -------------------------------------------------------------------------------- /assets/icons/16x16/Genbks_note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Genbks_note.png -------------------------------------------------------------------------------- /assets/icons/16x16/Texts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Texts.png -------------------------------------------------------------------------------- /assets/icons/16x16/Texts_note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/Texts_note.png -------------------------------------------------------------------------------- /assets/icons/16x16/crossrefs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/crossrefs.png -------------------------------------------------------------------------------- /assets/icons/16x16/dictlinks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/dictlinks.png -------------------------------------------------------------------------------- /assets/icons/16x16/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/folder.png -------------------------------------------------------------------------------- /assets/icons/16x16/footnotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/footnotes.png -------------------------------------------------------------------------------- /assets/icons/16x16/headings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/headings.png -------------------------------------------------------------------------------- /assets/icons/16x16/redwords.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/redwords.png -------------------------------------------------------------------------------- /assets/icons/16x16/strongs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/strongs.png -------------------------------------------------------------------------------- /assets/icons/16x16/usernotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/usernotes.png -------------------------------------------------------------------------------- /assets/icons/16x16/versenums.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/16x16/versenums.png -------------------------------------------------------------------------------- /assets/icons/20x20/media.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /assets/icons/24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/24x24.png -------------------------------------------------------------------------------- /assets/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/256x256.png -------------------------------------------------------------------------------- /assets/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/32x32.png -------------------------------------------------------------------------------- /assets/icons/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/48x48.png -------------------------------------------------------------------------------- /assets/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/512x512.png -------------------------------------------------------------------------------- /assets/icons/64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/64x64.png -------------------------------------------------------------------------------- /assets/icons/96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/icons/96x96.png -------------------------------------------------------------------------------- /assets/locales/crh-Cyrl/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "CTT", 3 | "Direction" : "", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/crh-Cyrl/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/crh-Cyrl/xulsword.json: -------------------------------------------------------------------------------- 1 | { 2 | "AND" : "", 3 | "GROUPEND" : "", 4 | "GROUPSTART" : "", 5 | "MULTICharWildCard" : "", 6 | "NOT" : "", 7 | "OR" : "", 8 | "QUOTEEND" : "", 9 | "QUOTESTART" : "", 10 | "SIMILAR" : "", 11 | "SINGLECharWildCard" : "", 12 | "SearchSimilar.description" : "Найти стихи, в которых есть слова похожие на данные слова. Например, если вы введёте слово “маса”, все слова такие как “масал”, “масат”, “масагъа”, “масаны” будут найдены.", 13 | "Texts" : "Священное Писание", 14 | "allowInternet.message" : "Вы хотите скачать Священной Писания из интернета.\nЭти ваши действия в интернете могут быть легко прослежены посторонними лицами.\nЕсли это вас беспокоит, нажатием кнопки “Нет” вы можете отменить загрузку.", 15 | "allowInternet.title" : "Скачать Священного Писания с Интернета?", 16 | "cipherKey.prompt" : "Пожалуйста, введите ключ расшифровки текста Священного Писания.", 17 | "gospel.label" : "Инджиль", 18 | "locale_direction" : "ltr", 19 | "menu.bmitem.add.ac" : "D", 20 | "menu.bookmark.manager.ac" : "M", 21 | "menu.copyPassage.ac" : "G", 22 | "menu.edit.copy.ac" : "C", 23 | "menu.edit.cut.ac" : "X", 24 | "menu.edit.paste.ac" : "V", 25 | "menu.edit.redo.ac" : "Y", 26 | "menu.edit.selectAll.ac" : "A", 27 | "menu.edit.undo.ac" : "Z", 28 | "menu.print.ac" : "P", 29 | "menu.search.ac" : "F", 30 | "menu.view.redwords" : "Слова Исы Месиха в красном шрифте", 31 | "menu.view.showtexttabs" : "Ярлыки Священное Писание", 32 | "pentateuch.label" : "Теврат", 33 | "search.all" : "Всё Священное Писание", 34 | "searchTable_1_1" : "коклер*", 35 | "searchTable_1_2" : "Находит любое слово, которое начинается с \"коклер\".", 36 | "searchTable_2_1" : "??бермек", 37 | "searchTable_2_2" : "Находит \"йибермек\", \"бермек\" ... и т.д.", 38 | "searchTable_3_1" : "севги && Алла", 39 | "searchTable_3_2" : "находит стихи с обоими словами", 40 | "searchTable_3_3" : "", 41 | "searchTable_4_1" : "севги || Алла", 42 | "searchTable_4_2" : "находит стихи или со словом \"севги\" или \"Алла\"", 43 | "searchTable_4_3" : "", 44 | "searchTable_5_1" : "севги !Алла", 45 | "searchTable_5_2" : "находит стихи со словом \"севги\", но не со словом \"Алла\"", 46 | "searchTable_5_3" : "", 47 | "searchTable_6_1" : "(буюк || кучюк) && севги", 48 | "searchTable_6_2" : "находит стихи со словом \"буюк\" или \"кучюк\" и \"севги\"", 49 | "searchTable_6_3" : "", 50 | "searchTable_7_1" : "Невукаднеццар~", 51 | "searchTable_7_2" : "Находит слова, написанные примерно такими буквами \"Невукаднеццар\"", 52 | "searchTable_8_1" : "\"Чюнки Алла дюньяны ойле севди\"", 53 | "searchTable_8_3" : "" 54 | } 55 | 56 | -------------------------------------------------------------------------------- /assets/locales/en/bibleBrowser.json: -------------------------------------------------------------------------------- 1 | { 2 | "Add a tab, or remove a tab.": "Add a tab, or remove a tab.", 3 | "Show or hide the verse chooser tool.": "Show or hide the verse chooser tool.", 4 | "Add another column of text.": "Add another column of text.", 5 | "Remove a column of text.": "Remove a column of text.", 6 | "About this text": "About this text" 7 | } 8 | -------------------------------------------------------------------------------- /assets/locales/en/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "ESV,KJV", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/en/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/en/widgets.json: -------------------------------------------------------------------------------- 1 | { 2 | "Full publication": "Full publication" 3 | } 4 | -------------------------------------------------------------------------------- /assets/locales/fa/NT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/locales/fa/NT.png -------------------------------------------------------------------------------- /assets/locales/fa/OT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/locales/fa/OT.png -------------------------------------------------------------------------------- /assets/locales/fa/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "GLK", 3 | "Direction" : "rtl", 4 | "Font" : "XB Niloofar", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "0.55", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/fa/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "۰", 3 | "n1" : "۱", 4 | "n2" : "۲", 5 | "n3" : "۳", 6 | "n4" : "۴", 7 | "n5" : "۵", 8 | "n6" : "۶", 9 | "n7" : "۷", 10 | "n8" : "۸", 11 | "n9" : "۹" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/kk/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "KAZ", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/kk/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/ko/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "KorRV,KorHKJV", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/ko/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/kum/books.json: -------------------------------------------------------------------------------- 1 | { 2 | "1Chr" : "1 Летопись", 3 | "1Chri" : "", 4 | "1Cor" : "1 Коринфдегилеге", 5 | "1Cori" : "", 6 | "1John" : "1 Югьан", 7 | "1Johni" : "", 8 | "1Kgsi" : "", 9 | "1Pet" : "1 Петер", 10 | "1Peti" : "", 11 | "1Sami" : "", 12 | "1Thess" : "1 Салоникдегелеге", 13 | "1Thessi" : "", 14 | "1Tim" : "1 Тимофейге", 15 | "1Timi" : "", 16 | "2Chr" : "2 Летопись", 17 | "2Chri" : "", 18 | "2Cor" : "2 Коринфдегилеге", 19 | "2Cori" : "", 20 | "2John" : "2 Югьан", 21 | "2Johni" : "", 22 | "2Kgsi" : "", 23 | "2Pet" : "2 Петер", 24 | "2Peti" : "", 25 | "2Sami" : "", 26 | "2Thess" : "2 Салоникдегелеге", 27 | "2Thessi" : "", 28 | "2Tim" : "2 Тимофейге", 29 | "2Timi" : "", 30 | "3John" : "3 Югьан", 31 | "3Johni" : "", 32 | "Acts" : "Элчилени Ишлери", 33 | "Actsi" : "", 34 | "Amosi" : "", 35 | "Col" : "Колосдагъылагъа", 36 | "Coli" : "", 37 | "Dan" : "Даниял", 38 | "Dani" : "", 39 | "Deuti" : "", 40 | "Eccl" : "Размышления", 41 | "Eccli" : "", 42 | "Eph" : "Эфесдегилеге", 43 | "Ephi" : "", 44 | "Esthi" : "", 45 | "Exodi" : "", 46 | "Ezek" : "Езекиил", 47 | "Ezeki" : "", 48 | "Ezra" : "Узайр", 49 | "Ezrai" : "", 50 | "Gal" : "Галатиядагъылагъа", 51 | "Gali" : "", 52 | "Gen" : "Яратылыв", 53 | "Geni" : "", 54 | "Habi" : "", 55 | "Hagi" : "", 56 | "Heb" : "Ягьудилеге", 57 | "Hebi" : "", 58 | "Hosi" : "", 59 | "Isai" : "", 60 | "Jas" : "Якъуб", 61 | "Jasi" : "", 62 | "Jeri" : "", 63 | "Job" : "Аюб", 64 | "Jobi" : "", 65 | "Joeli" : "", 66 | "John" : "Югьан", 67 | "Johni" : "", 68 | "Jonah" : "Юнус", 69 | "Jonahi" : "", 70 | "Josh" : "Иешуа, сын Нуна", 71 | "Joshi" : "", 72 | "Jude" : "Ягьуда", 73 | "Judei" : "", 74 | "Judgi" : "", 75 | "Lam" : "Плач об Иерусалиме", 76 | "Lami" : "", 77 | "Levi" : "", 78 | "LongEccl" : "Размышления Сулеймана", 79 | "Luke" : "Лукъа", 80 | "Lukei" : "", 81 | "Mali" : "", 82 | "Mark" : "Марк", 83 | "Marki" : "", 84 | "Matt" : "Маттай", 85 | "Matti" : "", 86 | "Mici" : "", 87 | "Nahi" : "", 88 | "Nehi" : "", 89 | "Numi" : "", 90 | "Obadi" : "", 91 | "Phil" : "Филиппадагъылагъа", 92 | "Phili" : "", 93 | "Phlm" : "Филимонгъа", 94 | "Phlmi" : "", 95 | "Prov" : "Айтывлар", 96 | "Provi" : "", 97 | "Ps" : "Забур", 98 | "Ps_Chaptext" : "", 99 | "Psi" : "", 100 | "Rev" : "Аллагь йиберген вагьийи", 101 | "Revi" : "", 102 | "Rom" : "Румдагъылагъа", 103 | "Romi" : "", 104 | "Ruthi" : "", 105 | "Song" : "Песнь Сулеймана", 106 | "Songi" : "", 107 | "Titus" : "Титге", 108 | "Titusi" : "", 109 | "Zech" : "Закария", 110 | "Zechi" : "", 111 | "Zephi" : "" 112 | } 113 | 114 | -------------------------------------------------------------------------------- /assets/locales/kum/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "KUM,RSP", 3 | "Direction" : "", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/kum/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/kum/xulsword.json: -------------------------------------------------------------------------------- 1 | { 2 | "AND" : "", 3 | "GROUPEND" : "", 4 | "GROUPSTART" : "", 5 | "MULTICharWildCard" : "", 6 | "NOT" : "", 7 | "OR" : "", 8 | "QUOTEEND" : "", 9 | "QUOTESTART" : "", 10 | "SIMILAR" : "", 11 | "SINGLECharWildCard" : "", 12 | "Texts" : "Священное Писание", 13 | "allowInternet.message" : "Вы хотите скачать Священной Писания из интернета.\nЭти ваши действия в интернете могут быть легко прослежены посторонними лицами.\nЕсли это вас беспокоит, нажатием кнопки “Нет” вы можете отменить загрузку.", 14 | "allowInternet.title" : "Скачать Священного Писания с Интернета?", 15 | "cipherKey.prompt" : "Пожалуйста, введите ключ расшифровки текста Священного Писания.", 16 | "locale_direction" : "ltr", 17 | "menu.bmitem.add.ac" : "D", 18 | "menu.bookmark.manager.ac" : "M", 19 | "menu.copyPassage.ac" : "G", 20 | "menu.edit.copy.ac" : "C", 21 | "menu.edit.cut.ac" : "X", 22 | "menu.edit.paste.ac" : "V", 23 | "menu.edit.redo.ac" : "Y", 24 | "menu.edit.selectAll.ac" : "A", 25 | "menu.edit.undo.ac" : "Z", 26 | "menu.print.ac" : "P", 27 | "menu.search.ac" : "F", 28 | "menu.view.redwords" : "Слова Масиха в красном шрифте", 29 | "menu.view.showtexttabs" : "Ярлыки Священное Писание", 30 | "pentateuch.label" : "Таурат", 31 | "search.all" : "Всё Священное Писание", 32 | "searchTable_2_1" : "??ходить", 33 | "searchTable_2_2" : "Находит \"заходить\", \"выходить\" ... и т.д.", 34 | "searchTable_3_1" : "любовь && Всевышний", 35 | "searchTable_3_2" : "находит стихи с обоими словами", 36 | "searchTable_3_3" : "", 37 | "searchTable_4_1" : "любовь || Всевышний", 38 | "searchTable_4_2" : "находит стихи или со словом \"любовь\" или \"Всевышний\"", 39 | "searchTable_4_3" : "", 40 | "searchTable_5_1" : "любовь !Всевышний", 41 | "searchTable_5_2" : "находит стихи со словом \"любовь\", но не со словом \"Всевышний\"", 42 | "searchTable_5_3" : "", 43 | "searchTable_6_3" : "", 44 | "searchTable_8_1" : "\"Ведь Всевышний так полюбил\"", 45 | "searchTable_8_3" : "" 46 | } 47 | 48 | -------------------------------------------------------------------------------- /assets/locales/ky-Arab/NT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/locales/ky-Arab/NT.png -------------------------------------------------------------------------------- /assets/locales/ky-Arab/OT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/locales/ky-Arab/OT.png -------------------------------------------------------------------------------- /assets/locales/ky-Arab/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "KYLSA,KYROHA", 3 | "Direction" : "rtl", 4 | "Font" : "UKIJ Tuz Basma", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "0.7", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/ky-Arab/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/ky-Cyrl/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "KYLSC,KYROHC", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/ky-Cyrl/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/ru-CA/books.json: -------------------------------------------------------------------------------- 1 | { 2 | "1Chr" : "1 Летопись", 3 | "1Chri" : "", 4 | "1Cori" : "52", 5 | "1John" : "1 Иохана", 6 | "1Johni" : "47", 7 | "1Kgsi" : "", 8 | "1Pet" : "1 Петира", 9 | "1Peti" : "45", 10 | "1Sami" : "", 11 | "1Thessi" : "58", 12 | "1Tim" : "1 Тиметею", 13 | "1Timi" : "60", 14 | "2Chr" : "2 Летопись", 15 | "2Chri" : "", 16 | "2Cori" : "53", 17 | "2John" : "2 Иохана", 18 | "2Johni" : "48", 19 | "2Kgsi" : "", 20 | "2Pet" : "2 Петира", 21 | "2Peti" : "46", 22 | "2Sami" : "", 23 | "2Thessi" : "59", 24 | "2Tim" : "2 Тиметею", 25 | "2Timi" : "61", 26 | "3John" : "3 Иохана", 27 | "3Johni" : "49", 28 | "Acts" : "Деяния", 29 | "Actsi" : "43", 30 | "Amosi" : "", 31 | "Coli" : "57", 32 | "Dan" : "Даниял", 33 | "Dani" : "", 34 | "Deuti" : "", 35 | "Eccl" : "Размышления", 36 | "Eccli" : "", 37 | "Eph" : "Эфесянам", 38 | "Ephi" : "55", 39 | "Esthi" : "", 40 | "Exodi" : "", 41 | "Ezek" : "Езекиил", 42 | "Ezeki" : "", 43 | "Ezra" : "Узайр", 44 | "Ezrai" : "", 45 | "Gali" : "54", 46 | "Gen" : "Начало", 47 | "Geni" : "", 48 | "Habi" : "", 49 | "Hagi" : "", 50 | "Hebi" : "64", 51 | "Hosi" : "", 52 | "Isai" : "", 53 | "Jas" : "Якуба", 54 | "Jasi" : "44", 55 | "Jeri" : "", 56 | "Job" : "Аюб", 57 | "Jobi" : "", 58 | "Joeli" : "", 59 | "John" : "От Иохана", 60 | "Johni" : "42", 61 | "Jonah" : "Юнус", 62 | "Jonahi" : "", 63 | "Josh" : "Иешуа, сын Нуна", 64 | "Joshi" : "", 65 | "Judei" : "50", 66 | "Judgi" : "", 67 | "Lam" : "Плач об Иерусалиме", 68 | "Lami" : "", 69 | "Levi" : "", 70 | "LongEccl" : "Размышления Сулеймана", 71 | "Lukei" : "41", 72 | "Mali" : "", 73 | "Marki" : "40", 74 | "Matt" : "От Матая", 75 | "Matti" : "39", 76 | "Mici" : "", 77 | "Nahi" : "", 78 | "Nehi" : "", 79 | "Numi" : "", 80 | "Obadi" : "", 81 | "Phili" : "56", 82 | "Phlmi" : "63", 83 | "Prov" : "Мудрые изречения", 84 | "Provi" : "", 85 | "Ps" : "Забур", 86 | "Ps_Chaptext" : "", 87 | "Psi" : "", 88 | "Revi" : "65", 89 | "Romi" : "51", 90 | "Ruthi" : "", 91 | "Song" : "Песнь Сулеймана", 92 | "Songi" : "", 93 | "Titusi" : "62", 94 | "Zech" : "Закария", 95 | "Zechi" : "", 96 | "Zephi" : "" 97 | } 98 | 99 | -------------------------------------------------------------------------------- /assets/locales/ru-CA/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "CARS,CARSA,CARST,RSP", 3 | "Direction" : "", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/ru-CA/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/ru-CA/xulsword.json: -------------------------------------------------------------------------------- 1 | { 2 | "AND" : "", 3 | "GROUPEND" : "", 4 | "GROUPSTART" : "", 5 | "MULTICharWildCard" : "", 6 | "NOT" : "", 7 | "OR" : "", 8 | "QUOTEEND" : "", 9 | "QUOTESTART" : "", 10 | "SIMILAR" : "", 11 | "SINGLECharWildCard" : "", 12 | "Texts" : "Священное Писание", 13 | "allowInternet.message" : "Вы хотите скачать Священной Писания из интернета.\nЭти ваши действия в интернете могут быть легко прослежены посторонними лицами.\nЕсли это вас беспокоит, нажатием кнопки “Нет” вы можете отменить загрузку.", 14 | "allowInternet.title" : "Скачать Священного Писания с Интернета?", 15 | "cipherKey.prompt" : "Пожалуйста, введите ключ расшифровки текста Священного Писания.", 16 | "locale_direction" : "ltr", 17 | "menu.bmitem.add.ac" : "D", 18 | "menu.bookmark.manager.ac" : "M", 19 | "menu.copyPassage.ac" : "G", 20 | "menu.edit.copy.ac" : "C", 21 | "menu.edit.cut.ac" : "X", 22 | "menu.edit.paste.ac" : "V", 23 | "menu.edit.redo.ac" : "Y", 24 | "menu.edit.selectAll.ac" : "A", 25 | "menu.edit.undo.ac" : "Z", 26 | "menu.print.ac" : "P", 27 | "menu.search.ac" : "F", 28 | "menu.view.redwords" : "Слова Масиха в красном шрифте", 29 | "menu.view.showtexttabs" : "Ярлыки Священное Писание", 30 | "pentateuch.label" : "Таурат", 31 | "search.all" : "Всё Священное Писание", 32 | "searchTable_2_1" : "??ходить", 33 | "searchTable_2_2" : "Находит \"заходить\", \"выходить\" ... и т.д.", 34 | "searchTable_3_1" : "любовь && Всевышний", 35 | "searchTable_3_2" : "находит стихи с обоими словами", 36 | "searchTable_3_3" : "", 37 | "searchTable_4_1" : "любовь || Всевышний", 38 | "searchTable_4_2" : "находит стихи или со словом \"любовь\" или \"Всевышний\"", 39 | "searchTable_4_3" : "", 40 | "searchTable_5_1" : "любовь !Всевышний", 41 | "searchTable_5_2" : "находит стихи со словом \"любовь\", но не со словом \"Всевышний\"", 42 | "searchTable_5_3" : "", 43 | "searchTable_6_3" : "", 44 | "searchTable_8_1" : "\"Ведь Всевышний так полюбил\"", 45 | "searchTable_8_3" : "" 46 | } 47 | 48 | -------------------------------------------------------------------------------- /assets/locales/ru/bibleBrowser.json: -------------------------------------------------------------------------------- 1 | { 2 | "Add a tab, or remove a tab.": "Добавьте вкладку или удалите вкладку.", 3 | "Show or hide the verse chooser tool.": "Показать или скрыть инструмент выбора стиха.", 4 | "Add another column of text.": "Добавьте еще один столбец текста.", 5 | "Remove a column of text.": "Удалить столбец текста.", 6 | "About this text": "об этом тексте" 7 | } 8 | -------------------------------------------------------------------------------- /assets/locales/ru/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "RSP", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/ru/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/ru/widgets.json: -------------------------------------------------------------------------------- 1 | { 2 | "Full publication": "Полная публикация" 3 | } 4 | -------------------------------------------------------------------------------- /assets/locales/sl/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/sl/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/sl/translator.txt: -------------------------------------------------------------------------------- 1 | Marjan Šavli: marjan.savli@gmail.com 2 | -------------------------------------------------------------------------------- /assets/locales/tk-Latn/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "TKL,TKLI", 3 | "Direction" : "ltr", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/tk-Latn/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/tt-Cyrl/books.json: -------------------------------------------------------------------------------- 1 | { 2 | "1Chri" : "", 3 | "1Cori" : "", 4 | "1Johni" : "", 5 | "1Kgsi" : "", 6 | "1Peti" : "", 7 | "1Sami" : "", 8 | "1Thessi" : "", 9 | "1Timi" : "", 10 | "2Chri" : "", 11 | "2Cori" : "", 12 | "2Johni" : "", 13 | "2Kgsi" : "", 14 | "2Peti" : "", 15 | "2Sami" : "", 16 | "2Thessi" : "", 17 | "2Timi" : "", 18 | "3Johni" : "", 19 | "Actsi" : "", 20 | "Amosi" : "", 21 | "Coli" : "", 22 | "Dani" : "", 23 | "Deuti" : "", 24 | "Eccli" : "", 25 | "Ephi" : "", 26 | "Esthi" : "", 27 | "Exodi" : "", 28 | "Ezeki" : "", 29 | "Ezrai" : "", 30 | "Gali" : "", 31 | "Geni" : "", 32 | "Habi" : "", 33 | "Hagi" : "", 34 | "Hebi" : "", 35 | "Hosi" : "", 36 | "Isai" : "", 37 | "Jasi" : "", 38 | "Jeri" : "", 39 | "Jobi" : "", 40 | "Joeli" : "", 41 | "Johni" : "", 42 | "Jonahi" : "", 43 | "Joshi" : "", 44 | "Judei" : "", 45 | "Judgi" : "", 46 | "Lami" : "", 47 | "Levi" : "", 48 | "Lukei" : "", 49 | "Mali" : "", 50 | "Marki" : "", 51 | "Matti" : "", 52 | "Mici" : "", 53 | "Nahi" : "", 54 | "Nehi" : "", 55 | "Numi" : "", 56 | "Obadi" : "", 57 | "Phili" : "", 58 | "Phlmi" : "", 59 | "Provi" : "", 60 | "Ps_Chaptext" : "", 61 | "Psi" : "", 62 | "Revi" : "", 63 | "Romi" : "", 64 | "Ruthi" : "", 65 | "Songi" : "", 66 | "Titusi" : "", 67 | "Zechi" : "", 68 | "Zephi" : "" 69 | } 70 | 71 | -------------------------------------------------------------------------------- /assets/locales/tt-Cyrl/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "TTR", 3 | "Direction" : "", 4 | "Font" : "", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/tt-Cyrl/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/tt-Cyrl/xulsword.json: -------------------------------------------------------------------------------- 1 | { 2 | "AND" : "", 3 | "GROUPEND" : "", 4 | "GROUPSTART" : "", 5 | "MULTICharWildCard" : "", 6 | "NOT" : "", 7 | "NextChaptext" : "Следующая глава", 8 | "OR" : "", 9 | "PrevChaptext" : "Предыдущая глава", 10 | "QUOTEEND" : "", 11 | "QUOTESTART" : "", 12 | "SIMILAR" : "", 13 | "SINGLECharWildCard" : "", 14 | "cancel.label" : "Waz kiç", 15 | "close" : "Yap", 16 | "close.label" : "Yap", 17 | "dialog.confirmDelete" : "Are you sure?", 18 | "dlgFrom" : "Şunnan Saqlana", 19 | "dlgTo" : "Şunda", 20 | "error-detected" : "Обнаружена проблема. Сообщить об этой проблеме нажмите “{{v1}}”.", 21 | "from.label" : "qaydan", 22 | "locale_direction" : "ltr", 23 | "menu.bmitem.add.ac" : "D", 24 | "menu.bookmark.add" : "Yaña Qıstırğıç…", 25 | "menu.bookmark.manager.ac" : "M", 26 | "menu.bookmarks" : "Qıstırğıçlar", 27 | "menu.context.close" : "Yap", 28 | "menu.copyPassage.ac" : "G", 29 | "menu.edit" : "Texrir", 30 | "menu.edit.copy" : "Küçír", 31 | "menu.edit.copy.ac" : "C", 32 | "menu.edit.cut" : "Kis", 33 | "menu.edit.cut.ac" : "X", 34 | "menu.edit.delete" : "Suwır", 35 | "menu.edit.move" : "Taşı…", 36 | "menu.edit.paste" : "Yabıştır", 37 | "menu.edit.paste.ac" : "V", 38 | "menu.edit.properties" : "Üzínçelíkler", 39 | "menu.edit.redo" : "Yene Yasa", 40 | "menu.edit.redo.ac" : "Y", 41 | "menu.edit.selectAll" : "Hemmesín Sayla", 42 | "menu.edit.selectAll.ac" : "A", 43 | "menu.edit.undo" : "Kirí Yasa", 44 | "menu.edit.undo.ac" : "Z", 45 | "menu.exportAudio" : "Экспортирование аудио", 46 | "menu.file" : "Dosye", 47 | "menu.folder.add" : "Yaña Törgek…", 48 | "menu.importAudio" : "Импортирующих аудио", 49 | "menu.open" : "Aç", 50 | "menu.print" : "Bastır...", 51 | "menu.print.ac" : "P", 52 | "menu.quit" : "Çıq", 53 | "menu.search" : "найти", 54 | "menu.search.ac" : "F", 55 | "menu.view" : "Küríním", 56 | "name.label" : "İsím", 57 | "no.label" : "Yuq", 58 | "ok.label" : "Temam", 59 | "printPreviewCmd.label" : "Bastıru Al-qaraw", 60 | "printSetupCmd.label" : "Sexifeníñ Caylanması...", 61 | "rootBookmark.label" : "All Bookmarks", 62 | "searchTable_3_2" : "находит стихи с обоими словами", 63 | "searchTable_3_3" : "", 64 | "searchTable_4_3" : "", 65 | "searchTable_5_3" : "", 66 | "searchTable_6_3" : "", 67 | "searchTable_8_3" : "", 68 | "to.label" : "qaya", 69 | "yes.label" : "Eyí" 70 | } 71 | 72 | -------------------------------------------------------------------------------- /assets/locales/ug/NT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/locales/ug/NT.png -------------------------------------------------------------------------------- /assets/locales/ug/OT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/locales/ug/OT.png -------------------------------------------------------------------------------- /assets/locales/ug/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "UYG", 3 | "Direction" : "rtl", 4 | "Font" : "Almas 2007", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "0.58", 9 | "LineHeight" : "110%" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/ug/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/uz-Cyrl/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "UZV,UZMK,UZIBT", 3 | "Direction" : "ltr", 4 | "Font" : "Charis SIL CyrE", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/uz-Cyrl/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/locales/uz-Latn/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "DefaultModule" : "UZVL,UZMK,UZIBT", 3 | "Direction" : "ltr", 4 | "Font" : "Charis SIL CyrE", 5 | "FontBackground" : "", 6 | "FontColor" : "", 7 | "FontSize" : "", 8 | "FontSizeAdjust" : "", 9 | "LineHeight" : "" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /assets/locales/uz-Latn/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "n0" : "", 3 | "n1" : "", 4 | "n2" : "", 5 | "n3" : "", 6 | "n4" : "", 7 | "n5" : "", 8 | "n6" : "", 9 | "n7" : "", 10 | "n8" : "", 11 | "n9" : "" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/splash-overlay-crh-Cyrl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-crh-Cyrl.png -------------------------------------------------------------------------------- /assets/splash-overlay-fa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-fa.png -------------------------------------------------------------------------------- /assets/splash-overlay-kk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-kk.png -------------------------------------------------------------------------------- /assets/splash-overlay-ko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-ko.png -------------------------------------------------------------------------------- /assets/splash-overlay-kum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-kum.png -------------------------------------------------------------------------------- /assets/splash-overlay-ky-Arab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-ky-Arab.png -------------------------------------------------------------------------------- /assets/splash-overlay-ky-Cyrl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-ky-Cyrl.png -------------------------------------------------------------------------------- /assets/splash-overlay-ru-CA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-ru-CA.png -------------------------------------------------------------------------------- /assets/splash-overlay-ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-ru.png -------------------------------------------------------------------------------- /assets/splash-overlay-tk-Latn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-tk-Latn.png -------------------------------------------------------------------------------- /assets/splash-overlay-tt-Cyrl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-tt-Cyrl.png -------------------------------------------------------------------------------- /assets/splash-overlay-ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-ug.png -------------------------------------------------------------------------------- /assets/splash-overlay-uz-Cyrl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-uz-Cyrl.png -------------------------------------------------------------------------------- /assets/splash-overlay-uz-Latn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay-uz-Latn.png -------------------------------------------------------------------------------- /assets/splash-overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash-overlay.png -------------------------------------------------------------------------------- /assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/splash.png -------------------------------------------------------------------------------- /assets/xsb.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/xsb.ico -------------------------------------------------------------------------------- /assets/xsm.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/assets/xsm.ico -------------------------------------------------------------------------------- /babel.config.mjs: -------------------------------------------------------------------------------- 1 | export default (api) => { 2 | const development = api.env(['development', 'test']); 3 | 4 | return { 5 | presets: [ 6 | //'@babel/preset-env', --> this is set by webpack.config.mjs 7 | '@babel/preset-typescript', 8 | ], 9 | plugins: [ 10 | ...(development 11 | ? ['@babel/plugin-transform-runtime'] 12 | : [ 13 | // production 14 | '@babel/plugin-transform-react-constant-elements', 15 | '@babel/plugin-transform-react-inline-elements', 16 | 'babel-plugin-transform-react-remove-prop-types', 17 | ]), 18 | ], 19 | }; 20 | }; 21 | -------------------------------------------------------------------------------- /build/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xulsword", 3 | "productName": "MK", 4 | "description": "Электронная Библия", 5 | "version": "4.1.0", 6 | "type": "module", 7 | "main": "./dist/appSrv/server.cjs", 8 | "author": { 9 | "name": "John Austin", 10 | "email": "gpl.programs.info@gmail.com", 11 | "url": "https://github.com/JohnAustinDev/xulsword" 12 | }, 13 | "license": "MIT", 14 | "dependencies": { 15 | "libxulsword": "file:../../libxulsword" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /build/app/yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "libxulsword@file:../../libxulsword::locator=xulsword%40workspace%3A.": 9 | version: 1.5.6 10 | resolution: "libxulsword@file:../../libxulsword#../../libxulsword::hash=cbd662&locator=xulsword%40workspace%3A." 11 | checksum: 10c0/da543f18cd1745da2fcd321d73f216c78b9e168b710b1d61be27fe583948c68dc1545c76a476ac74d6aed3fc0b7352de820525c04503cc8fecff8428fa8a6b11 12 | languageName: node 13 | linkType: hard 14 | 15 | "xulsword@workspace:.": 16 | version: 0.0.0-use.local 17 | resolution: "xulsword@workspace:." 18 | dependencies: 19 | libxulsword: "file:../../libxulsword" 20 | languageName: unknown 21 | linkType: soft 22 | -------------------------------------------------------------------------------- /build/webapp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xulsword-web-app", 3 | "productName": "xulsword web app", 4 | "description": "Web application built with xulsword", 5 | "version": "1.0.0", 6 | "type": "module", 7 | "main": "./dist/webappSrv/server.cjs", 8 | "author": { 9 | "name": "John Austin", 10 | "email": "gpl.programs.info@gmail.com", 11 | "url": "https://github.com/JohnAustinDev/xulsword" 12 | }, 13 | "license": "MIT", 14 | "dependencies": { 15 | "libxulsword": "file:../../libxulsword" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /build/webapp/yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "libxulsword@file:../../libxulsword::locator=xulsword-web-app%40workspace%3A.": 9 | version: 1.5.6 10 | resolution: "libxulsword@file:../../libxulsword#../../libxulsword::hash=cbd662&locator=xulsword-web-app%40workspace%3A." 11 | checksum: 10c0/da543f18cd1745da2fcd321d73f216c78b9e168b710b1d61be27fe583948c68dc1545c76a476ac74d6aed3fc0b7352de820525c04503cc8fecff8428fa8a6b11 12 | languageName: node 13 | linkType: hard 14 | 15 | "xulsword-web-app@workspace:.": 16 | version: 0.0.0-use.local 17 | resolution: "xulsword-web-app@workspace:." 18 | dependencies: 19 | libxulsword: "file:../../libxulsword" 20 | languageName: unknown 21 | linkType: soft 22 | -------------------------------------------------------------------------------- /libxulsword/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /libxulsword/Readme.md: -------------------------------------------------------------------------------- 1 | # The XulSword Library Node.js Addon 2 | 3 | This Node.js addon provides a JavaScript interface to the libxulsword dynamic library. The libxulsword dynamic library (.so, .dll or .dylib) should be constructed prior to building this addon. 4 | 5 | # Linux Build 6 | 7 | In Linux, the build depends on libxulsword.so as well as shell tools and environment variables that must be set for each shell. All of this is done by running `source ./init.sh` from the xulsword project directory. Then the native libxulsword addon will be built from the libxulsword directory with `yarn` followed by `yarn rebuild`. The electron_rebuild module is responsible for compiling against the selected version of Electron. 8 | 9 | # Windows Build 10 | 11 | Although the libxulsword.dll shared library is cross-compiled with MinGW, this node addon cannot be cross-compiled because node-gyp is not compatible with MinGW. This addon must be compiled with MSVC for Windows. However, since it uses node-addon-api, it does not need to be recompiled unless the libxulsword.dll interface changes. For this reason, the MS-Windows libxulsword.node compiled binary is kept under version control. Compilation of this binary does not require the libxulsword.dll, but just a libxulsword.def file. This def file is created by init.sh, and it only changes when libxulsword.dll exported symbols change. When I compiled this addon in MS-Windows, I used nvm from https://github.com/coreybutler/nvm-windows. 12 | 13 | 1. From an admistrator priviledged cmd.exe, the node version and arch to link against must first be selected (ie. `nvm use 18.12.1 32`). 14 | 2. From a non-priviledged cmd.exe shell, run either MSVC's `vcvars32.bat` or `vcvars64.bat` (the one corresponding to the selected node arch). 15 | 3. Run Git/bin/bash.exe from the cmd shell to start a git-bash shell in the new environment. 16 | 4. cd into xulsword and update the setenv file so that WINMACHINE=x64 or x86 (whichever corresponds to your chosen node arch). 17 | 5. Run `source ./setenv` to complete the environment settings. 18 | 6. Build libxulsword by changing to the libxulsword directory and running `yarn` then `yarn rebuild`. 19 | 7. Commit the resulting lib/$(XCWD)/libxulsword.node binary to version control. 20 | 21 | # Addon Testing (out-of-date) 22 | 23 | 1. while in the napi directory, `npm test` will run the only regression associated with libxulsword. 24 | 25 | # TODOs 26 | 27 | 1. rework the code to utilize the `ObjectWrap` method of implementing the libxulsword interface 28 | 2. serious cleanup of both the `libsword.js`, `xulswordTest.js`, and `libsword_napi.cpp` files 29 | 3. coordinate with team to insure seamless integration 30 | -------------------------------------------------------------------------------- /libxulsword/bin/linux-x64-89/libxulsword.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/libxulsword/bin/linux-x64-89/libxulsword.node -------------------------------------------------------------------------------- /libxulsword/bin/win32-ia32-89/libxulsword.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/libxulsword/bin/win32-ia32-89/libxulsword.node -------------------------------------------------------------------------------- /libxulsword/bin/win32-x64-89/libxulsword.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/libxulsword/bin/win32-x64-89/libxulsword.node -------------------------------------------------------------------------------- /libxulsword/binding.gyp.renamed-to-prevent-rebuild: -------------------------------------------------------------------------------- 1 | { 2 | 'targets': [ 3 | { 4 | 'target_name': 'make_win_lib', 5 | 'type': 'none', 6 | 'target_conditions': [['OS=="win"', { 7 | 'actions': [{ 8 | 'action_name': 'Create lib from def file', 9 | 'message': "CREATING libxulsword.lib...", 10 | 'inputs': ['../lib/libxulsword.def'], 11 | 'outputs': ['../lib/libxulsword.lib'], 12 | 'action': ['lib', '/def:../lib/libxulsword.def', '/machine:$(WINMACHINE)', '/out:../lib/libxulsword.lib'], 13 | }], 14 | }]], 15 | }, 16 | { 17 | 'target_name': 'libxulsword', 18 | 'dependencies': ['make_win_lib'], 19 | 'sources': [ 'src/libxulsword.cpp' ], 20 | 'include_dirs': [ 21 | " { 45 | console.log( 46 | `Copying shared library ${name} to ${path.join(release, name)}`, 47 | ); 48 | fs.copyFileSync(path.join(shared, name), path.join(release, name)); 49 | }); 50 | } else 51 | throw new Error( 52 | `Windows ${machine} libxulsword DLL has not been built: 53 | Run xulsword init.sh after setting WINMACHINE=${machine === '64win' ? 'x64' : 'x86'} in xulsword/setenv`, 54 | ); 55 | } 56 | -------------------------------------------------------------------------------- /libxulsword/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.exp 2 | *.lib 3 | -------------------------------------------------------------------------------- /libxulsword/lib/libxulsword.def: -------------------------------------------------------------------------------- 1 | ; 2 | ; Definition file of libxulsword-static.dll 3 | ; Automatic generated by gendef 4 | ; written by Kai Tietz 2008 5 | ; 6 | LIBRARY "libxulsword-static.dll" 7 | EXPORTS 8 | ConvertLocation 9 | FreeLibxulsword 10 | GetAllDictionaryKeys 11 | GetChapterText 12 | GetChapterTextMulti 13 | GetCrossRefs 14 | GetDictionaryEntry 15 | GetFootnotes 16 | GetGenBookChapterText 17 | GetGenBookTableOfContents 18 | GetGlobalOption 19 | GetIntroductions 20 | GetMaxChapter 21 | GetMaxVerse 22 | GetModuleBooks 23 | GetModuleInformation 24 | GetModuleList 25 | GetNotes 26 | GetSearchResults 27 | GetVerseSystem 28 | GetVerseText 29 | GetXulsword 30 | LuceneEnabled 31 | ParseVerseKey 32 | Search 33 | SearchIndexBuild 34 | SearchIndexDelete 35 | SetCipherKey 36 | SetGlobalOption 37 | -------------------------------------------------------------------------------- /libxulsword/libxulsword.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'libxulsword'; 2 | -------------------------------------------------------------------------------- /libxulsword/libxulsword.mjs: -------------------------------------------------------------------------------- 1 | import libxulsword from './build/Release/xulsword.node'; 2 | 3 | export default libxulsword; 4 | -------------------------------------------------------------------------------- /libxulsword/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "libxulsword", 3 | "version": "1.5.6", 4 | "description": "libxulsword NodeAPI", 5 | "type": "module", 6 | "devDependencies": { 7 | "electron-rebuild": "^3.2.9", 8 | "node-addon-api": "^4.2.0", 9 | "node-gyp": "^8.4.1" 10 | }, 11 | "main": "libxulsword.mjs", 12 | "scripts": { 13 | "postinstall": "./install.mjs", 14 | "rebuild": "electron-rebuild -f" 15 | }, 16 | "gypfile": true, 17 | "license": "MIT" 18 | } 19 | -------------------------------------------------------------------------------- /scripts/clean.mjs: -------------------------------------------------------------------------------- 1 | import rimraf from 'rimraf'; 2 | import webpackPaths from './projectPaths.mjs'; 3 | import process from 'process'; 4 | 5 | const args = process.argv.slice(2); 6 | const commandMap = { 7 | dist: webpackPaths.appDistPath, 8 | release: webpackPaths.releasePath, 9 | }; 10 | 11 | args.forEach((x) => { 12 | const pathToRemove = commandMap[x]; 13 | if (pathToRemove !== undefined) { 14 | rimraf.sync(pathToRemove); 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /scripts/createVerseMaps.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use Sword; 5 | use Data::Dumper; 6 | 7 | my $canon = 'Synodal'; 8 | 9 | my $CNT = "../Cpp/sword/includes/canon_" . lc($canon) . ".h"; 10 | my $COT = "../Cpp/sword/includes/canon_" . lc($canon) . ".h"; 11 | my $JMAP = "../../jsword/src/main/resources/org/crosswire/jsword/versification/$canon.properties"; 12 | 13 | my $otBooksHP = &readBooks($COT, 'otbooks_' . lc($canon)); 14 | my $ntBooksHP = &readBooks($CNT, 'ntbooks_' . lc($canon)); 15 | 16 | # Map is [bkn, chn, vsn, vln, tch, tvs, tlv][] 17 | 18 | # Num.13.1-Num.13.34=Num.12.16-Num.13.33 19 | # 4, 13, 1, 0, 12, 16, 0 20 | # 4, 13, 2, 0, 13, 1, 0 21 | 22 | # 1Sam.24.1-1Sam.24.23=1Sam.23.29-1Sam.24.22 23 | # 9, 24, 1, 0, 23, 29, 0 24 | # 9, 24, 2, 0, 24, 1, 0 25 | 26 | # 1Kgs.18.33=1Kgs.18.33!a 27 | # 1Kgs.18.34=1Kgs.18.33!b-1Kgs.18.34 28 | # 11, 18, 34, 34, 18, 33, 34 29 | 30 | # Ps.49.1=Ps.50.0-Ps.50.1 31 | # Ps.49.2-Ps.49.23=Ps.50.2-Ps.50.23 32 | # 23, 49, 1, 0, 50, 0, 1 33 | # 23, 49, 2, 0, 50, 2, 0 34 | 35 | # Rom.14.24-Rom.14.26=Rom.16.25-Rom.16.27!a 36 | # 64, 14, 24, 0, 16, 25, 0 37 | 38 | my $mapHP = &readJswordMap($JMAP); 39 | 40 | print "unsigned char mappings_" . lc($canon) . "[] = {\n\t0,\n"; 41 | 42 | print "}\n"; 43 | 44 | print Dumper($otBooksHP); 45 | print Dumper($ntBooksHP); 46 | print Dumper($mapHP); 47 | 48 | sub readBooks { 49 | my $file = shift; 50 | my $ident = shift; 51 | 52 | open(HFL "<:encoding(UTF-8)", $file) || die; 53 | my $start = 0; 54 | my %result; 55 | my $bkn = 1; 56 | while () { 57 | if (/struct sbook $ident[] =/) {$start = 1; next;} 58 | if ($start && /\{(\s*"([^"]*)",){3}\s*(\d+)\s*\},?\s*$/) { 59 | my $osis = $6; my $numchaps = $7; 60 | if (!$numchaps) {$start = 0; next;} 61 | $result{$osis} = $bkn++; 62 | } 63 | } 64 | close(HFL); 65 | 66 | $result{'count'} = $bkn - 1; 67 | 68 | return \%result; 69 | } 70 | 71 | sub readJswordMap { 72 | my $file = shift; 73 | 74 | my $vk = new Sword::VerseKey(); 75 | $vk->setVersificationSystem('KJVA'); 76 | 77 | open(JSF, "<:encoding(UTF-8)", $file) || die; 78 | my @result; 79 | while () { 80 | if (/^(!zerosUnmapped|#.*?|\s?)\s*$/) {next;} 81 | elsif (/^(\s*[^=]+\s*)=(\s*[^=]+\s*)$/) { 82 | my $kjv = $1; my $vsys = $2; 83 | parse kjv start and increment until kjv end, when chapter changes output a new row 84 | } else { 85 | print "ERROR: Failed to parse: $_\n"; 86 | } 87 | } 88 | close(JSF); 89 | 90 | return \@result; 91 | } 92 | -------------------------------------------------------------------------------- /scripts/notarize.mjs: -------------------------------------------------------------------------------- 1 | /*global process */ 2 | import { notarize } from 'electron-notarize'; 3 | import projectPackage from '../package.json' with { type: 'json' }; 4 | 5 | const { build } = projectPackage; 6 | 7 | export default async function notarizeMacos(context) { 8 | if (!process.env.TODO) return; 9 | 10 | const { electronPlatformName, appOutDir } = context; 11 | if (electronPlatformName !== 'darwin') { 12 | return; 13 | } 14 | 15 | if (!process.env.CI) { 16 | console.warn('Skipping notarizing step. Packaging is not running in CI'); 17 | return; 18 | } 19 | 20 | if (!('APPLE_ID' in process.env && 'APPLE_ID_PASS' in process.env)) { 21 | console.warn( 22 | 'Skipping notarizing step. APPLE_ID and APPLE_ID_PASS env variables must be set', 23 | ); 24 | return; 25 | } 26 | 27 | const appName = context.packager.appInfo.productFilename; 28 | 29 | await notarize({ 30 | appBundleId: build.appId, 31 | appPath: `${appOutDir}/${appName}.app`, 32 | appleId: process.env.APPLE_ID, 33 | appleIdPassword: process.env.APPLE_ID_PASS, 34 | }); 35 | } 36 | -------------------------------------------------------------------------------- /scripts/projectPaths.mjs: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import { fileURLToPath } from 'url'; 3 | 4 | const dirname = path.dirname(fileURLToPath(import.meta.url)); 5 | 6 | const rootPath = path.join(dirname, '..'); 7 | 8 | const dllPath = path.join(dirname, '..', '.dll'); 9 | 10 | const srcPath = path.join(rootPath, 'src'); 11 | const srcMainPath = path.join(srcPath, 'main'); 12 | const srcRendererPath = path.join(srcPath, 'renderer'); 13 | const srcNodeModulesPath = path.join(srcPath, 'node_modules'); 14 | 15 | const buildPath = path.join(rootPath, 'build'); 16 | const appPath = path.join(buildPath, 'app'); 17 | const appDistPath = path.join(appPath, 'dist'); 18 | const appPackagePath = path.join(appPath, 'package.json'); 19 | const appNodeModulesPath = path.join(appPath, 'node_modules'); 20 | 21 | const webappPath = path.join(buildPath, 'webapp'); 22 | const webappDistPath = path.join(webappPath, 'dist'); 23 | 24 | const releasePath = path.join(buildPath, 'release'); 25 | 26 | export default { 27 | rootPath, 28 | dllPath, 29 | srcPath, 30 | srcMainPath, 31 | srcRendererPath, 32 | buildPath, 33 | webappPath, 34 | webappDistPath, 35 | appPath, 36 | appPackagePath, 37 | appNodeModulesPath, 38 | srcNodeModulesPath, 39 | appDistPath, 40 | releasePath, 41 | }; 42 | -------------------------------------------------------------------------------- /scripts/setenv: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Source this script from the current directory with 'source ./setenv' to 3 | # properly set environment variables. Comments indicate each setting 4 | # and the default value. 5 | 6 | # Set the following variables to enable an SSL webapp server 7 | # export SERVER_KEY_PEM=full-path-to-key-pem-file 8 | # export SERVER_CRT_PEM=full-path-to-certificate-pem-file 9 | 10 | # export WEBAPP_DOMAIN='http://localhost:1212' 11 | 12 | # export WEBAPP_CORS_ORIGIN='http://localhost:1212' 13 | 14 | # export WEBAPP_PORT=3576 15 | 16 | # export WEBAPP_SERVERROOT_DIR=[xulsword]/profile_webapp/web 17 | 18 | # Semicolon delimited list of public URLs relative to WEBAPP_SERVERROOT_DIR; each starting with slash. 19 | # export WEBAPP_PUBPATHS=/ 20 | 21 | # The public URL on the web app server where webpacked files are served from (beginning and ending with slash). 22 | # export WEBAPP_PUBLIC_DIST=/ 23 | 24 | # The full path to the private directory where web app files are written and read. 25 | # export WEBAPP_PROFILE_DIR=[xulsword]/profile_webapp 26 | 27 | # export WEBAPP_RESOURCE_DIR=[xulsword]/profile_webapp/resources 28 | 29 | # export XSFonts_DIR=[xulsword]/profile_webapp/resources/fonts 30 | 31 | # export XSModsUser_DIR=$WEBAPP_RESOURCE_DIR 32 | export XSModsUser_DIR=~/.config/Electron/resources 33 | 34 | # export XSModsCommon_DIR=$HOME/.sword 35 | 36 | # export XSAudio_DIR=$WEBAPP_RESOURCE_DIR/audio 37 | 38 | # export WEBPACK_DEV_WEBAPP_PORT=1212 39 | 40 | # export WEBPACK_DEV_APP_PORT=1213 41 | 42 | # export LOG_DIR=[xulsword]/profile_webapp 43 | 44 | # export WEBAPP_MAX_CACHE_RAMMB=250 45 | 46 | # export WEBAPP_SEARCH_BAN=2000 47 | 48 | # export WEBAPP_SKIP_MODULES= 49 | 50 | # export LOGLEVEL='error' 51 | 52 | ############################################################################### 53 | # libxulsword Cpp build environment variables: 54 | ############################################################################### 55 | export LD_LIBRARY_PATH='./Cpp/lib' 56 | 57 | export LIBXULSWORD_MAJOR=1 58 | export LIBXULSWORD_MINOR=5 59 | export LIBXULSWORD_REVIS=6 60 | 61 | if [[ -z "$LIBXULSWORD_ONLY" ]]; then 62 | export LIBXULSWORD_ONLY=no 63 | fi 64 | 65 | if [ -e /vagrant ]; then export CONTEXT="guest"; else export CONTEXT="host"; fi 66 | export XULSWORD="$( pwd -P )" 67 | export CPP="$XULSWORD/Cpp" 68 | export LIBXULSWORD="$XULSWORD/build/app/node_modules/libxulsword" 69 | 70 | # Set WINMACHINE to x86 or x64 to compile Windows 32 bit or 64 bit, respectively. 71 | # Or set to 'no' to skip compile for windows. 72 | export WINMACHINE=no 73 | export TOOLCHAIN_PREFIX=i686-w64-mingw32 74 | export ADDRESS_MODEL=32 75 | if [ "$WINMACHINE" = "x64" ]; then 76 | export ADDRESS_MODEL=64 77 | export TOOLCHAIN_PREFIX=x86_64-w64-mingw32 78 | fi 79 | 80 | export XCWD="${ADDRESS_MODEL}win" 81 | 82 | # The ming-gcc cross-compiler standard must be 'posix' to work with NodeAPI: 83 | export GCCSTD=posix 84 | -------------------------------------------------------------------------------- /src/cache.ts: -------------------------------------------------------------------------------- 1 | // Cache any data according to string keys. Calling noclear on a key will prevent it 2 | // from being cleared when Cache.clear() is called, but it may always be cleared if 3 | // cleared explicitly, ie. Cache.clear(name). 4 | const Cache = { 5 | storage: {} as Record, 6 | 7 | noclears: [] as string[], 8 | 9 | has(...args: string[]) { 10 | return args.join('+') in this.storage; 11 | }, 12 | 13 | read(...args: string[]) { 14 | return this.storage[args.join('+')]; 15 | }, 16 | 17 | write(value: any, ...cacheName: string[]) { 18 | const name = cacheName.join('+'); 19 | if (name in this.storage) throw Error(`Cache already exists: '${name}'`); 20 | this.storage[name] = value; 21 | }, 22 | 23 | noclear(...args: string[]) { 24 | const name = args.length ? args.join('+') : ''; 25 | if (name) { 26 | this.noclears.push(name); 27 | } 28 | }, 29 | 30 | // If args is undefined, all caches will be cleared except those marked as 'noclear'. 31 | // If args is provided, all caches matching the same arguments will be cleared 32 | // (including those set with 'noclear'). So if a cache is ['foo', 'bar'] then 33 | // clear('foo') will clear that as well as any other cache whose first argument is 'foo'. 34 | clear(...args: string[]) { 35 | const name = args.length ? args.join('+') : ''; 36 | if (!args.length) { 37 | Object.keys(this.storage).forEach((k) => { 38 | if (!this.noclears.includes(k)) delete this.storage[k]; 39 | }); 40 | } else if (name in this.storage) { 41 | delete this.storage[name]; 42 | } else { 43 | Object.keys(this.storage).forEach((k) => { 44 | if (k.startsWith(`${name}+`)) delete this.storage[k]; 45 | }); 46 | } 47 | }, 48 | }; 49 | 50 | export default Cache as Omit; 51 | -------------------------------------------------------------------------------- /src/clients/app/about/about.css: -------------------------------------------------------------------------------- 1 | html.about, 2 | html.about body, 3 | html.about #root { 4 | min-width: 500px; 5 | min-height: 375px; 6 | padding: 0px; 7 | } 8 | 9 | #mainbox { 10 | height: 100%; 11 | } 12 | #mainbox > div:first-child { 13 | margin: 4px; 14 | margin-bottom: 0; 15 | } 16 | #mainbox .head1 { 17 | margin-top: 0; 18 | margin-bottom: 0; 19 | padding-top: 5px; 20 | } 21 | 22 | #layer2 { 23 | background-position: 0 -5px; 24 | } 25 | .splash-text .spacer { 26 | height: 259px; 27 | } 28 | 29 | #contributors.hide > div { 30 | background-color: transparent; 31 | padding-top: 52%; 32 | } 33 | #contributors.show > div { 34 | background-color: rgba(0, 0, 0, 0.5); 35 | padding-top: 3%; 36 | transition: 37 | background-color 2s, 38 | padding-top 2s; 39 | } 40 | #contributors > div { 41 | height: 250px; 42 | width: 298px; 43 | overflow: hidden; 44 | margin: 80px 98px 10px 98px; 45 | color: white; 46 | border-radius: 8px; 47 | text-align: center; 48 | } 49 | #contributors .label { 50 | display: block; 51 | height: 1.2em; 52 | } 53 | -------------------------------------------------------------------------------- /src/clients/app/bmManager/bmManager.css: -------------------------------------------------------------------------------- 1 | .bmmanager { 2 | height: 100%; 3 | padding: 8px; 4 | overflow: hidden; 5 | } 6 | .bmmanager .items { 7 | padding: 1px; 8 | } 9 | .bmmanager .tables .groupbox-body { 10 | position: relative; 11 | padding: 0; 12 | } 13 | .bmmanager .tables .treeview, 14 | .bmmanager .tables .table { 15 | position: absolute; 16 | height: 100%; 17 | width: 100%; 18 | } 19 | .bmmanager .search { 20 | margin: 0 8px; 21 | } 22 | .search-result-item { 23 | white-space: nowrap; 24 | cursor: pointer; 25 | } 26 | .search-result-item .label { 27 | font-weight: bold; 28 | cursor: pointer; 29 | } 30 | .search-result-item .description { 31 | font-style: italic; 32 | } 33 | .bmmanager .folders .treeview { 34 | overflow: auto; 35 | } 36 | .bmmanager .label-cell > * { 37 | margin-inline-end: 6px; 38 | } 39 | .bmmanager .dragsizer { 40 | height: calc(100% - 20px); 41 | margin: 15px 0 0 0; 42 | } 43 | .bmmanager .indent { 44 | display: inline-block; 45 | width: 6px; 46 | } 47 | .bmmanager .is-cut { 48 | opacity: 0.5; 49 | } 50 | .bmmanager .is-copy { 51 | font-weight: bold; 52 | } 53 | 54 | .bmmanager .label { 55 | white-space: normal; 56 | } 57 | 58 | /* Print styles */ 59 | #root > div:not(.print) .printableItem { 60 | /* prevent bookmark text from flashing during print transition */ 61 | display: none; 62 | } 63 | .printContainer.label { 64 | font-weight: bold; 65 | } 66 | .printContainer .folder > .label { 67 | font-size: 1.3em; 68 | } 69 | .printContainer .folder::before { 70 | content: ''; 71 | display: block; 72 | height: 2em; 73 | } 74 | .printContainer.folder:first-child::before { 75 | content: ''; 76 | display: block; 77 | height: 1em; 78 | } 79 | .printContainer .bookmark::before { 80 | content: ''; 81 | display: block; 82 | height: 1em; 83 | } 84 | .printContainer .bookmark:first-child::before { 85 | content: ''; 86 | display: block; 87 | height: unset; 88 | } 89 | .printContainer .label::before, 90 | .printContainer.label::after, 91 | .printContainer .usernote::before, 92 | .printContainer .usernote::after, 93 | .printContainer.sampleText::before, 94 | .printContainer .sampleText::after { 95 | content: ''; 96 | display: block; 97 | } 98 | .printContainer .ref { 99 | font-style: italic; 100 | white-space: nowrap; 101 | } 102 | .printContainer .ref::before { 103 | content: ' ('; 104 | } 105 | .printContainer .ref::after { 106 | content: ')'; 107 | } 108 | -------------------------------------------------------------------------------- /src/clients/app/bmManager/bookmarkItemIcon.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { bookmarkItemIconPath } from '../../../common.ts'; 3 | import { G } from '../../G.ts'; 4 | 5 | import type { BookmarkItemType, BookmarkTreeNode } from '../../../type.ts'; 6 | 7 | export default function bookmarkItemIcon( 8 | item: BookmarkTreeNode | BookmarkItemType, 9 | ): JSX.Element { 10 | const path = bookmarkItemIconPath(G, item); 11 | return ; 12 | } 13 | -------------------------------------------------------------------------------- /src/clients/app/bmProperties/bmProperties.css: -------------------------------------------------------------------------------- 1 | .bmproperties { 2 | height: 100%; 3 | padding: 10px; 4 | } 5 | 6 | .bmproperties #note, 7 | .bmproperties #sampleText { 8 | min-width: 350px; 9 | height: 100%; 10 | } 11 | .bmproperties .treeview-container { 12 | min-width: 350px; 13 | } 14 | 15 | .grid-cell > .label { 16 | display: inline-block; 17 | margin: 5px; 18 | } 19 | .grid-cell > .label::after { 20 | content: ': '; 21 | } 22 | 23 | .bmproperties textarea { 24 | resize: vertical; 25 | } 26 | 27 | .bmproperties .treeview-container { 28 | max-height: 100px; 29 | overflow: auto; 30 | } 31 | -------------------------------------------------------------------------------- /src/clients/app/chooseFont/chooseFont.css: -------------------------------------------------------------------------------- 1 | .chooseFont .groupbox { 2 | position: relative; 3 | } 4 | 5 | .chooseFont #fontsGrid .grid-cell { 6 | display: flex; 7 | align-items: center; 8 | } 9 | 10 | .chooseFont select { 11 | width: 200px; 12 | } 13 | 14 | .chooseFont .picker-button { 15 | margin: 0; 16 | } 17 | .chooseFont .picker-button.disabled { 18 | background-color: whitesmoke; 19 | } 20 | 21 | .chooseFont .picker-button .color-box { 22 | display: block; 23 | width: 60px; 24 | height: 1.5em; 25 | margin: 3px; 26 | } 27 | 28 | .chooseFont .picker-button .chrome-picker { 29 | position: absolute; 30 | top: 0px; 31 | right: 50%; 32 | } 33 | html[dir='rtl'].chooseFont .picker-button .chrome-picker { 34 | right: unset; 35 | left: 50%; 36 | } 37 | -------------------------------------------------------------------------------- /src/clients/app/copyPassage/copyPassage.css: -------------------------------------------------------------------------------- 1 | .versePerLineButton, 2 | .chapinfo, 3 | .introtext { 4 | display: none; 5 | } 6 | 7 | #testdiv { 8 | position: absolute; 9 | overflow: hidden; 10 | height: 0; 11 | } 12 | -------------------------------------------------------------------------------- /src/clients/app/moduleManager/manager.css: -------------------------------------------------------------------------------- 1 | .modulemanager { 2 | padding: 0 10px 10px 10px; 3 | } 4 | 5 | .modulemanager .button-stack .button { 6 | margin: 6px 0; 7 | margin-inline-start: 10px; 8 | } 9 | 10 | .checkbox-column { 11 | text-align: center; 12 | font-size: 18px; 13 | } 14 | .checkbox-column.disabled { 15 | color: rgba(100, 100, 100, 0.4); 16 | } 17 | 18 | .langsmods.lt-closed .groupbox:first-child { 19 | border: none; 20 | padding-left: 0; 21 | padding-right: 0; 22 | } 23 | .langsmods.lt-closed .groupbox:first-child .groupbox-body { 24 | padding: 0; 25 | } 26 | 27 | #languageListClose { 28 | margin-top: 10px; 29 | } 30 | 31 | #languageListOpen { 32 | margin: 10px 5px 5px 5px; 33 | padding: 5px; 34 | } 35 | 36 | .module-deck { 37 | position: relative; 38 | } 39 | .module-deck .modinfo { 40 | position: absolute; 41 | height: 100%; 42 | width: 100%; 43 | overflow: auto; 44 | } 45 | 46 | #repository .custom-repo { 47 | border: 1px dotted rgb(0 132 255); 48 | border-right: none; 49 | } 50 | 51 | .progress-container { 52 | height: 100%; 53 | padding: 10px; 54 | } 55 | 56 | .moduleManager .bp5-dialog-body .label { 57 | white-space: unset; 58 | margin-bottom: 10px; 59 | } 60 | .moduleManager .bp5-dialog-body .label:first-child { 61 | font-size: large; 62 | margin-bottom: 20px; 63 | } 64 | -------------------------------------------------------------------------------- /src/clients/app/moduleManager/moduleManager.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import log from '../../log.ts'; 3 | import renderToRoot from '../../controller.tsx'; 4 | import ModuleManager, { onunload } from './manager.tsx'; 5 | 6 | renderToRoot(, { 7 | resetOnResize: false, // turns on after Internet dialog 8 | onunload, 9 | }).catch((er) => { 10 | log.error(er); 11 | }); 12 | -------------------------------------------------------------------------------- /src/clients/app/popupWin/popupWin.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { diff } from '../../../common.ts'; 3 | import { G } from '../../G.ts'; 4 | import log from '../../log.ts'; 5 | import RenderPromise from '../../renderPromise.ts'; 6 | import renderToRoot from '../../controller.tsx'; 7 | import { windowArguments } from '../../common.tsx'; 8 | import { 9 | addClass, 10 | type XulProps, 11 | xulPropTypes, 12 | } from '../../components/libxul/xul.tsx'; 13 | import { Vbox } from '../../components/libxul/boxes.tsx'; 14 | import { 15 | popupHandler as popupHandlerH, 16 | type PopupParent, 17 | type PopupParentState, 18 | type ViewportPopupProps, 19 | PopupParentInitState, 20 | } from '../../components/popup/popupParentH.ts'; 21 | import Popup from '../../components/popup/popup.tsx'; 22 | import '../../components/atext/atext.css'; 23 | import type { RenderPromiseState } from '../../renderPromise.ts'; 24 | 25 | const propTypes = { 26 | ...xulPropTypes, 27 | }; 28 | 29 | type PopupWinProps = ViewportPopupProps & XulProps; 30 | 31 | type PopupWinState = PopupParentState & RenderPromiseState; 32 | 33 | let windowState: Partial | undefined; 34 | 35 | export default class PopupWin extends React.Component implements PopupParent { 36 | static propTypes: typeof propTypes; 37 | 38 | popupHandler: typeof popupHandlerH; 39 | 40 | renderPromise: RenderPromise; 41 | 42 | loadingRef: React.RefObject; 43 | 44 | constructor(props: PopupWinProps) { 45 | super(props); 46 | 47 | if (typeof windowState === 'undefined') { 48 | windowState = windowArguments('popupState') as Partial; 49 | } 50 | 51 | this.state = { 52 | ...PopupParentInitState, 53 | ...(windowArguments('popupState') as Partial), 54 | renderPromiseID: 0, 55 | } as PopupWinState; 56 | 57 | this.popupHandler = popupHandlerH.bind(this); 58 | 59 | this.loadingRef = React.createRef(); 60 | this.renderPromise = new RenderPromise(this, this.loadingRef); 61 | } 62 | 63 | componentDidUpdate(_prevProps: PopupWinProps, prevState: PopupWinState) { 64 | const { renderPromise } = this; 65 | const state = this.state as PopupWinState; 66 | windowState = state; 67 | const changedState = diff( 68 | { ...prevState, popupParent: null }, 69 | { ...state, popupParent: null }, 70 | ); 71 | if (changedState) G.Window.mergeValue('popupState', changedState); 72 | renderPromise.dispatch(); 73 | } 74 | 75 | render() { 76 | const { loadingRef, popupHandler } = this; 77 | const { elemdata, popupReset } = this.state as PopupWinState; 78 | 79 | return ( 80 | 81 | 88 | 89 | ); 90 | } 91 | } 92 | PopupWin.propTypes = propTypes; 93 | 94 | renderToRoot().catch((er) => { 95 | log.error(er); 96 | }); 97 | -------------------------------------------------------------------------------- /src/clients/app/printPassageWin/printPassageWin.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import renderToRoot, { PrintOptionsType } from '../../controller.tsx'; 3 | import log from '../../log.ts'; 4 | import { setStatePref, windowArguments } from '../../common.tsx'; 5 | import PrintPassage from '../../components/printPassage/printPassage.tsx'; 6 | 7 | import type { PrintPassageState } from '../../components/printPassage/printPassage.tsx'; 8 | 9 | const openedWinState = windowArguments( 10 | 'passageWinState', 11 | ) as Partial | null; 12 | 13 | if (openedWinState) { 14 | setStatePref('prefs', 'printPassage', null, openedWinState); 15 | } 16 | 17 | const print: PrintOptionsType = { pageable: true, dialogEnd: 'close' }; 18 | 19 | renderToRoot(, { print }).catch((er) => { 20 | log.error(er); 21 | }); 22 | -------------------------------------------------------------------------------- /src/clients/app/removeModule/removeModule.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import renderToRoot from '../../controller.tsx'; 3 | import log from '../../log.ts'; 4 | import ModuleManager, { onunload } from '../moduleManager/manager.tsx'; 5 | 6 | renderToRoot(, { onunload }).catch((er) => { 7 | log.error(er); 8 | }); 9 | -------------------------------------------------------------------------------- /src/clients/app/root.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 15 | 18 | 19 | 20 |

21 | 22 | 23 | -------------------------------------------------------------------------------- /src/clients/app/searchHelpWin/searchHelpWin.css: -------------------------------------------------------------------------------- 1 | .searchHelp { 2 | min-width: 800px; 3 | } 4 | -------------------------------------------------------------------------------- /src/clients/app/searchHelpWin/searchHelpWin.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import log from '../../log.ts'; 3 | import renderToRoot from '../../controller.tsx'; 4 | import SearchHelp from '../../components/searchHelp/searchHelp.tsx'; 5 | import './searchHelpWin.css'; 6 | 7 | renderToRoot().catch((er) => { 8 | log.error(er); 9 | }); 10 | -------------------------------------------------------------------------------- /src/clients/app/searchWin/searchWin.css: -------------------------------------------------------------------------------- 1 | .searchWin { 2 | height: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /src/clients/app/searchWin/searchWin.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { noAutoSearchIndex } from '../../../common.ts'; 3 | import renderToRoot from '../../controller.tsx'; 4 | import { G } from '../../G.ts'; 5 | import log from '../../log.ts'; 6 | import Search from '../../components/search/search.tsx'; 7 | import { Indexing } from '../../components/search/searchH.tsx'; 8 | import { windowArguments } from '../../common.tsx'; 9 | import './searchWin.css'; 10 | 11 | import type { SearchType } from '../../../type.ts'; 12 | 13 | export const searchArg = windowArguments('search') as SearchType; 14 | 15 | export const descriptor = windowArguments(); 16 | 17 | renderToRoot( 18 | , 19 | { 20 | resetOnResize: false, 21 | onunload: () => { 22 | if (Indexing.current) { 23 | G.LibSword.searchIndexCancel(Indexing.current, descriptor.id); 24 | noAutoSearchIndex(G.Prefs, Indexing.current); 25 | } 26 | }, 27 | }, 28 | ).catch((er) => { 29 | log.error(er); 30 | }); 31 | -------------------------------------------------------------------------------- /src/clients/app/splash/splash.css: -------------------------------------------------------------------------------- 1 | html.splash, 2 | .splash body, 3 | .splash #root { 4 | overflow: hidden; 5 | margin: 0; 6 | padding: 0 !important; 7 | } 8 | 9 | #layer1 { 10 | background-image: url(../../../../assets/splash.png); 11 | background-repeat: no-repeat; 12 | width: 500px; 13 | height: 375px; 14 | } 15 | 16 | #layer2 { 17 | background-image: url('../../../../assets/splash-overlay.png'); 18 | background-repeat: no-repeat; 19 | width: 100%; 20 | height: 100%; 21 | } 22 | 23 | .splash-text .label { 24 | font-size: 14px; 25 | color: rgb(77, 37, 143); 26 | } 27 | .splash-text { 28 | padding-bottom: 3px; 29 | } 30 | -------------------------------------------------------------------------------- /src/clients/app/splash/splash.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { G } from '../../G.ts'; 3 | import renderToRoot from '../../controller.tsx'; 4 | import log from '../../log.ts'; 5 | import { Hbox, Vbox } from '../../components/libxul/boxes.tsx'; 6 | import Label from '../../components/libxul/label.tsx'; 7 | import Stack from '../../components/libxul/stack.tsx'; 8 | import './splash.css'; 9 | 10 | const overlay = G.inlineFile( 11 | `${G.Dirs.path.xsAsset}/splash-overlay-${G.i18n.language}.png`, 12 | ); 13 | const style = overlay ? ( 14 | 19 | ) : undefined; 20 | 21 | const opts = { ns: 'branding' }; 22 | const producedBy = G.i18n.exists('producedBy', opts) 23 | ? G.i18n.t('producedBy', opts) 24 | : ''; 25 | 26 | renderToRoot( 27 | 28 | {style} 29 | 30 | 31 | 32 | 33 | 34 | 36 | 37 | 38 | 39 | , 40 | ).catch((er) => { 41 | log.error(er); 42 | }); 43 | -------------------------------------------------------------------------------- /src/clients/app/xulswordWin/xulswordWin.css: -------------------------------------------------------------------------------- 1 | .xulswordWin { 2 | overflow: hidden; 3 | } 4 | .xulswordWin .bp5-portal .dialog-body { 5 | padding: 0 20px; 6 | } 7 | .xulswordWin .controlbar .start-spacer { 8 | width: 15px; 9 | } 10 | .xulswordWin .bp5-button { 11 | min-height: unset; 12 | } 13 | .xulswordWin #closeplayer { 14 | margin-inline-start: 10px !important; 15 | } 16 | .xulswordWin .controlbar .button, 17 | .xulswordWin .controlbar .button > div, 18 | .xulswordWin .controlbar button { 19 | width: 100%; 20 | } 21 | .xulswordWin .controlbar .textbox { 22 | font-size: 15px; 23 | } 24 | .xulswordWin .controlbar #search-tool .vbox > div { 25 | width: 100%; 26 | } 27 | .xulswordWin .controlbar #historymenu { 28 | position: relative; 29 | } 30 | .xulswordWin .controlbar #book, 31 | .xulswordWin .controlbar #chapter, 32 | .xulswordWin .controlbar #verse { 33 | margin-top: 0; 34 | margin-bottom: 2px; 35 | } 36 | -------------------------------------------------------------------------------- /src/clients/app/xulswordWin/xulswordWin.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { G } from '../../G.ts'; 3 | import renderToRoot from '../../controller.tsx'; 4 | import log from '../../log.ts'; 5 | import Xulsword from '../../components/xulsword/xulsword.tsx'; 6 | import './xulswordWin.css'; 7 | 8 | renderToRoot(, { 9 | onload: () => { 10 | log.verbose('Loading Xulsword!'); 11 | setTimeout(() => { 12 | G.Window.moveToBack(); 13 | }, 100); 14 | }, 15 | }).catch((er) => { 16 | log.error(er); 17 | }); 18 | -------------------------------------------------------------------------------- /src/clients/commands.ts: -------------------------------------------------------------------------------- 1 | import commands from '../commands.ts'; 2 | import { G, GI } from './G.ts'; 3 | import CookiePrefs from './webapp/prefs.ts'; 4 | 5 | export default new commands(G, GI, Build.isElectronApp ? G.Prefs : CookiePrefs); 6 | -------------------------------------------------------------------------------- /src/clients/components/audioIcon/audioIcon.css: -------------------------------------------------------------------------------- 1 | .audio-icon { 2 | width: fit-content; 3 | color: var(--color-primary); 4 | } 5 | .audio-icon span { 6 | cursor: pointer; 7 | } 8 | -------------------------------------------------------------------------------- /src/clients/components/audioIcon/audioIcon.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Icon } from '@blueprintjs/core'; 3 | import { G } from '../../G.ts'; 4 | import { genBookAudioFile, verseKeyAudioFile } from '../../common.tsx'; 5 | import RenderPromise from '../../renderPromise.ts'; 6 | import './audioIcon.css'; 7 | 8 | import type { 9 | GenBookAudioFile, 10 | OSISBookType, 11 | VerseKeyAudioFile, 12 | } from '../../../type.ts'; 13 | 14 | export default function audioIcon( 15 | module: string, 16 | bookOrKey: OSISBookType | string, 17 | chapter: number | undefined, 18 | audioHandler: ( 19 | audio: VerseKeyAudioFile | GenBookAudioFile, 20 | e: React.SyntheticEvent, 21 | ) => void, 22 | renderPromise: RenderPromise, 23 | ): JSX.Element | null { 24 | let afile: VerseKeyAudioFile | GenBookAudioFile | null = null; 25 | if (G.Tab[module].isVerseKey) { 26 | const book = bookOrKey as OSISBookType; 27 | afile = verseKeyAudioFile(module, book, chapter ?? 1, renderPromise); 28 | } else if (G.Tab[module].tabType === 'Genbks' && bookOrKey) { 29 | afile = genBookAudioFile(module, bookOrKey, renderPromise); 30 | } 31 | if (afile) { 32 | const handler = ((ax: VerseKeyAudioFile | GenBookAudioFile) => { 33 | return (e: React.SyntheticEvent) => { 34 | e.stopPropagation(); 35 | audioHandler(ax, e); 36 | }; 37 | })(afile); 38 | return ( 39 |
40 | 41 |
42 | ); 43 | } 44 | return null; 45 | } 46 | -------------------------------------------------------------------------------- /src/clients/components/genbookChooser/genbookChooser.css: -------------------------------------------------------------------------------- 1 | .genbook-chooser { 2 | height: calc(100% - 25px); 3 | } 4 | 5 | .genbook-chooser .chooser-container { 6 | width: 200px; 7 | border-inline-start: unset; 8 | border-top: unset; 9 | border-inline-end: unset; 10 | border-bottom: unset; 11 | border-radius: unset; 12 | } 13 | 14 | .genbook-chooser .scroll-parent { 15 | position: absolute; 16 | top: 0px; 17 | left: 0px; 18 | bottom: 0px; 19 | min-width: calc(100% - 3px); 20 | max-width: calc(100% - 3px); 21 | overflow: auto; 22 | z-index: 7; 23 | border-inline-start: 2px solid rgb(175, 145, 180); 24 | border-top: 2px solid rgb(175, 145, 180); 25 | border-inline-end: 2px solid rgb(225, 195, 230); 26 | border-bottom: 2px solid rgb(225, 195, 230); 27 | border-radius: 8px; 28 | background: white; 29 | transition: 0.25s; 30 | } 31 | 32 | .genbook-chooser .scroll-parent:hover { 33 | max-width: 800px; 34 | filter: drop-shadow(10px 10px 2px #777777); 35 | transition: 0.5s; 36 | transition-delay: 1s; 37 | } 38 | 39 | html[dir='rtl'] .genbook-chooser .scroll-parent { 40 | transform: scaleX(-1); 41 | left: unset; 42 | right: 0px; 43 | } 44 | html[dir='rtl'] .genbook-chooser .scroll-parent:hover { 45 | right: -5px; 46 | } 47 | html[dir='rtl'] .bp5-tree-node-label { 48 | transform: scaleX(-1); 49 | } 50 | 51 | .genbook-chooser .fadetop { 52 | display: none; 53 | } 54 | .genbook-chooser .fadebot { 55 | display: none; 56 | } 57 | .genbook-chooser .bp5-tree-node-caret-none + .bp5-icon-volume-up { 58 | margin-inline-start: -24px; 59 | } 60 | -------------------------------------------------------------------------------- /src/clients/components/images/Bookmarks-toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/Bookmarks-toolbar.png -------------------------------------------------------------------------------- /src/clients/components/images/CommsWithNote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/CommsWithNote.png -------------------------------------------------------------------------------- /src/clients/components/images/DictsWithNote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/DictsWithNote.png -------------------------------------------------------------------------------- /src/clients/components/images/GenbksWithNote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/GenbksWithNote.png -------------------------------------------------------------------------------- /src/clients/components/images/Question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/Question.png -------------------------------------------------------------------------------- /src/clients/components/images/TextsWithNote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/TextsWithNote.png -------------------------------------------------------------------------------- /src/clients/components/images/Warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/Warning.png -------------------------------------------------------------------------------- /src/clients/components/images/arm-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arm-icons.png -------------------------------------------------------------------------------- /src/clients/components/images/arrow-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow-rtl.png -------------------------------------------------------------------------------- /src/clients/components/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow.png -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-dn-dis.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-dn-dis.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-dn-hov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-dn-hov.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-dn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-dn.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-lft-dis.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-lft-dis.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-lft-hov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-lft-hov.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-lft.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-lft.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-rit-dis.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-rit-dis.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-rit-hov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-rit-hov.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-rit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-rit.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-up-dis.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-up-dis.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-up-hov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-up-hov.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow/arrow-up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow/arrow-up.gif -------------------------------------------------------------------------------- /src/clients/components/images/arrow2-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow2-rtl.png -------------------------------------------------------------------------------- /src/clients/components/images/arrow2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/arrow2.png -------------------------------------------------------------------------------- /src/clients/components/images/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/back.png -------------------------------------------------------------------------------- /src/clients/components/images/bottomArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/bottomArrow.png -------------------------------------------------------------------------------- /src/clients/components/images/close0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/close0.png -------------------------------------------------------------------------------- /src/clients/components/images/close1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/close1.png -------------------------------------------------------------------------------- /src/clients/components/images/crossrefs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/crossrefs.png -------------------------------------------------------------------------------- /src/clients/components/images/dict.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/dict.png -------------------------------------------------------------------------------- /src/clients/components/images/downArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/downArrow.png -------------------------------------------------------------------------------- /src/clients/components/images/draghandle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/draghandle.png -------------------------------------------------------------------------------- /src/clients/components/images/dropdown-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/dropdown-menu.png -------------------------------------------------------------------------------- /src/clients/components/images/folder-item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/folder-item.png -------------------------------------------------------------------------------- /src/clients/components/images/footnotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/footnotes.png -------------------------------------------------------------------------------- /src/clients/components/images/forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/forward.png -------------------------------------------------------------------------------- /src/clients/components/images/headings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/headings.png -------------------------------------------------------------------------------- /src/clients/components/images/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/help.png -------------------------------------------------------------------------------- /src/clients/components/images/historymenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/historymenu.png -------------------------------------------------------------------------------- /src/clients/components/images/information-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/information-32.png -------------------------------------------------------------------------------- /src/clients/components/images/listen-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/listen-small.png -------------------------------------------------------------------------------- /src/clients/components/images/listen0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/listen0.png -------------------------------------------------------------------------------- /src/clients/components/images/listen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/listen1.png -------------------------------------------------------------------------------- /src/clients/components/images/max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/max.png -------------------------------------------------------------------------------- /src/clients/components/images/norm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/norm.png -------------------------------------------------------------------------------- /src/clients/components/images/open0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/open0.png -------------------------------------------------------------------------------- /src/clients/components/images/open1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/open1.png -------------------------------------------------------------------------------- /src/clients/components/images/pushpin0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/pushpin0.png -------------------------------------------------------------------------------- /src/clients/components/images/pushpin1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/pushpin1.png -------------------------------------------------------------------------------- /src/clients/components/images/pushpin2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/pushpin2.png -------------------------------------------------------------------------------- /src/clients/components/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/search.png -------------------------------------------------------------------------------- /src/clients/components/images/shared.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/shared.png -------------------------------------------------------------------------------- /src/clients/components/images/smallButtonDecrement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/smallButtonDecrement.png -------------------------------------------------------------------------------- /src/clients/components/images/smallButtonIncrement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/smallButtonIncrement.png -------------------------------------------------------------------------------- /src/clients/components/images/splash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/splash.jpg -------------------------------------------------------------------------------- /src/clients/components/images/topArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/topArrow.png -------------------------------------------------------------------------------- /src/clients/components/images/towindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/towindow.png -------------------------------------------------------------------------------- /src/clients/components/images/twisty-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/twisty-close.png -------------------------------------------------------------------------------- /src/clients/components/images/twisty-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/twisty-open.png -------------------------------------------------------------------------------- /src/clients/components/images/upArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/upArrow.png -------------------------------------------------------------------------------- /src/clients/components/images/versePerLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/versePerLine.png -------------------------------------------------------------------------------- /src/clients/components/images/videohelp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JohnAustinDev/xulsword/2dd2e8858e663d15eaada0038e4b29eba8d4acbd/src/clients/components/images/videohelp.png -------------------------------------------------------------------------------- /src/clients/components/libxul/bookselect.css: -------------------------------------------------------------------------------- 1 | .bookselect { 2 | width: fit-content; 3 | height: fit-content; 4 | margin: 0; 5 | padding: 0; 6 | padding-inline-start: 0; 7 | } 8 | .bookselect:focus-within .stack > div:first-child { 9 | outline: rgba(45, 114, 210, 0.6) auto 2px; 10 | outline-offset: 2px; 11 | -moz-outline-radius: 6px; 12 | } 13 | 14 | .bookselect .stack { 15 | width: 100%; 16 | height: fit-content; 17 | } 18 | 19 | .bookselect .stack > div { 20 | padding: 3px 3px 3px; 21 | padding-inline-start: 4px; 22 | } 23 | .bookselect .stack > div:first-child, 24 | .bookselect .stack > div:first-child > .menulist { 25 | width: 100%; 26 | } 27 | .bookselect .stack > div:nth-child(2) { 28 | height: 100%; 29 | } 30 | .bookselect .spacer { 31 | width: 24px; 32 | min-width: 24px; 33 | } 34 | 35 | .bookselect .textbox, 36 | .bookselect .menulist { 37 | height: auto; 38 | margin: 0px; 39 | padding: 0px; 40 | -webkit-box-shadow: unset; 41 | box-shadow: unset; 42 | border: none; 43 | border-radius: unset; 44 | padding-inline-start: unset; 45 | } 46 | 47 | .bookselect input { 48 | z-index: 3; 49 | border: none; 50 | } 51 | .bookselect input:focus-visible { 52 | outline: transparent; 53 | } 54 | 55 | .bookselect select { 56 | width: 100%; 57 | padding-inline-end: 18px; 58 | z-index: 2; 59 | border: none; 60 | background-color: white; 61 | padding-inline-start: 10px; 62 | } 63 | .bookselect select:focus-visible { 64 | outline: transparent; 65 | } 66 | -------------------------------------------------------------------------------- /src/clients/components/libxul/boxes.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | align-items: stretch; 4 | flex-wrap: nowrap; 5 | } 6 | 7 | .vbox, 8 | .orient-vertical { 9 | flex-direction: column; 10 | justify-content: space-around; 11 | } 12 | 13 | .hbox, 14 | .orient-horizontal { 15 | flex-direction: row; 16 | } 17 | 18 | .pack-start { 19 | justify-content: flex-start; 20 | } 21 | .pack-center { 22 | justify-content: center; 23 | } 24 | .pack-end { 25 | justify-content: flex-end; 26 | } 27 | 28 | .align-start { 29 | align-items: flex-start; 30 | } 31 | .align-center { 32 | align-items: center; 33 | } 34 | .align-end { 35 | align-items: flex-end; 36 | } 37 | .align-stretch { 38 | align-items: stretch; 39 | } 40 | .align-baseline { 41 | align-items: baseline; 42 | } 43 | 44 | .xuldir-reverse { 45 | flex-direction: row-reverse; 46 | } 47 | -------------------------------------------------------------------------------- /src/clients/components/libxul/boxes.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { xulPropTypes, type XulProps, htmlAttribs } from './xul.tsx'; 3 | import './boxes.css'; 4 | 5 | // XUL box 6 | const propTypes = xulPropTypes; 7 | 8 | function Box(props: XulProps) { 9 | return
{props.children}
; 10 | } 11 | Box.propTypes = propTypes; 12 | 13 | // XUL hbox 14 | function Hbox(props: XulProps) { 15 | return ( 16 | 20 | {props.children} 21 | 22 | ); 23 | } 24 | Hbox.propTypes = propTypes; 25 | 26 | // XUL vbox 27 | function Vbox(props: XulProps) { 28 | return ( 29 | 33 | {props.children} 34 | 35 | ); 36 | } 37 | Vbox.propTypes = propTypes; 38 | 39 | export { Box, Hbox, Vbox }; 40 | -------------------------------------------------------------------------------- /src/clients/components/libxul/button.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin: 5px; 3 | } 4 | .button .button-box { 5 | position: relative; /* For Menulist */ 6 | width: fit-content; 7 | height: fit-content; 8 | } 9 | 10 | .button.fill-x .button-box, 11 | .button.fill-x .button-box > button { 12 | width: 100%; 13 | } 14 | .button.fill-y .button-box, 15 | .button.fill-y .button-box > button { 16 | height: 100%; 17 | } 18 | .button.fill-xy .button-box, 19 | .button.fill-xy .button-box > button { 20 | width: 100%; 21 | height: 100%; 22 | } 23 | 24 | .button.on .bp5-icon { 25 | color: #4444c1; 26 | } 27 | -------------------------------------------------------------------------------- /src/clients/components/libxul/button.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { Button as BPButton } from '@blueprintjs/core'; 4 | import { keep } from '../../../common.ts'; 5 | import { xulPropTypes, type XulProps, htmlAttribs } from './xul.tsx'; 6 | import './button.css'; 7 | 8 | import type { ButtonProps as BPButtonProps } from '@blueprintjs/core'; 9 | 10 | // XUL button 11 | const propTypes = { 12 | ...xulPropTypes, 13 | fill: PropTypes.oneOf(['xy', 'x', 'y']), 14 | checked: PropTypes.bool, 15 | dlgType: PropTypes.string, 16 | }; 17 | 18 | type ButtonProps = Omit & 19 | Omit & { 20 | fill?: 'xy' | 'x' | 'y'; // to fill container in x, y or both directions 21 | checked?: boolean; // only does button CSS styling 22 | dlgType?: string; // only does button CSS styling 23 | }; 24 | 25 | function Button(props: ButtonProps) { 26 | const { checked, children, disabled, dlgType, fill } = props; 27 | const cls: string[] = ['button', checked !== false ? 'on' : 'off']; 28 | if (dlgType) cls.push(dlgType); 29 | if (fill) cls.push(`fill-${fill}`); 30 | const bpprops = [ 31 | 'active', 32 | 'alignText', 33 | 'disabled', 34 | 'icon', 35 | 'intent', 36 | 'large', 37 | 'loading', 38 | 'minimal', 39 | 'outlined', 40 | 'rightIcon', 41 | 'small', 42 | 'text', 43 | 'type', 44 | ] as const; 45 | return ( 46 |
50 |
51 | 52 | {children} 53 | 54 |
55 |
56 | ); 57 | } 58 | Button.propTypes = propTypes; 59 | 60 | export default Button; 61 | 62 | export function AnchorButton({ 63 | disabled = false, 64 | ...props 65 | }: XulProps & { disabled?: boolean }) { 66 | return ( 67 | 72 | {props.children} 73 | 74 | ); 75 | } 76 | AnchorButton.propTypes = { ...xulPropTypes, disabled: PropTypes.bool }; 77 | -------------------------------------------------------------------------------- /src/clients/components/libxul/checkbox.css: -------------------------------------------------------------------------------- 1 | .checkbox.box { 2 | align-items: baseline; 3 | } 4 | 5 | .checkbox input { 6 | margin-inline-end: 0.4em; 7 | } 8 | -------------------------------------------------------------------------------- /src/clients/components/libxul/checkbox.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { Hbox } from './boxes.tsx'; 4 | import Label from './label.tsx'; 5 | import { xulPropTypes, type XulProps, addClass } from './xul.tsx'; 6 | import './checkbox.css'; 7 | 8 | // XUL button 9 | 10 | const propTypes = { 11 | ...xulPropTypes, 12 | checked: PropTypes.bool, 13 | disabled: PropTypes.bool, 14 | label: PropTypes.string, 15 | initial: PropTypes.bool, 16 | }; 17 | 18 | type CheckboxProps = { 19 | checked?: boolean | undefined; 20 | disabled?: boolean | undefined; 21 | label?: string | undefined; 22 | initial?: boolean | undefined; 23 | } & XulProps; 24 | 25 | // The Checkbox may either keep its own checked state OR be a 26 | // totally controlled component: If the 'initial' prop is 27 | // undefined, the component will be a totally controlled component 28 | // (no acting state of its own). If the 'initial' prop is 29 | // defined, any checked prop value will be ignored. 30 | type CheckboxState = { 31 | checked: boolean; 32 | }; 33 | 34 | class Checkbox extends React.Component { 35 | static propTypes: typeof propTypes; 36 | 37 | constructor(props: CheckboxProps) { 38 | super(props); 39 | 40 | const s: CheckboxState = { 41 | checked: (props.initial ?? props.checked) || false, 42 | }; 43 | this.state = s; 44 | } 45 | 46 | render() { 47 | const props = this.props as CheckboxProps; 48 | const state = this.state as CheckboxState; 49 | const { checked, disabled, label, initial } = props; 50 | const { checked: checkedState } = state; 51 | const isChecked = initial === undefined ? checked : checkedState; 52 | return ( 53 | 54 | { 60 | this.setState({ checked: !checkedState }); 61 | }} 62 | /> 63 | 65 | ); 66 | } 67 | } 68 | Checkbox.propTypes = propTypes; 69 | 70 | export default Checkbox; 71 | -------------------------------------------------------------------------------- /src/clients/components/libxul/deck.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { xulPropTypes, type XulProps, htmlAttribs } from './xul.tsx'; 3 | 4 | // XUL deck 5 | const propTypes = xulPropTypes; 6 | 7 | function Deck(props: XulProps) { 8 | return
{props.children}
; 9 | } 10 | Deck.propTypes = propTypes; 11 | 12 | export default Deck; 13 | -------------------------------------------------------------------------------- /src/clients/components/libxul/dialog.tsx: -------------------------------------------------------------------------------- 1 | import React, { type ReactElement } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { Classes, Dialog as BPDialog } from '@blueprintjs/core'; 4 | import { drop } from '../../../common.ts'; 5 | import { xulPropTypes, type XulProps } from './xul.tsx'; 6 | import { Hbox } from './boxes.tsx'; 7 | 8 | // XUL label 9 | const propTypes = { 10 | ...xulPropTypes, 11 | body: PropTypes.element, 12 | buttons: PropTypes.element, 13 | }; 14 | 15 | type DialogProps = { 16 | body?: ReactElement | null; 17 | buttons?: ReactElement | null; 18 | } & XulProps; 19 | 20 | function Dialog(props: DialogProps) { 21 | const { body, buttons, className } = props; 22 | const cls = ['dialog']; 23 | if (className) cls.push(className); 24 | return ( 25 | 26 |
{body}
27 | 28 | {buttons} 29 | 30 |
31 | ); 32 | } 33 | Dialog.propTypes = propTypes; 34 | 35 | export default Dialog; 36 | -------------------------------------------------------------------------------- /src/clients/components/libxul/dragsizer.css: -------------------------------------------------------------------------------- 1 | .dragsizer { 2 | position: relative; 3 | } 4 | 5 | .dragsizer.vertical { 6 | width: 4px; 7 | height: 95%; 8 | margin: auto 6px auto 6px; 9 | } 10 | 11 | .dragsizer.horizontal { 12 | width: 95%; 13 | height: 4px; 14 | margin: 6px auto 6px auto; 15 | } 16 | 17 | .dragsizer > div { 18 | position: absolute; 19 | background: rgb(233, 233, 233); 20 | border: 1px outset rgba(150, 150, 150, 0.2); 21 | border-radius: 4px; 22 | } 23 | 24 | .dragsizer.vertical > div { 25 | cursor: ew-resize; 26 | width: 4px; 27 | top: 0px; 28 | bottom: 0px; 29 | } 30 | 31 | .dragsizer.horizontal > div { 32 | cursor: ns-resize; 33 | height: 4px; 34 | left: 0px; 35 | right: 0px; 36 | } 37 | 38 | .dragsizer > .dragging { 39 | border: 1px dashed rgb(150, 150, 150); 40 | background: #1e90ff; 41 | z-index: 10; 42 | } 43 | -------------------------------------------------------------------------------- /src/clients/components/libxul/grid.css: -------------------------------------------------------------------------------- 1 | .grid { 2 | gap: 10px 10px; 3 | align-items: center; 4 | justify-items: start; 5 | } 6 | 7 | .grid-row-cell { 8 | width: 100%; 9 | height: 100%; 10 | } 11 | -------------------------------------------------------------------------------- /src/clients/components/libxul/groupbox.css: -------------------------------------------------------------------------------- 1 | .groupbox { 2 | margin: 10px 5px 5px 5px; 3 | padding: 5px; 4 | border: 2px solid rgb(200, 200, 200); 5 | border-radius: 4px; 6 | background: hsl(0 0% 94% / 1); 7 | } 8 | 9 | .groupbox .groupbox-title { 10 | display: block; 11 | white-space: nowrap; 12 | overflow-y: visible; 13 | margin-top: -0.9em; 14 | margin-bottom: 2px; 15 | margin-inline-start: -9px; 16 | font-weight: bold; 17 | } 18 | 19 | .groupbox .caption-text { 20 | margin-top: 0; 21 | margin-bottom: 0; 22 | margin-inline-start: 1px; 23 | background: whitesmoke; 24 | padding: 0 2px; 25 | } 26 | 27 | .groupbox .groupbox-body { 28 | padding: 10px; 29 | } 30 | -------------------------------------------------------------------------------- /src/clients/components/libxul/groupbox.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { keep, drop } from '../../../common.ts'; 4 | import { addClass, xulPropTypes, type XulProps } from './xul.tsx'; 5 | import Label from './label.tsx'; 6 | import Image from './image.tsx'; 7 | import { Box, Hbox, Vbox } from './boxes.tsx'; 8 | import './groupbox.css'; 9 | 10 | // XUL deck 11 | const propTypes = { 12 | ...xulPropTypes, 13 | caption: PropTypes.string, 14 | image: PropTypes.string, 15 | }; 16 | 17 | type GroupboxProps = XulProps & { 18 | caption?: string; 19 | image?: string; 20 | }; 21 | 22 | function Groupbox({ orient = 'vertical', ...props }: GroupboxProps) { 23 | const { caption, image } = props; 24 | // These props should be passed to the groupbox body 25 | const passToBody = ['align', 'orient', 'pack'] as const; 26 | return ( 27 | 28 | {caption && ( 29 | 30 | 31 | 33 | )} 34 | 38 | {props.children} 39 | 40 | 41 | ); 42 | } 43 | Groupbox.propTypes = propTypes; 44 | 45 | export default Groupbox; 46 | -------------------------------------------------------------------------------- /src/clients/components/libxul/image.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { xulPropTypes, type XulProps, htmlAttribs } from './xul.tsx'; 4 | 5 | // XUL image 6 | const propTypes = { 7 | ...xulPropTypes, 8 | src: PropTypes.string, 9 | }; 10 | 11 | type ImageProps = { 12 | src: string | undefined; 13 | } & XulProps; 14 | function Image(props: ImageProps) { 15 | return ; 16 | } 17 | Image.propTypes = propTypes; 18 | 19 | export default Image; 20 | -------------------------------------------------------------------------------- /src/clients/components/libxul/label.css: -------------------------------------------------------------------------------- 1 | .label { 2 | white-space: nowrap; 3 | } 4 | -------------------------------------------------------------------------------- /src/clients/components/libxul/label.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { xulPropTypes, type XulProps, htmlAttribs } from './xul.tsx'; 4 | import './label.css'; 5 | 6 | // XUL label 7 | const propTypes = { 8 | ...xulPropTypes, 9 | control: PropTypes.string, 10 | value: PropTypes.string, 11 | }; 12 | 13 | type LabelProps = { 14 | control?: string | undefined; 15 | value: string; 16 | } & XulProps; 17 | 18 | function Label({ value = '', ...props }: LabelProps) { 19 | const { control } = props; 20 | 21 | return ( 22 | 25 | ); 26 | } 27 | Label.propTypes = propTypes; 28 | 29 | export default Label; 30 | -------------------------------------------------------------------------------- /src/clients/components/libxul/menulist.css: -------------------------------------------------------------------------------- 1 | .menulist select { 2 | border: none; 3 | border-radius: 1px; 4 | background: none; 5 | } 6 | -------------------------------------------------------------------------------- /src/clients/components/libxul/menulist.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { addClass, xulPropTypes, type XulProps } from './xul.tsx'; 4 | import { Box } from './boxes.tsx'; 5 | import './menulist.css'; 6 | 7 | // This is a controlled React component so onChange is required. 8 | // 9 | // NOTES about React select components from https://react.dev/reference/react-dom/components/select: 10 | // - Unlike in HTML, passing a selected attribute to