4 Commits

Author SHA1 Message Date
uberwald 5a4d4c45dc Sync compendiums
Release Creation / build (release) Successful in 1m5s
2026-07-09 07:53:44 +02:00
uberwald 7fc8d2c09c feat: batch NPC import, ally/enemy gen, map sync, UI shortcuts
- batch NPC creator: import images from dir → actors (dedup, folder)
- ally/enemy generator: data tables, D66 specials, tests (39 pass)
- sector map sync: DialogV2 player view, socket v13/v14, sync click pos
- actor/scene directory: shortcut buttons (Commerce, PNJ, Map, Sync vue)
- closeImagePopout: GM closes player portraits via socket
- canvasSync: force same canvas view on all players
- FilePicker: v14 folder picker support with v13 fallback
- cleanup: debug logs, template dedup, return guards
2026-07-09 07:49:12 +02:00
uberwald bfe24812bd Auto-import PNJ3 2026-07-07 21:01:57 +02:00
uberwald 746f9e23bb Auto-import PNJ3 2026-07-07 18:59:34 +02:00
91 changed files with 884 additions and 311 deletions
+3
View File
@@ -7,11 +7,14 @@
"verified": "13", "verified": "13",
"maximum": "14" "maximum": "14"
}, },
"socket": "true",
"description": "Module de compendium et d'outils Mongoose Traveller 2e pour FoundryVTT écrit par JdR.Ninja.\nInclut les commandes /commerce, /pnj, /rencontre et /mission pour automatiser le commerce, les PNJ rapides, les rencontres et les contrats aléatoires. La fenêtre /pnj inclut un onglet 'PNJ Détaillé' pour la génération de PNJ Traveller selon les règles du générateur officiel, en s'appuyant sur les compétences natives des fiches.", "description": "Module de compendium et d'outils Mongoose Traveller 2e pour FoundryVTT écrit par JdR.Ninja.\nInclut les commandes /commerce, /pnj, /rencontre et /mission pour automatiser le commerce, les PNJ rapides, les rencontres et les contrats aléatoires. La fenêtre /pnj inclut un onglet 'PNJ Détaillé' pour la génération de PNJ Traveller selon les règles du générateur officiel, en s'appuyant sur les compétences natives des fiches.",
"esmodules": [ "esmodules": [
"scripts/batchNpcCreator.js",
"scripts/commerce.js", "scripts/commerce.js",
"scripts/npc.js", "scripts/npc.js",
"scripts/sector.js", "scripts/sector.js",
"scripts/sectorSocket.js",
"scripts/utils/travellerNpcUtils.js", "scripts/utils/travellerNpcUtils.js",
"scripts/data/travellerNpcGenerator.js", "scripts/data/travellerNpcGenerator.js",
"scripts/travellerNpcGenerator.js", "scripts/travellerNpcGenerator.js",
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000132 MANIFEST-000168
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:58.023135 7fc410ffe6c0 Recovering log #130 2026/07/09-07:47:54.209328 7f050a7fc6c0 Recovering log #166
2026/06/12-20:52:58.033792 7fc410ffe6c0 Delete type=3 #128 2026/07/09-07:47:54.260960 7f050a7fc6c0 Delete type=3 #164
2026/06/12-20:52:58.033845 7fc410ffe6c0 Delete type=0 #130 2026/07/09-07:47:54.261047 7f050a7fc6c0 Delete type=0 #166
2026/06/12-20:53:22.703483 7fc3c11be6c0 Level-0 table #135: started 2026/07/09-07:48:38.285484 7f0509bff6c0 Level-0 table #171: started
2026/06/12-20:53:22.703533 7fc3c11be6c0 Level-0 table #135: 0 bytes OK 2026/07/09-07:48:38.285523 7f0509bff6c0 Level-0 table #171: 0 bytes OK
2026/06/12-20:53:22.710309 7fc3c11be6c0 Delete type=0 #133 2026/07/09-07:48:38.322960 7f0509bff6c0 Delete type=0 #169
2026/06/12-20:53:22.717089 7fc3c11be6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.360389 7f0509bff6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.724385 7fc3c11be6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.398070 7f0509bff6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.594732 7fc3c3fff6c0 Recovering log #126 2026/07/09-07:36:02.848235 7f050b7fe6c0 Recovering log #162
2026/06/12-20:51:44.605104 7fc3c3fff6c0 Delete type=3 #124 2026/07/09-07:36:02.858500 7f050b7fe6c0 Delete type=3 #160
2026/06/12-20:51:44.605163 7fc3c3fff6c0 Delete type=0 #126 2026/07/09-07:36:02.858592 7f050b7fe6c0 Delete type=0 #162
2026/06/12-20:52:05.597166 7fc3c11be6c0 Level-0 table #131: started 2026/07/09-07:36:48.535387 7f0509bff6c0 Level-0 table #167: started
2026/06/12-20:52:05.597184 7fc3c11be6c0 Level-0 table #131: 0 bytes OK 2026/07/09-07:36:48.535414 7f0509bff6c0 Level-0 table #167: 0 bytes OK
2026/06/12-20:52:05.604422 7fc3c11be6c0 Delete type=0 #129 2026/07/09-07:36:48.542335 7f0509bff6c0 Delete type=0 #165
2026/06/12-20:52:05.618860 7fc3c11be6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.542603 7f0509bff6c0 Manual compaction at level-0 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.619120 7fc3c11be6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.549880 7f0509bff6c0 Manual compaction at level-1 from '!folders!673DRfEBYUliGnKJ' @ 72057594037927935 : 1 .. '!items!yoIqL0RQEnzNVJB6' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000231 MANIFEST-000267
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:57.899810 7fc3c37fe6c0 Recovering log #229 2026/07/09-07:47:53.705532 7f050a7fc6c0 Recovering log #265
2026/06/12-20:52:57.911135 7fc3c37fe6c0 Delete type=3 #227 2026/07/09-07:47:53.770870 7f050a7fc6c0 Delete type=3 #263
2026/06/12-20:52:57.911180 7fc3c37fe6c0 Delete type=0 #229 2026/07/09-07:47:53.770946 7f050a7fc6c0 Delete type=0 #265
2026/06/12-20:53:22.642554 7fc3c11be6c0 Level-0 table #234: started 2026/07/09-07:48:37.982535 7f0509bff6c0 Level-0 table #270: started
2026/06/12-20:53:22.642590 7fc3c11be6c0 Level-0 table #234: 0 bytes OK 2026/07/09-07:48:37.982591 7f0509bff6c0 Level-0 table #270: 0 bytes OK
2026/06/12-20:53:22.648801 7fc3c11be6c0 Delete type=0 #232 2026/07/09-07:48:38.024733 7f0509bff6c0 Delete type=0 #268
2026/06/12-20:53:22.649072 7fc3c11be6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.059906 7f0509bff6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.649091 7fc3c11be6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.060367 7f0509bff6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.470883 7fc3c37fe6c0 Recovering log #225 2026/07/09-07:36:02.717067 7f050affd6c0 Recovering log #261
2026/06/12-20:51:44.481326 7fc3c37fe6c0 Delete type=3 #223 2026/07/09-07:36:02.727527 7f050affd6c0 Delete type=3 #259
2026/06/12-20:51:44.481382 7fc3c37fe6c0 Delete type=0 #225 2026/07/09-07:36:02.727624 7f050affd6c0 Delete type=0 #261
2026/06/12-20:52:05.534179 7fc3c11be6c0 Level-0 table #230: started 2026/07/09-07:36:48.470439 7f0509bff6c0 Level-0 table #266: started
2026/06/12-20:52:05.534214 7fc3c11be6c0 Level-0 table #230: 0 bytes OK 2026/07/09-07:36:48.470483 7f0509bff6c0 Level-0 table #266: 0 bytes OK
2026/06/12-20:52:05.540979 7fc3c11be6c0 Delete type=0 #228 2026/07/09-07:36:48.477316 7f0509bff6c0 Delete type=0 #264
2026/06/12-20:52:05.541333 7fc3c11be6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.485308 7f0509bff6c0 Manual compaction at level-0 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.562210 7fc3c11be6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.485448 7f0509bff6c0 Manual compaction at level-1 from '!items!8xqChkoKK7i0c9M1' @ 72057594037927935 : 1 .. '!items!wpBopoosZiWXjlKD' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000115 MANIFEST-000151
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:58.051634 7fc410ffe6c0 Recovering log #113 2026/07/09-07:47:54.321155 7f050a7fc6c0 Recovering log #149
2026/06/12-20:52:58.062421 7fc410ffe6c0 Delete type=3 #111 2026/07/09-07:47:54.377672 7f050a7fc6c0 Delete type=3 #147
2026/06/12-20:52:58.062480 7fc410ffe6c0 Delete type=0 #113 2026/07/09-07:47:54.377740 7f050a7fc6c0 Delete type=0 #149
2026/06/12-20:53:22.717098 7fc3c11be6c0 Level-0 table #118: started 2026/07/09-07:48:38.398090 7f0509bff6c0 Level-0 table #154: started
2026/06/12-20:53:22.717122 7fc3c11be6c0 Level-0 table #118: 0 bytes OK 2026/07/09-07:48:38.398123 7f0509bff6c0 Level-0 table #154: 0 bytes OK
2026/06/12-20:53:22.724248 7fc3c11be6c0 Delete type=0 #116 2026/07/09-07:48:38.434275 7f0509bff6c0 Delete type=0 #152
2026/06/12-20:53:22.822698 7fc3c11be6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.666470 7f0509bff6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.829756 7fc3c11be6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.666636 7f0509bff6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.625465 7fc3c37fe6c0 Recovering log #109 2026/07/09-07:36:02.877078 7f050a7fc6c0 Recovering log #145
2026/06/12-20:51:44.635539 7fc3c37fe6c0 Delete type=3 #107 2026/07/09-07:36:02.887569 7f050a7fc6c0 Delete type=3 #143
2026/06/12-20:51:44.635595 7fc3c37fe6c0 Delete type=0 #109 2026/07/09-07:36:02.887679 7f050a7fc6c0 Delete type=0 #145
2026/06/12-20:52:05.611307 7fc3c11be6c0 Level-0 table #114: started 2026/07/09-07:36:48.550279 7f0509bff6c0 Level-0 table #150: started
2026/06/12-20:52:05.611325 7fc3c11be6c0 Level-0 table #114: 0 bytes OK 2026/07/09-07:36:48.550316 7f0509bff6c0 Level-0 table #150: 0 bytes OK
2026/06/12-20:52:05.618732 7fc3c11be6c0 Delete type=0 #112 2026/07/09-07:36:48.556963 7f0509bff6c0 Delete type=0 #148
2026/06/12-20:52:05.619090 7fc3c11be6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.661449 7f0509bff6c0 Manual compaction at level-0 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.619279 7fc3c11be6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.668497 7f0509bff6c0 Manual compaction at level-1 from '!items!57vgsVVCy9MRKM2M' @ 72057594037927935 : 1 .. '!items!vJInnoigCTJzuY2S' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000234 MANIFEST-000270
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:57.913632 7fc410ffe6c0 Recovering log #232 2026/07/09-07:47:53.773960 7f050b7fe6c0 Recovering log #268
2026/06/12-20:52:57.923055 7fc410ffe6c0 Delete type=3 #230 2026/07/09-07:47:53.821289 7f050b7fe6c0 Delete type=3 #266
2026/06/12-20:52:57.923103 7fc410ffe6c0 Delete type=0 #232 2026/07/09-07:47:53.821386 7f050b7fe6c0 Delete type=0 #268
2026/06/12-20:53:22.662427 7fc3c11be6c0 Level-0 table #237: started 2026/07/09-07:48:38.024951 7f0509bff6c0 Level-0 table #273: started
2026/06/12-20:53:22.662456 7fc3c11be6c0 Level-0 table #237: 0 bytes OK 2026/07/09-07:48:38.024989 7f0509bff6c0 Level-0 table #273: 0 bytes OK
2026/06/12-20:53:22.669591 7fc3c11be6c0 Delete type=0 #235 2026/07/09-07:48:38.059685 7f0509bff6c0 Delete type=0 #271
2026/06/12-20:53:22.676441 7fc3c11be6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.059971 7f0509bff6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.676637 7fc3c11be6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.060328 7f0509bff6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.484787 7fc410ffe6c0 Recovering log #228 2026/07/09-07:36:02.731119 7f050bfff6c0 Recovering log #264
2026/06/12-20:51:44.494717 7fc410ffe6c0 Delete type=3 #226 2026/07/09-07:36:02.742454 7f050bfff6c0 Delete type=3 #262
2026/06/12-20:51:44.494769 7fc410ffe6c0 Delete type=0 #228 2026/07/09-07:36:02.742522 7f050bfff6c0 Delete type=0 #264
2026/06/12-20:52:05.541367 7fc3c11be6c0 Level-0 table #233: started 2026/07/09-07:36:48.477465 7f0509bff6c0 Level-0 table #269: started
2026/06/12-20:52:05.541402 7fc3c11be6c0 Level-0 table #233: 0 bytes OK 2026/07/09-07:36:48.477492 7f0509bff6c0 Level-0 table #269: 0 bytes OK
2026/06/12-20:52:05.548343 7fc3c11be6c0 Delete type=0 #231 2026/07/09-07:36:48.485137 7f0509bff6c0 Delete type=0 #267
2026/06/12-20:52:05.562225 7fc3c11be6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.485456 7f0509bff6c0 Manual compaction at level-0 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.562411 7fc3c11be6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.485475 7f0509bff6c0 Manual compaction at level-1 from '!items!04MdBSzwkYWUMJBC' @ 72057594037927935 : 1 .. '!items!yqjKyTCgpclCuHyK' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000168 MANIFEST-000204
+7 -7
View File
@@ -1,7 +1,7 @@
2026/06/12-20:52:57.981469 7fc410ffe6c0 Recovering log #166 2026/07/09-07:47:54.050067 7f050b7fe6c0 Recovering log #202
2026/06/12-20:52:57.992240 7fc410ffe6c0 Delete type=3 #164 2026/07/09-07:47:54.099565 7f050b7fe6c0 Delete type=3 #200
2026/06/12-20:52:57.992286 7fc410ffe6c0 Delete type=0 #166 2026/07/09-07:47:54.099699 7f050b7fe6c0 Delete type=0 #202
2026/06/12-20:53:22.676645 7fc3c11be6c0 Level-0 table #171: started 2026/07/09-07:48:38.167794 7f0509bff6c0 Level-0 table #207: started
2026/06/12-20:53:22.676670 7fc3c11be6c0 Level-0 table #171: 0 bytes OK 2026/07/09-07:48:38.167822 7f0509bff6c0 Level-0 table #207: 0 bytes OK
2026/06/12-20:53:22.683046 7fc3c11be6c0 Delete type=0 #169 2026/07/09-07:48:38.205849 7f0509bff6c0 Delete type=0 #205
2026/06/12-20:53:22.703339 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.206313 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/06/12-20:51:44.553830 7fc3c37fe6c0 Recovering log #162 2026/07/09-07:36:02.804987 7f050b7fe6c0 Recovering log #198
2026/06/12-20:51:44.563465 7fc3c37fe6c0 Delete type=3 #160 2026/07/09-07:36:02.815231 7f050b7fe6c0 Delete type=3 #196
2026/06/12-20:51:44.563519 7fc3c37fe6c0 Delete type=0 #162 2026/07/09-07:36:02.815327 7f050b7fe6c0 Delete type=0 #198
2026/06/12-20:52:05.576474 7fc3c11be6c0 Level-0 table #167: started 2026/07/09-07:36:48.506023 7f0509bff6c0 Level-0 table #203: started
2026/06/12-20:52:05.576496 7fc3c11be6c0 Level-0 table #167: 0 bytes OK 2026/07/09-07:36:48.506050 7f0509bff6c0 Level-0 table #203: 0 bytes OK
2026/06/12-20:52:05.583147 7fc3c11be6c0 Delete type=0 #165 2026/07/09-07:36:48.513417 7f0509bff6c0 Delete type=0 #201
2026/06/12-20:52:05.590265 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.513592 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000212
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:57.954396 7fc410ffe6c0 Recovering log #174 2026/07/09-07:47:53.935957 7f050b7fe6c0 Recovering log #210
2026/06/12-20:52:57.964106 7fc410ffe6c0 Delete type=3 #172 2026/07/09-07:47:53.985176 7f050b7fe6c0 Delete type=3 #208
2026/06/12-20:52:57.964146 7fc410ffe6c0 Delete type=0 #174 2026/07/09-07:47:53.985278 7f050b7fe6c0 Delete type=0 #210
2026/06/12-20:53:22.669694 7fc3c11be6c0 Level-0 table #179: started 2026/07/09-07:48:38.131413 7f0509bff6c0 Level-0 table #215: started
2026/06/12-20:53:22.669720 7fc3c11be6c0 Level-0 table #179: 0 bytes OK 2026/07/09-07:48:38.131448 7f0509bff6c0 Level-0 table #215: 0 bytes OK
2026/06/12-20:53:22.676299 7fc3c11be6c0 Delete type=0 #177 2026/07/09-07:48:38.167610 7f0509bff6c0 Delete type=0 #213
2026/06/12-20:53:22.676452 7fc3c11be6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.206192 7f0509bff6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.676473 7fc3c11be6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.206346 7f0509bff6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.524826 7fc3c37fe6c0 Recovering log #170 2026/07/09-07:36:02.775383 7f050b7fe6c0 Recovering log #206
2026/06/12-20:51:44.535451 7fc3c37fe6c0 Delete type=3 #168 2026/07/09-07:36:02.786524 7f050b7fe6c0 Delete type=3 #204
2026/06/12-20:51:44.535506 7fc3c37fe6c0 Delete type=0 #170 2026/07/09-07:36:02.786596 7f050b7fe6c0 Delete type=0 #206
2026/06/12-20:52:05.562430 7fc3c11be6c0 Level-0 table #175: started 2026/07/09-07:36:48.485579 7f0509bff6c0 Level-0 table #211: started
2026/06/12-20:52:05.562454 7fc3c11be6c0 Level-0 table #175: 0 bytes OK 2026/07/09-07:36:48.485602 7f0509bff6c0 Level-0 table #211: 0 bytes OK
2026/06/12-20:52:05.569802 7fc3c11be6c0 Delete type=0 #173 2026/07/09-07:36:48.492088 7f0509bff6c0 Delete type=0 #209
2026/06/12-20:52:05.590244 7fc3c11be6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.513557 7f0509bff6c0 Manual compaction at level-0 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.590432 7fc3c11be6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.513899 7f0509bff6c0 Manual compaction at level-1 from '!folders!8swFcTr6RH7BnGiu' @ 72057594037927935 : 1 .. '!items!zRJfxioYBRq4iSBR' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000168 MANIFEST-000204
+7 -7
View File
@@ -1,7 +1,7 @@
2026/06/12-20:52:57.995403 7fc3c37fe6c0 Recovering log #166 2026/07/09-07:47:54.102814 7f050affd6c0 Recovering log #202
2026/06/12-20:52:58.005793 7fc3c37fe6c0 Delete type=3 #164 2026/07/09-07:47:54.154259 7f050affd6c0 Delete type=3 #200
2026/06/12-20:52:58.005851 7fc3c37fe6c0 Delete type=0 #166 2026/07/09-07:47:54.154356 7f050affd6c0 Delete type=0 #202
2026/06/12-20:53:22.683153 7fc3c11be6c0 Level-0 table #171: started 2026/07/09-07:48:38.323204 7f0509bff6c0 Level-0 table #207: started
2026/06/12-20:53:22.683178 7fc3c11be6c0 Level-0 table #171: 0 bytes OK 2026/07/09-07:48:38.323240 7f0509bff6c0 Level-0 table #207: 0 bytes OK
2026/06/12-20:53:22.690078 7fc3c11be6c0 Delete type=0 #169 2026/07/09-07:48:38.360093 7f0509bff6c0 Delete type=0 #205
2026/06/12-20:53:22.703354 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.360539 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/06/12-20:51:44.566595 7fc410ffe6c0 Recovering log #162 2026/07/09-07:36:02.819029 7f050bfff6c0 Recovering log #198
2026/06/12-20:51:44.577675 7fc410ffe6c0 Delete type=3 #160 2026/07/09-07:36:02.829464 7f050bfff6c0 Delete type=3 #196
2026/06/12-20:51:44.577730 7fc410ffe6c0 Delete type=0 #162 2026/07/09-07:36:02.829554 7f050bfff6c0 Delete type=0 #198
2026/06/12-20:52:05.583251 7fc3c11be6c0 Level-0 table #167: started 2026/07/09-07:36:48.514172 7f0509bff6c0 Level-0 table #203: started
2026/06/12-20:52:05.583269 7fc3c11be6c0 Level-0 table #167: 0 bytes OK 2026/07/09-07:36:48.514234 7f0509bff6c0 Level-0 table #203: 0 bytes OK
2026/06/12-20:52:05.590142 7fc3c11be6c0 Delete type=0 #165 2026/07/09-07:36:48.520806 7f0509bff6c0 Delete type=0 #201
2026/06/12-20:52:05.590369 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.542471 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000149 MANIFEST-000185
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:58.008917 7fc3c3fff6c0 Recovering log #147 2026/07/09-07:47:54.157744 7f050b7fe6c0 Recovering log #183
2026/06/12-20:52:58.019530 7fc3c3fff6c0 Delete type=3 #145 2026/07/09-07:47:54.205288 7f050b7fe6c0 Delete type=3 #181
2026/06/12-20:52:58.019585 7fc3c3fff6c0 Delete type=0 #147 2026/07/09-07:47:54.205375 7f050b7fe6c0 Delete type=0 #183
2026/06/12-20:53:22.690192 7fc3c11be6c0 Level-0 table #152: started 2026/07/09-07:48:38.206467 7f0509bff6c0 Level-0 table #188: started
2026/06/12-20:53:22.690216 7fc3c11be6c0 Level-0 table #152: 0 bytes OK 2026/07/09-07:48:38.206514 7f0509bff6c0 Level-0 table #188: 0 bytes OK
2026/06/12-20:53:22.696652 7fc3c11be6c0 Delete type=0 #150 2026/07/09-07:48:38.247875 7f0509bff6c0 Delete type=0 #186
2026/06/12-20:53:22.703367 7fc3c11be6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.360346 7f0509bff6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.717074 7fc3c11be6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.360529 7f0509bff6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.581216 7fc3c37fe6c0 Recovering log #143 2026/07/09-07:36:02.833115 7f050affd6c0 Recovering log #179
2026/06/12-20:51:44.591542 7fc3c37fe6c0 Delete type=3 #141 2026/07/09-07:36:02.843924 7f050affd6c0 Delete type=3 #177
2026/06/12-20:51:44.591593 7fc3c37fe6c0 Delete type=0 #143 2026/07/09-07:36:02.844020 7f050affd6c0 Delete type=0 #179
2026/06/12-20:52:05.590481 7fc3c11be6c0 Level-0 table #148: started 2026/07/09-07:36:48.520958 7f0509bff6c0 Level-0 table #184: started
2026/06/12-20:52:05.590505 7fc3c11be6c0 Level-0 table #148: 0 bytes OK 2026/07/09-07:36:48.520983 7f0509bff6c0 Level-0 table #184: 0 bytes OK
2026/06/12-20:52:05.597069 7fc3c11be6c0 Delete type=0 #146 2026/07/09-07:36:48.528268 7f0509bff6c0 Delete type=0 #182
2026/06/12-20:52:05.618846 7fc3c11be6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.542488 7f0509bff6c0 Manual compaction at level-0 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.619137 7fc3c11be6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.549898 7f0509bff6c0 Manual compaction at level-1 from '!journal!26ZqV9BvS47hrLmV' @ 72057594037927935 : 1 .. '!journal.pages!26ZqV9BvS47hrLmV.ZS4936SEQUT9IA8i' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000212
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:57.926432 7fc3c37fe6c0 Recovering log #174 2026/07/09-07:47:53.824918 7f050bfff6c0 Recovering log #210
2026/06/12-20:52:57.936438 7fc3c37fe6c0 Delete type=3 #172 2026/07/09-07:47:53.877561 7f050bfff6c0 Delete type=3 #208
2026/06/12-20:52:57.936485 7fc3c37fe6c0 Delete type=0 #174 2026/07/09-07:47:53.877656 7f050bfff6c0 Delete type=0 #210
2026/06/12-20:53:22.649158 7fc3c11be6c0 Level-0 table #179: started 2026/07/09-07:48:38.060381 7f0509bff6c0 Level-0 table #215: started
2026/06/12-20:53:22.649178 7fc3c11be6c0 Level-0 table #179: 0 bytes OK 2026/07/09-07:48:38.060435 7f0509bff6c0 Level-0 table #215: 0 bytes OK
2026/06/12-20:53:22.655504 7fc3c11be6c0 Delete type=0 #177 2026/07/09-07:48:38.094447 7f0509bff6c0 Delete type=0 #213
2026/06/12-20:53:22.676414 7fc3c11be6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.206140 7f0509bff6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.676616 7fc3c11be6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.206298 7f0509bff6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.497744 7fc3c3fff6c0 Recovering log #170 2026/07/09-07:36:02.746093 7f050affd6c0 Recovering log #206
2026/06/12-20:51:44.508610 7fc3c3fff6c0 Delete type=3 #168 2026/07/09-07:36:02.757529 7f050affd6c0 Delete type=3 #204
2026/06/12-20:51:44.508662 7fc3c3fff6c0 Delete type=0 #170 2026/07/09-07:36:02.757641 7f050affd6c0 Delete type=0 #206
2026/06/12-20:52:05.548467 7fc3c11be6c0 Level-0 table #175: started 2026/07/09-07:36:48.492215 7f0509bff6c0 Level-0 table #211: started
2026/06/12-20:52:05.548492 7fc3c11be6c0 Level-0 table #175: 0 bytes OK 2026/07/09-07:36:48.492240 7f0509bff6c0 Level-0 table #211: 0 bytes OK
2026/06/12-20:52:05.555571 7fc3c11be6c0 Delete type=0 #173 2026/07/09-07:36:48.498996 7f0509bff6c0 Delete type=0 #209
2026/06/12-20:52:05.562235 7fc3c11be6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.513570 7f0509bff6c0 Manual compaction at level-0 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.562402 7fc3c11be6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.513598 7f0509bff6c0 Manual compaction at level-1 from '!items!QHovFMj93BC7bqBu' @ 72057594037927935 : 1 .. '!items!yleVHgRqGoYLvzxT' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000168 MANIFEST-000204
+7 -7
View File
@@ -1,7 +1,7 @@
2026/06/12-20:52:57.939847 7fc4117ff6c0 Recovering log #166 2026/07/09-07:47:53.881056 7f050affd6c0 Recovering log #202
2026/06/12-20:52:57.951112 7fc4117ff6c0 Delete type=3 #164 2026/07/09-07:47:53.932822 7f050affd6c0 Delete type=3 #200
2026/06/12-20:52:57.951166 7fc4117ff6c0 Delete type=0 #166 2026/07/09-07:47:53.932920 7f050affd6c0 Delete type=0 #202
2026/06/12-20:53:22.655606 7fc3c11be6c0 Level-0 table #171: started 2026/07/09-07:48:38.094630 7f0509bff6c0 Level-0 table #207: started
2026/06/12-20:53:22.655631 7fc3c11be6c0 Level-0 table #171: 0 bytes OK 2026/07/09-07:48:38.094656 7f0509bff6c0 Level-0 table #207: 0 bytes OK
2026/06/12-20:53:22.662292 7fc3c11be6c0 Delete type=0 #169 2026/07/09-07:48:38.131201 7f0509bff6c0 Delete type=0 #205
2026/06/12-20:53:22.676430 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.206170 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/06/12-20:51:44.511682 7fc410ffe6c0 Recovering log #162 2026/07/09-07:36:02.761515 7f050bfff6c0 Recovering log #198
2026/06/12-20:51:44.521666 7fc410ffe6c0 Delete type=3 #160 2026/07/09-07:36:02.772174 7f050bfff6c0 Delete type=3 #196
2026/06/12-20:51:44.521720 7fc410ffe6c0 Delete type=0 #162 2026/07/09-07:36:02.772292 7f050bfff6c0 Delete type=0 #198
2026/06/12-20:52:05.555691 7fc3c11be6c0 Level-0 table #167: started 2026/07/09-07:36:48.499125 7f0509bff6c0 Level-0 table #203: started
2026/06/12-20:52:05.555716 7fc3c11be6c0 Level-0 table #167: 0 bytes OK 2026/07/09-07:36:48.499149 7f0509bff6c0 Level-0 table #203: 0 bytes OK
2026/06/12-20:52:05.562097 7fc3c11be6c0 Delete type=0 #165 2026/07/09-07:36:48.505893 7f0509bff6c0 Delete type=0 #201
2026/06/12-20:52:05.562305 7fc3c11be6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.513580 7f0509bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000212
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:57.967451 7fc4117ff6c0 Recovering log #174 2026/07/09-07:47:53.990492 7f050affd6c0 Recovering log #210
2026/06/12-20:52:57.978196 7fc4117ff6c0 Delete type=3 #172 2026/07/09-07:47:54.046515 7f050affd6c0 Delete type=3 #208
2026/06/12-20:52:57.978251 7fc4117ff6c0 Delete type=0 #174 2026/07/09-07:47:54.046608 7f050affd6c0 Delete type=0 #210
2026/06/12-20:53:22.696764 7fc3c11be6c0 Level-0 table #179: started 2026/07/09-07:48:38.248094 7f0509bff6c0 Level-0 table #215: started
2026/06/12-20:53:22.696789 7fc3c11be6c0 Level-0 table #179: 0 bytes OK 2026/07/09-07:48:38.248127 7f0509bff6c0 Level-0 table #215: 0 bytes OK
2026/06/12-20:53:22.703214 7fc3c11be6c0 Delete type=0 #177 2026/07/09-07:48:38.285238 7f0509bff6c0 Delete type=0 #213
2026/06/12-20:53:22.703379 7fc3c11be6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.360368 7f0509bff6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.710437 7fc3c11be6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.360421 7f0509bff6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.538990 7fc410ffe6c0 Recovering log #170 2026/07/09-07:36:02.790070 7f050bfff6c0 Recovering log #206
2026/06/12-20:51:44.550083 7fc410ffe6c0 Delete type=3 #168 2026/07/09-07:36:02.801080 7f050bfff6c0 Delete type=3 #204
2026/06/12-20:51:44.550141 7fc410ffe6c0 Delete type=0 #170 2026/07/09-07:36:02.801169 7f050bfff6c0 Delete type=0 #206
2026/06/12-20:52:05.569908 7fc3c11be6c0 Level-0 table #175: started 2026/07/09-07:36:48.528396 7f0509bff6c0 Level-0 table #211: started
2026/06/12-20:52:05.569929 7fc3c11be6c0 Level-0 table #175: 0 bytes OK 2026/07/09-07:36:48.528420 7f0509bff6c0 Level-0 table #211: 0 bytes OK
2026/06/12-20:52:05.576375 7fc3c11be6c0 Delete type=0 #173 2026/07/09-07:36:48.535244 7f0509bff6c0 Delete type=0 #209
2026/06/12-20:52:05.590256 7fc3c11be6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.542498 7f0509bff6c0 Manual compaction at level-0 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.590425 7fc3c11be6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.549890 7f0509bff6c0 Manual compaction at level-1 from '!folders!qrqRBmTP6UuS30DF' @ 72057594037927935 : 1 .. '!items!yFvuDyV00NdojxGt' @ 0 : 0; will stop at (end)
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000014 MANIFEST-000050
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:58.209985 7fc3c3fff6c0 Recovering log #12 2026/07/09-07:47:54.696879 7f050b7fe6c0 Recovering log #48
2026/06/12-20:52:58.222276 7fc3c3fff6c0 Delete type=3 #10 2026/07/09-07:47:54.748540 7f050b7fe6c0 Delete type=3 #46
2026/06/12-20:52:58.222315 7fc3c3fff6c0 Delete type=0 #12 2026/07/09-07:47:54.748653 7f050b7fe6c0 Delete type=0 #48
2026/06/12-20:53:22.822733 7fc3c11be6c0 Level-0 table #17: started 2026/07/09-07:48:38.622656 7f0509bff6c0 Level-0 table #53: started
2026/06/12-20:53:22.822761 7fc3c11be6c0 Level-0 table #17: 0 bytes OK 2026/07/09-07:48:38.622702 7f0509bff6c0 Level-0 table #53: 0 bytes OK
2026/06/12-20:53:22.829641 7fc3c11be6c0 Delete type=0 #15 2026/07/09-07:48:38.666188 7f0509bff6c0 Delete type=0 #51
2026/06/12-20:53:22.836426 7fc3c11be6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.666530 7f0509bff6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.960032 7fc3c11be6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.924791 7f0509bff6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.772467 7fc3c37fe6c0 Recovering log #8 2026/07/09-07:36:03.110030 7f050b7fe6c0 Recovering log #44
2026/06/12-20:51:44.784739 7fc3c37fe6c0 Delete type=3 #6 2026/07/09-07:36:03.122283 7f050b7fe6c0 Delete type=3 #42
2026/06/12-20:51:44.784799 7fc3c37fe6c0 Delete type=0 #8 2026/07/09-07:36:03.122371 7f050b7fe6c0 Delete type=0 #44
2026/06/12-20:52:05.700099 7fc3c11be6c0 Level-0 table #13: started 2026/07/09-07:36:48.557102 7f0509bff6c0 Level-0 table #49: started
2026/06/12-20:52:05.700122 7fc3c11be6c0 Level-0 table #13: 0 bytes OK 2026/07/09-07:36:48.557128 7f0509bff6c0 Level-0 table #49: 0 bytes OK
2026/06/12-20:52:05.707051 7fc3c11be6c0 Delete type=0 #11 2026/07/09-07:36:48.564945 7f0509bff6c0 Delete type=0 #47
2026/06/12-20:52:05.714022 7fc3c11be6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.661466 7f0509bff6c0 Manual compaction at level-0 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.714257 7fc3c11be6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.668506 7f0509bff6c0 Manual compaction at level-1 from '!actors!DL3zXfXxWMOQhXJY' @ 72057594037927935 : 1 .. '!actors.items!JAHYXFedTxNlGYX8.nmIgA3CQkOSEpCSP' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000291 MANIFEST-000488
+21 -19
View File
@@ -1,19 +1,21 @@
2026/06/12-20:52:58.065673 7fc3c3fff6c0 Recovering log #286 2026/07/09-07:47:54.381539 7f050b7fe6c0 Recovering log #482
2026/06/12-20:52:58.076152 7fc3c3fff6c0 Delete type=3 #284 2026/07/09-07:47:54.449522 7f050b7fe6c0 Delete type=3 #480
2026/06/12-20:52:58.076196 7fc3c3fff6c0 Delete type=0 #286 2026/07/09-07:47:54.449639 7f050b7fe6c0 Delete type=0 #482
2026/06/12-20:53:22.724394 7fc3c11be6c0 Level-0 table #294: started 2026/07/09-07:48:38.434501 7f0509bff6c0 Level-0 table #491: started
2026/06/12-20:53:22.813324 7fc3c11be6c0 Level-0 table #294: 5029605 bytes OK 2026/07/09-07:48:38.581067 7f0509bff6c0 Level-0 table #491: 7799304 bytes OK
2026/06/12-20:53:22.820890 7fc3c11be6c0 Delete type=0 #292 2026/07/09-07:48:38.618635 7f0509bff6c0 Delete type=0 #489
2026/06/12-20:53:22.829771 7fc3c11be6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.666492 7f0509bff6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.836453 7fc3c11be6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1617840 : 1 2026/07/09-07:48:38.666799 7f0509bff6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3720162 : 1
2026/06/12-20:53:22.836460 7fc3c11be6c0 Compacting 1@1 + 3@2 files 2026/07/09-07:48:38.666823 7f0509bff6c0 Compacting 1@1 + 4@2 files
2026/06/12-20:53:22.873874 7fc3c11be6c0 Generated table #295@1: 10562 keys, 2142429 bytes 2026/07/09-07:48:38.720439 7f0509bff6c0 Generated table #492@1: 8118 keys, 2133880 bytes
2026/06/12-20:53:22.924542 7fc3c11be6c0 Generated table #296@1: 16816 keys, 2164017 bytes 2026/07/09-07:48:38.784916 7f0509bff6c0 Generated table #493@1: 15560 keys, 2160741 bytes
2026/06/12-20:53:22.944331 7fc3c11be6c0 Generated table #297@1: 5500 keys, 721026 bytes 2026/07/09-07:48:38.845800 7f0509bff6c0 Generated table #494@1: 16194 keys, 2162194 bytes
2026/06/12-20:53:22.944361 7fc3c11be6c0 Compacted 1@1 + 3@2 files => 5027472 bytes 2026/07/09-07:48:38.885126 7f0509bff6c0 Generated table #495@1: 9938 keys, 1338663 bytes
2026/06/12-20:53:22.951445 7fc3c11be6c0 compacted to: files[ 0 0 3 0 0 0 0 ] 2026/07/09-07:48:38.885173 7f0509bff6c0 Compacted 1@1 + 4@2 files => 7795478 bytes
2026/06/12-20:53:22.951933 7fc3c11be6c0 Delete type=2 #288 2026/07/09-07:48:38.921695 7f0509bff6c0 compacted to: files[ 0 0 4 0 0 0 0 ]
2026/06/12-20:53:22.952420 7fc3c11be6c0 Delete type=2 #289 2026/07/09-07:48:38.922132 7f0509bff6c0 Delete type=2 #484
2026/06/12-20:53:22.952708 7fc3c11be6c0 Delete type=2 #290 2026/07/09-07:48:38.922665 7f0509bff6c0 Delete type=2 #485
2026/06/12-20:53:22.953103 7fc3c11be6c0 Delete type=2 #294 2026/07/09-07:48:38.923013 7f0509bff6c0 Delete type=2 #486
2026/06/12-20:53:22.960065 7fc3c11be6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1617840 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.923358 7f0509bff6c0 Delete type=2 #487
2026/07/09-07:48:38.923944 7f0509bff6c0 Delete type=2 #491
2026/07/09-07:48:39.004029 7f0509bff6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3720162 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
+21 -19
View File
@@ -1,19 +1,21 @@
2026/06/12-20:51:44.638713 7fc410ffe6c0 Recovering log #279 2026/07/09-07:36:02.891075 7f050affd6c0 Recovering log #478
2026/06/12-20:51:44.649235 7fc410ffe6c0 Delete type=3 #277 2026/07/09-07:36:02.901393 7f050affd6c0 Delete type=3 #476
2026/06/12-20:51:44.649296 7fc410ffe6c0 Delete type=0 #279 2026/07/09-07:36:02.901513 7f050affd6c0 Delete type=0 #478
2026/06/12-20:52:05.627084 7fc3c11be6c0 Level-0 table #287: started 2026/07/09-07:36:48.565124 7f0509bff6c0 Level-0 table #483: started
2026/06/12-20:52:05.691136 7fc3c11be6c0 Level-0 table #287: 4971536 bytes OK 2026/07/09-07:36:48.651161 7f0509bff6c0 Level-0 table #483: 7736561 bytes OK
2026/06/12-20:52:05.698145 7fc3c11be6c0 Delete type=0 #285 2026/07/09-07:36:48.658601 7f0509bff6c0 Delete type=0 #481
2026/06/12-20:52:05.714008 7fc3c11be6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.668480 7f0509bff6c0 Manual compaction at level-0 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.714299 7fc3c11be6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1585250 : 1 2026/07/09-07:36:48.668938 7f0509bff6c0 Manual compaction at level-1 from '!tables!BbXMbmHKcLJrBCmk' @ 72057594037927935 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3670640 : 1
2026/06/12-20:52:05.714307 7fc3c11be6c0 Compacting 1@1 + 3@2 files 2026/07/09-07:36:48.668950 7f0509bff6c0 Compacting 1@1 + 4@2 files
2026/06/12-20:52:05.744344 7fc3c11be6c0 Generated table #288@1: 10660 keys, 2142130 bytes 2026/07/09-07:36:48.696996 7f0509bff6c0 Generated table #484@1: 8151 keys, 2133230 bytes
2026/06/12-20:52:05.781422 7fc3c11be6c0 Generated table #289@1: 16841 keys, 2165292 bytes 2026/07/09-07:36:48.734338 7f0509bff6c0 Generated table #485@1: 15606 keys, 2160419 bytes
2026/06/12-20:52:05.794598 7fc3c11be6c0 Generated table #290@1: 5045 keys, 662072 bytes 2026/07/09-07:36:48.767140 7f0509bff6c0 Generated table #486@1: 16209 keys, 2163737 bytes
2026/06/12-20:52:05.794618 7fc3c11be6c0 Compacted 1@1 + 3@2 files => 4969494 bytes 2026/07/09-07:36:48.794374 7f0509bff6c0 Generated table #487@1: 9512 keys, 1275518 bytes
2026/06/12-20:52:05.801998 7fc3c11be6c0 compacted to: files[ 0 0 3 0 0 0 0 ] 2026/07/09-07:36:48.794409 7f0509bff6c0 Compacted 1@1 + 4@2 files => 7732904 bytes
2026/06/12-20:52:05.802346 7fc3c11be6c0 Delete type=2 #281 2026/07/09-07:36:48.801570 7f0509bff6c0 compacted to: files[ 0 0 4 0 0 0 0 ]
2026/06/12-20:52:05.802678 7fc3c11be6c0 Delete type=2 #282 2026/07/09-07:36:48.801981 7f0509bff6c0 Delete type=2 #470
2026/06/12-20:52:05.802871 7fc3c11be6c0 Delete type=2 #283 2026/07/09-07:36:48.802506 7f0509bff6c0 Delete type=2 #472
2026/06/12-20:52:05.803095 7fc3c11be6c0 Delete type=2 #287 2026/07/09-07:36:48.802910 7f0509bff6c0 Delete type=2 #474
2026/06/12-20:52:05.821244 7fc3c11be6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 1585250 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.803224 7f0509bff6c0 Delete type=2 #475
2026/07/09-07:36:48.803908 7f0509bff6c0 Delete type=2 #483
2026/07/09-07:36:48.819321 7f0509bff6c0 Manual compaction at level-1 from '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 3670640 : 1 .. '!tables.results!xe7x4qufBpzLaEby.zzqLG98O4eFQZHp0' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000122 MANIFEST-000158
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:52:58.037556 7fc3c3fff6c0 Recovering log #120 2026/07/09-07:47:54.264845 7f050affd6c0 Recovering log #156
2026/06/12-20:52:58.047938 7fc3c3fff6c0 Delete type=3 #118 2026/07/09-07:47:54.317032 7f050affd6c0 Delete type=3 #154
2026/06/12-20:52:58.048005 7fc3c3fff6c0 Delete type=0 #120 2026/07/09-07:47:54.317136 7f050affd6c0 Delete type=0 #156
2026/06/12-20:53:22.710451 7fc3c11be6c0 Level-0 table #125: started 2026/07/09-07:48:38.360596 7f0509bff6c0 Level-0 table #161: started
2026/06/12-20:53:22.710474 7fc3c11be6c0 Level-0 table #125: 0 bytes OK 2026/07/09-07:48:38.360657 7f0509bff6c0 Level-0 table #161: 0 bytes OK
2026/06/12-20:53:22.716951 7fc3c11be6c0 Delete type=0 #123 2026/07/09-07:48:38.397839 7f0509bff6c0 Delete type=0 #159
2026/06/12-20:53:22.724368 7fc3c11be6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.622627 7f0509bff6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
2026/06/12-20:53:22.822717 7fc3c11be6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end) 2026/07/09-07:48:38.666513 7f0509bff6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2026/06/12-20:51:44.607543 7fc410ffe6c0 Recovering log #116 2026/07/09-07:36:02.862373 7f050bfff6c0 Recovering log #152
2026/06/12-20:51:44.622157 7fc410ffe6c0 Delete type=3 #114 2026/07/09-07:36:02.873718 7f050bfff6c0 Delete type=3 #150
2026/06/12-20:51:44.622215 7fc410ffe6c0 Delete type=0 #116 2026/07/09-07:36:02.873810 7f050bfff6c0 Delete type=0 #152
2026/06/12-20:52:05.604539 7fc3c11be6c0 Level-0 table #121: started 2026/07/09-07:36:48.542619 7f0509bff6c0 Level-0 table #157: started
2026/06/12-20:52:05.604563 7fc3c11be6c0 Level-0 table #121: 0 bytes OK 2026/07/09-07:36:48.542644 7f0509bff6c0 Level-0 table #157: 0 bytes OK
2026/06/12-20:52:05.611212 7fc3c11be6c0 Delete type=0 #119 2026/07/09-07:36:48.549739 7f0509bff6c0 Delete type=0 #155
2026/06/12-20:52:05.618870 7fc3c11be6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.550247 7f0509bff6c0 Manual compaction at level-0 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
2026/06/12-20:52:05.619129 7fc3c11be6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end) 2026/07/09-07:36:48.565110 7f0509bff6c0 Manual compaction at level-1 from '!items!0ZfAXacF6oWS120o' @ 72057594037927935 : 1 .. '!items!xFUyR7XECD8QJcIw' @ 0 : 0; will stop at (end)
+113 -39
View File
@@ -19,12 +19,15 @@ export class SectorMapApp extends ApplicationV2 {
window: { icon: 'fas fa-map', resizable: true, controls: [] }, window: { icon: 'fas fa-map', resizable: true, controls: [] },
}; };
constructor(sector, subsector) { constructor(sector, subsector, { readOnly = false } = {}) {
super(); super();
this._sector = sector; this._sector = sector;
this._subsector = subsector; this._subsector = subsector;
this._readOnly = readOnly;
this._handler = null; this._handler = null;
this._mapHex = null; this._mapHex = null;
this._mapCenter = null;
this._mapScale = null;
this._searchTimeout = null; this._searchTimeout = null;
} }
@@ -37,13 +40,16 @@ export class SectorMapApp extends ApplicationV2 {
get _mapUrl() { get _mapUrl() {
const base = 'https://travellermap.com'; const base = 'https://travellermap.com';
const cb = this._readOnly ? '' : '&callback=postmessage';
if (!this._sector) return `${base}/?style=mongoose&hideui=1`; if (!this._sector) return `${base}/?style=mongoose&hideui=1`;
if (this._subsector) { if (this._subsector) {
return `${base}/?sector=${encodeURIComponent(this._sector)}&subsector=${encodeURIComponent(this._subsector)}&style=mongoose&hideui=1`; return `${base}/?sector=${encodeURIComponent(this._sector)}&subsector=${encodeURIComponent(this._subsector)}&style=mongoose&hideui=1${cb}`;
} }
let url = `${base}/go/${encodeURIComponent(this._sector)}?style=mongoose`; let url = `${base}/?sector=${encodeURIComponent(this._sector)}&style=mongoose&hideui=1${cb}`;
if (this._mapHex) { if (this._mapHex) {
url += `&hex=${this._mapHex}&scale=512`; url += `&hex=${this._mapHex}&scale=512`;
} else if (this._mapCenter && this._mapScale) {
url += `&center=${this._mapCenter}&scale=${this._mapScale}`;
} }
return url; return url;
} }
@@ -58,6 +64,20 @@ export class SectorMapApp extends ApplicationV2 {
} }
_renderHTML() { _renderHTML() {
if (this._readOnly) {
return `<div class="mgt2-sector-map-outer">
<div class="mgt2-sector-map-toolbar mgt2-sector-map-toolbar--ro">
<span class="mgt2-sector-map-label">${SectorMapApp._escapeAttr(this.title)}</span>
<span class="mgt2-sector-map-hint">Carte partagée par le MJ</span>
</div>
<iframe
src="${this._mapUrl}"
class="mgt2-sector-map-frame"
allow="clipboard-write"
referrerpolicy="no-referrer">
</iframe>
</div>`;
}
return `<div class="mgt2-sector-map-outer"> return `<div class="mgt2-sector-map-outer">
<div class="mgt2-sector-map-toolbar"> <div class="mgt2-sector-map-toolbar">
<div class="mgt2-sector-map-search"> <div class="mgt2-sector-map-search">
@@ -66,8 +86,7 @@ export class SectorMapApp extends ApplicationV2 {
</div> </div>
<span class="mgt2-sector-map-label">${this._sector ? `${this._sector}${this._subsector ? ` — ss.${this._subsector}` : ''}` : 'Toute la carte'}</span> <span class="mgt2-sector-map-label">${this._sector ? `${this._sector}${this._subsector ? ` — ss.${this._subsector}` : ''}` : 'Toute la carte'}</span>
<span class="mgt2-sector-map-hint">Cliquez sur un hex pour voir les détails du monde</span> <span class="mgt2-sector-map-hint">Cliquez sur un hex pour voir les détails du monde</span>
<button type="button" class="mgt2-sector-map-share" title="Partager une image fixe dans le chat"><i class="fas fa-image"></i> Partager</button> <button type="button" class="mgt2-sector-map-sync" disabled title="Cliquez d'abord sur un hex pour définir la position à synchroniser"><i class="fas fa-users"></i> Synchroniser</button>
<button type="button" class="mgt2-sector-map-sync" title="Ouvrir la carte interactive chez tous les joueurs"><i class="fas fa-users"></i> Synchroniser</button>
<button type="button" class="mgt2-sector-map-travel" title="Planifier un voyage"><i class="fas fa-route"></i> Voyage</button> <button type="button" class="mgt2-sector-map-travel" title="Planifier un voyage"><i class="fas fa-route"></i> Voyage</button>
</div> </div>
<iframe <iframe
@@ -80,10 +99,11 @@ export class SectorMapApp extends ApplicationV2 {
} }
async _onRender(context, options) { async _onRender(context, options) {
if (this._readOnly) {
this._listen();
return;
}
this._listen(); this._listen();
this.element?.querySelector('.mgt2-sector-map-share')?.addEventListener('click', () => {
this._shareMap();
});
this.element?.querySelector('.mgt2-sector-map-sync')?.addEventListener('click', () => { this.element?.querySelector('.mgt2-sector-map-sync')?.addEventListener('click', () => {
this._syncAll(); this._syncAll();
}); });
@@ -112,16 +132,24 @@ export class SectorMapApp extends ApplicationV2 {
_listen() { _listen() {
if (this._handler) return; if (this._handler) return;
this._handler = (event) => { this._handler = (event) => {
// Accept messages from travellermap or any origin (for testing)
const d = event.data || {}; const d = event.data || {};
if (d.type === 'viewport') {
this._sector = d.sector || this._sector;
this._subsector = d.subsector || this._subsector;
this._mapHex = d.hex || null;
this._mapCenter = (d.x != null && d.y != null) ? `${d.x},${d.y}` : null;
this._mapScale = d.scale || null;
return;
}
// Click on map
const wx = d.x ?? d.location?.x; const wx = d.x ?? d.location?.x;
const wy = d.y ?? d.location?.y; const wy = d.y ?? d.location?.y;
if (wx == null || wy == null) return; if (wx == null || wy == null) return;
const x = Number(wx); const x = Number(wx);
const y = Number(wy); const y = Number(wy);
if (isNaN(x) || isNaN(y)) return; if (isNaN(x) || isNaN(y)) return;
console.log('SectorMapApp | click at', x, y, 'from', event.origin); this._onMapClick({ x, y }).catch(err => {
this._onMapClick({x, y}).catch(err => {
console.error('SectorMapApp | click handler failed:', err); console.error('SectorMapApp | click handler failed:', err);
}); });
}; };
@@ -149,6 +177,13 @@ export class SectorMapApp extends ApplicationV2 {
const sectorName = meta.Names?.[0]?.Text; const sectorName = meta.Names?.[0]?.Text;
if (!sectorName) { console.error('SectorMapApp | no Names[0].Text in metadata', meta); return; } if (!sectorName) { console.error('SectorMapApp | no Names[0].Text in metadata', meta); return; }
// Store click position for sync
this._sector = sectorName;
this._subsector = null;
this._mapHex = String(hx).padStart(2, '0') + String(hy).padStart(2, '0');
this._mapCenter = `${wx},${wy}`;
this._mapScale = loc.scale || 512;
const hex = String(hx).padStart(2, '0') + String(hy).padStart(2, '0'); const hex = String(hx).padStart(2, '0') + String(hy).padStart(2, '0');
const resp = await fetch( const resp = await fetch(
`https://travellermap.com/data/${encodeURIComponent(sectorName)}/${hex}` `https://travellermap.com/data/${encodeURIComponent(sectorName)}/${hex}`
@@ -159,9 +194,19 @@ export class SectorMapApp extends ApplicationV2 {
const world = data.Worlds?.[0]; const world = data.Worlds?.[0];
if (!world) { console.error('SectorMapApp | no Worlds in data', data); return; } if (!world) { console.error('SectorMapApp | no Worlds in data', data); return; }
this._enableSyncButton(world.Name || hex);
this._postWorldCard(world); this._postWorldCard(world);
} }
_enableSyncButton(worldName) {
const btn = this.element?.querySelector('.mgt2-sector-map-sync');
if (btn) {
btn.disabled = false;
btn.title = worldName ? `Synchroniser la vue sur ${worldName}` : 'Ouvrir la carte interactive chez tous les joueurs';
}
}
/* ───── Carte de chat ───── */ /* ───── Carte de chat ───── */
static _STARPORT = { A:'Excellent', B:'Bon', C:'Routinier', D:'Médiocre', E:'Frontière', X:'Aucun' }; static _STARPORT = { A:'Excellent', B:'Bon', C:'Routinier', D:'Médiocre', E:'Frontière', X:'Aucun' };
@@ -508,6 +553,9 @@ export class SectorMapApp extends ApplicationV2 {
this._sector = sector; this._sector = sector;
this._subsector = null; this._subsector = null;
this._mapHex = hex; this._mapHex = hex;
this._mapCenter = null;
this._mapScale = null;
this._enableSyncButton(name);
const iframe = this.element?.querySelector('.mgt2-sector-map-frame'); const iframe = this.element?.querySelector('.mgt2-sector-map-frame');
if (iframe) iframe.src = this._mapUrl; if (iframe) iframe.src = this._mapUrl;
@@ -517,41 +565,67 @@ export class SectorMapApp extends ApplicationV2 {
/* ───── Partage ───── */ /* ───── Partage ───── */
_shareMap() { async _syncAll() {
if (!this._sector) { if (!game.socket?.emit) {
ui.notifications.warn('Aucun secteur sélectionné — utilisez la recherche pour centrer sur un secteur'); ui.notifications.warn('Socket indisponible — impossible de synchroniser');
return; return;
} }
const posterUrl = `https://travellermap.com/api/poster?sector=${encodeURIComponent(this._sector)}${this._subsector ? `&subsector=${encodeURIComponent(this._subsector)}` : ''}&style=mongoose&scale=128&dpr=2`; try {
const label = this._subsector // Tentative de récupération du zoom via getViewport
? `Sous-secteur ${this._subsector}${this._sector}` const viewport = await new Promise((resolve) => {
: `Secteur ${this._sector}`; const handler = (event) => {
if (event.data?.type === 'viewport') {
window.removeEventListener('message', handler);
resolve(event.data);
}
};
window.addEventListener('message', handler);
const iframe = this.element?.querySelector('.mgt2-sector-map-frame');
if (iframe?.contentWindow) {
iframe.contentWindow.postMessage(
{ source: 'travellermap', type: 'getViewport' },
'*'
);
}
setTimeout(() => {
window.removeEventListener('message', handler);
resolve(null);
}, 1000);
});
const html = `<section class="mgt2-shared-map"> if (viewport) {
<div class="mgt2-world-card-header"> this._sector = viewport.sector || this._sector;
<span class="mgt2-world-name">${label}</span> this._subsector = viewport.subsector || this._subsector;
</div> this._mapHex = viewport.hex || this._mapHex;
<div class="mgt2-shared-map-image"> this._mapCenter = (viewport.x != null && viewport.y != null) ? `${viewport.x},${viewport.y}` : this._mapCenter;
<img src="${posterUrl}" alt="${label}"> this._mapScale = viewport.scale || this._mapScale;
</div>
<div class="mgt2-shared-map-footer">
<a href="https://travellermap.com/go/${encodeURIComponent(this._sector)}" target="_blank" rel="noopener">
Ouvrir sur Traveller Map <i class="fas fa-external-link-alt"></i>
</a>
</div>
</section>`;
ChatMessage.create({ content: html, rollMode: 'public' });
ui.notifications.info(`Carte partagée avec les joueurs`);
} }
_syncAll() { const payload = {
game.socket.emit(`module.${MODULE_ID}`, { _type: 'sectorMapSync',
type: 'sectorMapSync',
sector: this._sector, sector: this._sector,
subsector: this._subsector, subsector: this._subsector,
}); mapHex: this._mapHex,
ui.notifications.info(`Carte synchronisée chez tous les joueurs`); mapCenter: this._mapCenter,
mapScale: this._mapScale,
};
const players = game.users.filter(u => !u.isGM && u.active);
for (const player of players) {
game.socket.emit(`module.${MODULE_ID}`, payload);
}
ui.notifications.info(`Vue synchronisée chez ${players.length} joueur(s)`);
} catch (err) {
console.error(`${MODULE_ID} | Erreur socket sync:`, err);
ui.notifications.error('Erreur lors de la synchronisation');
}
}
updatePosition(sector, subsector, mapHex, mapUrl) {
this._sector = sector;
this._subsector = subsector;
this._mapHex = mapHex || null;
const iframe = this.element?.querySelector('.mgt2-sector-map-frame');
if (iframe) iframe.src = mapUrl || this._mapUrl;
} }
_openTravelDialog() { _openTravelDialog() {
+300
View File
@@ -0,0 +1,300 @@
import { CommerceDialog } from './CommerceDialog.js';
import { NpcDialog } from './NpcDialog.js';
import { SectorMapApp } from './SectorMapApp.js';
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
const IMAGE_EXTENSIONS = new Set(['png', 'webp', 'jpg', 'jpeg', 'gif', 'svg', 'avif', 'bmp', 'tiff', 'tif']);
class BatchNpcDialog extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
id: 'mgt2-batch-npc',
classes: ['mgt2-npc-dialog'],
position: { width: 540, height: 'auto' },
window: { title: 'Création de PNJs par lots', resizable: true },
form: { submitOnClose: false, closeOnSubmit: false },
};
static PARTS = {
main: {
template: `modules/${MODULE_ID}/templates/batch-npc-dialog.hbs`,
root: true,
},
};
constructor(options = {}) {
super(options);
this._formData = {
batch: {
directory: '',
folderName: 'PNJs importés',
openSheets: false,
},
};
}
async _prepareContext() {
return { ...this._formData };
}
async _onRender(context, options) {
await super._onRender(context, options);
const html = $('#' + this.id).find('.window-content');
this._applyTheme(html);
html.find('[data-action="browse-directory"]').on('click', async () => {
// Foundry v14: FilePicker avec pickFolders pour sélectionner un répertoire
try {
const fp = new FilePicker({
type: 'folder',
current: this._formData.batch.directory || '',
callback: (path) => {
this._formData.batch.directory = path;
html.find('[name="batch.directory"]').val(path);
},
pickFolders: true,
field: null,
button: null,
});
fp.render(true);
return;
} catch (_e) { /* fallback v13 */ }
// Fallback v13: selection d'un fichier → extraction du dossier parent
const fp = new FilePicker({
type: 'image',
current: this._formData.batch.directory || '',
callback: (path) => {
const dir = path.split('/').slice(0, -1).join('/');
this._formData.batch.directory = dir;
html.find('[name="batch.directory"]').val(dir);
},
});
fp.render(true);
});
html.find('[data-action="batch-create"]').on('click', async () => {
this._readForm(html);
await this._executeBatch(html);
});
}
_readForm(html) {
this._formData.batch.directory = (html.find('[name="batch.directory"]').val()?.trim() || '').replace(/\/+$/, '');
this._formData.batch.folderName = html.find('[name="batch.folderName"]').val()?.trim() || 'PNJs importés';
this._formData.batch.openSheets = html.find('[name="batch.openSheets"]').is(':checked');
}
_applyTheme(html) {
html.find('h3').css({ color: '#5f4300', 'border-bottom-color': '#b78f26', 'text-shadow': 'none' });
html.find('legend').css({ color: '#7a5c00', 'text-shadow': 'none' });
}
async _executeBatch(html) {
const { directory, folderName, openSheets } = this._formData.batch;
if (!directory) {
ui.notifications.warn('Veuillez spécifier un répertoire source.');
return;
}
const $progress = html.find('#batch-progress');
const $fill = html.find('#batch-progress-fill');
const $text = html.find('#batch-progress-text');
$progress.show();
try {
$text.text('Analyse du répertoire...');
let files;
try {
const result = await FilePicker.browse('data', directory);
files = result.files || [];
} catch (e) {
$progress.hide();
ui.notifications.error(`Impossible de lire le répertoire « ${directory} » : ${e.message}`);
return;
}
const imageFiles = files.filter(f => {
const ext = f.split('.').pop()?.toLowerCase();
return ext && IMAGE_EXTENSIONS.has(ext);
});
if (imageFiles.length === 0) {
$progress.hide();
ui.notifications.warn(`Aucune image trouvée dans « ${directory} ».`);
return;
}
$text.text(`${imageFiles.length} image(s) trouvée(s). Vérification des doublons...`);
const normalizePath = (p) => p.replace(/^[\\/]+/, '').replace(/[\\/]+/g, '/').toLowerCase();
const existingImages = new Set();
for (const actor of game.actors) {
if (actor.img && actor.img !== 'icons/svg/mystery-man.svg') {
existingImages.add(normalizePath(actor.img));
}
}
const toCreate = imageFiles.filter(f => !existingImages.has(normalizePath(f)));
if (toCreate.length === 0) {
$progress.hide();
ui.notifications.info('Tous les PNJs existent déjà (aucune nouvelle image à traiter).');
return;
}
let folder = null;
if (folderName) {
folder = game.folders.find(f => f.name === folderName && f.type === 'Actor');
if (!folder) {
folder = await Folder.create({ name: folderName, type: 'Actor', parent: null });
}
}
$text.text(`Création de ${toCreate.length} PNJ(s)...`);
const chunkSize = 10;
let created = 0;
const allCreated = [];
for (let i = 0; i < toCreate.length; i += chunkSize) {
const chunk = toCreate.slice(i, i + chunkSize);
const actorsData = chunk.map(path => {
const name = path.split('/').pop().replace(/\.[^/.]+$/, '');
return {
name,
type: 'npc',
img: path,
folder: folder?.id || null,
token: {
name,
img: path,
actorLink: true,
disposition: 0,
sight: { enabled: false },
},
system: {
settings: { hideUntrained: true, lockCharacteristics: true },
characteristics: {},
hits: {},
skills: {},
},
flags: {
[MODULE_ID]: { batchImported: true, sourceImage: path },
},
};
});
const actors = await Actor.create(actorsData, { renderSheet: false });
allCreated.push(...actors);
created += actors.length;
const pct = Math.min(100, Math.round((i + chunkSize) / toCreate.length * 100));
$fill.css('width', pct + '%');
$text.text(`${created}/${toCreate.length} PNJ(s) créé(s)...`);
}
ui.actors?.render(false);
$fill.css('width', '100%');
$text.text(`${created} PNJ(s) créé(s) avec succès dans le dossier « ${folderName} » !`);
ui.notifications.info(`${created} PNJ(s) créé(s) à partir des images.`);
if (openSheets && allCreated.length > 0) {
const lastActor = allCreated[allCreated.length - 1];
if (lastActor) lastActor.sheet?.render(true);
}
} catch (error) {
console.error(`${MODULE_ID} | Batch NPC creation error:`, error);
$text.text(`Erreur : ${error.message}`);
ui.notifications.error(`Erreur lors de la création : ${error.message}`);
}
}
}
Hooks.on('renderActorDirectory', (app, html, data) => {
if (!game.user?.isGM) return;
const $html = html instanceof jQuery ? html : $(html);
if ($html.find('.mgt2-batch-npc-btn').length) return;
const btn = $(`<button class="mgt2-batch-npc-btn" style="margin:4px 8px;flex:0;background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;">
<i class="fas fa-users"></i> Importer PNJs par lots
</button>`);
const shortcuts = [
{ icon: 'fa-balance-scale', label: 'Commerce', abbr: 'Commerce', action: 'commerce', cls: 'mgt2-shortcut-commerce', title: 'Ouvrir le commerce' },
{ icon: 'fa-user', label: 'PNJ rapide', abbr: 'PNJ', action: 'npc', cls: 'mgt2-shortcut-pnj', title: 'Générer un PNJ rapide' },
{ icon: 'fa-random', label: 'Rencontre', abbr: 'Rencontre', action: 'encounter', cls: 'mgt2-shortcut-rencontre', title: 'Générer une rencontre' },
{ icon: 'fa-briefcase', label: 'Mission', abbr: 'Mission', action: 'mission', cls: 'mgt2-shortcut-mission', title: 'Générer une mission' },
{ icon: 'fa-image', label: 'Fermer portraits', abbr: 'Fermer img', action: 'closePortraits', cls: 'mgt2-shortcut-closeimg', title: 'Fermer les portraits affichés aux joueurs' },
];
const grid = $(`<div style="display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:4px 8px;"></div>`);
shortcuts.forEach(s => {
const b = $(`<button class="${s.cls}" title="${s.title}" style="background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;padding:4px 6px;font-size:0.78em;cursor:pointer;border-radius:3px;text-align:center;">
<i class="fas ${s.icon}"></i> ${s.abbr}
</button>`).on('click', () => {
if (s.action === 'commerce') new CommerceDialog().render({ force: true });
else if (s.action === 'closePortraits') {
game.socket.emit(`module.${MODULE_ID}`, { _type: 'closeImagePopout' });
ui.notifications.info('Fermeture des portraits envoyée aux joueurs');
}
else new NpcDialog({ initialTab: s.action }).render({ force: true });
});
grid.append(b);
});
const footer = $html.find('.directory-footer');
if (footer.length) {
footer.append(btn);
footer.append(grid);
} else {
$html.find('.directory-header').after(btn);
$html.find('.directory-header').after(grid);
}
btn.on('click', () => {
new BatchNpcDialog().render({ force: true });
});
});
Hooks.on('renderSceneDirectory', (app, html, data) => {
if (!game.user?.isGM) return;
const $html = html instanceof jQuery ? html : $(html);
if ($html.find('.mgt2-sector-btn').length) return;
const sectorBtn = $(`<button class="mgt2-sector-btn" style="margin:4px 8px;flex:0;background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;cursor:pointer;">
<i class="fas fa-map"></i> Traveller Map
</button>`).on('click', () => {
new SectorMapApp().render({ force: true });
});
const canvasBtn = $(`<button class="mgt2-canvas-sync-btn" style="margin:4px 8px;flex:0;background:#2c2c3e;color:#d9b24c;border:1px solid #c9a227;cursor:pointer;">
<i class="fas fa-eye"></i> Sync vue MJ
</button>`).on('click', () => {
const pivot = canvas.stage?.pivot;
const scale = canvas.stage?.scale?.x;
if (!pivot || !scale) { ui.notifications.warn('Canvas pas encore prêt'); return; }
const players = game.users.filter(u => !u.isGM && u.active).map(u => u.id);
if (!players.length) { ui.notifications.warn('Aucun joueur connecté'); return; }
game.socket.emit(`module.${MODULE_ID}`, {
_type: 'canvasSync',
x: pivot.x,
y: pivot.y,
scale,
});
ui.notifications.info(`Vue synchronisée chez ${players.length} joueur(s)`);
});
const grid = $(`<div style="display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:4px 8px;"></div>`);
grid.append(sectorBtn, canvasBtn);
const footer = $html.find('.directory-footer');
if (footer.length) footer.append(grid);
else $html.find('.directory-header').after(grid);
});
+2
View File
@@ -38,6 +38,8 @@ Hooks.once('init', () => {
`modules/${MODULE_ID}/templates/traveller-npc-dialog.hbs`, `modules/${MODULE_ID}/templates/traveller-npc-dialog.hbs`,
`modules/${MODULE_ID}/templates/traveller-npc-result.hbs`, `modules/${MODULE_ID}/templates/traveller-npc-result.hbs`,
`modules/${MODULE_ID}/templates/ally-enemy-result.hbs`, `modules/${MODULE_ID}/templates/ally-enemy-result.hbs`,
`modules/${MODULE_ID}/templates/batch-npc-dialog.hbs`,
`modules/${MODULE_ID}/templates/player-map.hbs`,
]); ]);
} }
+4 -10
View File
@@ -16,9 +16,10 @@ let _pendingHandle = false;
/* ───── Fonctions partagées ───── */ /* ───── Fonctions partagées ───── */
async function openMap(sector, subsector) { async function openMap(sector, subsector, { readOnly = false } = {}) {
const app = new SectorMapApp(sector, subsector); const app = new SectorMapApp(sector, subsector, { readOnly });
await app.render({ force: true }); await app.render({ force: true });
return app;
} }
async function handleSectorCommand(sector, subsector) { async function handleSectorCommand(sector, subsector) {
@@ -139,16 +140,9 @@ Hooks.on('preCreateChatMessage', (message, data, options) => {
} }
}); });
/* ───── Socket (synchronisation MJ → joueurs) ───── */ /* ───── Socket (synchronisation MJ → joueurs) ───── voir sectorSocket.js ───── */
Hooks.once('ready', () => { Hooks.once('ready', () => {
game.socket.on(`module.${MODULE_ID}`, (data) => {
if (data?.type !== 'sectorMapSync') return;
if (game.user?.isGM) return;
openMap(data.sector, data.subsector);
});
// Clics sur les liens de monde dans les journals de trajet
document.addEventListener('click', (event) => { document.addEventListener('click', (event) => {
const link = event.target.closest('.mgt2-world-link'); const link = event.target.closest('.mgt2-world-link');
if (!link) return; if (!link) return;
+108
View File
@@ -0,0 +1,108 @@
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
let _playerDialog = null;
class PlayerMapDialog extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
id: 'mgt2-sector-map-player',
classes: ['mgt2-sector-map'],
position: { width: 960, height: 720 },
window: { icon: 'fas fa-map', resizable: true },
};
static PARTS = {
main: {
template: `modules/${MODULE_ID}/templates/player-map.hbs`,
},
};
constructor(url, sector) {
super();
this._mapUrl = url;
this._sectorLabel = sector ? `Secteur ${sector}` : 'Carte stellaire';
}
get title() { return this._sectorLabel; }
async _prepareContext() {
return { url: this._mapUrl };
}
updateMap(url) {
this._mapUrl = url;
const iframe = this.element?.querySelector('iframe');
if (iframe) iframe.src = url;
}
}
function buildMapUrl(sector, subsector, mapHex, mapCenter, mapScale) {
const base = 'https://travellermap.com';
if (!sector) return `${base}/?style=mongoose&hideui=1`;
if (subsector) {
let url = `${base}/?sector=${encodeURIComponent(sector)}&subsector=${encodeURIComponent(subsector)}&style=mongoose&hideui=1`;
if (mapCenter && mapScale) url += `&center=${mapCenter}&scale=${mapScale}`;
return url;
}
let url = `${base}/?sector=${encodeURIComponent(sector)}&style=mongoose&hideui=1`;
if (mapHex) {
url += `&hex=${mapHex}&scale=512`;
} else if (mapCenter && mapScale) {
url += `&center=${mapCenter}&scale=${mapScale}`;
}
return url;
}
Hooks.once('ready', () => {
console.log(`${MODULE_ID} | sectorSocket pret`);
game.socket.on(`module.${MODULE_ID}`, (data) => {
if (game.user?.isGM) return;
if (data?._type === 'sectorMapSync') {
try {
const url = buildMapUrl(data.sector, data.subsector, data.mapHex, data.mapCenter, data.mapScale);
if (_playerDialog) {
_playerDialog.updateMap(url);
_playerDialog.bringToTop?.();
console.log(`${MODULE_ID} | Carte mise a jour`);
return;
}
_playerDialog = new PlayerMapDialog(url, data.sector);
_playerDialog.render({ force: true }).then(() => {
console.log(`${MODULE_ID} | Dialog affiche`);
}).catch(err => {
console.error(`${MODULE_ID} | Erreur render:`, err);
});
} catch (err) {
console.error(`${MODULE_ID} | Erreur:`, err);
}
return;
}
if (data?._type === 'canvasSync') {
try {
const { x, y, scale } = data;
console.log(`${MODULE_ID} | Canvas sync recu:`, x, y, scale);
canvas.animatePan({ x, y, scale, duration: 0 });
} catch (err) {
console.error(`${MODULE_ID} | Erreur canvas sync:`, err);
}
return;
}
if (data?._type === 'closeImagePopout') {
try {
let closed = 0;
document.querySelectorAll('.image-popout, [class*="image-popout"], [id*="image-popout"]').forEach(el => {
el.remove(); closed++;
});
console.log(`${MODULE_ID} | ${closed} portrait(s) fermé(s)`);
} catch (err) {
console.error(`${MODULE_ID} | Erreur close portraits:`, err);
}
return;
}
});
});
+1 -1
View File
@@ -12,7 +12,7 @@ function buildStartupNoticeHtml() {
<div style="padding:6px 8px;border-left:4px solid #c9a227;background:#f5f0e8;color:#2c2c3e;line-height:1.45;"> <div style="padding:6px 8px;border-left:4px solid #c9a227;background:#f5f0e8;color:#2c2c3e;line-height:1.45;">
<strong>MgT2e outils</strong> <strong>MgT2e outils</strong>
<span style="color:#6a5422;">·</span> <span style="color:#6a5422;">·</span>
<code>/commerce</code> <code>/pnj</code> <code>/rencontre</code> <code>/mission</code> <code>/commerce</code> <code>/pnj</code> <code>/rencontre</code> <code>/mission</code> <code>/sector</code>
<div style="margin-top:2px;font-size:0.92em;color:#6a5422;"> <div style="margin-top:2px;font-size:0.92em;color:#6a5422;">
par <a href="https://www.uberwald.me" target="_blank" rel="noopener noreferrer">LeRatierBretonnien / Uberwald</a> par <a href="https://www.uberwald.me" target="_blank" rel="noopener noreferrer">LeRatierBretonnien / Uberwald</a>
</div> </div>
+55 -6
View File
@@ -414,6 +414,14 @@ button.btn-calculate:hover,
flex-shrink: 0; flex-shrink: 0;
} }
.mgt2-sector-map-toolbar--ro {
justify-content: center;
gap: 8px;
padding: 6px 12px;
background: #1e2833;
border-bottom: 1px solid #5f7a99;
}
.mgt2-sector-map-label { .mgt2-sector-map-label {
color: #d9b24c; color: #d9b24c;
font-weight: bold; font-weight: bold;
@@ -508,7 +516,6 @@ button.btn-calculate:hover,
font-size: 0.9em; font-size: 0.9em;
} }
.mgt2-sector-map-share,
.mgt2-sector-map-sync, .mgt2-sector-map-sync,
.mgt2-sector-map-travel { .mgt2-sector-map-travel {
background: #c9a227; background: #c9a227;
@@ -522,7 +529,6 @@ button.btn-calculate:hover,
flex-shrink: 0; flex-shrink: 0;
} }
.mgt2-sector-map-share:hover,
.mgt2-sector-map-sync:hover, .mgt2-sector-map-sync:hover,
.mgt2-sector-map-travel:hover { .mgt2-sector-map-travel:hover {
background: #d9b24c; background: #d9b24c;
@@ -766,10 +772,6 @@ button.btn-calculate:hover,
color: #222; color: #222;
} }
.mgt2-shared-map .mgt2-sector-map-share {
display: none;
}
.mgt2-shared-map-image { .mgt2-shared-map-image {
line-height: 0; line-height: 0;
} }
@@ -1113,3 +1115,50 @@ a.mgt2-world-link {
a.mgt2-world-link:hover { a.mgt2-world-link:hover {
color: #8a4aaa; color: #8a4aaa;
} }
/* === Batch NPC Creator =================================================== */
.mgt2-batch-npc-form {
gap: 10px;
padding: 14px 16px 12px;
}
.mgt2-batch-npc-form .input-group {
display: flex;
gap: 4px;
}
.mgt2-batch-npc-form .input-group input {
flex: 1;
}
.mgt2-batch-npc-form .input-group .btn-small {
flex: 0 0 32px;
padding: 4px 6px;
line-height: 1;
}
.batch-progress {
margin: 8px 0;
}
.batch-progress-bar {
height: 8px;
background: #ddd;
border-radius: 4px;
overflow: hidden;
}
.batch-progress-fill {
height: 100%;
width: 0%;
background: linear-gradient(90deg, #b78f26, #d9b24c);
border-radius: 4px;
transition: width 0.3s;
}
.batch-progress-text {
font-size: 0.85em;
color: #555;
margin-top: 4px;
}
+36
View File
@@ -0,0 +1,36 @@
<form class="mgt2-npc-form mgt2-batch-npc-form">
<fieldset style="padding:8px 10px;margin:0 0 6px">
<div class="form-group-row" style="gap:8px">
<div class="form-group" style="flex:1;min-width:0">
<label for="batch-directory" style="font-size:0.88em">Répertoire des images</label>
<div class="input-group">
<input id="batch-directory" name="batch.directory" type="text" value="{{batch.directory}}" placeholder="worlds/mon-monde/images">
<button type="button" class="btn-small" data-action="browse-directory" title="Parcourir" style="flex:0 0 28px;padding:2px 4px"><i class="fas fa-folder-open"></i></button>
</div>
</div>
<div class="form-group" style="flex:0 0 180px">
<label for="batch-folderName" style="font-size:0.88em">Dossier Acteur</label>
<input id="batch-folderName" name="batch.folderName" type="text" value="{{batch.folderName}}" placeholder="PNJs importés">
</div>
</div>
</fieldset>
<div class="form-group checkbox-group" style="margin:0 0 6px;padding:0 10px">
<label>
<input type="checkbox" name="batch.openSheets" {{#if batch.openSheets}}checked{{/if}}>
Ouvrir la dernière fiche
</label>
</div>
<div id="batch-progress" class="batch-progress" style="display:none;margin:0 10px 6px">
<div class="batch-progress-bar"><div class="batch-progress-fill" id="batch-progress-fill"></div></div>
<div class="batch-progress-text" id="batch-progress-text" style="font-size:0.78em">Initialisation...</div>
</div>
<div class="form-footer" style="padding:6px 10px">
<button type="button" class="btn-calculate" data-action="batch-create" style="padding:4px 12px;font-size:0.85em">
<i class="fas fa-dice-d6"></i> Créer les PNJs
</button>
</div>
</form>
+3
View File
@@ -0,0 +1,3 @@
<div style="display:flex;flex-direction:column;height:100%;padding:0;overflow:hidden">
<iframe src="{{url}}" width="100%" height="100%" style="border:none" allow="clipboard-write" referrerpolicy="no-referrer"></iframe>
</div>