domma-cms 1.8.32 → 1.8.34

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.
Files changed (110) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/docs/DommaFeatures.md +13 -1
  3. package/package.json +1 -1
  4. package/plugins/_lib/admin/games/games.css +1 -1
  5. package/plugins/_lib/admin/games/kit.js +329 -124
  6. package/plugins/_lib/games/http.js +11 -1
  7. package/plugins/_lib/games/plays.js +28 -7
  8. package/plugins/crossword/CLAUDE.md +37 -0
  9. package/plugins/crossword/admin/css/index.css +18 -1
  10. package/plugins/crossword/admin/views/crossword.js +337 -205
  11. package/plugins/crossword/docs/guide.md +53 -0
  12. package/plugins/crossword/inject/body.html +1 -1
  13. package/plugins/crossword/plugin.js +38 -5
  14. package/plugins/crossword/plugin.json +4 -3
  15. package/plugins/crossword/public/crossword.css +36 -1
  16. package/plugins/crossword/public/crossword.js +468 -6
  17. package/plugins/docs/CLAUDE.md +318 -0
  18. package/plugins/docs/admin/css/docs.css +783 -0
  19. package/plugins/docs/admin/lib/api.js +340 -0
  20. package/plugins/docs/admin/lib/convert.js +482 -0
  21. package/plugins/docs/admin/lib/drafts.js +115 -0
  22. package/plugins/docs/admin/lib/editor.js +851 -0
  23. package/plugins/docs/admin/lib/find-replace.js +426 -0
  24. package/plugins/docs/admin/lib/folders.js +203 -0
  25. package/plugins/docs/admin/lib/panel-guard.js +73 -0
  26. package/plugins/docs/admin/lib/pdf-view.js +126 -0
  27. package/plugins/docs/admin/lib/send.js +156 -0
  28. package/plugins/docs/admin/lib/settings.js +142 -0
  29. package/plugins/docs/admin/lib/share.js +323 -0
  30. package/plugins/docs/admin/lib/shortcuts.js +44 -0
  31. package/plugins/docs/admin/lib/templates.js +194 -0
  32. package/plugins/docs/admin/lib/versions.js +192 -0
  33. package/plugins/docs/admin/templates/docs.html +92 -0
  34. package/plugins/docs/admin/templates/editor.html +86 -0
  35. package/plugins/docs/admin/views/docs.js +777 -0
  36. package/plugins/docs/admin/views/editor.js +978 -0
  37. package/plugins/docs/config.js +24 -0
  38. package/plugins/docs/docs/guide.md +270 -0
  39. package/plugins/docs/lib/extensions.js +213 -0
  40. package/plugins/docs/lib/importer.js +72 -0
  41. package/plugins/docs/lib/pdf-worker.js +48 -0
  42. package/plugins/docs/lib/pdf.js +222 -0
  43. package/plugins/docs/lib/store.js +748 -0
  44. package/plugins/docs/plugin.js +1108 -0
  45. package/plugins/docs/plugin.json +89 -0
  46. package/plugins/docs/plugin.public.js +114 -0
  47. package/plugins/docs/templates/public-doc.html +36 -0
  48. package/plugins/docs/tests/_env.js +10 -0
  49. package/plugins/docs/tests/_pdf.js +73 -0
  50. package/plugins/docs/tests/convert.test.js +95 -0
  51. package/plugins/docs/tests/drafts.test.js +82 -0
  52. package/plugins/docs/tests/pdf.test.js +86 -0
  53. package/plugins/docs/tests/plugin.test.js +816 -0
  54. package/plugins/docs/tests/shortcuts.test.js +30 -0
  55. package/plugins/free-tier.lock.json +147 -1
  56. package/plugins/garage/CLAUDE.md +51 -0
  57. package/plugins/garage/admin/css/garage.css +73 -0
  58. package/plugins/garage/admin/lib/garage.js +236 -0
  59. package/plugins/garage/admin/templates/garage.html +86 -0
  60. package/plugins/garage/admin/views/garage.js +581 -0
  61. package/plugins/garage/collections/garage-vehicles/schema.json +101 -0
  62. package/plugins/garage/config.js +18 -0
  63. package/plugins/garage/docs/guide.md +118 -0
  64. package/plugins/garage/plugin.js +471 -0
  65. package/plugins/garage/plugin.json +68 -0
  66. package/plugins/garage/tests/access.test.js +134 -0
  67. package/plugins/garage/tests/garage.test.js +106 -0
  68. package/plugins/messages/CLAUDE.md +230 -0
  69. package/plugins/messages/admin/css/messages.css +117 -0
  70. package/plugins/messages/admin/lib/messages.js +452 -0
  71. package/plugins/messages/admin/templates/messages.html +76 -0
  72. package/plugins/messages/admin/views/messages.js +1219 -0
  73. package/plugins/messages/collections/user-message-threads/schema.json +22 -0
  74. package/plugins/messages/collections/user-messages/schema.json +23 -0
  75. package/plugins/messages/config.js +14 -0
  76. package/plugins/messages/docs/guide.md +176 -0
  77. package/plugins/messages/lib/call.js +138 -0
  78. package/plugins/messages/plugin.js +994 -0
  79. package/plugins/messages/plugin.json +59 -0
  80. package/plugins/messages/plugin.public.js +52 -0
  81. package/plugins/messages/templates/call.html +6 -0
  82. package/plugins/messages/tests/after-send.test.js +22 -0
  83. package/plugins/messages/tests/api.test.js +187 -0
  84. package/plugins/messages/tests/call.test.js +497 -0
  85. package/plugins/messages/tests/drafts.test.js +25 -0
  86. package/plugins/messages/tests/messages.test.js +167 -0
  87. package/plugins/quiz/CLAUDE.md +43 -0
  88. package/plugins/quiz/admin/css/index.css +13 -1
  89. package/plugins/quiz/admin/views/quiz.js +423 -245
  90. package/plugins/quiz/docs/guide.md +61 -0
  91. package/plugins/quiz/inject/body.html +1 -1
  92. package/plugins/quiz/plugin.js +39 -5
  93. package/plugins/quiz/plugin.json +4 -3
  94. package/plugins/quiz/public/quiz.css +36 -1
  95. package/plugins/quiz/public/quiz.js +298 -6
  96. package/plugins/theme-roller/CLAUDE.md +65 -0
  97. package/plugins/theme-roller/admin/css/theme-roller.css +43 -0
  98. package/plugins/theme-roller/admin/lib/prompt.js +22 -0
  99. package/plugins/theme-roller/admin/lib/themes.js +196 -0
  100. package/plugins/theme-roller/admin/lib/view.js +88 -0
  101. package/plugins/theme-roller/admin/templates/theme-roller.html +73 -0
  102. package/plugins/theme-roller/admin/views/theme-roller-view.js +639 -0
  103. package/plugins/theme-roller/config.js +1 -0
  104. package/plugins/theme-roller/docs/guide.md +104 -0
  105. package/plugins/theme-roller/plugin.js +263 -0
  106. package/plugins/theme-roller/plugin.json +42 -0
  107. package/plugins/theme-roller/tests/api.test.js +161 -0
  108. package/plugins/theme-roller/tests/prompt-values.test.js +22 -0
  109. package/plugins/theme-roller/tests/themes.test.js +77 -0
  110. package/plugins/theme-roller/tests/view.test.js +55 -0
