@concord-consortium/cloud-file-manager 2.1.0-pre.9 → 2.2.1
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.
- package/dist/347 +276 -0
- package/dist/autolaunch/autolaunch.js +1 -1
- package/dist/autolaunch/autolaunch.js.map +1 -1
- package/dist/cjs/app-options.d.ts +2 -0
- package/dist/cjs/client.js +51 -79
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/cloud-file-manager.js +2 -2
- package/dist/cjs/cloud-file-manager.js.map +1 -1
- package/dist/cjs/create-react-factory.d.ts +1 -0
- package/dist/cjs/create-react-factory.js.map +1 -1
- package/dist/cjs/providers/document-store-provider.js +7 -10
- package/dist/cjs/providers/document-store-provider.js.map +1 -1
- package/dist/cjs/providers/document-store-share-provider.js +4 -4
- package/dist/cjs/providers/document-store-share-provider.js.map +1 -1
- package/dist/cjs/providers/google-drive-provider.js +30 -34
- package/dist/cjs/providers/google-drive-provider.js.map +1 -1
- package/dist/cjs/providers/interactive-api-provider.d.ts +5 -2
- package/dist/cjs/providers/interactive-api-provider.js +27 -21
- package/dist/cjs/providers/interactive-api-provider.js.map +1 -1
- package/dist/cjs/providers/lara-provider.js +18 -26
- package/dist/cjs/providers/lara-provider.js.map +1 -1
- package/dist/cjs/providers/legacy-google-drive-provider.js +21 -27
- package/dist/cjs/providers/legacy-google-drive-provider.js.map +1 -1
- package/dist/cjs/providers/localstorage-provider.js +11 -13
- package/dist/cjs/providers/localstorage-provider.js.map +1 -1
- package/dist/cjs/providers/patchable-content.js +1 -1
- package/dist/cjs/providers/patchable-content.js.map +1 -1
- package/dist/cjs/providers/post-message-provider.js +1 -1
- package/dist/cjs/providers/post-message-provider.js.map +1 -1
- package/dist/cjs/providers/provider-interface.d.ts +1 -2
- package/dist/cjs/providers/provider-interface.js +11 -14
- package/dist/cjs/providers/provider-interface.js.map +1 -1
- package/dist/cjs/providers/readonly-provider.js +6 -6
- package/dist/cjs/providers/readonly-provider.js.map +1 -1
- package/dist/cjs/providers/s3-provider.js +1 -2
- package/dist/cjs/providers/s3-provider.js.map +1 -1
- package/dist/cjs/providers/s3-share-provider.js +1 -1
- package/dist/cjs/providers/s3-share-provider.js.map +1 -1
- package/dist/cjs/providers/test-provider.js +5 -5
- package/dist/cjs/providers/test-provider.js.map +1 -1
- package/dist/cjs/providers/url-provider.js +1 -1
- package/dist/cjs/providers/url-provider.js.map +1 -1
- package/dist/cjs/ui.js +2 -3
- package/dist/cjs/ui.js.map +1 -1
- package/dist/cjs/utils/focus-tracker.d.ts +3 -0
- package/dist/cjs/utils/focus-tracker.js +44 -0
- package/dist/cjs/utils/focus-tracker.js.map +1 -0
- package/dist/cjs/utils/ios-file-saver.d.ts +42 -0
- package/dist/cjs/utils/ios-file-saver.js +98 -0
- package/dist/cjs/utils/ios-file-saver.js.map +1 -0
- package/dist/cjs/utils/lang/en-US.json +9 -0
- package/dist/cjs/utils/s3-share-provider-token-service-helper.js +19 -13
- package/dist/cjs/utils/s3-share-provider-token-service-helper.js.map +1 -1
- package/dist/cjs/utils/url-params.js +1 -2
- package/dist/cjs/utils/url-params.js.map +1 -1
- package/dist/cjs/views/alert-dialog-view.d.ts +9 -3
- package/dist/cjs/views/alert-dialog-view.js +9 -24
- package/dist/cjs/views/alert-dialog-view.js.map +1 -1
- package/dist/cjs/views/app-view.d.ts +12 -5
- package/dist/cjs/views/app-view.js +167 -175
- package/dist/cjs/views/app-view.js.map +1 -1
- package/dist/cjs/views/blocking-modal-view.d.ts +9 -3
- package/dist/cjs/views/blocking-modal-view.js +8 -25
- package/dist/cjs/views/blocking-modal-view.js.map +1 -1
- package/dist/cjs/views/confirm-dialog-view.d.ts +14 -3
- package/dist/cjs/views/confirm-dialog-view.js +14 -31
- package/dist/cjs/views/confirm-dialog-view.js.map +1 -1
- package/dist/cjs/views/download-dialog-view.d.ts +12 -3
- package/dist/cjs/views/download-dialog-view.js +36 -63
- package/dist/cjs/views/download-dialog-view.js.map +1 -1
- package/dist/cjs/views/dropdown-anchors.d.ts +2 -2
- package/dist/cjs/views/dropdown-anchors.js +4 -10
- package/dist/cjs/views/dropdown-anchors.js.map +1 -1
- package/dist/cjs/views/dropdown-view.d.ts +20 -3
- package/dist/cjs/views/dropdown-view.js +40 -157
- package/dist/cjs/views/dropdown-view.js.map +1 -1
- package/dist/cjs/views/file-dialog-tab-view.d.ts +24 -2
- package/dist/cjs/views/file-dialog-tab-view.js +255 -315
- package/dist/cjs/views/file-dialog-tab-view.js.map +1 -1
- package/dist/cjs/views/icons/spin.d.ts +2 -2
- package/dist/cjs/views/icons/spin.js +2 -39
- package/dist/cjs/views/icons/spin.js.map +1 -1
- package/dist/cjs/views/import-tabbed-dialog-view.d.ts +12 -3
- package/dist/cjs/views/import-tabbed-dialog-view.js +33 -65
- package/dist/cjs/views/import-tabbed-dialog-view.js.map +1 -1
- package/dist/cjs/views/local-file-tab-list-view.d.ts +14 -3
- package/dist/cjs/views/local-file-tab-list-view.js +57 -66
- package/dist/cjs/views/local-file-tab-list-view.js.map +1 -1
- package/dist/cjs/views/local-file-tab-save-view.d.ts +32 -3
- package/dist/cjs/views/local-file-tab-save-view.js +125 -138
- package/dist/cjs/views/local-file-tab-save-view.js.map +1 -1
- package/dist/cjs/views/menu-bar-view.d.ts +58 -3
- package/dist/cjs/views/menu-bar-view.js +196 -183
- package/dist/cjs/views/menu-bar-view.js.map +1 -1
- package/dist/cjs/views/modal-dialog-view.js +7 -8
- package/dist/cjs/views/modal-dialog-view.js.map +1 -1
- package/dist/cjs/views/modal-tabbed-dialog-view.d.ts +15 -3
- package/dist/cjs/views/modal-tabbed-dialog-view.js +5 -17
- package/dist/cjs/views/modal-tabbed-dialog-view.js.map +1 -1
- package/dist/cjs/views/modal-view.d.ts +5 -32
- package/dist/cjs/views/modal-view.js +20 -64
- package/dist/cjs/views/modal-view.js.map +1 -1
- package/dist/cjs/views/provider-tabbed-dialog-view.d.ts +23 -3
- package/dist/cjs/views/provider-tabbed-dialog-view.js +43 -51
- package/dist/cjs/views/provider-tabbed-dialog-view.js.map +1 -1
- package/dist/cjs/views/rename-dialog-view.d.ts +8 -3
- package/dist/cjs/views/rename-dialog-view.js +25 -51
- package/dist/cjs/views/rename-dialog-view.js.map +1 -1
- package/dist/cjs/views/select-interactive-state-dialog-view.d.ts +1 -1
- package/dist/cjs/views/select-interactive-state-dialog-view.js +4 -30
- package/dist/cjs/views/select-interactive-state-dialog-view.js.map +1 -1
- package/dist/cjs/views/select-provider-dialog-tab-view.d.ts +6 -1
- package/dist/cjs/views/select-provider-dialog-tab-view.js +4 -12
- package/dist/cjs/views/select-provider-dialog-tab-view.js.map +1 -1
- package/dist/cjs/views/share-dialog-status-view.js +6 -13
- package/dist/cjs/views/share-dialog-status-view.js.map +1 -1
- package/dist/cjs/views/share-dialog-tabs-view.js +22 -61
- package/dist/cjs/views/share-dialog-tabs-view.js.map +1 -1
- package/dist/cjs/views/share-dialog-view.d.ts +1 -1
- package/dist/cjs/views/share-dialog-view.js +15 -21
- package/dist/cjs/views/share-dialog-view.js.map +1 -1
- package/dist/cjs/views/share-loading-view.d.ts +2 -2
- package/dist/cjs/views/share-loading-view.js +2 -4
- package/dist/cjs/views/share-loading-view.js.map +1 -1
- package/dist/cjs/views/tabbed-panel-view.d.ts +16 -3
- package/dist/cjs/views/tabbed-panel-view.js +25 -75
- package/dist/cjs/views/tabbed-panel-view.js.map +1 -1
- package/dist/cjs/views/url-tab-view.d.ts +12 -3
- package/dist/cjs/views/url-tab-view.js +31 -46
- package/dist/cjs/views/url-tab-view.js.map +1 -1
- package/dist/css/app.css +1 -1
- package/dist/css/app.css.map +1 -1
- package/dist/esm/app-options.d.ts +2 -0
- package/dist/esm/client.js +51 -79
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/cloud-file-manager.js +2 -2
- package/dist/esm/cloud-file-manager.js.map +1 -1
- package/dist/esm/create-react-factory.d.ts +1 -0
- package/dist/esm/create-react-factory.js.map +1 -1
- package/dist/esm/providers/document-store-provider.js +7 -10
- package/dist/esm/providers/document-store-provider.js.map +1 -1
- package/dist/esm/providers/document-store-share-provider.js +4 -4
- package/dist/esm/providers/document-store-share-provider.js.map +1 -1
- package/dist/esm/providers/google-drive-provider.js +30 -34
- package/dist/esm/providers/google-drive-provider.js.map +1 -1
- package/dist/esm/providers/interactive-api-provider.d.ts +5 -2
- package/dist/esm/providers/interactive-api-provider.js +25 -20
- package/dist/esm/providers/interactive-api-provider.js.map +1 -1
- package/dist/esm/providers/lara-provider.js +18 -26
- package/dist/esm/providers/lara-provider.js.map +1 -1
- package/dist/esm/providers/legacy-google-drive-provider.js +21 -27
- package/dist/esm/providers/legacy-google-drive-provider.js.map +1 -1
- package/dist/esm/providers/localstorage-provider.js +11 -13
- package/dist/esm/providers/localstorage-provider.js.map +1 -1
- package/dist/esm/providers/patchable-content.js +1 -1
- package/dist/esm/providers/patchable-content.js.map +1 -1
- package/dist/esm/providers/post-message-provider.js +1 -1
- package/dist/esm/providers/post-message-provider.js.map +1 -1
- package/dist/esm/providers/provider-interface.d.ts +1 -2
- package/dist/esm/providers/provider-interface.js +11 -14
- package/dist/esm/providers/provider-interface.js.map +1 -1
- package/dist/esm/providers/readonly-provider.js +6 -6
- package/dist/esm/providers/readonly-provider.js.map +1 -1
- package/dist/esm/providers/s3-provider.js +1 -2
- package/dist/esm/providers/s3-provider.js.map +1 -1
- package/dist/esm/providers/s3-share-provider.js +1 -1
- package/dist/esm/providers/s3-share-provider.js.map +1 -1
- package/dist/esm/providers/test-provider.js +5 -5
- package/dist/esm/providers/test-provider.js.map +1 -1
- package/dist/esm/providers/url-provider.js +1 -1
- package/dist/esm/providers/url-provider.js.map +1 -1
- package/dist/esm/ui.js +2 -3
- package/dist/esm/ui.js.map +1 -1
- package/dist/esm/utils/focus-tracker.d.ts +3 -0
- package/dist/esm/utils/focus-tracker.js +38 -0
- package/dist/esm/utils/focus-tracker.js.map +1 -0
- package/dist/esm/utils/ios-file-saver.d.ts +42 -0
- package/dist/esm/utils/ios-file-saver.js +91 -0
- package/dist/esm/utils/ios-file-saver.js.map +1 -0
- package/dist/esm/utils/lang/en-US.json +9 -0
- package/dist/esm/utils/s3-share-provider-token-service-helper.js +19 -10
- package/dist/esm/utils/s3-share-provider-token-service-helper.js.map +1 -1
- package/dist/esm/utils/url-params.js +1 -2
- package/dist/esm/utils/url-params.js.map +1 -1
- package/dist/esm/views/alert-dialog-view.d.ts +9 -3
- package/dist/esm/views/alert-dialog-view.js +10 -25
- package/dist/esm/views/alert-dialog-view.js.map +1 -1
- package/dist/esm/views/app-view.d.ts +12 -5
- package/dist/esm/views/app-view.js +176 -184
- package/dist/esm/views/app-view.js.map +1 -1
- package/dist/esm/views/blocking-modal-view.d.ts +9 -3
- package/dist/esm/views/blocking-modal-view.js +9 -26
- package/dist/esm/views/blocking-modal-view.js.map +1 -1
- package/dist/esm/views/confirm-dialog-view.d.ts +14 -3
- package/dist/esm/views/confirm-dialog-view.js +15 -32
- package/dist/esm/views/confirm-dialog-view.js.map +1 -1
- package/dist/esm/views/download-dialog-view.d.ts +12 -3
- package/dist/esm/views/download-dialog-view.js +36 -63
- package/dist/esm/views/download-dialog-view.js.map +1 -1
- package/dist/esm/views/dropdown-anchors.d.ts +2 -2
- package/dist/esm/views/dropdown-anchors.js +4 -7
- package/dist/esm/views/dropdown-anchors.js.map +1 -1
- package/dist/esm/views/dropdown-view.d.ts +20 -3
- package/dist/esm/views/dropdown-view.js +40 -154
- package/dist/esm/views/dropdown-view.js.map +1 -1
- package/dist/esm/views/file-dialog-tab-view.d.ts +24 -2
- package/dist/esm/views/file-dialog-tab-view.js +256 -316
- package/dist/esm/views/file-dialog-tab-view.js.map +1 -1
- package/dist/esm/views/icons/spin.d.ts +2 -2
- package/dist/esm/views/icons/spin.js +2 -36
- package/dist/esm/views/icons/spin.js.map +1 -1
- package/dist/esm/views/import-tabbed-dialog-view.d.ts +12 -3
- package/dist/esm/views/import-tabbed-dialog-view.js +36 -68
- package/dist/esm/views/import-tabbed-dialog-view.js.map +1 -1
- package/dist/esm/views/local-file-tab-list-view.d.ts +14 -3
- package/dist/esm/views/local-file-tab-list-view.js +57 -66
- package/dist/esm/views/local-file-tab-list-view.js.map +1 -1
- package/dist/esm/views/local-file-tab-save-view.d.ts +32 -3
- package/dist/esm/views/local-file-tab-save-view.js +125 -138
- package/dist/esm/views/local-file-tab-save-view.js.map +1 -1
- package/dist/esm/views/menu-bar-view.d.ts +58 -3
- package/dist/esm/views/menu-bar-view.js +198 -185
- package/dist/esm/views/menu-bar-view.js.map +1 -1
- package/dist/esm/views/modal-dialog-view.js +7 -8
- package/dist/esm/views/modal-dialog-view.js.map +1 -1
- package/dist/esm/views/modal-tabbed-dialog-view.d.ts +15 -3
- package/dist/esm/views/modal-tabbed-dialog-view.js +7 -19
- package/dist/esm/views/modal-tabbed-dialog-view.js.map +1 -1
- package/dist/esm/views/modal-view.d.ts +5 -32
- package/dist/esm/views/modal-view.js +21 -61
- package/dist/esm/views/modal-view.js.map +1 -1
- package/dist/esm/views/provider-tabbed-dialog-view.d.ts +23 -3
- package/dist/esm/views/provider-tabbed-dialog-view.js +46 -54
- package/dist/esm/views/provider-tabbed-dialog-view.js.map +1 -1
- package/dist/esm/views/rename-dialog-view.d.ts +8 -3
- package/dist/esm/views/rename-dialog-view.js +25 -51
- package/dist/esm/views/rename-dialog-view.js.map +1 -1
- package/dist/esm/views/select-interactive-state-dialog-view.d.ts +1 -1
- package/dist/esm/views/select-interactive-state-dialog-view.js +4 -30
- package/dist/esm/views/select-interactive-state-dialog-view.js.map +1 -1
- package/dist/esm/views/select-provider-dialog-tab-view.d.ts +6 -1
- package/dist/esm/views/select-provider-dialog-tab-view.js +4 -9
- package/dist/esm/views/select-provider-dialog-tab-view.js.map +1 -1
- package/dist/esm/views/share-dialog-status-view.js +6 -13
- package/dist/esm/views/share-dialog-status-view.js.map +1 -1
- package/dist/esm/views/share-dialog-tabs-view.js +22 -61
- package/dist/esm/views/share-dialog-tabs-view.js.map +1 -1
- package/dist/esm/views/share-dialog-view.d.ts +1 -1
- package/dist/esm/views/share-dialog-view.js +15 -21
- package/dist/esm/views/share-dialog-view.js.map +1 -1
- package/dist/esm/views/share-loading-view.d.ts +2 -2
- package/dist/esm/views/share-loading-view.js +2 -4
- package/dist/esm/views/share-loading-view.js.map +1 -1
- package/dist/esm/views/tabbed-panel-view.d.ts +16 -3
- package/dist/esm/views/tabbed-panel-view.js +25 -72
- package/dist/esm/views/tabbed-panel-view.js.map +1 -1
- package/dist/esm/views/url-tab-view.d.ts +12 -3
- package/dist/esm/views/url-tab-view.js +31 -46
- package/dist/esm/views/url-tab-view.js.map +1 -1
- package/dist/examples/codap3-local-file.html +42 -0
- package/dist/examples/index.html +2 -0
- package/dist/examples/local-json-save.html +36 -0
- package/dist/index.html +1 -1
- package/dist/js/app.js +1 -1
- package/dist/js/app.js.LICENSE.txt +41 -11
- package/dist/js/app.js.map +1 -1
- package/dist/js/globals.js +1 -1
- package/dist/js/globals.js.map +1 -1
- package/package.json +40 -36
- package/readme.md +4 -0
- package/dist/cjs/lib/file-saver.d.ts +0 -2
- package/dist/cjs/lib/file-saver.js +0 -164
- package/dist/cjs/lib/file-saver.js.map +0 -1
- package/dist/esm/lib/file-saver.d.ts +0 -2
- package/dist/esm/lib/file-saver.js +0 -164
- package/dist/esm/lib/file-saver.js.map +0 -1
package/dist/esm/client.js
CHANGED
|
@@ -83,7 +83,6 @@ class CloudFileManagerClient {
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
setAppOptions(appOptions) {
|
|
86
|
-
var _a, _b, _c, _d;
|
|
87
86
|
let providerName;
|
|
88
87
|
let Provider;
|
|
89
88
|
if (appOptions == null) {
|
|
@@ -206,14 +205,14 @@ class CloudFileManagerClient {
|
|
|
206
205
|
}
|
|
207
206
|
// initialize the cloudContentFactory with all data we want in the envelope
|
|
208
207
|
cloudContentFactory.setEnvelopeMetadata({
|
|
209
|
-
cfmVersion: '2.1
|
|
208
|
+
cfmVersion: '2.2.1', // replaced by version number at build time
|
|
210
209
|
appName: this.appOptions.appName || "",
|
|
211
210
|
appVersion: this.appOptions.appVersion || "",
|
|
212
211
|
appBuildNum: this.appOptions.appBuildNum || ""
|
|
213
212
|
});
|
|
214
|
-
this.newFileOpensInNewTab =
|
|
215
|
-
this.newFileAddsNewToQuery =
|
|
216
|
-
if (
|
|
213
|
+
this.newFileOpensInNewTab = this.appOptions.ui?.newFileOpensInNewTab ?? true;
|
|
214
|
+
this.newFileAddsNewToQuery = this.appOptions.ui?.newFileAddsNewToQuery;
|
|
215
|
+
if (this.appOptions.ui?.confirmCloseIfDirty) {
|
|
217
216
|
this._setupConfirmOnClose();
|
|
218
217
|
}
|
|
219
218
|
return this._startPostMessageListener();
|
|
@@ -230,8 +229,7 @@ class CloudFileManagerClient {
|
|
|
230
229
|
}
|
|
231
230
|
}
|
|
232
231
|
connect() {
|
|
233
|
-
|
|
234
|
-
(_a = this.connectedPromiseResolver) === null || _a === void 0 ? void 0 : _a.resolve();
|
|
232
|
+
this.connectedPromiseResolver?.resolve();
|
|
235
233
|
return this._event('connected', { client: this });
|
|
236
234
|
}
|
|
237
235
|
//
|
|
@@ -243,7 +241,7 @@ class CloudFileManagerClient {
|
|
|
243
241
|
//
|
|
244
242
|
processUrlParams() {
|
|
245
243
|
// process the hash params
|
|
246
|
-
let providerName;
|
|
244
|
+
let providerName, providerParams, folder;
|
|
247
245
|
const { hashParams } = this.appOptions;
|
|
248
246
|
if (hashParams.sharedContentId) {
|
|
249
247
|
return this.openSharedContent(hashParams.sharedContentId);
|
|
@@ -253,7 +251,6 @@ class CloudFileManagerClient {
|
|
|
253
251
|
return this.openUrlFile(hashParams.fileParams);
|
|
254
252
|
}
|
|
255
253
|
else {
|
|
256
|
-
let providerParams;
|
|
257
254
|
[providerName, providerParams] = hashParams.fileParams.split(':');
|
|
258
255
|
return this.openProviderFile(providerName, providerParams);
|
|
259
256
|
}
|
|
@@ -262,7 +259,6 @@ class CloudFileManagerClient {
|
|
|
262
259
|
return this.openCopiedFile(hashParams.copyParams);
|
|
263
260
|
}
|
|
264
261
|
else if (hashParams.newInFolderParams) {
|
|
265
|
-
let folder;
|
|
266
262
|
[providerName, folder] = hashParams.newInFolderParams.split(':');
|
|
267
263
|
return this.createNewInFolder(providerName, folder);
|
|
268
264
|
}
|
|
@@ -357,8 +353,7 @@ class CloudFileManagerClient {
|
|
|
357
353
|
}
|
|
358
354
|
}
|
|
359
355
|
openFile(metadata, callback = null) {
|
|
360
|
-
|
|
361
|
-
if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities.load, metadata)) {
|
|
356
|
+
if (metadata?.provider?.can(ECapabilities.load, metadata)) {
|
|
362
357
|
this._event('willOpenFile', { op: "openFile" });
|
|
363
358
|
return metadata.provider.load(metadata, (err, content) => {
|
|
364
359
|
if (err) {
|
|
@@ -464,8 +459,7 @@ class CloudFileManagerClient {
|
|
|
464
459
|
}
|
|
465
460
|
// must be called as a result of user action (e.g. click) to avoid popup blockers
|
|
466
461
|
parseUrlAuthorizeAndOpen() {
|
|
467
|
-
|
|
468
|
-
if (((_a = this.appOptions.hashParams) === null || _a === void 0 ? void 0 : _a.fileParams) != null) {
|
|
462
|
+
if (this.appOptions.hashParams?.fileParams != null) {
|
|
469
463
|
const [providerName, providerParams] = this.appOptions.hashParams.fileParams.split(':');
|
|
470
464
|
const provider = this.providers[providerName];
|
|
471
465
|
if (provider) {
|
|
@@ -589,8 +583,7 @@ class CloudFileManagerClient {
|
|
|
589
583
|
});
|
|
590
584
|
}
|
|
591
585
|
saveContent(stringContent, callback = null) {
|
|
592
|
-
|
|
593
|
-
const provider = ((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) || this.autoProvider(ECapabilities.save);
|
|
586
|
+
const provider = this.state.metadata?.provider || this.autoProvider(ECapabilities.save);
|
|
594
587
|
if (provider != null) {
|
|
595
588
|
return provider.authorized((isAuthorized) => {
|
|
596
589
|
// we can save the document without authorization in some cases
|
|
@@ -607,9 +600,8 @@ class CloudFileManagerClient {
|
|
|
607
600
|
}
|
|
608
601
|
}
|
|
609
602
|
saveFile(stringContent, metadata, callback = null) {
|
|
610
|
-
var _a;
|
|
611
603
|
const readonly = metadata && !metadata.overwritable; // only check if metadata exists
|
|
612
|
-
const resaveable =
|
|
604
|
+
const resaveable = metadata?.provider?.can(ECapabilities.resave, metadata);
|
|
613
605
|
// must be able to 'resave' to save silently, i.e. without save dialog
|
|
614
606
|
if (!readonly && resaveable) {
|
|
615
607
|
return this.saveFileNoDialog(stringContent, metadata, callback);
|
|
@@ -619,12 +611,11 @@ class CloudFileManagerClient {
|
|
|
619
611
|
}
|
|
620
612
|
}
|
|
621
613
|
saveFileNoDialog(stringContent, metadata, callback = null) {
|
|
622
|
-
var _a, _b;
|
|
623
614
|
this._setState({
|
|
624
615
|
saving: metadata
|
|
625
616
|
});
|
|
626
617
|
let currentContent = this._createOrUpdateCurrentContent(stringContent, metadata);
|
|
627
|
-
currentContent =
|
|
618
|
+
currentContent = this.appOptions.contentSaveFilter?.(currentContent) || currentContent;
|
|
628
619
|
return metadata.provider.save(currentContent, metadata, (err, statusCode, savedContent) => {
|
|
629
620
|
let failures;
|
|
630
621
|
if (err) {
|
|
@@ -687,8 +678,7 @@ class CloudFileManagerClient {
|
|
|
687
678
|
}
|
|
688
679
|
createCopy(stringContent = null, callback = null) {
|
|
689
680
|
const saveAndOpenCopy = (stringContent) => {
|
|
690
|
-
|
|
691
|
-
return this.saveCopiedFile(stringContent, (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name, (err, copyParams) => {
|
|
681
|
+
return this.saveCopiedFile(stringContent, this.state.metadata?.name, (err, copyParams) => {
|
|
692
682
|
if (err) {
|
|
693
683
|
return (typeof callback === 'function' ? callback(err) : undefined);
|
|
694
684
|
}
|
|
@@ -715,7 +705,7 @@ class CloudFileManagerClient {
|
|
|
715
705
|
}
|
|
716
706
|
maxCopyNumber++;
|
|
717
707
|
const value = JSON.stringify({
|
|
718
|
-
name:
|
|
708
|
+
name: name?.length ? `Copy of ${name}` : "Copy of Untitled Document",
|
|
719
709
|
stringContent
|
|
720
710
|
});
|
|
721
711
|
window.localStorage.setItem(`${prefix}${maxCopyNumber}`, value);
|
|
@@ -772,11 +762,10 @@ class CloudFileManagerClient {
|
|
|
772
762
|
}
|
|
773
763
|
saveTempFile(callback) {
|
|
774
764
|
return this._event('getContent', { shared: this._sharedMetadata() }, (stringContent) => {
|
|
775
|
-
var _a;
|
|
776
765
|
const currentContent = this._createOrUpdateCurrentContent(stringContent);
|
|
777
766
|
try {
|
|
778
767
|
const key = "cfm-tempfile";
|
|
779
|
-
const name =
|
|
768
|
+
const name = this.state.metadata?.name;
|
|
780
769
|
const value = JSON.stringify({ name, stringContent });
|
|
781
770
|
window.localStorage.setItem(key, value);
|
|
782
771
|
const metadata = new CloudMetadata({
|
|
@@ -784,10 +773,10 @@ class CloudFileManagerClient {
|
|
|
784
773
|
type: CloudMetadata.File
|
|
785
774
|
});
|
|
786
775
|
this._fileChanged('savedFile', currentContent, metadata, { saved: true }, "");
|
|
787
|
-
return callback
|
|
776
|
+
return callback?.(null);
|
|
788
777
|
}
|
|
789
778
|
catch (e) {
|
|
790
|
-
return callback
|
|
779
|
+
return callback?.("Unable to temporarily save copied file");
|
|
791
780
|
}
|
|
792
781
|
});
|
|
793
782
|
}
|
|
@@ -810,8 +799,7 @@ class CloudFileManagerClient {
|
|
|
810
799
|
}
|
|
811
800
|
}
|
|
812
801
|
_sharedMetadata() {
|
|
813
|
-
|
|
814
|
-
return ((_a = this.state.currentContent) === null || _a === void 0 ? void 0 : _a.getSharedMetadata()) || {};
|
|
802
|
+
return this.state.currentContent?.getSharedMetadata() || {};
|
|
815
803
|
}
|
|
816
804
|
shareGetLink() {
|
|
817
805
|
return this._ui.shareDialog(this);
|
|
@@ -828,8 +816,7 @@ class CloudFileManagerClient {
|
|
|
828
816
|
}
|
|
829
817
|
}
|
|
830
818
|
isShared() {
|
|
831
|
-
|
|
832
|
-
const currentContent = (_a = this.state) === null || _a === void 0 ? void 0 : _a.currentContent;
|
|
819
|
+
const currentContent = this.state?.currentContent;
|
|
833
820
|
if (currentContent) {
|
|
834
821
|
const unshared = currentContent.get("isUnshared");
|
|
835
822
|
if (!unshared) {
|
|
@@ -871,7 +858,7 @@ class CloudFileManagerClient {
|
|
|
871
858
|
if (err) {
|
|
872
859
|
return this.alert(err);
|
|
873
860
|
}
|
|
874
|
-
return callback
|
|
861
|
+
return callback?.(null, sharedContentId, currentContent);
|
|
875
862
|
});
|
|
876
863
|
});
|
|
877
864
|
}
|
|
@@ -888,21 +875,20 @@ class CloudFileManagerClient {
|
|
|
888
875
|
}
|
|
889
876
|
return this.setShareState(true, (err, sharedContentId, currentContent) => {
|
|
890
877
|
this._fileChanged('sharedFile', currentContent, this.state.metadata);
|
|
891
|
-
return callback
|
|
878
|
+
return callback?.(null, sharedContentId);
|
|
892
879
|
});
|
|
893
880
|
}
|
|
894
881
|
unshare(callback) {
|
|
895
882
|
return this.setShareState(false, (err, sharedContentId, currentContent) => {
|
|
896
883
|
this._fileChanged('unsharedFile', currentContent, this.state.metadata);
|
|
897
|
-
return callback
|
|
884
|
+
return callback?.(null);
|
|
898
885
|
});
|
|
899
886
|
}
|
|
900
887
|
revertToShared(callback = null) {
|
|
901
|
-
var _a, _b, _c;
|
|
902
888
|
// Look for sharedDocumentUrl or Url first:
|
|
903
|
-
const id =
|
|
904
|
-
||
|
|
905
|
-
||
|
|
889
|
+
const id = this.state.currentContent?.get("sharedDocumentUrl")
|
|
890
|
+
|| this.state.currentContent?.get("url")
|
|
891
|
+
|| this.state.currentContent?.get("sharedDocumentId");
|
|
906
892
|
if (id && (this.state.shareProvider != null)) {
|
|
907
893
|
return this.state.shareProvider.loadSharedContent(id, (err, content, metadata) => {
|
|
908
894
|
let docName;
|
|
@@ -915,7 +901,7 @@ class CloudFileManagerClient {
|
|
|
915
901
|
metadata.name = docName;
|
|
916
902
|
}
|
|
917
903
|
this._fileOpened(content, metadata, { dirty: true, openedContent: content.clone() });
|
|
918
|
-
return callback
|
|
904
|
+
return callback?.(null);
|
|
919
905
|
});
|
|
920
906
|
}
|
|
921
907
|
}
|
|
@@ -927,16 +913,14 @@ class CloudFileManagerClient {
|
|
|
927
913
|
downloadDialog(callback = null) {
|
|
928
914
|
// should share metadata be included in downloaded local files?
|
|
929
915
|
return this._event('getContent', { shared: this._sharedMetadata() }, (content) => {
|
|
930
|
-
var _a;
|
|
931
916
|
const envelopedContent = cloudContentFactory.createEnvelopedCloudContent(content);
|
|
932
917
|
if (this.state.currentContent != null) {
|
|
933
918
|
this.state.currentContent.copyMetadataTo(envelopedContent);
|
|
934
919
|
}
|
|
935
|
-
return this._ui.downloadDialog(
|
|
920
|
+
return this._ui.downloadDialog(this.state.metadata?.name, envelopedContent, callback);
|
|
936
921
|
});
|
|
937
922
|
}
|
|
938
923
|
getDownloadBlob(content, includeShareInfo, mimeType) {
|
|
939
|
-
var _a;
|
|
940
924
|
let contentToSave;
|
|
941
925
|
if (mimeType == null) {
|
|
942
926
|
mimeType = 'text/plain';
|
|
@@ -961,7 +945,7 @@ class CloudFileManagerClient {
|
|
|
961
945
|
delete json.isUnshared;
|
|
962
946
|
delete json.accessKeys;
|
|
963
947
|
// CODAP moves the keys into its own namespace
|
|
964
|
-
if (
|
|
948
|
+
if (json.metadata?.shared != null) {
|
|
965
949
|
delete json.metadata.shared;
|
|
966
950
|
}
|
|
967
951
|
contentToSave = JSON.stringify(json);
|
|
@@ -978,17 +962,15 @@ class CloudFileManagerClient {
|
|
|
978
962
|
}
|
|
979
963
|
}
|
|
980
964
|
rename(metadata, newName, callback) {
|
|
981
|
-
var _a;
|
|
982
965
|
const { dirty } = this.state;
|
|
983
966
|
const _rename = (metadata) => {
|
|
984
|
-
var _a;
|
|
985
967
|
if (this.state.currentContent != null) {
|
|
986
968
|
this.state.currentContent.addMetadata({ docName: metadata.name });
|
|
987
969
|
}
|
|
988
970
|
this._fileChanged('renamedFile', this.state.currentContent, metadata, { dirty }, this._getHashParams(metadata));
|
|
989
971
|
const done = () => typeof callback === 'function' ? callback(newName) : undefined;
|
|
990
|
-
const readOnlyProvider =
|
|
991
|
-
if (!readOnlyProvider && (
|
|
972
|
+
const readOnlyProvider = metadata?.provider?.name === ReadOnlyProvider.Name;
|
|
973
|
+
if (!readOnlyProvider && (metadata?.provider || this.autoProvider(ECapabilities.save))) {
|
|
992
974
|
// autosave renamed file if it has already been saved or can be autosaved
|
|
993
975
|
this.save(done);
|
|
994
976
|
}
|
|
@@ -997,7 +979,7 @@ class CloudFileManagerClient {
|
|
|
997
979
|
}
|
|
998
980
|
};
|
|
999
981
|
if (newName !== (this.state.metadata != null ? this.state.metadata.name : undefined)) {
|
|
1000
|
-
if (
|
|
982
|
+
if (metadata?.provider?.can(ECapabilities.rename, metadata)) {
|
|
1001
983
|
return this.state.metadata.provider.rename(this.state.metadata, newName, (err, metadata) => {
|
|
1002
984
|
if (err) {
|
|
1003
985
|
return this.alert(err);
|
|
@@ -1066,10 +1048,9 @@ class CloudFileManagerClient {
|
|
|
1066
1048
|
// Saves a file to backend, but does not update current metadata.
|
|
1067
1049
|
// Used e.g. when exporting .csv files from CODAP
|
|
1068
1050
|
saveSecondaryFile(stringContent, metadata, callback = null) {
|
|
1069
|
-
|
|
1070
|
-
if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities["export"], metadata)) {
|
|
1051
|
+
if (metadata?.provider?.can(ECapabilities["export"], metadata)) {
|
|
1071
1052
|
return metadata.provider.saveAsExport(stringContent, metadata, (err, statusCode) => {
|
|
1072
|
-
return err ? this.alert(err) : callback
|
|
1053
|
+
return err ? this.alert(err) : callback?.(stringContent, metadata);
|
|
1073
1054
|
});
|
|
1074
1055
|
}
|
|
1075
1056
|
}
|
|
@@ -1084,12 +1065,11 @@ class CloudFileManagerClient {
|
|
|
1084
1065
|
}
|
|
1085
1066
|
}
|
|
1086
1067
|
shouldAutoSave() {
|
|
1087
|
-
var _a;
|
|
1088
1068
|
const { metadata } = this.state;
|
|
1089
1069
|
return (this.state.dirty
|
|
1090
|
-
&& !
|
|
1070
|
+
&& !metadata?.autoSaveDisabled
|
|
1091
1071
|
&& !this.isSaveInProgress()
|
|
1092
|
-
&&
|
|
1072
|
+
&& metadata?.provider?.can(ECapabilities.resave, metadata));
|
|
1093
1073
|
}
|
|
1094
1074
|
autoSave(interval) {
|
|
1095
1075
|
if (this._autoSaveInterval) {
|
|
@@ -1109,7 +1089,6 @@ class CloudFileManagerClient {
|
|
|
1109
1089
|
return (this._autoSaveInterval != null);
|
|
1110
1090
|
}
|
|
1111
1091
|
changeLanguage(newLangCode, callback) {
|
|
1112
|
-
var _a, _b;
|
|
1113
1092
|
setCurrentLanguage(newLangCode);
|
|
1114
1093
|
if (callback) {
|
|
1115
1094
|
const postSave = (err) => {
|
|
@@ -1121,7 +1100,7 @@ class CloudFileManagerClient {
|
|
|
1121
1100
|
return callback(newLangCode);
|
|
1122
1101
|
}
|
|
1123
1102
|
};
|
|
1124
|
-
if (
|
|
1103
|
+
if (this.state.metadata?.provider?.can(ECapabilities.save)) {
|
|
1125
1104
|
return this.save((err) => postSave(err));
|
|
1126
1105
|
}
|
|
1127
1106
|
else {
|
|
@@ -1160,6 +1139,7 @@ class CloudFileManagerClient {
|
|
|
1160
1139
|
return this.confirmDialog({ message, callback, rejectCallback });
|
|
1161
1140
|
}
|
|
1162
1141
|
confirmDialog(params) {
|
|
1142
|
+
this._event("requiresUserInteraction");
|
|
1163
1143
|
return this._ui.confirmDialog(params);
|
|
1164
1144
|
}
|
|
1165
1145
|
alert(message, titleOrCallback, callback) {
|
|
@@ -1179,10 +1159,9 @@ class CloudFileManagerClient {
|
|
|
1179
1159
|
async onUnload(options) {
|
|
1180
1160
|
if (options.unloading) {
|
|
1181
1161
|
return new Promise(resolve => {
|
|
1182
|
-
var _a;
|
|
1183
1162
|
// only save if the provider is set - when using linked interactives the provider is not set when
|
|
1184
1163
|
// the linked interactive changed and the version choice dialog is showing
|
|
1185
|
-
if (
|
|
1164
|
+
if (this.state.metadata?.provider) {
|
|
1186
1165
|
this.save((content, metadata, savedContent) => {
|
|
1187
1166
|
// providers can save a different format for the content
|
|
1188
1167
|
// for example the interactiveApi provider can save attachments in which case the savedContent
|
|
@@ -1226,11 +1205,10 @@ class CloudFileManagerClient {
|
|
|
1226
1205
|
return this._event(type, { content: (content != null ? content.getClientContent() : undefined), shared: this._sharedMetadata() });
|
|
1227
1206
|
}
|
|
1228
1207
|
_fileOpened(content, metadata, additionalState, hashParams = null) {
|
|
1229
|
-
var _a, _b;
|
|
1230
1208
|
if (additionalState == null) {
|
|
1231
1209
|
additionalState = {};
|
|
1232
1210
|
}
|
|
1233
|
-
const eventData = { content:
|
|
1211
|
+
const eventData = { content: content?.getClientContent?.() ?? content };
|
|
1234
1212
|
// update state before sending 'openedFile' events so that 'openedFile' listeners that
|
|
1235
1213
|
// reference state have the updated state values
|
|
1236
1214
|
this._updateState(content, metadata, additionalState, hashParams);
|
|
@@ -1256,17 +1234,16 @@ class CloudFileManagerClient {
|
|
|
1256
1234
|
metadata,
|
|
1257
1235
|
saving: null,
|
|
1258
1236
|
saved: false,
|
|
1259
|
-
dirty: !additionalState.saved &&
|
|
1237
|
+
dirty: !additionalState.saved && content?.requiresConversion(),
|
|
1260
1238
|
...additionalState
|
|
1261
1239
|
};
|
|
1262
|
-
this._setWindowTitle(metadata
|
|
1240
|
+
this._setWindowTitle(metadata?.name);
|
|
1263
1241
|
if (hashParams !== null) {
|
|
1264
1242
|
window.location.hash = hashParams;
|
|
1265
1243
|
}
|
|
1266
1244
|
return this._setState(state);
|
|
1267
1245
|
}
|
|
1268
1246
|
_event(type, data, eventCallback = null) {
|
|
1269
|
-
var _a;
|
|
1270
1247
|
if (data == null) {
|
|
1271
1248
|
data = {};
|
|
1272
1249
|
}
|
|
@@ -1280,7 +1257,7 @@ class CloudFileManagerClient {
|
|
|
1280
1257
|
// I tried sending the state but that causes CODAP to replace its state which breaks other things.
|
|
1281
1258
|
// A permanent fix for this would be to send the new filename outside of the state metadata.
|
|
1282
1259
|
const skipPostMessage = type === "renamedFile";
|
|
1283
|
-
if (
|
|
1260
|
+
if (this.appOptions?.sendPostMessageClientEvents && this.iframe && !skipPostMessage) {
|
|
1284
1261
|
return event.postMessage(this.iframe.contentWindow);
|
|
1285
1262
|
}
|
|
1286
1263
|
}
|
|
@@ -1300,9 +1277,8 @@ class CloudFileManagerClient {
|
|
|
1300
1277
|
});
|
|
1301
1278
|
}
|
|
1302
1279
|
_closeCurrentFile() {
|
|
1303
|
-
var _a;
|
|
1304
1280
|
const { metadata } = this.state;
|
|
1305
|
-
if (
|
|
1281
|
+
if (metadata?.provider?.can(ECapabilities.close, metadata)) {
|
|
1306
1282
|
return metadata.provider.close(metadata);
|
|
1307
1283
|
}
|
|
1308
1284
|
}
|
|
@@ -1321,8 +1297,7 @@ class CloudFileManagerClient {
|
|
|
1321
1297
|
return currentContent;
|
|
1322
1298
|
}
|
|
1323
1299
|
_setWindowTitle(name) {
|
|
1324
|
-
|
|
1325
|
-
if ((_a = this.appOptions) === null || _a === void 0 ? void 0 : _a.appSetsWindowTitle) {
|
|
1300
|
+
if (this.appOptions?.appSetsWindowTitle) {
|
|
1326
1301
|
return;
|
|
1327
1302
|
}
|
|
1328
1303
|
const { ui } = this.appOptions;
|
|
@@ -1337,13 +1312,12 @@ class CloudFileManagerClient {
|
|
|
1337
1312
|
}
|
|
1338
1313
|
}
|
|
1339
1314
|
_getHashParams(metadata) {
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
let openSavedParams = canOpenSaved ? (_b = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _b === void 0 ? void 0 : _b.getOpenSavedParams(metadata) : null;
|
|
1315
|
+
const canOpenSaved = metadata?.provider?.canOpenSaved() || false;
|
|
1316
|
+
let openSavedParams = canOpenSaved ? metadata?.provider?.getOpenSavedParams(metadata) : null;
|
|
1343
1317
|
if (canOpenSaved && (openSavedParams != null) && (typeof openSavedParams === "string")) {
|
|
1344
1318
|
return `#file=${metadata.provider.urlDisplayName || metadata.provider.name}:${encodeURIComponent(openSavedParams)}`;
|
|
1345
1319
|
}
|
|
1346
|
-
else if (
|
|
1320
|
+
else if (metadata?.provider instanceof URLProvider && (window.location.hash.indexOf("#file=http") === 0)) {
|
|
1347
1321
|
return window.location.hash; // leave it alone
|
|
1348
1322
|
}
|
|
1349
1323
|
else {
|
|
@@ -1352,7 +1326,6 @@ class CloudFileManagerClient {
|
|
|
1352
1326
|
}
|
|
1353
1327
|
_startPostMessageListener() {
|
|
1354
1328
|
return $(window).on('message', e => {
|
|
1355
|
-
var _a, _b;
|
|
1356
1329
|
const oe = e.originalEvent;
|
|
1357
1330
|
const data = oe.data || {};
|
|
1358
1331
|
const reply = function (type, params) {
|
|
@@ -1362,7 +1335,7 @@ class CloudFileManagerClient {
|
|
|
1362
1335
|
const message = _.merge({}, params, { type });
|
|
1363
1336
|
return oe.source.postMessage(message, oe.origin);
|
|
1364
1337
|
};
|
|
1365
|
-
switch (data
|
|
1338
|
+
switch (data?.type) {
|
|
1366
1339
|
case 'cfm::getCommands':
|
|
1367
1340
|
return reply('cfm::commands', { commands: ['cfm::autosave', 'cfm::event', 'cfm::event:reply', 'cfm::setDirty', 'cfm::iframedClientConnected'] });
|
|
1368
1341
|
case 'cfm::autosave':
|
|
@@ -1379,13 +1352,13 @@ class CloudFileManagerClient {
|
|
|
1379
1352
|
});
|
|
1380
1353
|
case 'cfm::event:reply': {
|
|
1381
1354
|
const event = CLOUDFILEMANAGER_EVENTS[data.eventId];
|
|
1382
|
-
const callbackData = JSON.parse(
|
|
1383
|
-
return
|
|
1355
|
+
const callbackData = JSON.parse(data?.callbackArgs || null);
|
|
1356
|
+
return event?.callback?.apply(this, callbackData);
|
|
1384
1357
|
}
|
|
1385
1358
|
case 'cfm::setDirty':
|
|
1386
1359
|
return this.dirty(data.isDirty);
|
|
1387
1360
|
case 'cfm::iframedClientConnected':
|
|
1388
|
-
|
|
1361
|
+
this.connectedPromiseResolver?.resolve();
|
|
1389
1362
|
return this.processUrlParams();
|
|
1390
1363
|
}
|
|
1391
1364
|
});
|
|
@@ -1400,8 +1373,7 @@ class CloudFileManagerClient {
|
|
|
1400
1373
|
});
|
|
1401
1374
|
}
|
|
1402
1375
|
_filterLoadedContent(content) {
|
|
1403
|
-
|
|
1404
|
-
return ((_b = (_a = this.appOptions).contentLoadFilter) === null || _b === void 0 ? void 0 : _b.call(_a, content)) || content;
|
|
1376
|
+
return this.appOptions.contentLoadFilter?.(content) || content;
|
|
1405
1377
|
}
|
|
1406
1378
|
}
|
|
1407
1379
|
export { CloudFileManagerClientEvent, CloudFileManagerClient };
|