fwtoolkit 0.1.0-alpha.5 → 0.1.0-alpha.6

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 (118) hide show
  1. package/README.md +41 -9
  2. package/dist/basic.d.ts +70 -0
  3. package/dist/basic.d.ts.map +1 -0
  4. package/dist/basic.js +447 -0
  5. package/dist/basic.js.map +1 -0
  6. package/dist/blob.d.ts +2 -0
  7. package/dist/blob.d.ts.map +1 -0
  8. package/dist/blob.js +12 -0
  9. package/dist/blob.js.map +1 -0
  10. package/dist/content_menu.d.ts +31 -0
  11. package/dist/content_menu.d.ts.map +1 -0
  12. package/dist/content_menu.js +360 -0
  13. package/dist/content_menu.js.map +1 -0
  14. package/dist/datatable_bulk.d.ts +14 -0
  15. package/dist/datatable_bulk.d.ts.map +1 -0
  16. package/dist/datatable_bulk.js +176 -0
  17. package/dist/datatable_bulk.js.map +1 -0
  18. package/dist/dialog.d.ts +18 -0
  19. package/dist/dialog.d.ts.map +1 -0
  20. package/dist/dialog.js +395 -0
  21. package/dist/dialog.js.map +1 -0
  22. package/dist/events.d.ts +2 -0
  23. package/dist/events.d.ts.map +1 -0
  24. package/dist/events.js +11 -0
  25. package/dist/events.js.map +1 -0
  26. package/dist/faq_dialog.d.ts +8 -0
  27. package/dist/faq_dialog.d.ts.map +1 -0
  28. package/dist/faq_dialog.js +63 -0
  29. package/dist/faq_dialog.js.map +1 -0
  30. package/dist/file/dialog.d.ts +27 -0
  31. package/dist/file/dialog.d.ts.map +1 -0
  32. package/dist/file/dialog.js +125 -0
  33. package/dist/file/dialog.js.map +1 -0
  34. package/dist/file/index.d.ts +5 -0
  35. package/dist/file/index.d.ts.map +1 -0
  36. package/dist/file/index.js +6 -0
  37. package/dist/file/index.js.map +1 -0
  38. package/dist/file/new_folder_dialog.d.ts +5 -0
  39. package/dist/file/new_folder_dialog.d.ts.map +1 -0
  40. package/dist/file/new_folder_dialog.js +34 -0
  41. package/dist/file/new_folder_dialog.js.map +1 -0
  42. package/dist/file/selector.d.ts +22 -0
  43. package/dist/file/selector.d.ts.map +1 -0
  44. package/dist/file/selector.js +239 -0
  45. package/dist/file/selector.js.map +1 -0
  46. package/dist/file/templates.d.ts +5 -0
  47. package/dist/file/templates.d.ts.map +1 -0
  48. package/dist/file/templates.js +9 -0
  49. package/dist/file/templates.js.map +1 -0
  50. package/dist/file/tools.d.ts +5 -0
  51. package/dist/file/tools.d.ts.map +1 -0
  52. package/dist/file/tools.js +51 -0
  53. package/dist/file/tools.js.map +1 -0
  54. package/dist/focus.d.ts +3 -0
  55. package/dist/focus.d.ts.map +1 -0
  56. package/dist/focus.js +12 -0
  57. package/dist/focus.js.map +1 -0
  58. package/dist/index.d.ts +18 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +19 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/network.d.ts +11 -0
  63. package/dist/network.d.ts.map +1 -0
  64. package/dist/network.js +113 -0
  65. package/dist/network.js.map +1 -0
  66. package/dist/overview_menu.d.ts +27 -0
  67. package/dist/overview_menu.d.ts.map +1 -0
  68. package/dist/overview_menu.js +536 -0
  69. package/dist/overview_menu.js.map +1 -0
  70. package/dist/settings.d.ts +3 -0
  71. package/dist/settings.d.ts.map +1 -0
  72. package/dist/settings.js +16 -0
  73. package/dist/settings.js.map +1 -0
  74. package/dist/templates.d.ts +7 -0
  75. package/dist/templates.d.ts.map +1 -0
  76. package/dist/templates.js +43 -0
  77. package/dist/templates.js.map +1 -0
  78. package/dist/user.d.ts +6 -0
  79. package/dist/user.d.ts.map +1 -0
  80. package/dist/user.js +45 -0
  81. package/dist/user.js.map +1 -0
  82. package/dist/user_util.d.ts +7 -0
  83. package/dist/user_util.d.ts.map +1 -0
  84. package/dist/user_util.js +19 -0
  85. package/dist/user_util.js.map +1 -0
  86. package/dist/worker.d.ts +2 -0
  87. package/dist/worker.d.ts.map +1 -0
  88. package/dist/worker.js +12 -0
  89. package/dist/worker.js.map +1 -0
  90. package/dist/ws.d.ts +46 -0
  91. package/dist/ws.d.ts.map +1 -0
  92. package/dist/ws.js +329 -0
  93. package/dist/ws.js.map +1 -0
  94. package/package.json +25 -4
  95. package/src/{basic.js → basic.ts} +1 -0
  96. package/src/{blob.js → blob.ts} +1 -0
  97. package/src/{content_menu.js → content_menu.ts} +1 -0
  98. package/src/{datatable_bulk.js → datatable_bulk.ts} +1 -0
  99. package/src/{dialog.js → dialog.ts} +1 -0
  100. package/src/{events.js → events.ts} +1 -0
  101. package/src/{faq_dialog.js → faq_dialog.ts} +1 -0
  102. package/src/file/{dialog.js → dialog.ts} +1 -0
  103. package/src/file/{index.js → index.ts} +1 -0
  104. package/src/file/{new_folder_dialog.js → new_folder_dialog.ts} +1 -0
  105. package/src/file/{selector.js → selector.ts} +1 -0
  106. package/src/file/{templates.js → templates.ts} +1 -0
  107. package/src/file/{tools.js → tools.ts} +1 -0
  108. package/src/{focus.js → focus.ts} +1 -0
  109. package/src/global.d.ts +11 -0
  110. package/src/{index.js → index.ts} +1 -0
  111. package/src/{network.js → network.ts} +1 -0
  112. package/src/{overview_menu.js → overview_menu.ts} +1 -0
  113. package/src/{settings.js → settings.ts} +1 -0
  114. package/src/{templates.js → templates.ts} +1 -0
  115. package/src/{user.js → user.ts} +1 -0
  116. package/src/{user_util.js → user_util.ts} +1 -0
  117. package/src/{worker.js → worker.ts} +1 -0
  118. package/src/{ws.js → ws.ts} +1 -0