@@ -0,0 +1,86 @@
1
+ <!-- Garage. Bound with M.applyBindings - see admin/views/garage.js, which also inserts the row templates
2
+ (the router renders a templateUrl through _.render, eating any {{…}}). No page heading: the plugin
3
+ banner above carries the name, version and licence, and the settings cog. -->
4
+ <div class="gx">
5
+ <div class="gx-card">
6
+ <div class="gx-card-title">Look up a vehicle
7
+ <span data-help-title="Vehicle lookup" data-help="Type a UK registration and press Enter. The DVLA's Vehicle Enquiry Service answers with the make, colour, year, fuel, engine size and CO₂, and the MOT and road tax status with their dates. Every lookup is kept in History; save a vehicle to keep it in My Garage, where MOT and tax coming due show on the Garage badge in the sidebar. Lookups are rate-limited per user."></span>
8
+ <span class="gx-spacer"></span>
9
+ <button type="button" class="btn btn-sm btn-ghost" data-on-click="openSettings" data-bind-hidden="hasBanner" title="Garage settings">
10
+ <span data-icon="settings" data-icon-size="14"></span> Settings</button>
11
+ </div>
12
+ <p class="gx-alert" data-bind-hidden="!settingsLoaded.value || hasKey.value">
13
+ <span data-icon="alert-triangle" data-icon-size="16"></span>
14
+ No DVLA API key yet - lookups will fail until one is saved.
15
+ <button type="button" class="btn btn-sm btn-outline" data-on-click="openSettings">Add the key</button>
16
+ </p>
17
+ <div class="gx-lookup-bar">
18
+ <input type="text" class="gx-plate-input" placeholder="AB12 CDE" maxlength="10" autocomplete="off" spellcheck="false"
19
+ aria-label="Registration number" data-model="reg.value">
20
+ <button type="button" class="btn btn-primary" data-on-click="lookup" data-bind-disabled="cannotLookUp.value">
21
+ <span data-icon="search" data-icon-size="14"></span> <span data-bind-text="lookupText.value">Look up</span></button>
22
+ <span class="gx-note" data-bind-text="rateNote.value"></span>
23
+ </div>
24
+ <p class="gx-note is-bad" data-bind-hidden="!lookupError.value" data-bind-text="lookupError.value"></p>
25
+
26
+ <div class="gx-result" data-bind-hidden="!result.value">
27
+ <div class="gx-result-head">
28
+ <span class="gx-plate is-big" data-bind-text="resultRow.value.reg"></span>
29
+ <strong data-bind-text="resultRow.value.title"></strong>
30
+ <span class="gx-chips">
31
+ <span class="gx-chip" data-bind-class="resultRow.value.motTone" data-bind-text="resultRow.value.motText"></span>
32
+ <span class="gx-chip" data-bind-class="resultRow.value.taxTone" data-bind-text="resultRow.value.taxText"></span>
33
+ </span>
34
+ </div>
35
+ <small class="gx-note" data-bind-text="resultRow.value.meta"></small>
36
+ <div class="gx-actions">
37
+ <button type="button" class="btn btn-sm" data-on-click="toggleResultSaved"
38
+ data-bind-class="resultRow.value.saved ? 'btn-outline' : 'btn-success'" data-bind-disabled="resultSaving.value">
39
+ <span data-bind-text="resultRow.value.saved ? 'Remove from My Garage' : 'Save to My Garage'"></span></button>
40
+ <button type="button" class="btn btn-sm btn-ghost" data-on-click="resultDetails">Details</button>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="tabs gx-tabs">
46
+ <div class="tab-list">
47
+ <button type="button" class="tab-item active">My Garage <span class="gx-count" data-bind-text="saved.value.length"></span></button>
48
+ <button type="button" class="tab-item">History <span class="gx-count" data-bind-text="history.value.length"></span></button>
49
+ </div>
50
+
51
+ <!-- My Garage -->
52
+ <div class="tab-panel active">
53
+ <div class="gx-card">
54
+ <div class="gx-bar">
55
+ <div class="gx-seg" role="group" aria-label="Show">
56
+ <button type="button" data-on-click="showAll" data-bind-class="filter.value === 'all' && 'is-on'">All <b data-bind-text="saved.value.length"></b></button>
57
+ <button type="button" data-on-click="showAttention" data-bind-class="filter.value === 'attention' && 'is-on'">Needs attention <b data-bind-text="attentionCount.value"></b></button>
58
+ </div>
59
+ <input type="search" class="form-input gx-search" placeholder="Search registration, make, colour…" aria-label="Search My Garage" data-model="garageQuery.value">
60
+ <span data-help-title="My Garage" data-help="The vehicles you saved, the ones needing something first: red when the MOT has expired or the tax has run out, amber when either is due within 30 days, or the vehicle is SORN. Click one for its details; right-click it (or ⋮, or Shift+F10) to look it up again for fresh DVLA data, copy its registration, take it out of your garage or delete it. The dates are as the DVLA had them at the last lookup."></span>
61
+ </div>
62
+ <div class="gx-note gx-loading" data-bind-hidden="!loading.value">Loading…</div>
63
+ <p class="gx-note is-bad" data-bind-hidden="!loadError.value" data-bind-text="loadError.value"></p>
64
+ <p class="gx-note" data-bind-hidden="loading.value || loadError.value || garageRows.value.length" data-bind-text="garageEmpty.value"></p>
65
+ <div class="gx-list gx-garage" data-each="garageRows.value key=id"></div>
66
+ </div>
67
+ </div>
68
+
69
+ <!-- History -->
70
+ <div class="tab-panel">
71
+ <div class="gx-card">
72
+ <div class="gx-bar">
73
+ <input type="search" class="form-input gx-search" placeholder="Search history…" aria-label="Search history" data-model="historyQuery.value">
74
+ <span data-help-title="History" data-help="Every vehicle you have looked up, newest first. Looking one up again updates it in place. The oldest lookups you have not saved are dropped once the history passes its limit; Clear unsaved removes them all now - saved vehicles are never touched."></span>
75
+ <span class="gx-spacer"></span>
76
+ <button type="button" class="btn btn-sm btn-outline" data-on-click="clearUnsaved" data-bind-disabled="!unsavedCount.value">
77
+ <span data-icon="trash" data-icon-size="14"></span> Clear unsaved <b data-bind-text="unsavedCount.value"></b></button>
78
+ </div>
79
+ <div class="gx-note gx-loading" data-bind-hidden="!loading.value">Loading…</div>
80
+ <p class="gx-note is-bad" data-bind-hidden="!loadError.value" data-bind-text="loadError.value"></p>
81
+ <p class="gx-note" data-bind-hidden="loading.value || loadError.value || historyRows.value.length" data-bind-text="historyEmpty.value"></p>
82
+ <div class="gx-list gx-history" data-each="historyRows.value key=id"></div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>