@girder/core 3.2.8 → 5.0.0-a10
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/README.md +61 -0
- package/dist-lib/Girder_Favicon.png +0 -0
- package/dist-lib/fontello/node_modules/ansi-regex/index.d.ts +37 -0
- package/dist-lib/fontello/node_modules/ansi-styles/index.d.ts +345 -0
- package/dist-lib/fontello/node_modules/big-integer/BigInteger.d.ts +2393 -0
- package/dist-lib/fontello/node_modules/fontello-cli/node_modules/colors/safe.d.ts +48 -0
- package/dist-lib/fontello/node_modules/has-flag/index.d.ts +39 -0
- package/dist-lib/fontello/node_modules/iconv-lite/lib/index.d.ts +24 -0
- package/dist-lib/fontello/node_modules/is-docker/index.d.ts +15 -0
- package/dist-lib/fontello/node_modules/is-plain-object/index.d.ts +5 -0
- package/dist-lib/fontello/node_modules/is-wsl/index.d.ts +15 -0
- package/dist-lib/fontello/node_modules/isobject/index.d.ts +5 -0
- package/dist-lib/fontello/node_modules/open/index.d.ts +88 -0
- package/dist-lib/fontello/node_modules/safe-buffer/index.d.ts +187 -0
- package/dist-lib/fontello/node_modules/strip-ansi/index.d.ts +17 -0
- package/dist-lib/girder-core.js +57770 -0
- package/dist-lib/girder-core.js.map +1 -0
- package/dist-lib/girder-core.umd.cjs +1572 -0
- package/dist-lib/girder-core.umd.cjs.map +1 -0
- package/dist-lib/index.d.ts +1 -0
- package/{auth.js → dist-lib/src/auth.js} +1 -41
- package/{collections → dist-lib/src/collections}/AssetstoreCollection.js +2 -1
- package/{constants.js → dist-lib/src/constants.js} +0 -1
- package/dist-lib/src/index.d.ts +23 -0
- package/dist-lib/src/index.ts +80 -0
- package/dist-lib/src/main.ts +46 -0
- package/{models → dist-lib/src/models}/FolderModel.js +1 -1
- package/{rest.js → dist-lib/src/rest.js} +12 -7
- package/{routes.js → dist-lib/src/routes.js} +65 -67
- package/{templates → dist-lib/src/templates}/body/assetstores.pug +0 -15
- package/{templates → dist-lib/src/templates}/body/frontPage.pug +1 -1
- package/{templates → dist-lib/src/templates}/body/systemConfiguration.pug +37 -42
- package/{templates → dist-lib/src/templates}/widgets/editAssetstoreWidget.pug +4 -12
- package/{templates → dist-lib/src/templates}/widgets/newAssetstore.pug +4 -35
- package/dist-lib/src/utilities/EventStream.js +111 -0
- package/{utilities → dist-lib/src/utilities}/S3UploadHandler.js +4 -44
- package/dist-lib/src/version.js +6 -0
- package/{views → dist-lib/src/views}/View.js +2 -1
- package/{views → dist-lib/src/views}/body/AssetstoresView.js +24 -26
- package/{views → dist-lib/src/views}/body/SystemConfigurationView.js +1 -20
- package/{views → dist-lib/src/views}/body/index.js +2 -1
- package/{views → dist-lib/src/views}/layout/LoginView.js +1 -1
- package/{views → dist-lib/src/views}/widgets/ApiKeyListWidget.js +1 -1
- package/{views → dist-lib/src/views}/widgets/DateTimeRangeWidget.js +2 -1
- package/{views → dist-lib/src/views}/widgets/DateTimeWidget.js +2 -1
- package/{views → dist-lib/src/views}/widgets/EditApiKeyWidget.js +3 -1
- package/{views → dist-lib/src/views}/widgets/EditAssetstoreWidget.js +4 -16
- package/{views → dist-lib/src/views}/widgets/ItemListWidget.js +1 -1
- package/{views → dist-lib/src/views}/widgets/MetadataWidget.js +7 -3
- package/{views → dist-lib/src/views}/widgets/NewAssetstoreWidget.js +2 -11
- package/{views → dist-lib/src/views}/widgets/PaginateWidget.js +2 -2
- package/{views → dist-lib/src/views}/widgets/RootSelectorWidget.js +1 -1
- package/{views → dist-lib/src/views}/widgets/SearchPaginateWidget.js +2 -2
- package/{views → dist-lib/src/views}/widgets/SortCollectionWidget.js +1 -1
- package/{views → dist-lib/src/views}/widgets/index.js +7 -1
- package/dist-lib/src/vite-env.d.ts +5 -0
- package/dist-lib/style.css +16 -0
- package/package.json +80 -31
- package/index.js +0 -31
- package/main.js +0 -21
- package/utilities/EventStream.js +0 -177
- package/version.js +0 -10
- /package/{assets → dist-lib}/Girder_Mark.png +0 -0
- /package/{collections → dist-lib/src/collections}/ApiKeyCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/Collection.js +0 -0
- /package/{collections → dist-lib/src/collections}/CollectionCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/FileCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/FolderCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/GroupCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/ItemCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/UserCollection.js +0 -0
- /package/{collections → dist-lib/src/collections}/index.js +0 -0
- /package/{dialog.js → dist-lib/src/dialog.js} +0 -0
- /package/{events.js → dist-lib/src/events.js} +0 -0
- /package/{misc.js → dist-lib/src/misc.js} +0 -0
- /package/{models → dist-lib/src/models}/AccessControlledModel.js +0 -0
- /package/{models → dist-lib/src/models}/ApiKeyModel.js +0 -0
- /package/{models → dist-lib/src/models}/AssetstoreModel.js +0 -0
- /package/{models → dist-lib/src/models}/CollectionCreationPolicyModel.js +0 -0
- /package/{models → dist-lib/src/models}/CollectionModel.js +0 -0
- /package/{models → dist-lib/src/models}/FileModel.js +0 -0
- /package/{models → dist-lib/src/models}/GroupModel.js +0 -0
- /package/{models → dist-lib/src/models}/ItemModel.js +0 -0
- /package/{models → dist-lib/src/models}/MetadataMixin.js +0 -0
- /package/{models → dist-lib/src/models}/Model.js +0 -0
- /package/{models → dist-lib/src/models}/UserModel.js +0 -0
- /package/{models → dist-lib/src/models}/index.js +0 -0
- /package/{pluginUtils.js → dist-lib/src/pluginUtils.js} +0 -0
- /package/{router.js → dist-lib/src/router.js} +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/apidocs/apidocs.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/adminConsole.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/assetstores.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/collectionList.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/collectionPage.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/frontPage.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/groupList.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/groupPage.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/itemPage.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/plugins.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/searchResultsList.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/systemConfig.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/userAccount.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/userList.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/body/userPage.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/footer.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/global.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/globalNav.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/header.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/headerUser.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/layout.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/layoutVars.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/loading.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/layout/progressArea.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/accessWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/browserWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/hierarchyWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/markdownWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/metadataWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/searchFieldWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/taskProgress.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/timelineWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/uploadWidget.styl +0 -0
- /package/{stylesheets → dist-lib/src/stylesheets}/widgets/userOtpManagementWidget.styl +0 -0
- /package/{templates → dist-lib/src/templates}/body/adminConsole.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/collectionList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/collectionPage.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/filesystemImport.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/groupList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/groupPage.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/itemPage.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/plugins.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/s3Import.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/searchResults.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/searchResultsType.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/userAccount.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/userList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/body/userPage.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/alert.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/layout.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/layoutFooter.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/layoutGlobalNav.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/layoutHeader.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/layoutHeaderUser.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/layoutProgressArea.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/loginDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/registerDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/layout/resetPasswordDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/accessEditor.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/accessEditorMixins.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/accessEditorNonModal.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/accessEntry.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/apiKeyList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/browserWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/checkedActionsMenu.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/collectionInfoDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/confirmDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/dateTimeRangeWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/dateTimeWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/editApiKeyWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/editCollectionWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/editFileWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/editFolderWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/editGroupWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/editItemWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/fileInfoDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/fileList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/folderInfoDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/folderList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/groupAdminList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/groupInviteDialog.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/groupInviteList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/groupMemberList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/groupModList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/hierarchyBreadcrumb.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/hierarchyPaginated.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/hierarchyWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/itemBreadcrumb.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/itemList.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/jsonMetadatumEditWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/jsonMetadatumView.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/loadingAnimation.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/markdownWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/metadataWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/metadatumEditWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/metadatumView.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/paginateWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/pluginConfigBreadcrumb.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/rootSelectorWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/searchField.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/searchHelp.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/searchModeSelect.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/searchResults.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/sortCollectionWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/taskProgress.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/timeline.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/uploadWidget.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/uploadWidgetMixins.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/uploadWidgetNonModal.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/userOtpBegin.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/userOtpDisable.pug +0 -0
- /package/{templates → dist-lib/src/templates}/widgets/userOtpEnable.pug +0 -0
- /package/{utilities → dist-lib/src/utilities}/PluginUtils.js +0 -0
- /package/{utilities → dist-lib/src/utilities}/index.js +0 -0
- /package/{utilities → dist-lib/src/utilities}/jquery/girderEnable.js +0 -0
- /package/{utilities → dist-lib/src/utilities}/jquery/girderModal.js +0 -0
- /package/{views → dist-lib/src/views}/App.js +0 -0
- /package/{views → dist-lib/src/views}/body/AdminView.js +0 -0
- /package/{views → dist-lib/src/views}/body/CollectionView.js +0 -0
- /package/{views → dist-lib/src/views}/body/CollectionsView.js +0 -0
- /package/{views → dist-lib/src/views}/body/FilesystemImportView.js +0 -0
- /package/{views → dist-lib/src/views}/body/FolderView.js +0 -0
- /package/{views → dist-lib/src/views}/body/FrontPageView.js +0 -0
- /package/{views → dist-lib/src/views}/body/GroupView.js +0 -0
- /package/{views → dist-lib/src/views}/body/GroupsView.js +0 -0
- /package/{views → dist-lib/src/views}/body/ItemView.js +0 -0
- /package/{views → dist-lib/src/views}/body/PluginsView.js +0 -0
- /package/{views → dist-lib/src/views}/body/S3ImportView.js +0 -0
- /package/{views → dist-lib/src/views}/body/SearchResultsView.js +0 -0
- /package/{views → dist-lib/src/views}/body/UserAccountView.js +0 -0
- /package/{views → dist-lib/src/views}/body/UserView.js +0 -0
- /package/{views → dist-lib/src/views}/body/UsersView.js +0 -0
- /package/{views → dist-lib/src/views}/index.js +0 -0
- /package/{views → dist-lib/src/views}/layout/FooterView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/GlobalNavView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/HeaderUserView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/HeaderView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/ProgressListView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/RegisterView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/ResetPasswordView.js +0 -0
- /package/{views → dist-lib/src/views}/layout/index.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/AccessWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/BrowserWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/CheckedMenuWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/CollectionInfoWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/EditCollectionWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/EditFileWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/EditFolderWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/EditGroupWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/EditItemWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/FileInfoWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/FileListWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/FolderInfoWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/FolderListWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/GroupAdminsWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/GroupInvitesWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/GroupMembersWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/GroupModsWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/HierarchyWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/ItemBreadcrumbWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/LoadingAnimation.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/MarkdownWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/PluginConfigBreadcrumbWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/SearchFieldWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/TaskProgressWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/TimelineWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/UploadWidget.js +0 -0
- /package/{views → dist-lib/src/views}/widgets/UserOtpManagementWidget.js +0 -0
|
@@ -1,40 +1,48 @@
|
|
|
1
1
|
.g-body-title System configuration
|
|
2
|
+
.g-body-subtitle
|
|
3
|
+
p
|
|
4
|
+
| Note: all settings other than those referencing data in the database should be set as
|
|
5
|
+
| environment variables in the execution environment.
|
|
2
6
|
form.g-settings-form(role="form")
|
|
3
7
|
.g-settings-form-container
|
|
4
8
|
h4 Instance Branding
|
|
5
9
|
.form-group
|
|
6
10
|
label(for="g-core-brand-name") Brand Name
|
|
7
11
|
input#g-core-brand-name.form-control.input-sm(
|
|
12
|
+
disabled=true,
|
|
8
13
|
type="text", value=settings['core.brand_name'] || '',
|
|
9
14
|
title="The brand name of the application.")
|
|
10
15
|
.form-group
|
|
11
16
|
label(for="g-core-contact-email-address") Contact email address
|
|
12
17
|
input#g-core-contact-email-address.form-control.input-sm(
|
|
18
|
+
disabled=true,
|
|
13
19
|
type="text", value=settings['core.contact_email_address'] || '',
|
|
14
20
|
title="The contact email address for users to obtain support with this instance.")
|
|
15
21
|
.form-group
|
|
16
22
|
label(for="g-core-banner-color") Banner Color
|
|
17
23
|
#g-core-banner-color-container
|
|
18
24
|
input#g-core-banner-color.form-control.input-sm(
|
|
25
|
+
disabled=true,
|
|
19
26
|
type="color", value=settings['core.banner_color'],
|
|
20
27
|
title="The banner color of the application.")
|
|
21
|
-
button#g-core-banner-default-color.form-control.input-sm(
|
|
22
|
-
type="button", title="Default color") default
|
|
23
28
|
.form-group
|
|
24
29
|
label(for="g-core-privacy-notice") Privacy Notice Link
|
|
25
30
|
input#g-core-privacy-notice.form-control.input-sm(
|
|
31
|
+
disabled=true,
|
|
26
32
|
type="text", value=settings['core.privacy_notice'] || '',
|
|
27
33
|
title="The privacy notice link.")
|
|
28
34
|
.form-group
|
|
29
35
|
label(for="g-core-cookie-lifetime") Cookie duration (days)
|
|
30
36
|
input#g-core-cookie-lifetime.form-control.input-sm(
|
|
37
|
+
disabled=true,
|
|
31
38
|
type="text", value=settings['core.cookie_lifetime'] || '',
|
|
32
39
|
title="How long users will stay logged in.")
|
|
33
40
|
.g-settings-form-container
|
|
34
41
|
h4 Administrative Policy
|
|
35
42
|
.form-group
|
|
36
43
|
label(for="g-core-registration-policy") Registration policy
|
|
37
|
-
select#g-core-registration-policy.form-control.input-sm
|
|
44
|
+
select#g-core-registration-policy.form-control.input-sm(
|
|
45
|
+
disabled=true)
|
|
38
46
|
option(value="open",
|
|
39
47
|
selected=(settings['core.registration_policy'] === "open")) Open registration
|
|
40
48
|
option(value="closed",
|
|
@@ -43,7 +51,8 @@ form.g-settings-form(role="form")
|
|
|
43
51
|
selected=(settings['core.registration_policy'] === "approve")) Admin approval required
|
|
44
52
|
.form-group
|
|
45
53
|
label(for="g-core-email-verification") Email verification
|
|
46
|
-
select#g-core-email-verification.form-control.input-sm
|
|
54
|
+
select#g-core-email-verification.form-control.input-sm(
|
|
55
|
+
disabled=true)
|
|
47
56
|
option(value="required",
|
|
48
57
|
selected=(settings['core.email_verification'] === "required")) Required
|
|
49
58
|
option(value="optional",
|
|
@@ -52,7 +61,8 @@ form.g-settings-form(role="form")
|
|
|
52
61
|
selected=(settings['core.email_verification'] === "disabled")) Disabled
|
|
53
62
|
.form-group
|
|
54
63
|
label(for="g-core-add-to-group-policy") Allow members to be directly added to groups
|
|
55
|
-
select#g-core-add-to-group-policy.form-control.input-sm
|
|
64
|
+
select#g-core-add-to-group-policy.form-control.input-sm(
|
|
65
|
+
disabled=true)
|
|
56
66
|
option(value="never",
|
|
57
67
|
selected=(settings['core.add_to_group_policy'] === "never"))
|
|
58
68
|
| No, members must be invited and accept invitations
|
|
@@ -73,13 +83,15 @@ form.g-settings-form(role="form")
|
|
|
73
83
|
p.
|
|
74
84
|
Allow additional users and groups to create collections.
|
|
75
85
|
input.g-setting-switch(type="checkbox",
|
|
76
|
-
checked="checked", data-size="mini", data-on-color="primary"
|
|
86
|
+
checked="checked", data-size="mini", data-on-color="primary",
|
|
87
|
+
disabled=true)
|
|
77
88
|
.access-widget-container
|
|
78
89
|
textarea#g-core-collection-create-policy.hide
|
|
79
90
|
= JSON.stringify(settings['core.collection_create_policy'])
|
|
80
91
|
.form-group
|
|
81
92
|
label(for="g-core-user-default-folders") Create default folders for new users
|
|
82
|
-
select#g-core-user-default-folders.form-control.input-sm
|
|
93
|
+
select#g-core-user-default-folders.form-control.input-sm(
|
|
94
|
+
disabled=true)
|
|
83
95
|
option(value="none",
|
|
84
96
|
selected=(settings['core.user_default_folders'] === "none")) No
|
|
85
97
|
option(value="public_private",
|
|
@@ -87,24 +99,28 @@ form.g-settings-form(role="form")
|
|
|
87
99
|
.form-group
|
|
88
100
|
.checkbox
|
|
89
101
|
label(for="g-core-api-keys")
|
|
90
|
-
input#g-core-api-keys(type="checkbox", checked=settings['core.api_keys']
|
|
102
|
+
input#g-core-api-keys(type="checkbox", checked=settings['core.api_keys'],
|
|
103
|
+
disabled=true)
|
|
91
104
|
| Enable API keys
|
|
92
105
|
.form-group
|
|
93
106
|
.checkbox
|
|
94
107
|
label(for="g-core-enable-password-login")
|
|
95
108
|
input#g-core-enable-password-login(
|
|
96
|
-
type="checkbox", checked=settings['core.enable_password_login']
|
|
109
|
+
type="checkbox", checked=settings['core.enable_password_login'],
|
|
110
|
+
disabled=true)
|
|
97
111
|
| Enable password login
|
|
98
112
|
.g-settings-form-container
|
|
99
113
|
h4 Email Creation
|
|
100
114
|
.form-group
|
|
101
115
|
label(for="g-core-email-from-address") Email from address
|
|
102
116
|
input#g-core-email-from-address.form-control.input-sm(
|
|
117
|
+
disabled=true,
|
|
103
118
|
type="text", value=settings['core.email_from_address'] || '',
|
|
104
119
|
title="The email address the system will use when sending emails.")
|
|
105
120
|
.form-group
|
|
106
121
|
label(for="g-core-email-host") Email host
|
|
107
122
|
input#g-core-email-host.form-control.input-sm(
|
|
123
|
+
disabled=true,
|
|
108
124
|
type="text", value=settings['core.email_host'] || '',
|
|
109
125
|
title="The host email server that is shown as a link in the footer of emails.")
|
|
110
126
|
.g-settings-form-container
|
|
@@ -112,16 +128,19 @@ form.g-settings-form(role="form")
|
|
|
112
128
|
.form-group
|
|
113
129
|
label(for="g-core-smtp-host") SMTP host
|
|
114
130
|
input#g-core-smtp-host.form-control.input-sm(
|
|
131
|
+
disabled=true,
|
|
115
132
|
type="text", value=settings['core.smtp_host'] || '',
|
|
116
133
|
title="The hostname of the SMTP server used to send emails.")
|
|
117
134
|
.form-group
|
|
118
135
|
label(for="g-core-smtp-port") SMTP port
|
|
119
136
|
input#g-core-smtp-port.form-control.input-sm(
|
|
137
|
+
disabled=true,
|
|
120
138
|
type="text", value=settings['core.smtp.port'] || '',
|
|
121
139
|
title="The port number of the SMTP server used to send emails.")
|
|
122
140
|
.form-group
|
|
123
141
|
label(for="g-core-smtp-encryption") SMTP encryption
|
|
124
|
-
select#g-core-smtp-encryption.form-control.input-sm
|
|
142
|
+
select#g-core-smtp-encryption.form-control.input-sm(
|
|
143
|
+
disabled=true)
|
|
125
144
|
option(value="none",
|
|
126
145
|
selected=(settings['core.smtp.encryption'] === "none")) None
|
|
127
146
|
option(value="starttls",
|
|
@@ -131,36 +150,16 @@ form.g-settings-form(role="form")
|
|
|
131
150
|
.form-group
|
|
132
151
|
label(for="g-core-smtp-username") SMTP username
|
|
133
152
|
input#g-core-smtp-username.form-control.input-sm(
|
|
153
|
+
disabled=true,
|
|
134
154
|
type="text", value=settings['core.smtp.username'] || '',
|
|
135
155
|
title="The username, if any, used to authenticate to the SMTP server used to send emails.")
|
|
136
156
|
.form-group
|
|
137
157
|
label(for="g-core-smtp-password") SMTP password
|
|
138
158
|
input#g-core-smtp-password.form-control.input-sm(
|
|
159
|
+
disabled=true,
|
|
139
160
|
type="password", value=settings['core.smtp.password'] || '',
|
|
140
161
|
title="The password, if any, used to authenticate to the SMTP server used to send emails.")
|
|
141
162
|
|
|
142
|
-
.g-settings-form-container
|
|
143
|
-
h4 Routing
|
|
144
|
-
p.
|
|
145
|
-
Altering routes requires a restart of the Girder server to take effect.
|
|
146
|
-
.g-settings-form-container
|
|
147
|
-
h5 Core Routes
|
|
148
|
-
label core_girder
|
|
149
|
-
input.g-core-route-table.form-control.input-sm(
|
|
150
|
-
type="text",
|
|
151
|
-
value=routes['core_girder'] || '',
|
|
152
|
-
data-webroot-name="core_girder",
|
|
153
|
-
title="The path to place core_girder.")
|
|
154
|
-
if routeKeys.length > 2
|
|
155
|
-
.form-group
|
|
156
|
-
h5 Other Routes
|
|
157
|
-
each name in routeKeys.slice(2)
|
|
158
|
-
label= name
|
|
159
|
-
input.g-core-route-table.form-control.input-sm(
|
|
160
|
-
type="text",
|
|
161
|
-
value=routes[name] || '',
|
|
162
|
-
data-webroot-name=name,
|
|
163
|
-
title="The path to place ${name}.")
|
|
164
163
|
#g-configuration-accordion.panel-group
|
|
165
164
|
.panel.panel-default
|
|
166
165
|
.panel-heading(data-toggle="collapse",
|
|
@@ -175,24 +174,17 @@ form.g-settings-form(role="form")
|
|
|
175
174
|
.form-group
|
|
176
175
|
label(for="g-core-server-root") Server root URL
|
|
177
176
|
input#g-core-server-root.form-control.input-sm(
|
|
177
|
+
disabled=true,
|
|
178
178
|
type="text", value=settings['core.server_root'] || '',
|
|
179
179
|
placeholder='Detect automatically')
|
|
180
180
|
.form-group
|
|
181
181
|
label(for="g-core-upload-minimum-chunk-size") Upload minimum chunk size (bytes)
|
|
182
182
|
br
|
|
183
|
-
span This applies to Filesystem
|
|
183
|
+
span This applies to Filesystem assetstores.
|
|
184
184
|
input#g-core-upload-minimum-chunk-size.form-control.input-sm(
|
|
185
|
+
disabled=true,
|
|
185
186
|
type="text", value=settings['core.upload_minimum_chunk_size'] || '',
|
|
186
187
|
title="For large files, the minimum size of all but the last chunk.")
|
|
187
|
-
.form-group
|
|
188
|
-
label Server Notification Stream
|
|
189
|
-
br
|
|
190
|
-
span Disabling this may improve server performance with many concurrent web client users.
|
|
191
|
-
.checkbox
|
|
192
|
-
label(for="g-core-enable-notification-stream")
|
|
193
|
-
input#g-core-enable-notification-stream(
|
|
194
|
-
type="checkbox", checked=(settings['core.enable_notification_stream']))
|
|
195
|
-
| Enabled
|
|
196
188
|
.g-settings-form-container
|
|
197
189
|
h4 CORS
|
|
198
190
|
p.
|
|
@@ -202,17 +194,20 @@ form.g-settings-form(role="form")
|
|
|
202
194
|
.form-group
|
|
203
195
|
label(for="g-core-cors-allow-origin") CORS Allowed Origins
|
|
204
196
|
input#g-core-cors-allow-origin.form-control.input-sm(
|
|
197
|
+
disabled=true,
|
|
205
198
|
type="text", value=settings['core.cors.allow_origin'] || '',
|
|
206
199
|
title="A comma-separated list of allowed base URLs that can make cross-site requests. This may include *.")
|
|
207
200
|
.form-group
|
|
208
201
|
label(for="g-core-cors-allow-methods") CORS Allowed Methods
|
|
209
202
|
input#g-core-cors-allow-methods.form-control.input-sm(
|
|
203
|
+
disabled=true,
|
|
210
204
|
type="text", value=settings['core.cors.allow_methods'] || '',
|
|
211
205
|
placeholder="Default: allow all methods",
|
|
212
206
|
title="A comma-separated list of allowed methods")
|
|
213
207
|
.form-group
|
|
214
208
|
label(for="g-core-cors-allow-headers") CORS Allowed Headers
|
|
215
209
|
input#g-core-cors-allow-headers.form-control.input-sm(
|
|
210
|
+
disabled=true,
|
|
216
211
|
type="text", value=settings['core.cors.allow_headers'] || '',
|
|
217
212
|
title="A comma-separated list of allowed headers.")
|
|
218
213
|
p
|
|
@@ -17,18 +17,6 @@
|
|
|
17
17
|
.form-group
|
|
18
18
|
label.control-label(for="g-edit-fs-perms") File creation permissions (octal)
|
|
19
19
|
input#g-edit-fs-perms.input-sm.form-control(type="text", placeholder="600")
|
|
20
|
-
if assetstore.get('type') === types.GRIDFS
|
|
21
|
-
.form-group
|
|
22
|
-
label.control-label(for="g-edit-gridfs-db") Database name
|
|
23
|
-
input#g-edit-gridfs-db.input-sm.form-control(type="text", placeholder="Database name")
|
|
24
|
-
.form-group
|
|
25
|
-
label.control-label(for="g-edit-gridfs-mongohost") Mongo Host URI
|
|
26
|
-
input#g-edit-gridfs-mongohost.input-sm.form-control(
|
|
27
|
-
type="text", placeholder="Mongo host uri (defaults to the main Girder database)",
|
|
28
|
-
title="The URI is of the form mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]")
|
|
29
|
-
.form-group
|
|
30
|
-
label.control-label(for="g-edit-gridfs-replicaset") Replica Set
|
|
31
|
-
input#g-edit-gridfs-replicaset.input-sm.form-control(type="text", placeholder="Replica set name (blank if not using a replica set)")
|
|
32
20
|
if assetstore.get('type') === types.S3
|
|
33
21
|
.form-group
|
|
34
22
|
label.control-label(for="g-edit-s3-bucket") S3 bucket name
|
|
@@ -60,6 +48,10 @@
|
|
|
60
48
|
label
|
|
61
49
|
input#g-edit-s3-sse(type="checkbox")
|
|
62
50
|
| Server side encryption
|
|
51
|
+
.checkbox
|
|
52
|
+
label
|
|
53
|
+
input#g-edit-s3-accelerated-endpoint(type="checkbox")
|
|
54
|
+
| Allow S3 accelerated endpoint
|
|
63
55
|
if assetstore.get('hasFiles')
|
|
64
56
|
div
|
|
65
57
|
i.icon-attention
|
|
@@ -28,41 +28,6 @@
|
|
|
28
28
|
p#g-new-fs-error.g-validation-failed-message
|
|
29
29
|
input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type="submit", value="Create")
|
|
30
30
|
|
|
31
|
-
.panel.panel-default
|
|
32
|
-
.panel-heading(data-toggle="collapse",
|
|
33
|
-
data-parent="#g-assetstore-accordion",
|
|
34
|
-
data-target="#g-create-gridfs-tab")
|
|
35
|
-
.panel-title
|
|
36
|
-
a
|
|
37
|
-
i.icon-leaf
|
|
38
|
-
span Create new #[b GridFS] assetstore
|
|
39
|
-
#g-create-gridfs-tab.panel-collapse.collapse
|
|
40
|
-
.panel-body
|
|
41
|
-
p.
|
|
42
|
-
This type of assetstore uses
|
|
43
|
-
MongoDB's #[a(target="_blank", href="http://docs.mongodb.org/manual/core/gridfs/") GridFS]
|
|
44
|
-
storage engine. The files should be stored in a separate database
|
|
45
|
-
from the rest of the server's information to avoid locking issues.
|
|
46
|
-
form#g-new-gridfs-form(role="form")
|
|
47
|
-
.form-group
|
|
48
|
-
label.control-label(for="g-new-gridfs-name") Assetstore name
|
|
49
|
-
input#g-new-gridfs-name.input-sm.form-control(type="text", placeholder="Name")
|
|
50
|
-
.form-group
|
|
51
|
-
label.control-label(for="g-new-gridfs-db") Database name
|
|
52
|
-
input#g-new-gridfs-db.input-sm.form-control(
|
|
53
|
-
type="text", placeholder="Database name")
|
|
54
|
-
.form-group
|
|
55
|
-
label.control-label(for="g-new-gridfs-mongohost") Mongo Host URI
|
|
56
|
-
input#g-new-gridfs-mongohost.input-sm.form-control(
|
|
57
|
-
type="text", placeholder="Mongo host uri (defaults to the main Girder database)",
|
|
58
|
-
title="The URI is of the form mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]")
|
|
59
|
-
.form-group
|
|
60
|
-
label.control-label(for="g-new-gridfs-replicaset") Replica Set
|
|
61
|
-
input#g-new-gridfs-replicaset.input-sm.form-control(
|
|
62
|
-
type="text", placeholder="Replica set name (blank if not using a replica set)")
|
|
63
|
-
p#g-new-gridfs-error.g-validation-failed-message
|
|
64
|
-
input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type="submit", value="Create")
|
|
65
|
-
|
|
66
31
|
.panel.panel-default
|
|
67
32
|
.panel-heading(data-toggle="collapse",
|
|
68
33
|
data-parent="#g-assetstore-accordion",
|
|
@@ -113,6 +78,10 @@
|
|
|
113
78
|
label
|
|
114
79
|
input#g-new-s3-sse(type="checkbox")
|
|
115
80
|
| Server side encryption
|
|
81
|
+
.checkbox
|
|
82
|
+
label
|
|
83
|
+
input#g-new-s3-accelerated-endpoint(type="checkbox")
|
|
84
|
+
| Allow S3 accelerated endpoint
|
|
116
85
|
|
|
117
86
|
p#g-new-s3-error.g-validation-failed-message
|
|
118
87
|
input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type="submit", value="Create")
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import _ from 'underscore';
|
|
2
|
+
import Backbone from 'backbone';
|
|
3
|
+
|
|
4
|
+
import { getCurrentToken } from '@girder/core/auth';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The EventStream is an abstraction for server-sent events / long-polling via a
|
|
8
|
+
* per-user event channel endpoint using a WebSocket. When events are
|
|
9
|
+
* received on the websocket channel, this triggers a Backbone event of the form
|
|
10
|
+
* 'g:event.<type>' where <type> is the value of the event type field.
|
|
11
|
+
* Listeners can bind to specific event types on the channel.
|
|
12
|
+
*/
|
|
13
|
+
function EventStream(settings) {
|
|
14
|
+
// Possible states are 'closed', 'stopped', 'started'
|
|
15
|
+
this._state = 'closed';
|
|
16
|
+
|
|
17
|
+
// Create context bindings only once, so they can be referenced when unbinding events
|
|
18
|
+
this._onVisibilityStateChange = _.bind(this._onVisibilityStateChange, this);
|
|
19
|
+
this._onMessage = _.bind(this._onMessage, this);
|
|
20
|
+
this._onError = _.bind(this._onError, this);
|
|
21
|
+
|
|
22
|
+
return _.extend(this, Backbone.Events);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
EventStream.prototype._onVisibilityStateChange = function () {
|
|
26
|
+
if (document.visibilityState === 'visible' && this._state === 'stopped') {
|
|
27
|
+
this._start();
|
|
28
|
+
} else if (document.visibilityState === 'hidden' && this._state === 'started') {
|
|
29
|
+
this._stop();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
EventStream.prototype._onMessage = function (e) {
|
|
34
|
+
let obj;
|
|
35
|
+
try {
|
|
36
|
+
obj = window.JSON.parse(e.data);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
console.error('Invalid JSON from notification stream: ' + e.data + ',' + err);
|
|
39
|
+
this.trigger('g:error', e);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.trigger('g:event.' + obj.type, obj);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
EventStream.prototype._onError = function () {
|
|
46
|
+
// TODO: Handle error
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
EventStream.prototype.open = function () {
|
|
50
|
+
if (!window.EventSource) {
|
|
51
|
+
console.error('EventSource is not supported on this platform.');
|
|
52
|
+
this.trigger('g:eventStream.disable');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (this._state !== 'closed') {
|
|
56
|
+
console.warn('EventStream should be closed.');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this._state = 'stopped';
|
|
61
|
+
this._start();
|
|
62
|
+
|
|
63
|
+
document.addEventListener('visibilitychange', this._onVisibilityStateChange);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
EventStream.prototype._start = function () {
|
|
67
|
+
if (this._state !== 'stopped') {
|
|
68
|
+
console.warn('EventStream should be stopped');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
this._websocket = new WebSocket(`/notifications/me?token=${getCurrentToken()}`);
|
|
73
|
+
this._websocket.onmessage = this._onMessage;
|
|
74
|
+
this._websocket.onerror = this._onError;
|
|
75
|
+
|
|
76
|
+
this._state = 'started';
|
|
77
|
+
this.trigger('g:eventStream.start');
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
EventStream.prototype._stop = function () {
|
|
81
|
+
if (this._state !== 'started') {
|
|
82
|
+
console.warn('EventStream should be started');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this._websocket.close();
|
|
87
|
+
this._websocket = null;
|
|
88
|
+
|
|
89
|
+
this._state = 'stopped';
|
|
90
|
+
this.trigger('g:eventStream.stop');
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
EventStream.prototype.close = function () {
|
|
94
|
+
if (this._state === 'closed') {
|
|
95
|
+
console.warn('EventStream should not be closed');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
document.removeEventListener('visibilitychange', this._onVisibilityStateChange);
|
|
100
|
+
|
|
101
|
+
if (this._state === 'started') {
|
|
102
|
+
this._stop();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
this._state = 'closed';
|
|
106
|
+
this.trigger('g:eventStream.close');
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const eventStream = new EventStream();
|
|
110
|
+
|
|
111
|
+
export default eventStream;
|
|
@@ -251,51 +251,11 @@ prototype._finalizeMultiChunkUpload = function () {
|
|
|
251
251
|
},
|
|
252
252
|
error: null
|
|
253
253
|
}).done((resp) => {
|
|
254
|
-
|
|
255
|
-
var doc = document.implementation.createDocument(null, null, null);
|
|
256
|
-
var root = doc.createElement('CompleteMultipartUpload');
|
|
257
|
-
|
|
258
|
-
_.each(this.eTagList, (etag, partNumber) => {
|
|
259
|
-
var partEl = doc.createElement('Part');
|
|
260
|
-
var partNumberEl = doc.createElement('PartNumber');
|
|
261
|
-
var etagEl = doc.createElement('ETag');
|
|
262
|
-
|
|
263
|
-
partNumberEl.appendChild(doc.createTextNode(partNumber));
|
|
264
|
-
etagEl.appendChild(doc.createTextNode(etag));
|
|
265
|
-
partEl.appendChild(partNumberEl);
|
|
266
|
-
partEl.appendChild(etagEl);
|
|
267
|
-
root.appendChild(partEl);
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
var req = resp.s3FinalizeRequest;
|
|
271
|
-
var xhr = new XMLHttpRequest();
|
|
272
|
-
|
|
273
|
-
xhr.open(req.method, req.url);
|
|
274
|
-
|
|
275
|
-
_.each(req.headers, (v, k) => {
|
|
276
|
-
xhr.setRequestHeader(k, v);
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
xhr.onload = () => {
|
|
280
|
-
if (xhr.status === 200) {
|
|
281
|
-
delete resp.s3FinalizeRequest;
|
|
282
|
-
this.trigger('g:upload.complete', resp);
|
|
283
|
-
} else {
|
|
284
|
-
this.trigger('g:upload.error', {
|
|
285
|
-
message: 'Error occurred uploading to S3 (' + xhr.status + ').'
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
xhr.send(new window.XMLSerializer().serializeToString(root));
|
|
254
|
+
this.trigger('g:upload.complete', resp);
|
|
291
255
|
}).fail((resp) => {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
msg = 'Could not connect to the server.';
|
|
296
|
-
} else {
|
|
297
|
-
msg = 'Upload error during finalize, check console.';
|
|
298
|
-
}
|
|
256
|
+
const msg = resp.status === 0
|
|
257
|
+
? 'Could not connect to the server.'
|
|
258
|
+
: 'Upload error during finalize, check console.';
|
|
299
259
|
this.trigger('g:upload.error', {
|
|
300
260
|
message: msg
|
|
301
261
|
});
|
|
@@ -5,7 +5,8 @@ import events from '@girder/core/events';
|
|
|
5
5
|
import eventStream from '@girder/core/utilities/EventStream';
|
|
6
6
|
|
|
7
7
|
var View = Backbone.View.extend({
|
|
8
|
-
|
|
8
|
+
// eslint-disable-next-line backbone/no-constructor
|
|
9
|
+
constructor: function (opts) {
|
|
9
10
|
if (opts && _.has(opts, 'parentView')) {
|
|
10
11
|
if (opts.parentView) {
|
|
11
12
|
opts.parentView.registerChildView(this);
|
|
@@ -17,9 +17,7 @@ import AssetstoresTemplate from '@girder/core/templates/body/assetstores.pug';
|
|
|
17
17
|
|
|
18
18
|
import '@girder/core/stylesheets/body/assetstores.styl';
|
|
19
19
|
|
|
20
|
-
import '
|
|
21
|
-
import 'as-jqplot/dist/jquery.jqplot.css'; // jquery.jqplot.min.css
|
|
22
|
-
import 'as-jqplot/dist/plugins/jqplot.pieRenderer.js';
|
|
20
|
+
import ApexCharts from 'apexcharts';
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
23
|
* This private data structure is a dynamic way to map assetstore types to the views
|
|
@@ -68,7 +66,7 @@ var AssetstoresView = View.extend({
|
|
|
68
66
|
|
|
69
67
|
_destroyPlots: function () {
|
|
70
68
|
for (const plot of this.plots) {
|
|
71
|
-
plot.
|
|
69
|
+
plot.destroy();
|
|
72
70
|
}
|
|
73
71
|
this.plots = [];
|
|
74
72
|
},
|
|
@@ -116,32 +114,32 @@ var AssetstoresView = View.extend({
|
|
|
116
114
|
['Used (' + formatSize(used) + ')', used],
|
|
117
115
|
['Free (' + formatSize(capacity.free) + ')', capacity.free]
|
|
118
116
|
];
|
|
119
|
-
var plot =
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
shadow: false,
|
|
125
|
-
highlightMouseOver: false,
|
|
126
|
-
showDataLabels: true,
|
|
127
|
-
padding: 5,
|
|
128
|
-
startAngle: 180
|
|
129
|
-
}
|
|
117
|
+
var plot = new ApexCharts(el, {
|
|
118
|
+
series: data.map(d => d[1]),
|
|
119
|
+
chart: {
|
|
120
|
+
type: 'pie',
|
|
121
|
+
animations: { enabled: false }
|
|
130
122
|
},
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
123
|
+
labels: data.map(d => d[0]),
|
|
124
|
+
plotOptions: {
|
|
125
|
+
pie: {
|
|
126
|
+
startAngle: -90,
|
|
127
|
+
endAngle: 270,
|
|
128
|
+
expandOnClick: false,
|
|
129
|
+
dataLabels: {
|
|
130
|
+
enabled: true
|
|
131
|
+
}
|
|
132
|
+
}
|
|
136
133
|
},
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
134
|
+
dataLabels: {
|
|
135
|
+
style: {
|
|
136
|
+
colors: ['#000', '#000']
|
|
137
|
+
},
|
|
138
|
+
dropShadow: {enabled: false},
|
|
142
139
|
},
|
|
143
|
-
|
|
140
|
+
legend: { position: 'right' }
|
|
144
141
|
});
|
|
142
|
+
plot.render();
|
|
145
143
|
this.plots.push(plot);
|
|
146
144
|
},
|
|
147
145
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import $ from 'jquery';
|
|
2
1
|
import _ from 'underscore';
|
|
3
2
|
|
|
4
3
|
import AccessWidget from '@girder/core/views/widgets/AccessWidget';
|
|
@@ -30,18 +29,10 @@ var SystemConfigurationView = View.extend({
|
|
|
30
29
|
var settings = _.map(this.settingsKeys, (key) => {
|
|
31
30
|
const element = this.$('#g-' + key.replace(/[_.]/g, '-'));
|
|
32
31
|
|
|
33
|
-
if (
|
|
34
|
-
return {
|
|
35
|
-
key,
|
|
36
|
-
value: _.object(_.map($('.g-core-route-table'), function (el) {
|
|
37
|
-
return [$(el).data('webrootName'), $(el).val()];
|
|
38
|
-
}))
|
|
39
|
-
};
|
|
40
|
-
} else if (_.contains(
|
|
32
|
+
if (_.contains(
|
|
41
33
|
[
|
|
42
34
|
'core.api_keys',
|
|
43
35
|
'core.enable_password_login',
|
|
44
|
-
'core.enable_notification_stream'
|
|
45
36
|
],
|
|
46
37
|
key
|
|
47
38
|
)) { // booleans via checkboxes
|
|
@@ -77,9 +68,6 @@ var SystemConfigurationView = View.extend({
|
|
|
77
68
|
this.$('#g-settings-error-message').text(resp.responseJSON.message);
|
|
78
69
|
});
|
|
79
70
|
},
|
|
80
|
-
'click #g-core-banner-default-color': function () {
|
|
81
|
-
this.$('#g-core-banner-color').val(this.defaults['core.banner_color']);
|
|
82
|
-
}
|
|
83
71
|
},
|
|
84
72
|
|
|
85
73
|
initialize: function () {
|
|
@@ -104,14 +92,12 @@ var SystemConfigurationView = View.extend({
|
|
|
104
92
|
'core.smtp.username',
|
|
105
93
|
'core.smtp.password',
|
|
106
94
|
'core.upload_minimum_chunk_size',
|
|
107
|
-
'core.enable_notification_stream',
|
|
108
95
|
'core.cors.allow_origin',
|
|
109
96
|
'core.cors.allow_methods',
|
|
110
97
|
'core.cors.allow_headers',
|
|
111
98
|
'core.add_to_group_policy',
|
|
112
99
|
'core.collection_create_policy',
|
|
113
100
|
'core.user_default_folders',
|
|
114
|
-
'core.route_table'
|
|
115
101
|
];
|
|
116
102
|
this.settingsKeys = keys;
|
|
117
103
|
restRequest({
|
|
@@ -129,11 +115,6 @@ var SystemConfigurationView = View.extend({
|
|
|
129
115
|
render: function () {
|
|
130
116
|
this.$el.html(SystemConfigurationTemplate({
|
|
131
117
|
settings: this.settings,
|
|
132
|
-
routes: this.settings['core.route_table'],
|
|
133
|
-
routeKeys: _.sortBy(
|
|
134
|
-
_.keys(this.settings['core.route_table']),
|
|
135
|
-
(a) => a.indexOf('core_') === 0 ? -1 : 0
|
|
136
|
-
),
|
|
137
118
|
JSON: window.JSON
|
|
138
119
|
}));
|
|
139
120
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import AdminView from './AdminView';
|
|
2
|
-
import AssetstoresView from './AssetstoresView';
|
|
2
|
+
import AssetstoresView, { assetstoreImportViewMap } from './AssetstoresView';
|
|
3
3
|
import CollectionView from './CollectionView';
|
|
4
4
|
import CollectionsView from './CollectionsView';
|
|
5
5
|
import FilesystemImportView from './FilesystemImportView';
|
|
@@ -19,6 +19,7 @@ import UsersView from './UsersView';
|
|
|
19
19
|
export {
|
|
20
20
|
AdminView,
|
|
21
21
|
AssetstoresView,
|
|
22
|
+
assetstoreImportViewMap,
|
|
22
23
|
CollectionView,
|
|
23
24
|
CollectionsView,
|
|
24
25
|
FilesystemImportView,
|
|
@@ -26,7 +26,7 @@ var LoginView = View.extend({
|
|
|
26
26
|
const loginName = this.$('#g-login').val();
|
|
27
27
|
const password = this.$('#g-password').val();
|
|
28
28
|
const otpToken = this.$('#g-login-otp-group').hasClass('hidden') ? null : this.$('#g-login-otp').val();
|
|
29
|
-
login(loginName, password,
|
|
29
|
+
login(loginName, password, otpToken)
|
|
30
30
|
.done(() => {
|
|
31
31
|
this.$el.modal('hide');
|
|
32
32
|
})
|