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,125 @@
1
+ // @ts-nocheck
2
+ import { Dialog } from "../dialog.js";
3
+ import { FileSelector } from "./selector.js";
4
+ import { addAlert } from "../basic.js";
5
+ import { NewFolderDialog } from "./new_folder_dialog.js";
6
+ import { moveTemplate } from "./templates.js";
7
+ import { moveFile, shortFileTitle } from "./tools.js";
8
+ /**
9
+ * Functions for the document move dialog.
10
+ */
11
+ export class FileDialog {
12
+ constructor({ title = "", // Dialog title
13
+ movingFiles = [], // Array of all files that are to be moved.
14
+ allFiles = [], // Array of all existing files.
15
+ moveUrl = "", // URL to use for moving files
16
+ successMessage = "", // Message for success
17
+ errorMessage = "", // Message for failure
18
+ succcessCallback = (_file, _path) => { }, // Callback on success
19
+ fileIcon = "far fa-file-alt" }) {
20
+ this.title = title;
21
+ this.movingFiles = movingFiles;
22
+ this.allFiles = allFiles;
23
+ this.moveUrl = moveUrl;
24
+ this.successMessage = successMessage;
25
+ this.errorMessage = errorMessage;
26
+ this.succcessCallback = succcessCallback;
27
+ this.fileIcon = fileIcon;
28
+ this.path = this.getPath();
29
+ this.fileSelector = false;
30
+ }
31
+ getPath() {
32
+ if (this.movingFiles.length === 1) {
33
+ let path = this.movingFiles[0].path;
34
+ if (path.endsWith("/")) {
35
+ path +=
36
+ this.movingFiles[0].title.replace(/\//g, "") ||
37
+ gettext("Untitled");
38
+ }
39
+ return path;
40
+ }
41
+ // We are moving several files. We assume they are all in the same directory
42
+ // so we only need to take the file of the first file.
43
+ return this.movingFiles[0].path.split("/").slice(0, -1).join("/") + "/";
44
+ }
45
+ updatePathDir(path) {
46
+ const fileName = this.dialog.dialogEl
47
+ .querySelector("#path")
48
+ .value.split("/")
49
+ .pop();
50
+ this.dialog.dialogEl.querySelector("#path").value = path + fileName;
51
+ }
52
+ init() {
53
+ this.dialog = new Dialog({
54
+ title: this.title,
55
+ id: "move-dialog",
56
+ width: 820,
57
+ height: 440,
58
+ body: moveTemplate({
59
+ path: this.path
60
+ }),
61
+ buttons: [
62
+ {
63
+ text: gettext("New folder"),
64
+ classes: "fw-dark",
65
+ click: () => {
66
+ const dialog = new NewFolderDialog(folderName => {
67
+ if (!this.fileSelector) {
68
+ return;
69
+ }
70
+ this.fileSelector.addFolder(folderName);
71
+ });
72
+ dialog.open();
73
+ }
74
+ },
75
+ { type: "cancel" },
76
+ {
77
+ text: gettext("Submit"),
78
+ classes: "fw-dark",
79
+ click: () => {
80
+ //apply the current state to server
81
+ let path = this.dialog.dialogEl.querySelector("#path").value;
82
+ this.dialog.close();
83
+ if (path === this.path) {
84
+ // No change
85
+ return;
86
+ }
87
+ if (this.movingFiles.length > 1) {
88
+ if (!path.endsWith("/")) {
89
+ path += "/";
90
+ }
91
+ this.movingFiles.forEach(doc => {
92
+ this.moveFile(doc, doc.path.endsWith("/")
93
+ ? path
94
+ : path + doc.path.split("/").pop());
95
+ });
96
+ }
97
+ else {
98
+ this.moveFile(this.movingFiles[0], path);
99
+ }
100
+ }
101
+ }
102
+ ]
103
+ });
104
+ this.dialog.open();
105
+ this.fileSelector = new FileSelector({
106
+ dom: this.dialog.dialogEl.querySelector(".file-selector"),
107
+ files: this.allFiles,
108
+ showFiles: false,
109
+ selectDir: path => this.updatePathDir(path),
110
+ fileIcon: this.fileIcon
111
+ });
112
+ this.fileSelector.init();
113
+ }
114
+ moveFile(file, requestedPath) {
115
+ return moveFile(file.id, file.title, requestedPath, this.moveUrl)
116
+ .then(path => {
117
+ addAlert("success", `${this.successMessage}: '${shortFileTitle(file.title, path)}'`);
118
+ this.succcessCallback(file, path);
119
+ })
120
+ .catch(() => {
121
+ addAlert("error", `${this.errorMessage}: '${shortFileTitle(file.title, file.path)}'`);
122
+ });
123
+ }
124
+ }
125
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/file/dialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { FileDialog } from "./dialog.js";
2
+ export { FileSelector } from "./selector.js";
3
+ export { cleanPath, moveFile, shortFileTitle, longFilePath } from "./tools.js";
4
+ export { NewFolderDialog } from "./new_folder_dialog.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAA;AAC1C,OAAO,EACH,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,6 @@
1
+ // @ts-nocheck
2
+ export { FileDialog } from "./dialog.js";
3
+ export { FileSelector } from "./selector.js";
4
+ export { cleanPath, moveFile, shortFileTitle, longFilePath } from "./tools.js";
5
+ export { NewFolderDialog } from "./new_folder_dialog.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAA;AAC1C,OAAO,EACH,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare class NewFolderDialog {
2
+ constructor(callback?: (_foldername: any) => void);
3
+ open(): any;
4
+ }
5
+ //# sourceMappingURL=new_folder_dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new_folder_dialog.d.ts","sourceRoot":"","sources":["../../src/file/new_folder_dialog.ts"],"names":[],"mappings":"AAIA,qBAAa,eAAe;gBACZ,QAAQ,IAAG,gBAAW,SAAM;IA6BxC,IAAI;CAGP"}
@@ -0,0 +1,34 @@
1
+ // @ts-nocheck
2
+ import { Dialog } from "../dialog.js";
3
+ import { newFolderTemplate } from "./templates.js";
4
+ export class NewFolderDialog {
5
+ constructor(callback = _foldername => { }) {
6
+ this.callback = callback;
7
+ this.dialog = new Dialog({
8
+ title: gettext("New folder"),
9
+ id: "new-folder",
10
+ width: 400,
11
+ height: 150,
12
+ body: newFolderTemplate(),
13
+ buttons: [
14
+ { type: "cancel" },
15
+ {
16
+ text: gettext("Create folder"),
17
+ classes: "fw-dark",
18
+ click: () => {
19
+ const folderName = this.dialog.dialogEl.querySelector("#new-folder-name").value;
20
+ this.dialog.close();
21
+ if (!folderName.length) {
22
+ return;
23
+ }
24
+ this.callback(folderName);
25
+ }
26
+ }
27
+ ]
28
+ });
29
+ }
30
+ open() {
31
+ return this.dialog.open();
32
+ }
33
+ }
34
+ //# sourceMappingURL=new_folder_dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new_folder_dialog.js","sourceRoot":"","sources":["../../src/file/new_folder_dialog.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAEhD,MAAM,OAAO,eAAe;IACxB,YAAY,QAAQ,GAAG,WAAW,CAAC,EAAE,GAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACrB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;YAC5B,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,iBAAiB,EAAE;YACzB,OAAO,EAAE;gBACL,EAAC,IAAI,EAAE,QAAQ,EAAC;gBAChB;oBACI,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC;oBAC9B,OAAO,EAAE,SAAS;oBAClB,KAAK,EAAE,GAAG,EAAE;wBACR,MAAM,UAAU,GACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAC9B,kBAAkB,CACrB,CAAC,KAAK,CAAA;wBACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;wBACnB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;4BACrB,OAAM;wBACV,CAAC;wBACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;oBAC7B,CAAC;iBACJ;aACJ;SACJ,CAAC,CAAA;IACN,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,CAAC;CACJ"}
@@ -0,0 +1,22 @@
1
+ export declare class FileSelector {
2
+ constructor({ dom, files, showFiles, selectFolders, multiSelect, selectDir, selectFile, fileIcon }: {
3
+ dom: any;
4
+ files: any;
5
+ showFiles?: boolean;
6
+ selectFolders?: boolean;
7
+ multiSelect?: boolean;
8
+ selectDir?: (_path: any) => void;
9
+ selectFile?: (_path: any) => void;
10
+ fileIcon?: string;
11
+ });
12
+ init(): void;
13
+ readDirStructure(): void;
14
+ sortDirStructure(entries?: any): void;
15
+ addFolder(rawName: any): void;
16
+ deselectAll(): void;
17
+ render(): void;
18
+ renderFolder(folder: any, indentLevel?: number): string;
19
+ findEntry(dom: any): any;
20
+ bind(): void;
21
+ }
22
+ //# sourceMappingURL=selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/file/selector.ts"],"names":[],"mappings":"AAIA,qBAAa,YAAY;gBACT,EACR,GAAG,EACH,KAAK,EACL,SAAgB,EAChB,aAAoB,EACpB,WAAmB,EACnB,SAAuB,EACvB,UAAwB,EACxB,QAA4B,EAC/B;;;;;;;;;KAAA;IAwBD,IAAI;IASJ,gBAAgB;IAoDhB,gBAAgB,CAAC,OAAO,MAAqB;IAc7C,SAAS,CAAC,OAAO,KAAA;IAiCjB,WAAW;IAMX,MAAM;IAIN,YAAY,CAAC,MAAM,KAAA,EAAE,WAAW,SAAI;IAyBpC,SAAS,CAAC,GAAG,KAAA;IAqBb,IAAI;CA6DP"}
@@ -0,0 +1,239 @@
1
+ // @ts-nocheck
2
+ import { escapeText, findTarget } from "../basic.js";
3
+ import { ensureCSS } from "../network.js";
4
+ export class FileSelector {
5
+ constructor({ dom, files, showFiles = true, selectFolders = true, multiSelect = false, selectDir = _path => { }, selectFile = _path => { }, fileIcon = "far fa-file-alt" }) {
6
+ this.dom = dom;
7
+ this.files = files;
8
+ this.showFiles = showFiles; // Whether to show existing files or only folders
9
+ this.selectFolders = selectFolders; // Whether to allow the selection of folders
10
+ this.multiSelect = multiSelect; // Whether to allow the selectioj of multiple entries
11
+ this.selectDir = selectDir;
12
+ this.selectFile = selectFile;
13
+ this.fileIcon = fileIcon; // File icon to use
14
+ this.root = {
15
+ name: "/",
16
+ type: "folder",
17
+ open: true,
18
+ selected: false,
19
+ path: "/",
20
+ children: []
21
+ };
22
+ this.selected = [];
23
+ if (this.selectFolders && !this.multiSelect) {
24
+ this.root.selected = true;
25
+ this.selected.push(this.root);
26
+ }
27
+ }
28
+ init() {
29
+ this.readDirStructure();
30
+ this.sortDirStructure();
31
+ ensureCSS(staticUrl("css/file_selector.css"));
32
+ this.dom.classList.add("fw-file-selector");
33
+ this.render();
34
+ this.bind();
35
+ }
36
+ readDirStructure() {
37
+ // Read directory structure from existing file paths.
38
+ // A file's title is used as the final path segment when the file has
39
+ // no explicit folder path. We strip any "/" from that segment because
40
+ // some titles (e.g. E2EE ciphertext encoded in standard base64) contain
41
+ // "/" characters which would otherwise be mis-interpreted as path
42
+ // separators, nesting the file inside phantom collapsed folders.
43
+ this.files.forEach(file => {
44
+ let treeWalker = this.root.children;
45
+ let path = file.path;
46
+ if (!path.length || path.endsWith("/")) {
47
+ const safeName = (file.title || gettext("Untitled")).replace(/\//g, "\u2215" // U+2215 DIVISION SLASH — visually identical, not a path separator
48
+ );
49
+ path += safeName;
50
+ }
51
+ const pathParts = path.split("/");
52
+ pathParts.forEach((pathPart, pathIndex) => {
53
+ if (!pathPart.length) {
54
+ return;
55
+ }
56
+ if (pathIndex === pathParts.length - 1) {
57
+ if (this.showFiles) {
58
+ treeWalker.push({
59
+ name: pathPart,
60
+ type: "file",
61
+ path: pathParts.slice(0, pathIndex + 1).join("/"),
62
+ file
63
+ });
64
+ }
65
+ return;
66
+ }
67
+ let folder = treeWalker.find(item => item.name === pathPart && item.type === "folder");
68
+ if (!folder) {
69
+ folder = {
70
+ name: pathPart,
71
+ type: "folder",
72
+ open: false,
73
+ selected: false,
74
+ path: pathParts.slice(0, pathIndex + 1).join("/") + "/",
75
+ children: []
76
+ };
77
+ treeWalker.push(folder);
78
+ }
79
+ treeWalker = folder.children;
80
+ });
81
+ });
82
+ }
83
+ sortDirStructure(entries = this.root.children) {
84
+ entries.sort((a, b) => {
85
+ if (a.type !== b.type) {
86
+ return a.type === "folder" ? -1 : 1;
87
+ }
88
+ return a.name > b.name ? 1 : -1;
89
+ });
90
+ entries.forEach(entry => {
91
+ if (entry.type === "folder" && entry.children.length) {
92
+ this.sortDirStructure(entry.children);
93
+ }
94
+ });
95
+ }
96
+ addFolder(rawName) {
97
+ const name = rawName.replace(/\//g, "");
98
+ // Add a new folder as a subfolder to the currently selected folder
99
+ if (!this.selected.length ||
100
+ this.selected[0].type !== "folder" ||
101
+ this.selected[0].children.find(child => child.type === "folder" && child.name === name)) {
102
+ // A file is selected. Give up.
103
+ return;
104
+ }
105
+ const newFolder = {
106
+ name,
107
+ type: "folder",
108
+ open: true,
109
+ selected: true,
110
+ path: this.selected[0].path + name + "/",
111
+ children: []
112
+ };
113
+ this.selected[0].children.push(newFolder);
114
+ this.sortDirStructure(this.selected[0].children);
115
+ this.selected[0].open = true;
116
+ if (!this.multiSelect) {
117
+ this.selected[0].selected = false;
118
+ this.selected = [];
119
+ }
120
+ this.selected.push(newFolder);
121
+ this.selectDir(newFolder.path);
122
+ this.render();
123
+ }
124
+ deselectAll() {
125
+ this.selected.forEach(entry => (entry.selected = false));
126
+ this.selected = [];
127
+ this.render();
128
+ }
129
+ render() {
130
+ this.dom.innerHTML = this.renderFolder(this.root);
131
+ }
132
+ renderFolder(folder, indentLevel = 0) {
133
+ let returnString = "";
134
+ returnString += `<div class="folder${folder.open ? "" : " closed"}">`;
135
+ returnString += `<p style="margin-left:${indentLevel * 10}px;">${folder.children.length
136
+ ? `<i class="far fa-${folder.open ? "minus" : "plus"}-square"></i>&nbsp;`
137
+ : ""}<span class="folder-name${folder.selected ? " selected" : ""}"><i class="fas fa-folder"></i>&nbsp;${escapeText(folder.name)}</span></p>`;
138
+ if (folder.open) {
139
+ returnString += '<div class="folder-content">';
140
+ returnString += folder.children
141
+ .map(child => {
142
+ if (child.type === "folder") {
143
+ return this.renderFolder(child, indentLevel + 1);
144
+ }
145
+ else {
146
+ return `<p class="file" style="margin-left:${(indentLevel + 1) * 10 + 20}px;"><span class="file-name${child.selected ? " selected" : ""}"><i class="${this.fileIcon}"></i>&nbsp;${escapeText(child.name)}</span></p>`;
147
+ }
148
+ })
149
+ .join("");
150
+ returnString += "</div>";
151
+ }
152
+ returnString += "</div>";
153
+ return returnString;
154
+ }
155
+ findEntry(dom) {
156
+ const searchPath = [];
157
+ let seekItem = dom;
158
+ while (seekItem.closest("div.folder, p.file")) {
159
+ let itemNumber = 0;
160
+ seekItem = seekItem.closest("div.folder, p.file");
161
+ while (seekItem.previousElementSibling) {
162
+ itemNumber++;
163
+ seekItem = seekItem.previousElementSibling;
164
+ }
165
+ searchPath.push(itemNumber);
166
+ seekItem = seekItem.parentElement;
167
+ }
168
+ let entry = this.root;
169
+ searchPath.pop();
170
+ while (searchPath.length) {
171
+ entry = entry.children[searchPath.pop()];
172
+ }
173
+ return entry;
174
+ }
175
+ bind() {
176
+ this.dom.addEventListener("click", event => {
177
+ const el = {};
178
+ switch (true) {
179
+ case findTarget(event, ".fa-plus-square", el): {
180
+ event.preventDefault();
181
+ const entry = this.findEntry(el.target);
182
+ entry.open = true;
183
+ this.render();
184
+ break;
185
+ }
186
+ case findTarget(event, ".fa-minus-square", el): {
187
+ event.preventDefault();
188
+ const entry = this.findEntry(el.target);
189
+ entry.open = false;
190
+ this.render();
191
+ break;
192
+ }
193
+ case findTarget(event, ".folder-name", el): {
194
+ event.preventDefault();
195
+ if (!this.selectFolders) {
196
+ // Folders cannot be selected
197
+ return;
198
+ }
199
+ const entry = this.findEntry(el.target);
200
+ if (this.selected.includes(entry)) {
201
+ entry.selected = false;
202
+ this.selected = this.selected.filter(e => e !== entry);
203
+ this.render();
204
+ }
205
+ else {
206
+ entry.selected = true;
207
+ if (!this.multiSelect && this.selected.length) {
208
+ this.selected[0].selected = false;
209
+ }
210
+ this.selected.push(entry);
211
+ this.render();
212
+ this.selectDir(entry.path);
213
+ }
214
+ break;
215
+ }
216
+ case findTarget(event, ".file-name", el): {
217
+ event.preventDefault();
218
+ const entry = this.findEntry(el.target);
219
+ if (this.selected.includes(entry)) {
220
+ entry.selected = false;
221
+ this.selected = this.selected.filter(e => e !== entry);
222
+ this.render();
223
+ }
224
+ else {
225
+ entry.selected = true;
226
+ if (!this.multiSelect && this.selected.length) {
227
+ this.selected[0].selected = false;
228
+ }
229
+ this.selected.push(entry);
230
+ this.render();
231
+ this.selectFile(entry.path);
232
+ }
233
+ break;
234
+ }
235
+ }
236
+ });
237
+ }
238
+ }
239
+ //# sourceMappingURL=selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../src/file/selector.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,aAAa,CAAA;AAClD,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAA;AAEvC,MAAM,OAAO,YAAY;IACrB,YAAY,EACR,GAAG,EACH,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,aAAa,GAAG,IAAI,EACpB,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,KAAK,CAAC,EAAE,GAAE,CAAC,EACvB,UAAU,GAAG,KAAK,CAAC,EAAE,GAAE,CAAC,EACxB,QAAQ,GAAG,iBAAiB,EAC/B;QACG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA,CAAC,iDAAiD;QAC5E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA,CAAC,4CAA4C;QAC/E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA,CAAC,qDAAqD;QACpF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA,CAAC,mBAAmB;QAC5C,IAAI,CAAC,IAAI,GAAG;YACR,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,EAAE;SACf,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAClB,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,IAAI,EAAE,CAAA;IACf,CAAC;IAED,gBAAgB;QACZ,qDAAqD;QACrD,qEAAqE;QACrE,sEAAsE;QACtE,wEAAwE;QACxE,kEAAkE;QAClE,iEAAiE;QACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA;YACnC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CACxD,KAAK,EACL,QAAQ,CAAC,mEAAmE;iBAC/E,CAAA;gBACD,IAAI,IAAI,QAAQ,CAAA;YACpB,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE;gBACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAM;gBACV,CAAC;gBACD,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,UAAU,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;4BACjD,IAAI;yBACP,CAAC,CAAA;oBACN,CAAC;oBACD,OAAM;gBACV,CAAC;gBACD,IAAI,MAAM,GAAG,UAAU,CAAC,IAAI,CACxB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAC3D,CAAA;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,GAAG;wBACL,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,KAAK;wBACX,QAAQ,EAAE,KAAK;wBACf,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;wBACvD,QAAQ,EAAE,EAAE;qBACf,CAAA;oBACD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC3B,CAAC;gBACD,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAA;YAChC,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;IAED,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACvC,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACzC,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,SAAS,CAAC,OAAO;QACb,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACvC,mEAAmE;QACnE,IACI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YACrB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ;YAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAC1D,EACH,CAAC;YACC,+BAA+B;YAC/B,OAAM;QACV,CAAC;QACD,MAAM,SAAS,GAAG;YACd,IAAI;YACJ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG;YACxC,QAAQ,EAAE,EAAE;SACf,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAChD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAA;YACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QACtB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC7B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAA;IACjB,CAAC;IAED,WAAW;QACP,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAA;QACxD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAClB,IAAI,CAAC,MAAM,EAAE,CAAA;IACjB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrD,CAAC;IAED,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC;QAChC,IAAI,YAAY,GAAG,EAAE,CAAA;QACrB,YAAY,IAAI,qBAAqB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAA;QACrE,YAAY,IAAI,yBAAyB,WAAW,GAAG,EAAE,QACrD,MAAM,CAAC,QAAQ,CAAC,MAAM;YAClB,CAAC,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,qBAAqB;YACzE,CAAC,CAAC,EACV,2BAA2B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,wCAAwC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAA;QACzI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,YAAY,IAAI,8BAA8B,CAAA;YAC9C,YAAY,IAAI,MAAM,CAAC,QAAQ;iBAC1B,GAAG,CAAC,KAAK,CAAC,EAAE;gBACT,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,CAAA;gBACpD,CAAC;qBAAM,CAAC;oBACJ,OAAO,sCAAsC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,8BAA8B,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,CAAC,QAAQ,eAAe,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAA;gBACzN,CAAC;YACL,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,CAAA;YACb,YAAY,IAAI,QAAQ,CAAA;QAC5B,CAAC;QACD,YAAY,IAAI,QAAQ,CAAA;QACxB,OAAO,YAAY,CAAA;IACvB,CAAC;IAED,SAAS,CAAC,GAAG;QACT,MAAM,UAAU,GAAG,EAAE,CAAA;QACrB,IAAI,QAAQ,GAAG,GAAG,CAAA;QAClB,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5C,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;YACjD,OAAO,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACrC,UAAU,EAAE,CAAA;gBACZ,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,CAAA;YAC9C,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC3B,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAA;QACrC,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,UAAU,CAAC,GAAG,EAAE,CAAA;QAChB,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,IAAI;QACA,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACvC,MAAM,EAAE,GAAG,EAAE,CAAA;YACb,QAAQ,IAAI,EAAE,CAAC;gBACX,KAAK,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5C,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;oBACvC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;oBACjB,IAAI,CAAC,MAAM,EAAE,CAAA;oBACb,MAAK;gBACT,CAAC;gBACD,KAAK,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC7C,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;oBACvC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;oBAClB,IAAI,CAAC,MAAM,EAAE,CAAA;oBACb,MAAK;gBACT,CAAC;gBACD,KAAK,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACzC,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACtB,6BAA6B;wBAC7B,OAAM;oBACV,CAAC;oBACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;oBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAA;wBACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAA;wBACtD,IAAI,CAAC,MAAM,EAAE,CAAA;oBACjB,CAAC;yBAAM,CAAC;wBACJ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;wBACrB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;4BAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAA;wBACrC,CAAC;wBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBACzB,IAAI,CAAC,MAAM,EAAE,CAAA;wBACb,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC9B,CAAC;oBACD,MAAK;gBACT,CAAC;gBACD,KAAK,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvC,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;oBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAA;wBACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAA;wBACtD,IAAI,CAAC,MAAM,EAAE,CAAA;oBACjB,CAAC;yBAAM,CAAC;wBACJ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;wBACrB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;4BAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAA;wBACrC,CAAC;wBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBACzB,IAAI,CAAC,MAAM,EAAE,CAAA;wBACb,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC/B,CAAC;oBACD,MAAK;gBACT,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;CACJ"}
@@ -0,0 +1,5 @@
1
+ export declare const moveTemplate: ({ path }: {
2
+ path: any;
3
+ }) => string;
4
+ export declare const newFolderTemplate: () => string;
5
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/file/templates.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,GAAI;;CAAM,WAKxB,CAAA;AAEX,eAAO,MAAM,iBAAiB,cAC0E,CAAA"}
@@ -0,0 +1,9 @@
1
+ // @ts-nocheck
2
+ import { escapeText } from "../index.js";
3
+ export const moveTemplate = ({ path }) => `<div>
4
+ <span>${gettext("Path")}:</span>
5
+ <input type="text" value="${escapeText(path)}" id="path" placeholder="${gettext("Insert path")}">
6
+ <div class="file-selector"></div>
7
+ </div>`;
8
+ export const newFolderTemplate = () => `<div><input type="text" id="new-folder-name" placeholder="${gettext("Insert folder name")}"></div>`;
9
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/file/templates.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CACnC;YACQ,OAAO,CAAC,MAAM,CAAC;gCACK,UAAU,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,aAAa,CAAC;;WAEvF,CAAA;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAClC,6DAA6D,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const shortFileTitle: (title: any, path: any) => any;
2
+ export declare const longFilePath: (title: any, path: any, prefix?: string) => any;
3
+ export declare const cleanPath: (title: any, path: any) => any;
4
+ export declare const moveFile: (fileId: any, title: any, path: any, moveUrl: any) => Promise<unknown>;
5
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/file/tools.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,GAAI,UAAK,EAAE,SAAI,QAKzC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAK,EAAE,SAAI,EAAE,eAAW,QAepD,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAK,EAAE,SAAI,QAiBpC,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,WAAM,EAAE,UAAK,EAAE,SAAI,EAAE,YAAO,qBAWpD,CAAA"}
@@ -0,0 +1,51 @@
1
+ // @ts-nocheck
2
+ import { escapeText } from "../basic.js";
3
+ import { postJson } from "../network.js";
4
+ export const shortFileTitle = (title, path) => {
5
+ if (!path.length || path.endsWith("/")) {
6
+ return escapeText(title || gettext("Untitled"));
7
+ }
8
+ return escapeText(path.split("/").pop());
9
+ };
10
+ export const longFilePath = (title, path, prefix = "") => {
11
+ if (!path.length) {
12
+ path = "/";
13
+ }
14
+ if (path.endsWith("/")) {
15
+ path += title.replace(/\//g, "") || gettext("Untitled");
16
+ }
17
+ if (prefix.length) {
18
+ const pathParts = path.split("/");
19
+ const fileName = pathParts.pop();
20
+ pathParts.push(prefix + fileName);
21
+ path = pathParts.join("/");
22
+ }
23
+ return path;
24
+ };
25
+ export const cleanPath = (title, path) => {
26
+ if (!path.startsWith("/")) {
27
+ path = "/" + path;
28
+ }
29
+ path = path.replace(/\/{2,}/g, "/"); // replace multiple backslashes
30
+ if (path.endsWith(`/${title.replace(/\//g, "")}` || `/${gettext("Untitled")}`)) {
31
+ path = path.split("/").slice(0, -1).join("/") + "/";
32
+ }
33
+ if (path === "/") {
34
+ path = "";
35
+ }
36
+ return path;
37
+ };
38
+ export const moveFile = (fileId, title, path, moveUrl) => {
39
+ path = cleanPath(title, path);
40
+ return new Promise((resolve, reject) => {
41
+ postJson(moveUrl, { id: fileId, path }).then(({ json }) => {
42
+ if (json.done) {
43
+ resolve(path);
44
+ }
45
+ else {
46
+ reject();
47
+ }
48
+ });
49
+ });
50
+ };
51
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/file/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const getFocusIndex: () => number;
2
+ export declare const setFocusIndex: (index: any) => void;
3
+ //# sourceMappingURL=focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../src/focus.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,cAMzB,CAAA;AAED,eAAO,MAAM,aAAa,GAAG,UAAK,SASjC,CAAA"}
package/dist/focus.js ADDED
@@ -0,0 +1,12 @@
1
+ // @ts-nocheck
2
+ // Get the index number of currently focused selement. This it to set tyhe focus close by after doing some dom changes.
3
+ export const getFocusIndex = () => {
4
+ return Array.from(document.querySelectorAll("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], [contenteditable]")).findIndex(el => el === document.activeElement);
5
+ };
6
+ export const setFocusIndex = index => {
7
+ const focusableElements = Array.from(document.querySelectorAll("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], [contenteditable]"));
8
+ if (index >= 0 && index < focusableElements.length) {
9
+ focusableElements[index].focus();
10
+ }
11
+ };
12
+ //# sourceMappingURL=focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.js","sourceRoot":"","sources":["../src/focus.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,uHAAuH;AAEvH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAC9B,OAAO,KAAK,CAAC,IAAI,CACb,QAAQ,CAAC,gBAAgB,CACrB,4KAA4K,CAC/K,CACJ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,EAAE;IACjC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAChC,QAAQ,CAAC,gBAAgB,CACrB,4KAA4K,CAC/K,CACJ,CAAA;IACD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC;QACjD,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;IACpC,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ export { OverviewMenuView } from "./overview_menu.js";
2
+ export { dropdownSelect, setCheckableLabel, activateWait, deactivateWait, addAlert, langName, localizeDate, enableDatePicker, noSpaceTmp, escapeText, unescapeText, infoTooltip, cancelPromise, findTarget, whenReady, setDocTitle, showSystemMessage } from "./basic.js";
3
+ export { convertDataURIToBlob } from "./blob.js";
4
+ export { isActivationEvent } from "./events.js";
5
+ export { getFocusIndex, setFocusIndex } from "./focus.js";
6
+ export { get, getJson, post, postJson, postBare, ensureCSS, getCookie } from "./network.js";
7
+ export { setLanguage, avatarTemplate } from "./user.js";
8
+ export { Dialog } from "./dialog.js";
9
+ export { ContentMenu } from "./content_menu.js";
10
+ export { makeWorker } from "./worker.js";
11
+ export { baseBodyTemplate } from "./templates.js";
12
+ export { WebSocketConnector } from "./ws.js";
13
+ export { filterPrimaryEmail } from "./user_util.js";
14
+ export { DatatableBulk } from "./datatable_bulk.js";
15
+ export { faqDialog } from "./faq_dialog.js";
16
+ export { FileDialog, FileSelector, cleanPath, moveFile, shortFileTitle, longFilePath, NewFolderDialog } from "./file/index.js";
17
+ export { initSettings, getSettings } from "./settings.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EACH,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAC,oBAAoB,EAAC,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAA;AAE7C,OAAO,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,YAAY,CAAA;AAEvD,OAAO,EACH,GAAG,EACH,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACZ,MAAM,cAAc,CAAA;AACrB,OAAO,EACH,WAAW,EACX,cAAc,EACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AACtC,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAA;AACzC,OAAO,EACH,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EAClB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACH,YAAY,EACZ,WAAW,EACd,MAAM,eAAe,CAAA"}