biblemategui 0.0.12__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- biblemategui-0.0.12/PKG-INFO +82 -0
- biblemategui-0.0.12/biblemategui/README.md +42 -0
- biblemategui-0.0.12/biblemategui/__init__.py +14 -0
- biblemategui-0.0.12/biblemategui/config.py +0 -0
- biblemategui-0.0.12/biblemategui/css/original.py +330 -0
- biblemategui-0.0.12/biblemategui/eliranwong.jpg +0 -0
- biblemategui-0.0.12/biblemategui/fx/bible.py +15 -0
- biblemategui-0.0.12/biblemategui/fx/original.py +44 -0
- biblemategui-0.0.12/biblemategui/js/bible.py +24 -0
- biblemategui-0.0.12/biblemategui/js/original.py +44 -0
- biblemategui-0.0.12/biblemategui/js/sync_scrolling.py +116 -0
- biblemategui-0.0.12/biblemategui/main.py +80 -0
- biblemategui-0.0.12/biblemategui/package_name.txt +1 -0
- biblemategui-0.0.12/biblemategui/pages/README.md +11 -0
- biblemategui-0.0.12/biblemategui/pages/ai/chat.py +96 -0
- biblemategui-0.0.12/biblemategui/pages/bibles/original_discourse.py +138 -0
- biblemategui-0.0.12/biblemategui/pages/bibles/original_interlinear.py +138 -0
- biblemategui-0.0.12/biblemategui/pages/bibles/original_linguistic.py +139 -0
- biblemategui-0.0.12/biblemategui/pages/bibles/original_parallel.py +139 -0
- biblemategui-0.0.12/biblemategui/pages/bibles/original_reader.py +139 -0
- biblemategui-0.0.12/biblemategui/pages/home.py +637 -0
- biblemategui-0.0.12/biblemategui/pages/tools/audio.py +139 -0
- biblemategui-0.0.12/biblemategui/pages/tools/chronology.py +343 -0
- biblemategui-0.0.12/biblemategui/requirements.txt +2 -0
- biblemategui-0.0.12/biblemategui/version.txt +1 -0
- biblemategui-0.0.12/biblemategui.egg-info/PKG-INFO +82 -0
- biblemategui-0.0.12/biblemategui.egg-info/SOURCES.txt +31 -0
- biblemategui-0.0.12/biblemategui.egg-info/dependency_links.txt +1 -0
- biblemategui-0.0.12/biblemategui.egg-info/entry_points.txt +3 -0
- biblemategui-0.0.12/biblemategui.egg-info/requires.txt +5 -0
- biblemategui-0.0.12/biblemategui.egg-info/top_level.txt +1 -0
- biblemategui-0.0.12/setup.cfg +4 -0
- biblemategui-0.0.12/setup.py +109 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: biblemategui
|
|
3
|
+
Version: 0.0.12
|
|
4
|
+
Summary: BibleMate AI - Automate Your Bible Study
|
|
5
|
+
Home-page: https://biblemate.ai
|
|
6
|
+
Author: Eliran Wong
|
|
7
|
+
Author-email: support@marvel.bible
|
|
8
|
+
License: GNU General Public License (GPL)
|
|
9
|
+
Project-URL: Source, https://github.com/eliranwong/biblemategui
|
|
10
|
+
Project-URL: Tracker, https://github.com/eliranwong/biblemategui/issues
|
|
11
|
+
Project-URL: Documentation, https://github.com/eliranwong/biblemategui/wiki
|
|
12
|
+
Project-URL: Funding, https://www.paypal.me/MarvelBible
|
|
13
|
+
Keywords: mcp agent biblemate ai anthropic azure chatgpt cohere deepseek genai github googleai groq llamacpp mistral ollama openai vertexai xai
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Topic :: Utilities
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
19
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Requires-Python: >=3.10, <3.13
|
|
24
|
+
Requires-Dist: biblemate
|
|
25
|
+
Requires-Dist: nicegui
|
|
26
|
+
Provides-Extra: genai
|
|
27
|
+
Requires-Dist: google-genai>=1.46.0; extra == "genai"
|
|
28
|
+
Dynamic: author
|
|
29
|
+
Dynamic: author-email
|
|
30
|
+
Dynamic: classifier
|
|
31
|
+
Dynamic: description
|
|
32
|
+
Dynamic: home-page
|
|
33
|
+
Dynamic: keywords
|
|
34
|
+
Dynamic: license
|
|
35
|
+
Dynamic: project-url
|
|
36
|
+
Dynamic: provides-extra
|
|
37
|
+
Dynamic: requires-dist
|
|
38
|
+
Dynamic: requires-python
|
|
39
|
+
Dynamic: summary
|
|
40
|
+
|
|
41
|
+
# BibleMate AI Web
|
|
42
|
+
|
|
43
|
+
BibleMate AI Web Application - Web UI
|
|
44
|
+
|
|
45
|
+
BibleMate AI Web Version is designed to combine the most valuable features from the following two projects into a single, unified web interface:
|
|
46
|
+
|
|
47
|
+
https://github.com/eliranwong/biblemate
|
|
48
|
+
|
|
49
|
+
and
|
|
50
|
+
|
|
51
|
+
https://github.com/eliranwong/UniqueBible
|
|
52
|
+
|
|
53
|
+
# Development in Progress ...
|
|
54
|
+
|
|
55
|
+
Install for testing:
|
|
56
|
+
|
|
57
|
+
> pip install --upgrade biblemategui
|
|
58
|
+
|
|
59
|
+
Run:
|
|
60
|
+
|
|
61
|
+
> biblemategui
|
|
62
|
+
|
|
63
|
+
## Recent Updates
|
|
64
|
+
|
|
65
|
+
[Cross-Highlighting & Synchronized Scrolling](https://youtu.be/TDyT1ioesmY)
|
|
66
|
+
|
|
67
|
+
[](https://youtu.be/TDyT1ioesmY)
|
|
68
|
+
|
|
69
|
+
[UI Overview](https://youtu.be/UL8b1O97560)
|
|
70
|
+
|
|
71
|
+
[](https://youtu.be/UL8b1O97560)
|
|
72
|
+
|
|
73
|
+
## Use Existing UniqueBible App Data
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
cd
|
|
77
|
+
mkdir biblemate
|
|
78
|
+
cd biblemate
|
|
79
|
+
ln -s ../UniqueBible/marvelData data
|
|
80
|
+
cd data
|
|
81
|
+
eliran@ai-desk:~/biblemate/data$ ln -s ../../UniqueBible/audio/ audio
|
|
82
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# BibleMate AI Web
|
|
2
|
+
|
|
3
|
+
BibleMate AI Web Application - Web UI
|
|
4
|
+
|
|
5
|
+
BibleMate AI Web Version is designed to combine the most valuable features from the following two projects into a single, unified web interface:
|
|
6
|
+
|
|
7
|
+
https://github.com/eliranwong/biblemate
|
|
8
|
+
|
|
9
|
+
and
|
|
10
|
+
|
|
11
|
+
https://github.com/eliranwong/UniqueBible
|
|
12
|
+
|
|
13
|
+
# Development in Progress ...
|
|
14
|
+
|
|
15
|
+
Install for testing:
|
|
16
|
+
|
|
17
|
+
> pip install --upgrade biblemategui
|
|
18
|
+
|
|
19
|
+
Run:
|
|
20
|
+
|
|
21
|
+
> biblemategui
|
|
22
|
+
|
|
23
|
+
## Recent Updates
|
|
24
|
+
|
|
25
|
+
[Cross-Highlighting & Synchronized Scrolling](https://youtu.be/TDyT1ioesmY)
|
|
26
|
+
|
|
27
|
+
[](https://youtu.be/TDyT1ioesmY)
|
|
28
|
+
|
|
29
|
+
[UI Overview](https://youtu.be/UL8b1O97560)
|
|
30
|
+
|
|
31
|
+
[](https://youtu.be/UL8b1O97560)
|
|
32
|
+
|
|
33
|
+
## Use Existing UniqueBible App Data
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
cd
|
|
37
|
+
mkdir biblemate
|
|
38
|
+
cd biblemate
|
|
39
|
+
ln -s ../UniqueBible/marvelData data
|
|
40
|
+
cd data
|
|
41
|
+
eliran@ai-desk:~/biblemate/data$ ln -s ../../UniqueBible/audio/ audio
|
|
42
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
BIBLEMATEGUI_APP_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
5
|
+
BIBLEMATEGUI_USER_DIR = os.path.join(os.path.expanduser("~"), "biblemate")
|
|
6
|
+
BIBLEMATEGUI_DATA = os.path.join(os.path.expanduser("~"), "biblemate", "data")
|
|
7
|
+
if not os.path.isdir(BIBLEMATEGUI_USER_DIR):
|
|
8
|
+
Path(BIBLEMATEGUI_USER_DIR).mkdir(parents=True, exist_ok=True)
|
|
9
|
+
BIBLEMATEGUI_DATA_CUSTOM = os.path.join(os.path.expanduser("~"), "biblemate", "data_custom")
|
|
10
|
+
if not os.path.isdir(BIBLEMATEGUI_DATA_CUSTOM):
|
|
11
|
+
Path(BIBLEMATEGUI_DATA_CUSTOM).mkdir(parents=True, exist_ok=True)
|
|
12
|
+
for i in ("audio", "bibles"):
|
|
13
|
+
if not os.path.isdir(os.path.join(BIBLEMATEGUI_DATA, i)):
|
|
14
|
+
Path(os.path.join(BIBLEMATEGUI_DATA, i)).mkdir(parents=True, exist_ok=True)
|
|
File without changes
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
ORIGINAL_CSS = """
|
|
2
|
+
<style>
|
|
3
|
+
/* Each verse acts as a container for word blocks */
|
|
4
|
+
verse {
|
|
5
|
+
display: block;
|
|
6
|
+
margin-bottom: 20px;
|
|
7
|
+
line-height: 1.3;
|
|
8
|
+
}
|
|
9
|
+
/* The interlinear word block container */
|
|
10
|
+
.int {
|
|
11
|
+
display: inline-block;
|
|
12
|
+
vertical-align: top;
|
|
13
|
+
text-align: center;
|
|
14
|
+
margin: 0 4px 10px 4px;
|
|
15
|
+
padding: 4px 8px;
|
|
16
|
+
background: white;
|
|
17
|
+
border-radius: 6px;
|
|
18
|
+
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
|
|
19
|
+
border: 1px solid #eee;
|
|
20
|
+
transition: background-color 0.2s; /* Smooth highlight transition */
|
|
21
|
+
}
|
|
22
|
+
/* Target all block elements inside .int to tighten their spacing */
|
|
23
|
+
.int > *, .int > ref > * {
|
|
24
|
+
line-height: 1.1;
|
|
25
|
+
margin-top: 1px;
|
|
26
|
+
margin-bottom: 1px;
|
|
27
|
+
}
|
|
28
|
+
/* Hover effects for interactive elements (even if JS isn't active here) */
|
|
29
|
+
.int:hover {
|
|
30
|
+
background-color: #f8fbff;
|
|
31
|
+
border-color: #d6eaf8;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Transliteration Layers (Phonetic & SBL) - shared with Greek*/
|
|
35
|
+
wsbl, wphono {
|
|
36
|
+
direction: ltr;
|
|
37
|
+
display: block;
|
|
38
|
+
font-size: 0.8rem;
|
|
39
|
+
color: #7f8c8d;
|
|
40
|
+
font-style: italic;
|
|
41
|
+
}
|
|
42
|
+
/* Morphology Layer */
|
|
43
|
+
wmorph {
|
|
44
|
+
direction: ltr;
|
|
45
|
+
display: block;
|
|
46
|
+
font-family: monospace;
|
|
47
|
+
font-size: 0.7rem;
|
|
48
|
+
color: #27ae60;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
wsn {
|
|
52
|
+
direction: ltr;
|
|
53
|
+
display: block;
|
|
54
|
+
font-size: 0.7rem;
|
|
55
|
+
color: #8e44ad;
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
}
|
|
58
|
+
/* Gloss (Literal Meaning) Layer */
|
|
59
|
+
wgloss {
|
|
60
|
+
direction: ltr;
|
|
61
|
+
display: block;
|
|
62
|
+
font-size: 0.85rem;
|
|
63
|
+
color: #d35400;
|
|
64
|
+
}
|
|
65
|
+
/* Final Translation Layer */
|
|
66
|
+
wtrans {
|
|
67
|
+
direction: ltr;
|
|
68
|
+
display: block;
|
|
69
|
+
margin-top: 4px;
|
|
70
|
+
padding-top: 3px;
|
|
71
|
+
border-top: 1px solid #f0f0f0;
|
|
72
|
+
font-size: 0.95rem;
|
|
73
|
+
font-weight: bold;
|
|
74
|
+
color: #2980b9;
|
|
75
|
+
min-height: 1.2em; /* Ensures empty translations don't collapse the block */
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* UBA css */
|
|
79
|
+
external {
|
|
80
|
+
font-size: 80%;
|
|
81
|
+
}
|
|
82
|
+
red, z {
|
|
83
|
+
color: red;
|
|
84
|
+
}
|
|
85
|
+
blu {
|
|
86
|
+
color: blue;
|
|
87
|
+
font-size: 80%;
|
|
88
|
+
}
|
|
89
|
+
points {
|
|
90
|
+
color: gray;
|
|
91
|
+
font-weight: bold;
|
|
92
|
+
font-size: 80%;
|
|
93
|
+
}
|
|
94
|
+
bb {
|
|
95
|
+
color: brown;
|
|
96
|
+
font-weight: bold;
|
|
97
|
+
}
|
|
98
|
+
hp {
|
|
99
|
+
color: brown;
|
|
100
|
+
font-weight: bold;
|
|
101
|
+
font-size: 80%;
|
|
102
|
+
}
|
|
103
|
+
highlight {
|
|
104
|
+
font-style: italic;
|
|
105
|
+
}
|
|
106
|
+
transliteration {
|
|
107
|
+
color: gray;
|
|
108
|
+
}
|
|
109
|
+
div.section, div.point {
|
|
110
|
+
display: block;
|
|
111
|
+
border: 1px solid green;
|
|
112
|
+
border-radius: 5px;
|
|
113
|
+
padding: 2px 5px;
|
|
114
|
+
margin-top: 5px;
|
|
115
|
+
margin-bottom: 5px;
|
|
116
|
+
}
|
|
117
|
+
div.remarks {
|
|
118
|
+
display: block;
|
|
119
|
+
border: 1px solid gray;
|
|
120
|
+
border-radius: 5px;
|
|
121
|
+
padding: 2px 5px;
|
|
122
|
+
margin-top: 5px;
|
|
123
|
+
margin-bottom: 5px;
|
|
124
|
+
}
|
|
125
|
+
div.bhs, div.hebch {
|
|
126
|
+
direction: rtl;
|
|
127
|
+
}
|
|
128
|
+
div.info {
|
|
129
|
+
margin-left: 5%;
|
|
130
|
+
margin-right: 5%;
|
|
131
|
+
}
|
|
132
|
+
div.menu {
|
|
133
|
+
margin-left: 2%;
|
|
134
|
+
margin-right: 2%;
|
|
135
|
+
}
|
|
136
|
+
div.vword {
|
|
137
|
+
border: 1px solid #F5B041;
|
|
138
|
+
border-radius: 5px;
|
|
139
|
+
padding: 2px 5px;
|
|
140
|
+
margin-top: 3px;
|
|
141
|
+
margin-bottom: 3px;
|
|
142
|
+
}
|
|
143
|
+
div.translation {
|
|
144
|
+
border: 1px solid #9B59B6;
|
|
145
|
+
border-radius: 5px;
|
|
146
|
+
padding: 2px 5px;
|
|
147
|
+
margin-top: 3px;
|
|
148
|
+
margin-bottom: 3px;
|
|
149
|
+
}
|
|
150
|
+
div.ew {
|
|
151
|
+
margin-left: 5%;
|
|
152
|
+
margin-right: 5%;
|
|
153
|
+
font-size: 110%;
|
|
154
|
+
display: inline-block;
|
|
155
|
+
}
|
|
156
|
+
div.mr {
|
|
157
|
+
margin-left: 100;
|
|
158
|
+
}
|
|
159
|
+
div.nav {
|
|
160
|
+
margin-left: 5%;
|
|
161
|
+
margin-right: 5%;
|
|
162
|
+
}
|
|
163
|
+
div.refList {
|
|
164
|
+
display: inline;
|
|
165
|
+
}
|
|
166
|
+
/* css for linguistic annotations */
|
|
167
|
+
|
|
168
|
+
div.bhp, div.bhw, div.w, div.int {
|
|
169
|
+
display: inline-block;
|
|
170
|
+
text-align: center;
|
|
171
|
+
}
|
|
172
|
+
div.int {
|
|
173
|
+
vertical-align: text-top;
|
|
174
|
+
}
|
|
175
|
+
div.bhc {
|
|
176
|
+
direction: rtl;
|
|
177
|
+
border: 1px solid #9B59B6;
|
|
178
|
+
border-radius: 5px;
|
|
179
|
+
padding: 2px 5px;
|
|
180
|
+
margin-top: 3px;
|
|
181
|
+
margin-bottom: 3px;
|
|
182
|
+
}
|
|
183
|
+
div.bhp {
|
|
184
|
+
border: 1px solid gray;
|
|
185
|
+
border-radius: 5px;
|
|
186
|
+
padding: 2px 5px;
|
|
187
|
+
margin-top: 3px;
|
|
188
|
+
margin-bottom: 3px;
|
|
189
|
+
}
|
|
190
|
+
div.bhw {
|
|
191
|
+
border: 1px solid #F5B041;
|
|
192
|
+
border-radius: 5px;
|
|
193
|
+
padding: 2px 5px;
|
|
194
|
+
margin-top: 3px;
|
|
195
|
+
margin-bottom: 3px;
|
|
196
|
+
}
|
|
197
|
+
clid {
|
|
198
|
+
color: #641E16;
|
|
199
|
+
font-weight: bold;
|
|
200
|
+
}
|
|
201
|
+
mclid {
|
|
202
|
+
color: #641E16;
|
|
203
|
+
font-style: italic;
|
|
204
|
+
}
|
|
205
|
+
connector {
|
|
206
|
+
color: #9B59B6;
|
|
207
|
+
}
|
|
208
|
+
ckind, ctyp, crela {
|
|
209
|
+
color: #00008B;
|
|
210
|
+
display: inline-block;
|
|
211
|
+
}
|
|
212
|
+
ptyp {
|
|
213
|
+
text-decoration: underline;
|
|
214
|
+
color: gray;
|
|
215
|
+
}
|
|
216
|
+
pfunction {
|
|
217
|
+
color: #3498DB;
|
|
218
|
+
font-size: 90%;
|
|
219
|
+
}
|
|
220
|
+
det {
|
|
221
|
+
font-weight: bold;
|
|
222
|
+
}
|
|
223
|
+
undet {
|
|
224
|
+
font-style: italic;
|
|
225
|
+
}
|
|
226
|
+
prela {
|
|
227
|
+
display: none;
|
|
228
|
+
}
|
|
229
|
+
hbint, gntint, gloss {
|
|
230
|
+
direction: ltr;
|
|
231
|
+
vertical-align: super;
|
|
232
|
+
display: inline-block;
|
|
233
|
+
color: #D35400;
|
|
234
|
+
}
|
|
235
|
+
gntint, gloss {
|
|
236
|
+
font-size: 90%;
|
|
237
|
+
}
|
|
238
|
+
cllevel {
|
|
239
|
+
color: #9B59B6;
|
|
240
|
+
}
|
|
241
|
+
clinfo {
|
|
242
|
+
color: #641E16;
|
|
243
|
+
font-weight: bold;
|
|
244
|
+
}
|
|
245
|
+
subclinfo {
|
|
246
|
+
color: #641E16;
|
|
247
|
+
font-weight: bold;
|
|
248
|
+
font-size: 80%;
|
|
249
|
+
}
|
|
250
|
+
funcinfo {
|
|
251
|
+
color: #3498DB;
|
|
252
|
+
font-size: 90%;
|
|
253
|
+
}
|
|
254
|
+
wordid {
|
|
255
|
+
text-decoration: underline;
|
|
256
|
+
font-size: 80%;
|
|
257
|
+
color: gray;
|
|
258
|
+
}
|
|
259
|
+
cit, clt, cst, cbhs, cbsb, cleb {
|
|
260
|
+
display: block;
|
|
261
|
+
}
|
|
262
|
+
clt, cbsb {
|
|
263
|
+
color: #3498DB;
|
|
264
|
+
}
|
|
265
|
+
cst, cleb {
|
|
266
|
+
color: #00008B;
|
|
267
|
+
}
|
|
268
|
+
cbsb, cleb {
|
|
269
|
+
direction: ltr;
|
|
270
|
+
}
|
|
271
|
+
div.cltrans {
|
|
272
|
+
margin-left: 10px;
|
|
273
|
+
margin-right: 10px;
|
|
274
|
+
display: block;
|
|
275
|
+
border: 1px solid #00008B;
|
|
276
|
+
border-radius: 5px;
|
|
277
|
+
padding: 2px 5px;
|
|
278
|
+
margin-top: 3px;
|
|
279
|
+
margin-bottom: 3px;
|
|
280
|
+
}
|
|
281
|
+
div.wrap {
|
|
282
|
+
display: inline-block;
|
|
283
|
+
}
|
|
284
|
+
cl {
|
|
285
|
+
display: table;
|
|
286
|
+
}
|
|
287
|
+
div.c {
|
|
288
|
+
vertical-align: top;
|
|
289
|
+
text-align: left;
|
|
290
|
+
border: 1px solid #9B59B6;
|
|
291
|
+
border-radius: 5px;
|
|
292
|
+
padding: 2px 5px;
|
|
293
|
+
margin-top: 3px;
|
|
294
|
+
margin-bottom: 3px;
|
|
295
|
+
}
|
|
296
|
+
div.p {
|
|
297
|
+
display: inline-block;
|
|
298
|
+
vertical-align: top;
|
|
299
|
+
text-align: left;
|
|
300
|
+
border: 1px solid gray;
|
|
301
|
+
border-radius: 5px;
|
|
302
|
+
padding: 2px 5px;
|
|
303
|
+
margin-top: 3px;
|
|
304
|
+
margin-bottom: 3px;
|
|
305
|
+
}
|
|
306
|
+
div.w, div.int {
|
|
307
|
+
border: 1px solid #F5B041;
|
|
308
|
+
border-radius: 5px;
|
|
309
|
+
padding: 2px 5px;
|
|
310
|
+
margin-top: 3px;
|
|
311
|
+
margin-bottom: 3px;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/* css for clause segmentation */
|
|
315
|
+
|
|
316
|
+
div.bhsa {
|
|
317
|
+
direction: rtl;
|
|
318
|
+
border-right: 5px solid #F5B041;
|
|
319
|
+
margin-left: 5%;
|
|
320
|
+
margin-right: 5%;
|
|
321
|
+
padding: 5px 10px 5px 10px;
|
|
322
|
+
}
|
|
323
|
+
div.e {
|
|
324
|
+
border-left: 5px solid #F5B041;
|
|
325
|
+
margin-left: 5%;
|
|
326
|
+
margin-right: 5%;
|
|
327
|
+
padding: 5px 10px 5px 10px;
|
|
328
|
+
}
|
|
329
|
+
</style>
|
|
330
|
+
"""
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from nicegui import ui
|
|
2
|
+
|
|
3
|
+
def luV(event):
|
|
4
|
+
b, c, v = event.args
|
|
5
|
+
ui.notify(f"b: {b}, c: {c}, v: {v}")
|
|
6
|
+
|
|
7
|
+
# Create a context menu at the click position
|
|
8
|
+
with ui.context_menu() as menu:
|
|
9
|
+
ui.menu_item('Bible Commentaries', on_click=lambda: ui.navigate.to('/tool/commentary'))
|
|
10
|
+
ui.menu_item('Cross-references', on_click=lambda: ui.navigate.to('/tool/xref'))
|
|
11
|
+
ui.menu_item('Treasury of Scripture Knowledge', on_click=lambda: ui.navigate.to('/tool/tske'))
|
|
12
|
+
ui.menu_item('Discourse Analysis', on_click=lambda: ui.navigate.to('/tool/discourse'))
|
|
13
|
+
ui.menu_item('Morphological Data', on_click=lambda: ui.navigate.to('/tool/morphology'))
|
|
14
|
+
ui.menu_item('Translation Spectrum', on_click=lambda: ui.navigate.to('/tool/translations'))
|
|
15
|
+
menu.open()
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from nicegui import ui
|
|
2
|
+
|
|
3
|
+
def luW(event):
|
|
4
|
+
# whatever we sent from the browser is available as event.args
|
|
5
|
+
payload = event.args
|
|
6
|
+
print(type(payload))
|
|
7
|
+
print('Server received payload:', payload)
|
|
8
|
+
ui.notify(f"Server got: {payload}")
|
|
9
|
+
def lex(event):
|
|
10
|
+
# whatever we sent from the browser is available as event.args
|
|
11
|
+
payload = event.args
|
|
12
|
+
print(type(payload))
|
|
13
|
+
print('Server received payload:', payload)
|
|
14
|
+
ui.notify(f"Server got: {payload}")
|
|
15
|
+
def bdbid(event):
|
|
16
|
+
# whatever we sent from the browser is available as event.args
|
|
17
|
+
payload = event.args
|
|
18
|
+
print(type(payload))
|
|
19
|
+
print('Server received payload:', payload)
|
|
20
|
+
ui.notify(f"Server got: {payload}")
|
|
21
|
+
def etcbcmorph(event):
|
|
22
|
+
# whatever we sent from the browser is available as event.args
|
|
23
|
+
payload = event.args
|
|
24
|
+
print(type(payload))
|
|
25
|
+
print('Server received payload:', payload)
|
|
26
|
+
ui.notify(f"Server got: {payload}")
|
|
27
|
+
def rmac(event):
|
|
28
|
+
# whatever we sent from the browser is available as event.args
|
|
29
|
+
payload = event.args
|
|
30
|
+
print(type(payload))
|
|
31
|
+
print('Server received payload:', payload)
|
|
32
|
+
ui.notify(f"Server got: {payload}")
|
|
33
|
+
def searchWord(event):
|
|
34
|
+
# whatever we sent from the browser is available as event.args
|
|
35
|
+
payload = event.args
|
|
36
|
+
print(type(payload))
|
|
37
|
+
print('Server received payload:', payload)
|
|
38
|
+
ui.notify(f"Server got: {payload}")
|
|
39
|
+
def searchLexicalEntry(event):
|
|
40
|
+
# whatever we sent from the browser is available as event.args
|
|
41
|
+
payload = event.args
|
|
42
|
+
print(type(payload))
|
|
43
|
+
print('Server received payload:', payload)
|
|
44
|
+
ui.notify(f"Server got: {payload}")
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
BIBLE_JS = """
|
|
2
|
+
<script>
|
|
3
|
+
// --- Core JavaScript Logic ---
|
|
4
|
+
function scrollToVerse(verseId) {
|
|
5
|
+
const element = document.getElementById(verseId);
|
|
6
|
+
if (element) {
|
|
7
|
+
// Use scrollIntoView to move the element into the viewport
|
|
8
|
+
element.scrollIntoView({
|
|
9
|
+
// 'smooth' makes the scrolling animated, 'auto' is instant
|
|
10
|
+
behavior: 'smooth',
|
|
11
|
+
// 'start' brings the element to the top of the scrollable area
|
|
12
|
+
block: 'start'
|
|
13
|
+
});
|
|
14
|
+
// Optional: Highlight the verse temporarily
|
|
15
|
+
element.classList.add('bg-yellow-200', 'ring-2', 'ring-yellow-500', 'shadow-lg');
|
|
16
|
+
setTimeout(() => {
|
|
17
|
+
element.classList.remove('bg-yellow-200', 'ring-2', 'ring-yellow-500', 'shadow-lg');
|
|
18
|
+
}, 2000); // Remove highlight after 2 seconds
|
|
19
|
+
} else {
|
|
20
|
+
console.error(`Element with ID '${verseId}' not found.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
</script>
|
|
24
|
+
"""
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
ORIGINAL_JS = """
|
|
2
|
+
<script>
|
|
3
|
+
// MOCK W3.JS (Polyfill to avoid external dependency)
|
|
4
|
+
var w3 = {
|
|
5
|
+
addStyle: function(selector, prop, value) {
|
|
6
|
+
document.querySelectorAll(selector).forEach(function(el) {
|
|
7
|
+
el.style.setProperty(prop, value);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Variable used in original script for host interoperability
|
|
13
|
+
|
|
14
|
+
function hl0(id, cl, sn) {
|
|
15
|
+
if (cl != '') {
|
|
16
|
+
w3.addStyle('.c'+cl,'background-color','');
|
|
17
|
+
}
|
|
18
|
+
if (sn != '') {
|
|
19
|
+
w3.addStyle('.G'+sn,'background-color','');
|
|
20
|
+
}
|
|
21
|
+
if (id != '') {
|
|
22
|
+
var focalElement = document.getElementById('w'+id);
|
|
23
|
+
if (focalElement != null) {
|
|
24
|
+
focalElement.style.background='';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function hl1(id, cl, sn) {
|
|
30
|
+
if (cl != '') {
|
|
31
|
+
w3.addStyle('.c'+cl,'background-color','PAPAYAWHIP');
|
|
32
|
+
}
|
|
33
|
+
if (sn != '') {
|
|
34
|
+
w3.addStyle('.G'+sn,'background-color','#E7EDFF');
|
|
35
|
+
}
|
|
36
|
+
if (id != '') {
|
|
37
|
+
var focalElement = document.getElementById('w'+id);
|
|
38
|
+
if (focalElement != null) {
|
|
39
|
+
focalElement.style.background='#C9CFFF';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
</script>
|
|
44
|
+
"""
|