GameSentenceMiner 2.17.1__py3-none-any.whl → 2.17.3__py3-none-any.whl
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.
- GameSentenceMiner/anki.py +25 -1
- GameSentenceMiner/config_gui.py +19 -1
- GameSentenceMiner/gsm.py +13 -18
- GameSentenceMiner/obs.py +4 -2
- GameSentenceMiner/ocr/owocr_helper.py +1 -1
- GameSentenceMiner/owocr/owocr/run.py +2 -2
- GameSentenceMiner/util/configuration.py +7 -5
- GameSentenceMiner/util/db.py +176 -8
- GameSentenceMiner/util/downloader/download_tools.py +57 -24
- GameSentenceMiner/util/get_overlay_coords.py +3 -0
- GameSentenceMiner/util/gsm_utils.py +0 -54
- GameSentenceMiner/web/database_api.py +12 -1
- GameSentenceMiner/web/gsm_websocket.py +1 -1
- GameSentenceMiner/web/static/css/shared.css +20 -0
- GameSentenceMiner/web/static/css/stats.css +496 -1
- GameSentenceMiner/web/static/js/anki_stats.js +87 -3
- GameSentenceMiner/web/static/js/shared.js +2 -49
- GameSentenceMiner/web/static/js/stats.js +274 -39
- GameSentenceMiner/web/templates/anki_stats.html +36 -0
- GameSentenceMiner/web/templates/index.html +11 -12
- GameSentenceMiner/web/templates/stats.html +35 -15
- GameSentenceMiner/web/texthooking_page.py +31 -8
- {gamesentenceminer-2.17.1.dist-info → gamesentenceminer-2.17.3.dist-info}/METADATA +1 -1
- {gamesentenceminer-2.17.1.dist-info → gamesentenceminer-2.17.3.dist-info}/RECORD +28 -28
- {gamesentenceminer-2.17.1.dist-info → gamesentenceminer-2.17.3.dist-info}/WHEEL +0 -0
- {gamesentenceminer-2.17.1.dist-info → gamesentenceminer-2.17.3.dist-info}/entry_points.txt +0 -0
- {gamesentenceminer-2.17.1.dist-info → gamesentenceminer-2.17.3.dist-info}/licenses/LICENSE +0 -0
- {gamesentenceminer-2.17.1.dist-info → gamesentenceminer-2.17.3.dist-info}/top_level.txt +0 -0
|
@@ -32,6 +32,41 @@
|
|
|
32
32
|
<!-- Include shared navigation -->
|
|
33
33
|
{% include 'components/navigation.html' %}
|
|
34
34
|
|
|
35
|
+
<div class="dashboard-card date-range">
|
|
36
|
+
<div class="dashboard-card-header">
|
|
37
|
+
<h3 class="dashboard-card-title">
|
|
38
|
+
<span class="dashboard-card-icon">📅</span>
|
|
39
|
+
Date Range
|
|
40
|
+
</h3>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div class="dashboard-date-range">
|
|
44
|
+
<div class="dashboard-date-item tooltip" data-tooltip="Select the start date for your stats">
|
|
45
|
+
<label for="fromDate">From</label>
|
|
46
|
+
<input type="date" id="fromDate" class="dashboard-date-input">
|
|
47
|
+
</div>
|
|
48
|
+
<div class="dashboard-date-item tooltip" data-tooltip="Select the end date for your stats">
|
|
49
|
+
<label for="toDate">To</label>
|
|
50
|
+
<input type="date" id="toDate" class="dashboard-date-input">
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div id="dateErrorPopup" class="dashboard-popup hidden">
|
|
56
|
+
<div class="dashboard-popup-content">
|
|
57
|
+
<div class="dashboard-popup-icon">⚠️</div>
|
|
58
|
+
<div class="dashboard-popup-message">"From" date cannot be later than "To" date.</div>
|
|
59
|
+
<button id="closePopupBtn" class="dashboard-popup-btn">OK</button>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div id="noDataPopup" class="no-data-popup hidden">
|
|
64
|
+
<div class="no-data-content">
|
|
65
|
+
<p>No data found for the selected range.</p>
|
|
66
|
+
<button id="closeNoDataPopup">OK</button>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
35
70
|
<!-- Dashboard Statistics Sections -->
|
|
36
71
|
<div class="dashboard-container">
|
|
37
72
|
<!-- Current Game Statistics Panel -->
|
|
@@ -383,21 +418,6 @@
|
|
|
383
418
|
</small>
|
|
384
419
|
</div>
|
|
385
420
|
|
|
386
|
-
<div style="margin-bottom: 20px;">
|
|
387
|
-
<label for="heatmapYear"
|
|
388
|
-
style="display: block; font-weight: 600; margin-bottom: 8px; color: var(--text-primary);">
|
|
389
|
-
Heatmap Display Year
|
|
390
|
-
</label>
|
|
391
|
-
<select id="heatmapYear" name="heatmap_year"
|
|
392
|
-
style="width: 100%; padding: 10px; border: 1px solid var(--border-color); border-radius: 5px; background: var(--bg-tertiary); color: var(--text-primary); font-size: 14px;">
|
|
393
|
-
<option value="all">All Years</option>
|
|
394
|
-
</select>
|
|
395
|
-
<small
|
|
396
|
-
style="color: var(--text-tertiary); font-size: 12px; margin-top: 4px; display: block;">
|
|
397
|
-
Select which year to display in the reading activity heatmap
|
|
398
|
-
</small>
|
|
399
|
-
</div>
|
|
400
|
-
|
|
401
421
|
<div style="margin-bottom: 20px;">
|
|
402
422
|
<label for="streakRequirement"
|
|
403
423
|
style="display: block; font-weight: 600; margin-bottom: 8px; color: var(--text-primary);">
|
|
@@ -208,12 +208,14 @@ def play_audio():
|
|
|
208
208
|
def translate_line():
|
|
209
209
|
data = request.get_json()
|
|
210
210
|
event_id = data.get('id')
|
|
211
|
+
text = data.get('text', '').strip()
|
|
211
212
|
if event_id is None:
|
|
212
213
|
return jsonify({'error': 'Missing id'}), 400
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
line = get_line_by_id(event_id)
|
|
215
|
+
line_to_translate = text if text else line.text
|
|
216
|
+
translation = get_ai_prompt_result(get_all_lines(), line_to_translate,
|
|
217
|
+
line, get_current_game())
|
|
218
|
+
line.set_TL(translation)
|
|
217
219
|
return jsonify({'TL': translation}), 200
|
|
218
220
|
|
|
219
221
|
@app.route('/translate-multiple', methods=['POST'])
|
|
@@ -267,6 +269,15 @@ def stats():
|
|
|
267
269
|
master_config=get_master_config(),
|
|
268
270
|
stats_config=get_stats_config())
|
|
269
271
|
|
|
272
|
+
@app.route('/api/anki_earliest_date')
|
|
273
|
+
def anki_earliest_date():
|
|
274
|
+
"""Returns the timestamp of earliest available card in anki collection."""
|
|
275
|
+
from GameSentenceMiner.anki import get_anki_earliest_date
|
|
276
|
+
earliest_card = get_anki_earliest_date()
|
|
277
|
+
return jsonify({
|
|
278
|
+
"earliest_card": earliest_card
|
|
279
|
+
})
|
|
280
|
+
|
|
270
281
|
@app.route('/api/anki_stats')
|
|
271
282
|
def api_anki_stats():
|
|
272
283
|
"""
|
|
@@ -283,14 +294,26 @@ def api_anki_stats():
|
|
|
283
294
|
from GameSentenceMiner.web.stats import calculate_kanji_frequency, is_kanji
|
|
284
295
|
from GameSentenceMiner.util.db import GameLinesTable
|
|
285
296
|
|
|
286
|
-
|
|
287
|
-
|
|
297
|
+
start_timestamp = int(request.args.get('start_timestamp')) if request.args.get('start_timestamp') else None
|
|
298
|
+
end_timestamp = int(request.args.get('end_timestamp')) if request.args.get('end_timestamp') else None
|
|
299
|
+
|
|
300
|
+
# Get GSM lines and calculate kanji frequency
|
|
301
|
+
try:
|
|
302
|
+
all_lines = (
|
|
303
|
+
GameLinesTable.get_lines_filtered_by_timestamp(start_timestamp / 1000, end_timestamp / 1000)
|
|
304
|
+
if start_timestamp is not None and end_timestamp is not None
|
|
305
|
+
else GameLinesTable.all()
|
|
306
|
+
)
|
|
307
|
+
except Exception as e:
|
|
308
|
+
logger.warning(f"Failed to filter lines by timestamp: {e}, fetching all lines instead")
|
|
309
|
+
all_lines = GameLinesTable.all()
|
|
310
|
+
|
|
288
311
|
gsm_kanji_stats = calculate_kanji_frequency(all_lines)
|
|
289
312
|
gsm_kanji_list = gsm_kanji_stats.get("kanji_data", [])
|
|
290
313
|
gsm_kanji_set = set([k["kanji"] for k in gsm_kanji_list])
|
|
291
314
|
|
|
292
315
|
# Get all kanji in Anki (first field only)
|
|
293
|
-
anki_kanji_set = get_all_anki_first_field_kanji()
|
|
316
|
+
anki_kanji_set = get_all_anki_first_field_kanji(start_timestamp, end_timestamp)
|
|
294
317
|
|
|
295
318
|
# Find missing kanji (in GSM but not in Anki)
|
|
296
319
|
missing_kanji = [
|
|
@@ -362,7 +385,7 @@ def start_web_server():
|
|
|
362
385
|
# FOR TEXTHOOKER DEVELOPMENT, UNCOMMENT THE FOLLOWING LINE WITH Flask-CORS INSTALLED:
|
|
363
386
|
# from flask_cors import CORS
|
|
364
387
|
# CORS(app, resources={r"/*": {"origins": "http://localhost:5174"}})
|
|
365
|
-
app.run(host=
|
|
388
|
+
app.run(host=get_config().advanced.localhost_bind_address, port=port, debug=False)
|
|
366
389
|
|
|
367
390
|
|
|
368
391
|
async def texthooker_page_coro():
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
GameSentenceMiner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
GameSentenceMiner/anki.py,sha256=
|
|
3
|
-
GameSentenceMiner/config_gui.py,sha256=
|
|
2
|
+
GameSentenceMiner/anki.py,sha256=o1mq9y-PZh4Sjo1qWfdONZEc7_7PJlx_nymaxqtgVSk,27433
|
|
3
|
+
GameSentenceMiner/config_gui.py,sha256=Ko5vjzpnbDPMevoLrLFoucL-uh-LyUGTO6W5VOvh-Hg,148170
|
|
4
4
|
GameSentenceMiner/gametext.py,sha256=fQYVsXO9VirzKwca_ktek0oTnerhStIDVsxHiyG3_AM,10533
|
|
5
|
-
GameSentenceMiner/gsm.py,sha256=
|
|
6
|
-
GameSentenceMiner/obs.py,sha256=
|
|
5
|
+
GameSentenceMiner/gsm.py,sha256=JZUj8PkwHW6RPzJ-rvpOYMY7F-TO7EsHRWSzlZqPE8w,34069
|
|
6
|
+
GameSentenceMiner/obs.py,sha256=Xa4-SFm2Ftlnk6KX_XaDWjhSEPW_7rSDRe9WDNW8JLY,29377
|
|
7
7
|
GameSentenceMiner/vad.py,sha256=cujto_lzAuljldBBnve4JuK54tInWVGSp7NGg-xkaCY,19830
|
|
8
8
|
GameSentenceMiner/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
GameSentenceMiner/ai/ai_prompting.py,sha256=41xdBzE88Jlt12A0D-T_cMfLO5j6MSxfniOptpwNZm0,24068
|
|
@@ -22,14 +22,14 @@ GameSentenceMiner/ocr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
22
22
|
GameSentenceMiner/ocr/gsm_ocr_config.py,sha256=Ov04c-nKzh3sADxO-5JyZWVe4DlrHM9edM9tc7-97Jo,5970
|
|
23
23
|
GameSentenceMiner/ocr/ocrconfig.py,sha256=_tY8mjnzHMJrLS8E5pHqYXZjMuLoGKYgJwdhYgN-ny4,6466
|
|
24
24
|
GameSentenceMiner/ocr/owocr_area_selector.py,sha256=4MjItlaZ78Smxa3uxMxbjU0n2z_IBTG-iBpDB9COSL8,29270
|
|
25
|
-
GameSentenceMiner/ocr/owocr_helper.py,sha256=
|
|
25
|
+
GameSentenceMiner/ocr/owocr_helper.py,sha256=kuwEiOOyOMHDdsDboyDqB_MI8WL9bsN9XubACfgw1KQ,32036
|
|
26
26
|
GameSentenceMiner/ocr/ss_picker.py,sha256=0IhxUdaKruFpZyBL-8SpxWg7bPrlGpy3lhTcMMZ5rwo,5224
|
|
27
27
|
GameSentenceMiner/owocr/owocr/__init__.py,sha256=87hfN5u_PbL_onLfMACbc0F5j4KyIK9lKnRCj6oZgR0,49
|
|
28
28
|
GameSentenceMiner/owocr/owocr/__main__.py,sha256=XQaqZY99EKoCpU-gWQjNbTs7Kg17HvBVE7JY8LqIE0o,157
|
|
29
29
|
GameSentenceMiner/owocr/owocr/config.py,sha256=qM7kISHdUhuygGXOxmgU6Ef2nwBShrZtdqu4InDCViE,8103
|
|
30
30
|
GameSentenceMiner/owocr/owocr/lens_betterproto.py,sha256=oNoISsPilVVRBBPVDtb4-roJtAhp8ZAuFTci3TGXtMc,39141
|
|
31
31
|
GameSentenceMiner/owocr/owocr/ocr.py,sha256=vRTMKLzi6GDBFZWCyf0tYi6es3cP1cvQOBjZqaZmnBg,70482
|
|
32
|
-
GameSentenceMiner/owocr/owocr/run.py,sha256=
|
|
32
|
+
GameSentenceMiner/owocr/owocr/run.py,sha256=bIXC_7PltyVvlA8beCVqdLcKVai8LvVHBRqEueq2GkQ,81545
|
|
33
33
|
GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py,sha256=Na6XStbQBtpQUSdbN3QhEswtKuU1JjReFk_K8t5ezQE,3395
|
|
34
34
|
GameSentenceMiner/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
GameSentenceMiner/tools/audio_offset_selector.py,sha256=8Stk3BP-XVIuzRv9nl9Eqd2D-1yD3JrgU-CamBywJmY,8542
|
|
@@ -37,12 +37,12 @@ GameSentenceMiner/tools/furigana_filter_preview.py,sha256=BXv7FChPEJW_VeG5XYt6su
|
|
|
37
37
|
GameSentenceMiner/tools/ss_selector.py,sha256=cbjMxiKOCuOfbRvLR_PCRlykBrGtm1LXd6u5czPqkmc,4793
|
|
38
38
|
GameSentenceMiner/tools/window_transparency.py,sha256=GtbxbmZg0-UYPXhfHff-7IKZyY2DKe4B9GdyovfmpeM,8166
|
|
39
39
|
GameSentenceMiner/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
-
GameSentenceMiner/util/configuration.py,sha256=
|
|
41
|
-
GameSentenceMiner/util/db.py,sha256=
|
|
40
|
+
GameSentenceMiner/util/configuration.py,sha256=B-vXvOt5OfdJZ6WbAPLbvXfT4hMAjqd3pT3gGSxenKg,42623
|
|
41
|
+
GameSentenceMiner/util/db.py,sha256=nUVKUBk0wtRocxVXhiFRXfaiVD77DGCsMp4uj1Rrvd8,28088
|
|
42
42
|
GameSentenceMiner/util/electron_config.py,sha256=KfeJToeFFVw0IR5MKa-gBzpzaGrU-lyJbR9z-sDEHYU,8767
|
|
43
43
|
GameSentenceMiner/util/ffmpeg.py,sha256=Wf7I4Ko0rykvm5fAuhedP1Gu5550mMHm_qtlK3arJTM,29080
|
|
44
|
-
GameSentenceMiner/util/get_overlay_coords.py,sha256=
|
|
45
|
-
GameSentenceMiner/util/gsm_utils.py,sha256=
|
|
44
|
+
GameSentenceMiner/util/get_overlay_coords.py,sha256=RE0aZHTPORe2TI2vJI1GkqEmgP-ljudMz4PYkeslFcw,22150
|
|
45
|
+
GameSentenceMiner/util/gsm_utils.py,sha256=OUCBmYwEFSmAb0E0s9mtcE2VSyCWbbjG-5bLk6p1ngw,9340
|
|
46
46
|
GameSentenceMiner/util/model.py,sha256=R-_RYTYLSDNgBoVTPuPBcIHeOznIqi_vBzQ7VQ20WYk,6727
|
|
47
47
|
GameSentenceMiner/util/notification.py,sha256=YBhf_mSo_i3cjBz-pmeTPx3wchKiG9BK2VBdZSa2prQ,4597
|
|
48
48
|
GameSentenceMiner/util/text_log.py,sha256=eqLchRrRsWeuex13f5IoxENLWMhjfZtJgUnh9N5jnJQ,6782
|
|
@@ -51,17 +51,17 @@ GameSentenceMiner/util/communication/send.py,sha256=Wki9qIY2CgYnuHbmnyKVIYkcKAN_
|
|
|
51
51
|
GameSentenceMiner/util/communication/websocket.py,sha256=Zpnqsy8RUeYxMFNGVUaPrWrlbAHjuNxCsn908iWL_kU,3344
|
|
52
52
|
GameSentenceMiner/util/downloader/Untitled_json.py,sha256=RUUl2bbbCpUDUUS0fP0tdvf5FngZ7ILdA_J5TFYAXUQ,15272
|
|
53
53
|
GameSentenceMiner/util/downloader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
-
GameSentenceMiner/util/downloader/download_tools.py,sha256=
|
|
54
|
+
GameSentenceMiner/util/downloader/download_tools.py,sha256=axKhUplGx3ATZv83n-EajSK8iCXm41AprbixQt6yJKA,11522
|
|
55
55
|
GameSentenceMiner/util/downloader/oneocr_dl.py,sha256=l3s9Z-x1b57GX048o5h-MVv0UTZo4H-Q-zb-JREkMLI,10439
|
|
56
56
|
GameSentenceMiner/util/win10toast/__init__.py,sha256=6TL2w6rzNmpJEp6_v2cAJP_7ExA3UsKzwdM08pNcVfE,5341
|
|
57
57
|
GameSentenceMiner/util/win10toast/__main__.py,sha256=5MYnBcFj8y_6Dyc1kiPd0_FsUuh4yl1cv5wsleU6V4w,668
|
|
58
58
|
GameSentenceMiner/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
-
GameSentenceMiner/web/database_api.py,sha256=
|
|
59
|
+
GameSentenceMiner/web/database_api.py,sha256=bFtU427dQEVqtp4y7nqQzhmuaL0FHS3drWc3KIlRJr8,52643
|
|
60
60
|
GameSentenceMiner/web/events.py,sha256=6Vyz5c9MdpMIa7Zqljqhap2XFQnAVYJ0CdQV64TSZsA,5119
|
|
61
|
-
GameSentenceMiner/web/gsm_websocket.py,sha256=
|
|
61
|
+
GameSentenceMiner/web/gsm_websocket.py,sha256=B0VKpxmsRu0WRh5nFWlpDPBQ6-K2ed7TEIa0O6YWeoo,4166
|
|
62
62
|
GameSentenceMiner/web/service.py,sha256=YZchmScTn7AX_GkwV1ULEK6qjdOnJcpc3qfMwDf7cUE,5363
|
|
63
63
|
GameSentenceMiner/web/stats.py,sha256=h4tRA_00OdQ9uVYrQuAE5SmeSGHMLfTUHPOy6re_h5s,22366
|
|
64
|
-
GameSentenceMiner/web/texthooking_page.py,sha256=
|
|
64
|
+
GameSentenceMiner/web/texthooking_page.py,sha256=IgHsm7l-5pPaYBD8moJnFxRpcvPo_AHNYRi77cPhyRM,14515
|
|
65
65
|
GameSentenceMiner/web/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
66
|
GameSentenceMiner/web/static/apple-touch-icon.png,sha256=OcMI8af_68DA_tweOsQ5LytTyMwm7-hPW07IfrOVgEs,46132
|
|
67
67
|
GameSentenceMiner/web/static/favicon-96x96.png,sha256=lOePzjiKl1JY2J1kT_PMdyEnrlJmi5GWbmXJunM12B4,16502
|
|
@@ -73,26 +73,26 @@ GameSentenceMiner/web/static/web-app-manifest-192x192.png,sha256=EfSNnBmsSaLfESb
|
|
|
73
73
|
GameSentenceMiner/web/static/web-app-manifest-512x512.png,sha256=wyqgCWCrLEUxSRXmaA3iJEESd-vM-ZmlTtZFBY4V8Pk,230819
|
|
74
74
|
GameSentenceMiner/web/static/css/kanji-grid.css,sha256=FjgoZW77Uy8mTM6lHGO85tjzoNhkAS6cdXzLDcLLMh8,2449
|
|
75
75
|
GameSentenceMiner/web/static/css/search.css,sha256=x06xsErfThUpE1NAG4CA2sCPSZ-ofNWEI_ekV2Ok5hY,253
|
|
76
|
-
GameSentenceMiner/web/static/css/shared.css,sha256=
|
|
77
|
-
GameSentenceMiner/web/static/css/stats.css,sha256=
|
|
78
|
-
GameSentenceMiner/web/static/js/anki_stats.js,sha256=
|
|
76
|
+
GameSentenceMiner/web/static/css/shared.css,sha256=NjnWdZwlmMn-OoN_4q7CG2rwcS4zRuP9rwnYQogo5Wc,17835
|
|
77
|
+
GameSentenceMiner/web/static/css/stats.css,sha256=4-rKsi6DuCxd4EoBxKRxZVXAmqkdkuXBQe7oswXAC7w,24284
|
|
78
|
+
GameSentenceMiner/web/static/js/anki_stats.js,sha256=1NWGAD2qJnfQpPWzENZdRjxz3xO2iN8ApegsDz9Mb9w,6843
|
|
79
79
|
GameSentenceMiner/web/static/js/database.js,sha256=-SjMmhXzU8a3QNGrwGtJCu55ZXXfkBxlYSkySEBdclU,22097
|
|
80
80
|
GameSentenceMiner/web/static/js/kanji-grid.js,sha256=rUa8_TGFm4Z8CtURoAlZjCN032PLe0YmHvN52S4_sE0,7181
|
|
81
81
|
GameSentenceMiner/web/static/js/search.js,sha256=QrjsVXf90c1LzD09TPaK93RbIN9yEiXF8IKAKrDY4hw,10482
|
|
82
|
-
GameSentenceMiner/web/static/js/shared.js,sha256=
|
|
83
|
-
GameSentenceMiner/web/static/js/stats.js,sha256=
|
|
84
|
-
GameSentenceMiner/web/templates/anki_stats.html,sha256=
|
|
82
|
+
GameSentenceMiner/web/static/js/shared.js,sha256=LM4NN3YhAMqyyFAcgwKyKs3cLm5beL9VidGK-k5uFnU,19134
|
|
83
|
+
GameSentenceMiner/web/static/js/stats.js,sha256=3mSUn77PwaxqB7CXAlkUYKUHSkdUTQG0gw7YfEmjvN0,95373
|
|
84
|
+
GameSentenceMiner/web/templates/anki_stats.html,sha256=FMRtl0voshXhAUCxCZaM4PQJEGgbwvK7KV-UMCDGLII,12388
|
|
85
85
|
GameSentenceMiner/web/templates/database.html,sha256=Gd54rgZmfcV7ufoJ69COeMncs5Q5u-rSJcsIvROVCEo,13732
|
|
86
|
-
GameSentenceMiner/web/templates/index.html,sha256
|
|
86
|
+
GameSentenceMiner/web/templates/index.html,sha256=-_qnXY6YR2S6mJ4aRz98fM_3gI4ke4QOjv3CtiBbr1k,229563
|
|
87
87
|
GameSentenceMiner/web/templates/search.html,sha256=nao3M_hAbm5ftzThi91NtQ3ZiINMPUNx4ngFmqLnLQ4,4060
|
|
88
|
-
GameSentenceMiner/web/templates/stats.html,sha256=
|
|
88
|
+
GameSentenceMiner/web/templates/stats.html,sha256=i6kVMx6Up2Ilc0nf-Uh70GbloUcYRqxOYrA7XwLZxd4,33035
|
|
89
89
|
GameSentenceMiner/web/templates/utility.html,sha256=KtqnZUMAYs5XsEdC9Tlsd40NKAVic0mu6sh-ReMDJpU,16940
|
|
90
90
|
GameSentenceMiner/web/templates/components/navigation.html,sha256=6y9PvM3nh8LY6JWrZb6zVOm0vqkBLDc6d3gB9X5lT_w,1055
|
|
91
91
|
GameSentenceMiner/web/templates/components/theme-styles.html,sha256=hiq3zdJljpRjQO1iUA7gfFKwXebltG-IWW-gnKS4GHA,3439
|
|
92
92
|
GameSentenceMiner/wip/__init___.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
|
-
gamesentenceminer-2.17.
|
|
94
|
-
gamesentenceminer-2.17.
|
|
95
|
-
gamesentenceminer-2.17.
|
|
96
|
-
gamesentenceminer-2.17.
|
|
97
|
-
gamesentenceminer-2.17.
|
|
98
|
-
gamesentenceminer-2.17.
|
|
93
|
+
gamesentenceminer-2.17.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
94
|
+
gamesentenceminer-2.17.3.dist-info/METADATA,sha256=Yr9TwKuUOUhU5QWe2dqwq9DPkfpvGZl7OE9D1NLZZe8,7348
|
|
95
|
+
gamesentenceminer-2.17.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
96
|
+
gamesentenceminer-2.17.3.dist-info/entry_points.txt,sha256=2APEP25DbfjSxGeHtwBstMH8mulVhLkqF_b9bqzU6vQ,65
|
|
97
|
+
gamesentenceminer-2.17.3.dist-info/top_level.txt,sha256=V1hUY6xVSyUEohb0uDoN4UIE6rUZ_JYx8yMyPGX4PgQ,18
|
|
98
|
+
gamesentenceminer-2.17.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|