@concord-consortium/cloud-file-manager 2.1.0-pre.9 → 2.2.0
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
|
@@ -105,6 +105,7 @@ export interface CFMAppOptions {
|
|
|
105
105
|
appName?: string;
|
|
106
106
|
appVersion?: string;
|
|
107
107
|
appIcon?: string;
|
|
108
|
+
appFocusRingIcon?: string;
|
|
108
109
|
appBuildNum?: string;
|
|
109
110
|
appOrMenuElemId?: string;
|
|
110
111
|
hideMenuBar?: boolean;
|
|
@@ -113,6 +114,7 @@ export interface CFMAppOptions {
|
|
|
113
114
|
wrapFileContent?: boolean;
|
|
114
115
|
isClientContent?: (content: unknown) => boolean;
|
|
115
116
|
mimeType?: string;
|
|
117
|
+
localFileMimeType?: string;
|
|
116
118
|
readableMimeTypes?: string[];
|
|
117
119
|
extension?: string;
|
|
118
120
|
readableExtensions?: string[];
|
package/dist/cjs/client.js
CHANGED
|
@@ -113,7 +113,6 @@ class CloudFileManagerClient {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
setAppOptions(appOptions) {
|
|
116
|
-
var _a, _b, _c, _d;
|
|
117
116
|
let providerName;
|
|
118
117
|
let Provider;
|
|
119
118
|
if (appOptions == null) {
|
|
@@ -236,14 +235,14 @@ class CloudFileManagerClient {
|
|
|
236
235
|
}
|
|
237
236
|
// initialize the cloudContentFactory with all data we want in the envelope
|
|
238
237
|
provider_interface_1.cloudContentFactory.setEnvelopeMetadata({
|
|
239
|
-
cfmVersion: '2.
|
|
238
|
+
cfmVersion: '2.2.0', // replaced by version number at build time
|
|
240
239
|
appName: this.appOptions.appName || "",
|
|
241
240
|
appVersion: this.appOptions.appVersion || "",
|
|
242
241
|
appBuildNum: this.appOptions.appBuildNum || ""
|
|
243
242
|
});
|
|
244
|
-
this.newFileOpensInNewTab =
|
|
245
|
-
this.newFileAddsNewToQuery =
|
|
246
|
-
if (
|
|
243
|
+
this.newFileOpensInNewTab = this.appOptions.ui?.newFileOpensInNewTab ?? true;
|
|
244
|
+
this.newFileAddsNewToQuery = this.appOptions.ui?.newFileAddsNewToQuery;
|
|
245
|
+
if (this.appOptions.ui?.confirmCloseIfDirty) {
|
|
247
246
|
this._setupConfirmOnClose();
|
|
248
247
|
}
|
|
249
248
|
return this._startPostMessageListener();
|
|
@@ -260,8 +259,7 @@ class CloudFileManagerClient {
|
|
|
260
259
|
}
|
|
261
260
|
}
|
|
262
261
|
connect() {
|
|
263
|
-
|
|
264
|
-
(_a = this.connectedPromiseResolver) === null || _a === void 0 ? void 0 : _a.resolve();
|
|
262
|
+
this.connectedPromiseResolver?.resolve();
|
|
265
263
|
return this._event('connected', { client: this });
|
|
266
264
|
}
|
|
267
265
|
//
|
|
@@ -273,7 +271,7 @@ class CloudFileManagerClient {
|
|
|
273
271
|
//
|
|
274
272
|
processUrlParams() {
|
|
275
273
|
// process the hash params
|
|
276
|
-
let providerName;
|
|
274
|
+
let providerName, providerParams, folder;
|
|
277
275
|
const { hashParams } = this.appOptions;
|
|
278
276
|
if (hashParams.sharedContentId) {
|
|
279
277
|
return this.openSharedContent(hashParams.sharedContentId);
|
|
@@ -283,7 +281,6 @@ class CloudFileManagerClient {
|
|
|
283
281
|
return this.openUrlFile(hashParams.fileParams);
|
|
284
282
|
}
|
|
285
283
|
else {
|
|
286
|
-
let providerParams;
|
|
287
284
|
[providerName, providerParams] = hashParams.fileParams.split(':');
|
|
288
285
|
return this.openProviderFile(providerName, providerParams);
|
|
289
286
|
}
|
|
@@ -292,7 +289,6 @@ class CloudFileManagerClient {
|
|
|
292
289
|
return this.openCopiedFile(hashParams.copyParams);
|
|
293
290
|
}
|
|
294
291
|
else if (hashParams.newInFolderParams) {
|
|
295
|
-
let folder;
|
|
296
292
|
[providerName, folder] = hashParams.newInFolderParams.split(':');
|
|
297
293
|
return this.createNewInFolder(providerName, folder);
|
|
298
294
|
}
|
|
@@ -387,8 +383,7 @@ class CloudFileManagerClient {
|
|
|
387
383
|
}
|
|
388
384
|
}
|
|
389
385
|
openFile(metadata, callback = null) {
|
|
390
|
-
|
|
391
|
-
if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities.load, metadata)) {
|
|
386
|
+
if (metadata?.provider?.can(provider_interface_1.ECapabilities.load, metadata)) {
|
|
392
387
|
this._event('willOpenFile', { op: "openFile" });
|
|
393
388
|
return metadata.provider.load(metadata, (err, content) => {
|
|
394
389
|
if (err) {
|
|
@@ -494,8 +489,7 @@ class CloudFileManagerClient {
|
|
|
494
489
|
}
|
|
495
490
|
// must be called as a result of user action (e.g. click) to avoid popup blockers
|
|
496
491
|
parseUrlAuthorizeAndOpen() {
|
|
497
|
-
|
|
498
|
-
if (((_a = this.appOptions.hashParams) === null || _a === void 0 ? void 0 : _a.fileParams) != null) {
|
|
492
|
+
if (this.appOptions.hashParams?.fileParams != null) {
|
|
499
493
|
const [providerName, providerParams] = this.appOptions.hashParams.fileParams.split(':');
|
|
500
494
|
const provider = this.providers[providerName];
|
|
501
495
|
if (provider) {
|
|
@@ -619,8 +613,7 @@ class CloudFileManagerClient {
|
|
|
619
613
|
});
|
|
620
614
|
}
|
|
621
615
|
saveContent(stringContent, callback = null) {
|
|
622
|
-
|
|
623
|
-
const provider = ((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) || this.autoProvider(provider_interface_1.ECapabilities.save);
|
|
616
|
+
const provider = this.state.metadata?.provider || this.autoProvider(provider_interface_1.ECapabilities.save);
|
|
624
617
|
if (provider != null) {
|
|
625
618
|
return provider.authorized((isAuthorized) => {
|
|
626
619
|
// we can save the document without authorization in some cases
|
|
@@ -637,9 +630,8 @@ class CloudFileManagerClient {
|
|
|
637
630
|
}
|
|
638
631
|
}
|
|
639
632
|
saveFile(stringContent, metadata, callback = null) {
|
|
640
|
-
var _a;
|
|
641
633
|
const readonly = metadata && !metadata.overwritable; // only check if metadata exists
|
|
642
|
-
const resaveable =
|
|
634
|
+
const resaveable = metadata?.provider?.can(provider_interface_1.ECapabilities.resave, metadata);
|
|
643
635
|
// must be able to 'resave' to save silently, i.e. without save dialog
|
|
644
636
|
if (!readonly && resaveable) {
|
|
645
637
|
return this.saveFileNoDialog(stringContent, metadata, callback);
|
|
@@ -649,12 +641,11 @@ class CloudFileManagerClient {
|
|
|
649
641
|
}
|
|
650
642
|
}
|
|
651
643
|
saveFileNoDialog(stringContent, metadata, callback = null) {
|
|
652
|
-
var _a, _b;
|
|
653
644
|
this._setState({
|
|
654
645
|
saving: metadata
|
|
655
646
|
});
|
|
656
647
|
let currentContent = this._createOrUpdateCurrentContent(stringContent, metadata);
|
|
657
|
-
currentContent =
|
|
648
|
+
currentContent = this.appOptions.contentSaveFilter?.(currentContent) || currentContent;
|
|
658
649
|
return metadata.provider.save(currentContent, metadata, (err, statusCode, savedContent) => {
|
|
659
650
|
let failures;
|
|
660
651
|
if (err) {
|
|
@@ -717,8 +708,7 @@ class CloudFileManagerClient {
|
|
|
717
708
|
}
|
|
718
709
|
createCopy(stringContent = null, callback = null) {
|
|
719
710
|
const saveAndOpenCopy = (stringContent) => {
|
|
720
|
-
|
|
721
|
-
return this.saveCopiedFile(stringContent, (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name, (err, copyParams) => {
|
|
711
|
+
return this.saveCopiedFile(stringContent, this.state.metadata?.name, (err, copyParams) => {
|
|
722
712
|
if (err) {
|
|
723
713
|
return (typeof callback === 'function' ? callback(err) : undefined);
|
|
724
714
|
}
|
|
@@ -745,7 +735,7 @@ class CloudFileManagerClient {
|
|
|
745
735
|
}
|
|
746
736
|
maxCopyNumber++;
|
|
747
737
|
const value = JSON.stringify({
|
|
748
|
-
name:
|
|
738
|
+
name: name?.length ? `Copy of ${name}` : "Copy of Untitled Document",
|
|
749
739
|
stringContent
|
|
750
740
|
});
|
|
751
741
|
window.localStorage.setItem(`${prefix}${maxCopyNumber}`, value);
|
|
@@ -802,11 +792,10 @@ class CloudFileManagerClient {
|
|
|
802
792
|
}
|
|
803
793
|
saveTempFile(callback) {
|
|
804
794
|
return this._event('getContent', { shared: this._sharedMetadata() }, (stringContent) => {
|
|
805
|
-
var _a;
|
|
806
795
|
const currentContent = this._createOrUpdateCurrentContent(stringContent);
|
|
807
796
|
try {
|
|
808
797
|
const key = "cfm-tempfile";
|
|
809
|
-
const name =
|
|
798
|
+
const name = this.state.metadata?.name;
|
|
810
799
|
const value = JSON.stringify({ name, stringContent });
|
|
811
800
|
window.localStorage.setItem(key, value);
|
|
812
801
|
const metadata = new provider_interface_1.CloudMetadata({
|
|
@@ -814,10 +803,10 @@ class CloudFileManagerClient {
|
|
|
814
803
|
type: provider_interface_1.CloudMetadata.File
|
|
815
804
|
});
|
|
816
805
|
this._fileChanged('savedFile', currentContent, metadata, { saved: true }, "");
|
|
817
|
-
return callback
|
|
806
|
+
return callback?.(null);
|
|
818
807
|
}
|
|
819
808
|
catch (e) {
|
|
820
|
-
return callback
|
|
809
|
+
return callback?.("Unable to temporarily save copied file");
|
|
821
810
|
}
|
|
822
811
|
});
|
|
823
812
|
}
|
|
@@ -840,8 +829,7 @@ class CloudFileManagerClient {
|
|
|
840
829
|
}
|
|
841
830
|
}
|
|
842
831
|
_sharedMetadata() {
|
|
843
|
-
|
|
844
|
-
return ((_a = this.state.currentContent) === null || _a === void 0 ? void 0 : _a.getSharedMetadata()) || {};
|
|
832
|
+
return this.state.currentContent?.getSharedMetadata() || {};
|
|
845
833
|
}
|
|
846
834
|
shareGetLink() {
|
|
847
835
|
return this._ui.shareDialog(this);
|
|
@@ -858,8 +846,7 @@ class CloudFileManagerClient {
|
|
|
858
846
|
}
|
|
859
847
|
}
|
|
860
848
|
isShared() {
|
|
861
|
-
|
|
862
|
-
const currentContent = (_a = this.state) === null || _a === void 0 ? void 0 : _a.currentContent;
|
|
849
|
+
const currentContent = this.state?.currentContent;
|
|
863
850
|
if (currentContent) {
|
|
864
851
|
const unshared = currentContent.get("isUnshared");
|
|
865
852
|
if (!unshared) {
|
|
@@ -901,7 +888,7 @@ class CloudFileManagerClient {
|
|
|
901
888
|
if (err) {
|
|
902
889
|
return this.alert(err);
|
|
903
890
|
}
|
|
904
|
-
return callback
|
|
891
|
+
return callback?.(null, sharedContentId, currentContent);
|
|
905
892
|
});
|
|
906
893
|
});
|
|
907
894
|
}
|
|
@@ -918,21 +905,20 @@ class CloudFileManagerClient {
|
|
|
918
905
|
}
|
|
919
906
|
return this.setShareState(true, (err, sharedContentId, currentContent) => {
|
|
920
907
|
this._fileChanged('sharedFile', currentContent, this.state.metadata);
|
|
921
|
-
return callback
|
|
908
|
+
return callback?.(null, sharedContentId);
|
|
922
909
|
});
|
|
923
910
|
}
|
|
924
911
|
unshare(callback) {
|
|
925
912
|
return this.setShareState(false, (err, sharedContentId, currentContent) => {
|
|
926
913
|
this._fileChanged('unsharedFile', currentContent, this.state.metadata);
|
|
927
|
-
return callback
|
|
914
|
+
return callback?.(null);
|
|
928
915
|
});
|
|
929
916
|
}
|
|
930
917
|
revertToShared(callback = null) {
|
|
931
|
-
var _a, _b, _c;
|
|
932
918
|
// Look for sharedDocumentUrl or Url first:
|
|
933
|
-
const id =
|
|
934
|
-
||
|
|
935
|
-
||
|
|
919
|
+
const id = this.state.currentContent?.get("sharedDocumentUrl")
|
|
920
|
+
|| this.state.currentContent?.get("url")
|
|
921
|
+
|| this.state.currentContent?.get("sharedDocumentId");
|
|
936
922
|
if (id && (this.state.shareProvider != null)) {
|
|
937
923
|
return this.state.shareProvider.loadSharedContent(id, (err, content, metadata) => {
|
|
938
924
|
let docName;
|
|
@@ -945,7 +931,7 @@ class CloudFileManagerClient {
|
|
|
945
931
|
metadata.name = docName;
|
|
946
932
|
}
|
|
947
933
|
this._fileOpened(content, metadata, { dirty: true, openedContent: content.clone() });
|
|
948
|
-
return callback
|
|
934
|
+
return callback?.(null);
|
|
949
935
|
});
|
|
950
936
|
}
|
|
951
937
|
}
|
|
@@ -957,16 +943,14 @@ class CloudFileManagerClient {
|
|
|
957
943
|
downloadDialog(callback = null) {
|
|
958
944
|
// should share metadata be included in downloaded local files?
|
|
959
945
|
return this._event('getContent', { shared: this._sharedMetadata() }, (content) => {
|
|
960
|
-
var _a;
|
|
961
946
|
const envelopedContent = provider_interface_1.cloudContentFactory.createEnvelopedCloudContent(content);
|
|
962
947
|
if (this.state.currentContent != null) {
|
|
963
948
|
this.state.currentContent.copyMetadataTo(envelopedContent);
|
|
964
949
|
}
|
|
965
|
-
return this._ui.downloadDialog(
|
|
950
|
+
return this._ui.downloadDialog(this.state.metadata?.name, envelopedContent, callback);
|
|
966
951
|
});
|
|
967
952
|
}
|
|
968
953
|
getDownloadBlob(content, includeShareInfo, mimeType) {
|
|
969
|
-
var _a;
|
|
970
954
|
let contentToSave;
|
|
971
955
|
if (mimeType == null) {
|
|
972
956
|
mimeType = 'text/plain';
|
|
@@ -991,7 +975,7 @@ class CloudFileManagerClient {
|
|
|
991
975
|
delete json.isUnshared;
|
|
992
976
|
delete json.accessKeys;
|
|
993
977
|
// CODAP moves the keys into its own namespace
|
|
994
|
-
if (
|
|
978
|
+
if (json.metadata?.shared != null) {
|
|
995
979
|
delete json.metadata.shared;
|
|
996
980
|
}
|
|
997
981
|
contentToSave = JSON.stringify(json);
|
|
@@ -1008,17 +992,15 @@ class CloudFileManagerClient {
|
|
|
1008
992
|
}
|
|
1009
993
|
}
|
|
1010
994
|
rename(metadata, newName, callback) {
|
|
1011
|
-
var _a;
|
|
1012
995
|
const { dirty } = this.state;
|
|
1013
996
|
const _rename = (metadata) => {
|
|
1014
|
-
var _a;
|
|
1015
997
|
if (this.state.currentContent != null) {
|
|
1016
998
|
this.state.currentContent.addMetadata({ docName: metadata.name });
|
|
1017
999
|
}
|
|
1018
1000
|
this._fileChanged('renamedFile', this.state.currentContent, metadata, { dirty }, this._getHashParams(metadata));
|
|
1019
1001
|
const done = () => typeof callback === 'function' ? callback(newName) : undefined;
|
|
1020
|
-
const readOnlyProvider =
|
|
1021
|
-
if (!readOnlyProvider && (
|
|
1002
|
+
const readOnlyProvider = metadata?.provider?.name === readonly_provider_1.default.Name;
|
|
1003
|
+
if (!readOnlyProvider && (metadata?.provider || this.autoProvider(provider_interface_1.ECapabilities.save))) {
|
|
1022
1004
|
// autosave renamed file if it has already been saved or can be autosaved
|
|
1023
1005
|
this.save(done);
|
|
1024
1006
|
}
|
|
@@ -1027,7 +1009,7 @@ class CloudFileManagerClient {
|
|
|
1027
1009
|
}
|
|
1028
1010
|
};
|
|
1029
1011
|
if (newName !== (this.state.metadata != null ? this.state.metadata.name : undefined)) {
|
|
1030
|
-
if (
|
|
1012
|
+
if (metadata?.provider?.can(provider_interface_1.ECapabilities.rename, metadata)) {
|
|
1031
1013
|
return this.state.metadata.provider.rename(this.state.metadata, newName, (err, metadata) => {
|
|
1032
1014
|
if (err) {
|
|
1033
1015
|
return this.alert(err);
|
|
@@ -1096,10 +1078,9 @@ class CloudFileManagerClient {
|
|
|
1096
1078
|
// Saves a file to backend, but does not update current metadata.
|
|
1097
1079
|
// Used e.g. when exporting .csv files from CODAP
|
|
1098
1080
|
saveSecondaryFile(stringContent, metadata, callback = null) {
|
|
1099
|
-
|
|
1100
|
-
if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities["export"], metadata)) {
|
|
1081
|
+
if (metadata?.provider?.can(provider_interface_1.ECapabilities["export"], metadata)) {
|
|
1101
1082
|
return metadata.provider.saveAsExport(stringContent, metadata, (err, statusCode) => {
|
|
1102
|
-
return err ? this.alert(err) : callback
|
|
1083
|
+
return err ? this.alert(err) : callback?.(stringContent, metadata);
|
|
1103
1084
|
});
|
|
1104
1085
|
}
|
|
1105
1086
|
}
|
|
@@ -1114,12 +1095,11 @@ class CloudFileManagerClient {
|
|
|
1114
1095
|
}
|
|
1115
1096
|
}
|
|
1116
1097
|
shouldAutoSave() {
|
|
1117
|
-
var _a;
|
|
1118
1098
|
const { metadata } = this.state;
|
|
1119
1099
|
return (this.state.dirty
|
|
1120
|
-
&& !
|
|
1100
|
+
&& !metadata?.autoSaveDisabled
|
|
1121
1101
|
&& !this.isSaveInProgress()
|
|
1122
|
-
&&
|
|
1102
|
+
&& metadata?.provider?.can(provider_interface_1.ECapabilities.resave, metadata));
|
|
1123
1103
|
}
|
|
1124
1104
|
autoSave(interval) {
|
|
1125
1105
|
if (this._autoSaveInterval) {
|
|
@@ -1139,7 +1119,6 @@ class CloudFileManagerClient {
|
|
|
1139
1119
|
return (this._autoSaveInterval != null);
|
|
1140
1120
|
}
|
|
1141
1121
|
changeLanguage(newLangCode, callback) {
|
|
1142
|
-
var _a, _b;
|
|
1143
1122
|
(0, translate_1.setCurrentLanguage)(newLangCode);
|
|
1144
1123
|
if (callback) {
|
|
1145
1124
|
const postSave = (err) => {
|
|
@@ -1151,7 +1130,7 @@ class CloudFileManagerClient {
|
|
|
1151
1130
|
return callback(newLangCode);
|
|
1152
1131
|
}
|
|
1153
1132
|
};
|
|
1154
|
-
if (
|
|
1133
|
+
if (this.state.metadata?.provider?.can(provider_interface_1.ECapabilities.save)) {
|
|
1155
1134
|
return this.save((err) => postSave(err));
|
|
1156
1135
|
}
|
|
1157
1136
|
else {
|
|
@@ -1190,6 +1169,7 @@ class CloudFileManagerClient {
|
|
|
1190
1169
|
return this.confirmDialog({ message, callback, rejectCallback });
|
|
1191
1170
|
}
|
|
1192
1171
|
confirmDialog(params) {
|
|
1172
|
+
this._event("requiresUserInteraction");
|
|
1193
1173
|
return this._ui.confirmDialog(params);
|
|
1194
1174
|
}
|
|
1195
1175
|
alert(message, titleOrCallback, callback) {
|
|
@@ -1209,10 +1189,9 @@ class CloudFileManagerClient {
|
|
|
1209
1189
|
async onUnload(options) {
|
|
1210
1190
|
if (options.unloading) {
|
|
1211
1191
|
return new Promise(resolve => {
|
|
1212
|
-
var _a;
|
|
1213
1192
|
// only save if the provider is set - when using linked interactives the provider is not set when
|
|
1214
1193
|
// the linked interactive changed and the version choice dialog is showing
|
|
1215
|
-
if (
|
|
1194
|
+
if (this.state.metadata?.provider) {
|
|
1216
1195
|
this.save((content, metadata, savedContent) => {
|
|
1217
1196
|
// providers can save a different format for the content
|
|
1218
1197
|
// for example the interactiveApi provider can save attachments in which case the savedContent
|
|
@@ -1256,11 +1235,10 @@ class CloudFileManagerClient {
|
|
|
1256
1235
|
return this._event(type, { content: (content != null ? content.getClientContent() : undefined), shared: this._sharedMetadata() });
|
|
1257
1236
|
}
|
|
1258
1237
|
_fileOpened(content, metadata, additionalState, hashParams = null) {
|
|
1259
|
-
var _a, _b;
|
|
1260
1238
|
if (additionalState == null) {
|
|
1261
1239
|
additionalState = {};
|
|
1262
1240
|
}
|
|
1263
|
-
const eventData = { content:
|
|
1241
|
+
const eventData = { content: content?.getClientContent?.() ?? content };
|
|
1264
1242
|
// update state before sending 'openedFile' events so that 'openedFile' listeners that
|
|
1265
1243
|
// reference state have the updated state values
|
|
1266
1244
|
this._updateState(content, metadata, additionalState, hashParams);
|
|
@@ -1286,17 +1264,16 @@ class CloudFileManagerClient {
|
|
|
1286
1264
|
metadata,
|
|
1287
1265
|
saving: null,
|
|
1288
1266
|
saved: false,
|
|
1289
|
-
dirty: !additionalState.saved &&
|
|
1267
|
+
dirty: !additionalState.saved && content?.requiresConversion(),
|
|
1290
1268
|
...additionalState
|
|
1291
1269
|
};
|
|
1292
|
-
this._setWindowTitle(metadata
|
|
1270
|
+
this._setWindowTitle(metadata?.name);
|
|
1293
1271
|
if (hashParams !== null) {
|
|
1294
1272
|
window.location.hash = hashParams;
|
|
1295
1273
|
}
|
|
1296
1274
|
return this._setState(state);
|
|
1297
1275
|
}
|
|
1298
1276
|
_event(type, data, eventCallback = null) {
|
|
1299
|
-
var _a;
|
|
1300
1277
|
if (data == null) {
|
|
1301
1278
|
data = {};
|
|
1302
1279
|
}
|
|
@@ -1310,7 +1287,7 @@ class CloudFileManagerClient {
|
|
|
1310
1287
|
// I tried sending the state but that causes CODAP to replace its state which breaks other things.
|
|
1311
1288
|
// A permanent fix for this would be to send the new filename outside of the state metadata.
|
|
1312
1289
|
const skipPostMessage = type === "renamedFile";
|
|
1313
|
-
if (
|
|
1290
|
+
if (this.appOptions?.sendPostMessageClientEvents && this.iframe && !skipPostMessage) {
|
|
1314
1291
|
return event.postMessage(this.iframe.contentWindow);
|
|
1315
1292
|
}
|
|
1316
1293
|
}
|
|
@@ -1330,9 +1307,8 @@ class CloudFileManagerClient {
|
|
|
1330
1307
|
});
|
|
1331
1308
|
}
|
|
1332
1309
|
_closeCurrentFile() {
|
|
1333
|
-
var _a;
|
|
1334
1310
|
const { metadata } = this.state;
|
|
1335
|
-
if (
|
|
1311
|
+
if (metadata?.provider?.can(provider_interface_1.ECapabilities.close, metadata)) {
|
|
1336
1312
|
return metadata.provider.close(metadata);
|
|
1337
1313
|
}
|
|
1338
1314
|
}
|
|
@@ -1351,8 +1327,7 @@ class CloudFileManagerClient {
|
|
|
1351
1327
|
return currentContent;
|
|
1352
1328
|
}
|
|
1353
1329
|
_setWindowTitle(name) {
|
|
1354
|
-
|
|
1355
|
-
if ((_a = this.appOptions) === null || _a === void 0 ? void 0 : _a.appSetsWindowTitle) {
|
|
1330
|
+
if (this.appOptions?.appSetsWindowTitle) {
|
|
1356
1331
|
return;
|
|
1357
1332
|
}
|
|
1358
1333
|
const { ui } = this.appOptions;
|
|
@@ -1367,13 +1342,12 @@ class CloudFileManagerClient {
|
|
|
1367
1342
|
}
|
|
1368
1343
|
}
|
|
1369
1344
|
_getHashParams(metadata) {
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
let openSavedParams = canOpenSaved ? (_b = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _b === void 0 ? void 0 : _b.getOpenSavedParams(metadata) : null;
|
|
1345
|
+
const canOpenSaved = metadata?.provider?.canOpenSaved() || false;
|
|
1346
|
+
let openSavedParams = canOpenSaved ? metadata?.provider?.getOpenSavedParams(metadata) : null;
|
|
1373
1347
|
if (canOpenSaved && (openSavedParams != null) && (typeof openSavedParams === "string")) {
|
|
1374
1348
|
return `#file=${metadata.provider.urlDisplayName || metadata.provider.name}:${encodeURIComponent(openSavedParams)}`;
|
|
1375
1349
|
}
|
|
1376
|
-
else if (
|
|
1350
|
+
else if (metadata?.provider instanceof url_provider_1.default && (window.location.hash.indexOf("#file=http") === 0)) {
|
|
1377
1351
|
return window.location.hash; // leave it alone
|
|
1378
1352
|
}
|
|
1379
1353
|
else {
|
|
@@ -1382,7 +1356,6 @@ class CloudFileManagerClient {
|
|
|
1382
1356
|
}
|
|
1383
1357
|
_startPostMessageListener() {
|
|
1384
1358
|
return (0, jquery_1.default)(window).on('message', e => {
|
|
1385
|
-
var _a, _b;
|
|
1386
1359
|
const oe = e.originalEvent;
|
|
1387
1360
|
const data = oe.data || {};
|
|
1388
1361
|
const reply = function (type, params) {
|
|
@@ -1392,7 +1365,7 @@ class CloudFileManagerClient {
|
|
|
1392
1365
|
const message = lodash_1.default.merge({}, params, { type });
|
|
1393
1366
|
return oe.source.postMessage(message, oe.origin);
|
|
1394
1367
|
};
|
|
1395
|
-
switch (data
|
|
1368
|
+
switch (data?.type) {
|
|
1396
1369
|
case 'cfm::getCommands':
|
|
1397
1370
|
return reply('cfm::commands', { commands: ['cfm::autosave', 'cfm::event', 'cfm::event:reply', 'cfm::setDirty', 'cfm::iframedClientConnected'] });
|
|
1398
1371
|
case 'cfm::autosave':
|
|
@@ -1409,13 +1382,13 @@ class CloudFileManagerClient {
|
|
|
1409
1382
|
});
|
|
1410
1383
|
case 'cfm::event:reply': {
|
|
1411
1384
|
const event = CLOUDFILEMANAGER_EVENTS[data.eventId];
|
|
1412
|
-
const callbackData = JSON.parse(
|
|
1413
|
-
return
|
|
1385
|
+
const callbackData = JSON.parse(data?.callbackArgs || null);
|
|
1386
|
+
return event?.callback?.apply(this, callbackData);
|
|
1414
1387
|
}
|
|
1415
1388
|
case 'cfm::setDirty':
|
|
1416
1389
|
return this.dirty(data.isDirty);
|
|
1417
1390
|
case 'cfm::iframedClientConnected':
|
|
1418
|
-
|
|
1391
|
+
this.connectedPromiseResolver?.resolve();
|
|
1419
1392
|
return this.processUrlParams();
|
|
1420
1393
|
}
|
|
1421
1394
|
});
|
|
@@ -1430,8 +1403,7 @@ class CloudFileManagerClient {
|
|
|
1430
1403
|
});
|
|
1431
1404
|
}
|
|
1432
1405
|
_filterLoadedContent(content) {
|
|
1433
|
-
|
|
1434
|
-
return ((_b = (_a = this.appOptions).contentLoadFilter) === null || _b === void 0 ? void 0 : _b.call(_a, content)) || content;
|
|
1406
|
+
return this.appOptions.contentLoadFilter?.(content) || content;
|
|
1435
1407
|
}
|
|
1436
1408
|
}
|
|
1437
1409
|
exports.CloudFileManagerClient = CloudFileManagerClient;
|