@@ -0,0 +1,536 @@
1
+ // @ts-nocheck
2
+ import { DiffDOM } from "diff-dom";
3
+ import { keyName } from "w3c-keyname";
4
+ import { escapeText, whenReady } from "./basic.js";
5
+ export class OverviewMenuView {
6
+ constructor(overview, model) {
7
+ this.overview = overview;
8
+ this.model = model();
9
+ this.dd = new DiffDOM({
10
+ valueDiffing: false
11
+ });
12
+ this.openedMenu = false;
13
+ this.listeners = {};
14
+ this.keyboardShortcuts = new Map();
15
+ }
16
+ init() {
17
+ whenReady().then(() => {
18
+ this.addMissingIds(this.model);
19
+ this.bindEvents();
20
+ this.setupKeyboardShortcuts();
21
+ });
22
+ }
23
+ addMissingIds(menu) {
24
+ // Add missing ids to menu items that don't have an ID.
25
+ menu.content.forEach(item => {
26
+ if (!item.id) {
27
+ item.id = Math.random().toString(36).substring(2);
28
+ }
29
+ if (item.type === "dropdown") {
30
+ this.addMissingIds(item);
31
+ }
32
+ });
33
+ }
34
+ bindEvents() {
35
+ this.menuEl = document.getElementById("fw-overview-menu");
36
+ this.listeners.onclick = event => this.onclick(event);
37
+ document.body.addEventListener("click", this.listeners.onclick);
38
+ this.listeners.oninput = event => this.oninput(event);
39
+ document.body.addEventListener("input", this.listeners.oninput);
40
+ this.listeners.onKeydown = event => this.onKeydown(event);
41
+ document.body.addEventListener("keydown", this.listeners.onKeydown);
42
+ this.listeners.onFocus = event => this.onFocus(event);
43
+ document.body.addEventListener("focus", this.listeners.onFocus, true);
44
+ this.update();
45
+ }
46
+ setupKeyboardShortcuts() {
47
+ // Map all keyboard shortcuts from the menu model
48
+ this.model.content.forEach(menuItem => {
49
+ if (menuItem.keys) {
50
+ this.keyboardShortcuts.set(menuItem.keys.toLowerCase(), menuItem);
51
+ }
52
+ });
53
+ }
54
+ onKeydown(event) {
55
+ let name = keyName(event);
56
+ if (event.altKey) {
57
+ name = "alt-" + name.toLowerCase();
58
+ const menuItem = this.keyboardShortcuts.get(name);
59
+ if (menuItem) {
60
+ event.preventDefault();
61
+ event.stopPropagation();
62
+ event.stopImmediatePropagation();
63
+ if (menuItem.type === "search") {
64
+ const inputEl = document.getElementById(`${menuItem.id}-input`);
65
+ if (inputEl) {
66
+ inputEl.focus();
67
+ }
68
+ }
69
+ else if (menuItem.type === "dropdown") {
70
+ // Toggle dropdown menu
71
+ // If the menu is already open, close it
72
+ if (this.openedMenu === this.model.content.indexOf(menuItem)) {
73
+ menuItem.open = false;
74
+ this.openedMenu = false;
75
+ this.update();
76
+ }
77
+ else {
78
+ if (this.openedMenu !== false) {
79
+ this.model.content[this.openedMenu].open = false;
80
+ }
81
+ menuItem.open = true;
82
+ this.openedMenu = this.model.content.indexOf(menuItem);
83
+ this.update();
84
+ const firstDropdownItem = this.menuEl.querySelector(`.fw-pulldown-item.selected`);
85
+ if (firstDropdownItem) {
86
+ firstDropdownItem.focus();
87
+ }
88
+ }
89
+ }
90
+ else if (menuItem.action) {
91
+ menuItem.action(this.overview);
92
+ }
93
+ return;
94
+ }
95
+ }
96
+ // Handle horizontal navigation between menu items
97
+ if (name === "ArrowLeft" || name === "ArrowRight") {
98
+ const menuItems = Array.from(this.menuEl.querySelectorAll("#fw-overview-menu > li"));
99
+ const focusedElement = document.activeElement;
100
+ const currentMenuItem = focusedElement.closest("li");
101
+ if (currentMenuItem) {
102
+ event.preventDefault();
103
+ const currentIndex = menuItems.indexOf(currentMenuItem);
104
+ let newIndex;
105
+ if (name === "ArrowLeft") {
106
+ newIndex =
107
+ currentIndex > 0
108
+ ? currentIndex - 1
109
+ : menuItems.length - 1;
110
+ }
111
+ else {
112
+ newIndex =
113
+ currentIndex < menuItems.length - 1
114
+ ? currentIndex + 1
115
+ : 0;
116
+ }
117
+ const nextMenuItem = menuItems[newIndex].querySelector(".fw-dropdown-menu, .fw-text-menu, button, input");
118
+ if (nextMenuItem) {
119
+ nextMenuItem.focus();
120
+ }
121
+ }
122
+ return;
123
+ }
124
+ // Handle Enter and Space to open dropdown menus
125
+ if (name === "Enter" || name === " ") {
126
+ const focusedElement = document.activeElement;
127
+ if (focusedElement.matches(".fw-dropdown-menu")) {
128
+ event.preventDefault();
129
+ const menuItem = this.findMenuItemFromElement(focusedElement);
130
+ if (menuItem && menuItem.type === "dropdown") {
131
+ if (this.openedMenu !== false) {
132
+ this.model.content[this.openedMenu].open = false;
133
+ }
134
+ menuItem.open = true;
135
+ this.openedMenu = this.model.content.indexOf(menuItem);
136
+ menuItem.selectedIndex = 0;
137
+ this.update();
138
+ const firstDropdownItem = this.menuEl.querySelector(`.fw-pulldown-item.selected`);
139
+ if (firstDropdownItem) {
140
+ firstDropdownItem.focus();
141
+ }
142
+ }
143
+ return;
144
+ }
145
+ }
146
+ if (this.openedMenu !== false) {
147
+ const menuItem = this.model.content[this.openedMenu];
148
+ if (menuItem.type === "dropdown") {
149
+ if (name === "ArrowDown" || name === "ArrowUp") {
150
+ event.preventDefault();
151
+ event.stopPropagation();
152
+ // Find currently selected item
153
+ let selectedIndex = -1;
154
+ if (menuItem.selectedIndex !== undefined) {
155
+ selectedIndex = menuItem.selectedIndex;
156
+ }
157
+ // Calculate new index
158
+ if (name === "ArrowDown") {
159
+ selectedIndex =
160
+ selectedIndex < menuItem.content.length - 1
161
+ ? selectedIndex + 1
162
+ : 0;
163
+ }
164
+ else {
165
+ selectedIndex -= 1;
166
+ if (selectedIndex < 0) {
167
+ // Close menu
168
+ menuItem.open = false;
169
+ this.openedMenu = false;
170
+ delete menuItem.selectedIndex;
171
+ this.update();
172
+ const dropdownButton = this.menuEl.querySelector(`#${menuItem.id}-button`);
173
+ if (dropdownButton) {
174
+ dropdownButton.focus();
175
+ }
176
+ }
177
+ }
178
+ menuItem.selectedIndex = selectedIndex;
179
+ this.update();
180
+ const selectedEl = this.menuEl.querySelector(`.fw-pulldown-item.selected`);
181
+ if (selectedEl) {
182
+ selectedEl.focus();
183
+ }
184
+ }
185
+ else if (name === "Enter" || name === " ") {
186
+ event.preventDefault();
187
+ event.stopPropagation();
188
+ if (menuItem.selectedIndex !== undefined &&
189
+ menuItem.content[menuItem.selectedIndex]) {
190
+ const selectedItem = menuItem.content[menuItem.selectedIndex];
191
+ if (selectedItem.action) {
192
+ selectedItem.action(this.overview);
193
+ menuItem.open = false;
194
+ this.openedMenu = false;
195
+ delete menuItem.selectedIndex;
196
+ this.update();
197
+ }
198
+ }
199
+ }
200
+ else if (name === "Escape") {
201
+ event.preventDefault();
202
+ event.stopPropagation();
203
+ menuItem.open = false;
204
+ this.openedMenu = false;
205
+ delete menuItem.selectedIndex;
206
+ this.update();
207
+ const dropdownButton = document.getElementById(`${menuItem.id}-button`);
208
+ if (dropdownButton) {
209
+ dropdownButton.focus();
210
+ }
211
+ }
212
+ }
213
+ }
214
+ }
215
+ onFocus(event) {
216
+ // Ignore if the focus event is triggered by JavaScript
217
+ if (event.isTrusted === false) {
218
+ return;
219
+ }
220
+ const target = event.target;
221
+ if (this.openedMenu !== false) {
222
+ if (target.matches("#fw-overview-menu li .fw-pulldown-item")) {
223
+ const menuItem = this.model.content[this.openedMenu];
224
+ if (menuItem) {
225
+ const itemNumber = Array.from(target.parentElement.parentElement.children).indexOf(target.parentElement);
226
+ menuItem.selectedIndex = itemNumber;
227
+ this.update();
228
+ }
229
+ }
230
+ else {
231
+ // Close dropdown menu if focus is outside of the dropdown
232
+ const menuItem = this.model.content[this.openedMenu];
233
+ if (menuItem) {
234
+ menuItem.open = false;
235
+ delete menuItem.selectedIndex;
236
+ this.openedMenu = false;
237
+ this.update();
238
+ }
239
+ }
240
+ }
241
+ }
242
+ findMenuItemFromElement(element) {
243
+ const menuItem = element.closest("li");
244
+ if (!menuItem) {
245
+ return null;
246
+ }
247
+ let menuNumber = 0;
248
+ let seekItem = menuItem;
249
+ while (seekItem.previousElementSibling) {
250
+ menuNumber++;
251
+ seekItem = seekItem.previousElementSibling;
252
+ }
253
+ return this.model.content[menuNumber];
254
+ }
255
+ focusMenuItem(menuItem) {
256
+ const menuEl = this.menuEl.querySelector(`#${menuItem.id}`);
257
+ if (menuEl) {
258
+ menuEl.focus();
259
+ }
260
+ }
261
+ oninput(event) {
262
+ const target = event.target;
263
+ if (target.matches("#fw-overview-menu > li > .fw-button > input")) {
264
+ // A text was entered in a top entry. we find which one.
265
+ let menuNumber = 0;
266
+ let seekItem = target.closest("li");
267
+ while (seekItem.previousElementSibling) {
268
+ menuNumber++;
269
+ seekItem = seekItem.previousElementSibling;
270
+ }
271
+ const menuItem = this.model.content[menuNumber];
272
+ if (menuItem.input) {
273
+ menuItem.input(this.overview, target.value);
274
+ target.focus();
275
+ }
276
+ }
277
+ }
278
+ onclick(event) {
279
+ const target = event.target;
280
+ if (target.matches("#fw-overview-menu li li, #fw-overview-menu li li *")) {
281
+ event.preventDefault();
282
+ let itemNumber = 0;
283
+ let seekItem = target.closest("li");
284
+ while (seekItem.previousElementSibling) {
285
+ itemNumber++;
286
+ seekItem = seekItem.previousElementSibling;
287
+ }
288
+ let menuNumber = 0;
289
+ seekItem = seekItem.parentElement.parentElement.parentElement;
290
+ while (seekItem.previousElementSibling) {
291
+ menuNumber++;
292
+ seekItem = seekItem.previousElementSibling;
293
+ }
294
+ this.model.content[menuNumber].content[itemNumber].action(this.overview);
295
+ this.model.content[menuNumber].open = false;
296
+ if (this.model.content[menuNumber].type === "dropdown") {
297
+ this.model.content[menuNumber].title =
298
+ this.model.content[menuNumber].content[itemNumber].title;
299
+ this.openedMenu = false;
300
+ this.update();
301
+ }
302
+ return false;
303
+ }
304
+ else if (target.matches("#fw-overview-menu li .select-action input[type=checkbox]")) {
305
+ event.preventDefault();
306
+ event.stopImmediatePropagation();
307
+ event.stopPropagation();
308
+ // A toolbar dropdown menu item was clicked. We just need to
309
+ // find out which one
310
+ let menuNumber = 0;
311
+ let seekItem = target.closest("li");
312
+ while (seekItem.previousElementSibling) {
313
+ menuNumber++;
314
+ seekItem = seekItem.previousElementSibling;
315
+ }
316
+ const menuItem = this.model.content[menuNumber];
317
+ if (menuItem.checked === true) {
318
+ menuItem.checked = false;
319
+ menuItem.uncheckAction(this.overview);
320
+ }
321
+ else {
322
+ menuItem.checked = true;
323
+ menuItem.checkAction(this.overview);
324
+ }
325
+ return true;
326
+ }
327
+ else if (target.matches("#fw-overview-menu li, #fw-overview-menu li *")) {
328
+ // A toolbar dropdown menu item was clicked. We just need to
329
+ // find out which one
330
+ let menuNumber = 0;
331
+ let seekItem = target.closest("li");
332
+ while (seekItem.previousElementSibling) {
333
+ menuNumber++;
334
+ seekItem = seekItem.previousElementSibling;
335
+ }
336
+ const menuItem = this.model.content[menuNumber];
337
+ // if it is a dropdown menu, open it. Otherwise execute an
338
+ // associated action.
339
+ if (["dropdown", "select-action-dropdown"].includes(menuItem.type)) {
340
+ event.preventDefault();
341
+ if (this.openedMenu === menuNumber) {
342
+ this.model.content[this.openedMenu].open = false;
343
+ this.openedMenu = false;
344
+ }
345
+ else {
346
+ if (this.openedMenu !== false) {
347
+ this.model.content[this.openedMenu].open = false;
348
+ }
349
+ menuItem.open = true;
350
+ this.openedMenu = menuNumber;
351
+ }
352
+ this.update();
353
+ }
354
+ else if (menuItem.action) {
355
+ event.preventDefault();
356
+ menuItem.action(this.overview);
357
+ this.announceForScreenReader(gettext("Action completed"));
358
+ if (this.openedMenu !== false) {
359
+ this.model.content[this.openedMenu].open = false;
360
+ this.openedMenu = false;
361
+ }
362
+ this.update();
363
+ }
364
+ return false;
365
+ }
366
+ else if (this.openedMenu !== false) {
367
+ this.model.content[this.openedMenu].open = false;
368
+ this.openedMenu = false;
369
+ this.update();
370
+ }
371
+ }
372
+ update() {
373
+ if (!this.menuEl) {
374
+ // page has not yet been loaded. abort
375
+ return;
376
+ }
377
+ const diff = this.dd.diff(this.menuEl, this.getMenuHTML());
378
+ this.dd.apply(this.menuEl, diff);
379
+ }
380
+ getMenuHTML() {
381
+ return `<ul id="fw-overview-menu">${this.model.content
382
+ .map(menuItem => `<li class="fw-overview-menu-item${menuItem.id ? ` ${menuItem.id}` : ""} ${menuItem.type}">${this.getMenuItemHTML(menuItem)}</li>`)
383
+ .join("")}</ul>`;
384
+ }
385
+ // Underline access keys
386
+ getAccessKeyHTML(title, accessKey) {
387
+ if (!accessKey) {
388
+ return escapeText(title);
389
+ }
390
+ const index = title.toLowerCase().indexOf(accessKey.toLowerCase());
391
+ if (index === -1) {
392
+ return escapeText(title);
393
+ }
394
+ return `${escapeText(title.substring(0, index))}<span class="access-key">${escapeText(title.charAt(index))}</span>${escapeText(title.substring(index + 1))}`;
395
+ }
396
+ getMenuItemHTML(menuItem) {
397
+ let returnValue;
398
+ switch (menuItem.type) {
399
+ case "dropdown":
400
+ returnValue = this.getDropdownHTML(menuItem);
401
+ break;
402
+ case "select-action-dropdown":
403
+ returnValue = this.getSelectionActionDropdownHTML(menuItem);
404
+ break;
405
+ case "text":
406
+ returnValue = this.getTextHTML(menuItem);
407
+ break;
408
+ case "button":
409
+ returnValue = this.getButtonHTML(menuItem);
410
+ break;
411
+ case "search":
412
+ returnValue = this.getSearchHTML(menuItem);
413
+ break;
414
+ default:
415
+ returnValue = "";
416
+ break;
417
+ }
418
+ return returnValue;
419
+ }
420
+ getSelectionActionDropdownHTML(menuItem) {
421
+ return `
422
+ <div class="select-action fw-button fw-light fw-large">
423
+ <input type="checkbox" ${menuItem.checked ? "checked" : ""}>
424
+ <span class="select-action-dropdown"><i class="fa-solid fa-caret-down"></i></span>
425
+ </div>
426
+ ${this.getDropdownListHTML(menuItem)}
427
+ `;
428
+ }
429
+ getDropdownHTML(menuItem) {
430
+ const accessKey = menuItem.keys?.split("-")[1];
431
+ return `
432
+ <div class="dropdown fw-dropdown-menu"
433
+ role="button"
434
+ aria-haspopup="true"
435
+ aria-expanded="${menuItem.open ? "true" : "false"}"
436
+ tabindex="0"
437
+ id="${menuItem.id}-button">
438
+ <label id="${menuItem.id}-label">
439
+ ${this.getAccessKeyHTML(menuItem.title
440
+ ? menuItem.title
441
+ : menuItem.content.length
442
+ ? menuItem.content[0].title
443
+ : "", accessKey)}
444
+ </label>
445
+ <span class="dropdown" aria-hidden="true">
446
+ <i class="fa-solid fa-caret-down"></i>
447
+ </span>
448
+ </div>
449
+ ${this.getDropdownListHTML(menuItem)}
450
+ `;
451
+ }
452
+ getDropdownListHTML(menuItem) {
453
+ if (menuItem.open) {
454
+ return `<div class="fw-pulldown fw-left"
455
+ role="menu"
456
+ style="display: block;"
457
+ aria-labelledby="${menuItem.id}-button"
458
+ >
459
+ <ul role="presentation">${menuItem.content
460
+ .map((menuOption, index) => this.getDropdownOptionHTML(menuOption, index))
461
+ .join("")}</ul></div>`;
462
+ }
463
+ else {
464
+ return "";
465
+ }
466
+ }
467
+ getDropdownOptionHTML(menuOption, index) {
468
+ const menuItem = this.model.content[this.openedMenu];
469
+ const isSelected = menuItem.selectedIndex === index;
470
+ return `
471
+ <li role="none">
472
+ <span class="fw-pulldown-item${isSelected ? " selected" : ""}"
473
+ role="menuitem" tabindex="0">
474
+ ${escapeText(menuOption.title)}
475
+ </span>
476
+ </li>
477
+ `;
478
+ }
479
+ getButtonHTML(menuItem) {
480
+ return `
481
+ <button class="fw-button fw-light fw-large"
482
+ title="${menuItem.title}"
483
+ tabindex="0"
484
+ role="menuitem">
485
+ ${menuItem.title}
486
+ ${menuItem.icon ? `<i class="fa-solid fa-${menuItem.icon}" aria-hidden="true"></i>` : ""}
487
+ </button>`;
488
+ }
489
+ announceForScreenReader(message) {
490
+ const announcement = document.createElement("div");
491
+ announcement.setAttribute("aria-live", "polite");
492
+ announcement.classList.add("sr-only"); // CSS to visually hide but keep available to screen readers
493
+ announcement.textContent = message;
494
+ document.body.appendChild(announcement);
495
+ setTimeout(() => announcement.remove(), 1000);
496
+ }
497
+ getTextHTML(menuItem) {
498
+ const accessKey = menuItem.keys?.split("-")[1];
499
+ return `
500
+ <button class="fw-text-menu"
501
+ title="${menuItem.title}${menuItem.keys ? ` (${menuItem.keys})` : ""}"
502
+ >
503
+ ${this.getAccessKeyHTML(menuItem.title, accessKey)}
504
+ </button>`;
505
+ }
506
+ getSearchHTML(menuItem) {
507
+ const accessKey = menuItem.keys?.split("-")[1];
508
+ return `
509
+ <div class="fw-button fw-light fw-large disabled fw-search-field-container">
510
+ <label for="${menuItem.id}-input" class="fw-search-label">
511
+ ${this.getAccessKeyHTML(menuItem.title, accessKey)}
512
+ </label>
513
+ <input type="search"
514
+ class="fw-search-field"
515
+ id="${menuItem.id}-input"
516
+ aria-description="${gettext("Type to search")}"
517
+ placeholder="${menuItem.title}"
518
+ aria-label="${menuItem.title}"
519
+ >
520
+ ${menuItem.icon ? `<i class="fa-solid fa-${menuItem.icon}" aria-hidden="true"></i>` : ""}
521
+ </div>`;
522
+ }
523
+ destroy() {
524
+ // Remove all event listeners
525
+ document.body.removeEventListener("click", this.listeners.onclick);
526
+ document.body.removeEventListener("input", this.listeners.oninput);
527
+ document.body.removeEventListener("keydown", this.listeners.onKeydown);
528
+ document.body.removeEventListener("focus", this.listeners.onFocus);
529
+ // Clear references
530
+ this.listeners = {};
531
+ this.keyboardShortcuts.clear();
532
+ this.menuEl = null;
533
+ this.openedMenu = false;
534
+ }
535
+ }
536
+ //# sourceMappingURL=overview_menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview_menu.js","sourceRoot":"","sources":["../src/overview_menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function initSettings(rawSettings: any): void;
2
+ export declare function getSettings(): any;
3
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,WAAW,KAAA,QAMvC;AAED,wBAAgB,WAAW,QAO1B"}
@@ -0,0 +1,16 @@
1
+ // @ts-nocheck
2
+ let _settings = null;
3
+ export function initSettings(rawSettings) {
4
+ if (_settings) {
5
+ throw new Error("Settings already initialized");
6
+ }
7
+ // Freeze to prevent accidental mutation at runtime
8
+ _settings = Object.freeze({ ...rawSettings });
9
+ }
10
+ export function getSettings() {
11
+ if (!_settings) {
12
+ throw new Error("App settings not initialized. Call initSettings() first.");
13
+ }
14
+ return _settings;
15
+ }
16
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,IAAI,SAAS,GAAG,IAAI,CAAA;AAEpB,MAAM,UAAU,YAAY,CAAC,WAAW;IACpC,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACnD,CAAC;IACD,mDAAmD;IACnD,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAC,GAAG,WAAW,EAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,0DAA0D,CAC7D,CAAA;IACL,CAAC;IACD,OAAO,SAAS,CAAA;AACpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const baseBodyTemplate: ({ user, contents, hasOverview, app }: {
2
+ user: any;
3
+ contents: any;
4
+ hasOverview: any;
5
+ app: any;
6
+ }) => string;
7
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,GAAI;;;;;CAAkC,WAsC5D,CAAA"}
@@ -0,0 +1,43 @@
1
+ // @ts-nocheck
2
+ import { avatarTemplate } from "./user.js";
3
+ import { filterPrimaryEmail } from "./user_util.js";
4
+ export const baseBodyTemplate = ({ user, contents, hasOverview, app }) => `
5
+ <div id="wait">
6
+ <i class="fa fa-spinner fa-pulse"></i>
7
+ </div>
8
+ <header class="fw-header" role="banner">
9
+ <div class="fw-container">
10
+ <a href="${app && app.routes[""].app === "document" ? "/" : "/documents/"}">
11
+ <h1 class="fw-logo">
12
+ <span class="fw-logo-text"></span>
13
+ <img src="${staticUrl("svg/icon.svg")}" alt="Logo" />
14
+ </h1>
15
+ </a>
16
+ <nav id="header-nav" role="navigation" aria-label="${gettext("Site navigation")}"></nav>
17
+ <div id="user-preferences" class="fw-user-preferences fw-header-text">
18
+ <div id="preferences-btn" class="fw-button">
19
+ ${avatarTemplate({ user })}
20
+ </div>
21
+ <div id="user-preferences-pulldown" class="fw-pulldown fw-right">
22
+ <div data-value="profile">
23
+ <span class='fw-avatar-card'>
24
+ <span class='fw-avatar-card-avatar'>${avatarTemplate({ user })}</span>
25
+ <span class='fw-avatar-card-name'>
26
+ ${user.username}
27
+ <span class='fw-avatar-card-email'>${filterPrimaryEmail(user.emails)}</span>
28
+ </span>
29
+ </span>
30
+ </div>
31
+ <div data-value="contacts">${gettext("Contacts")}</div>
32
+ <div data-value="logout">${gettext("Log out")}</div>
33
+ </div>
34
+ </div><!-- end user preference -->
35
+ </div><!-- end container -->
36
+ </header>
37
+ <div class="fw-contents-outer">
38
+ ${hasOverview ? '<div class="fw-overview-menu-wrapper"><ul id="fw-overview-menu"></ul></div>' : ""}
39
+ <div class="fw-contents">
40
+ ${contents}
41
+ </div>
42
+ </div>`;
43
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAA;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAC,EAAE,EAAE,CAAC;;;;;;mBAMrD,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa;;;4BAGrD,SAAS,CAAC,cAAc,CAAC;;;6DAGQ,OAAO,CAAC,iBAAiB,CAAC;;;kBAGrE,cAAc,CAAC,EAAC,IAAI,EAAC,CAAC;;;;;8DAKsB,cAAc,CAAC,EAAC,IAAI,EAAC,CAAC;;8BAEtD,IAAI,CAAC,QAAQ;iEACsB,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;;;;6CAInD,OAAO,CAAC,UAAU,CAAC;2CACrB,OAAO,CAAC,SAAS,CAAC;;;;;;MAMvD,WAAW,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,EAAE;;UAE5F,QAAQ;;OAEX,CAAA"}
package/dist/user.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const setLanguage: (_config: any, language: any) => Promise<void>;
2
+ /** A template for the default round avatar view. */
3
+ export declare const avatarTemplate: ({ user }: {
4
+ user: any;
5
+ }) => string;
6
+ //# sourceMappingURL=user.d.ts.map