@girder/core 3.2.9 → 5.0.0-a11
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 +58237 -0
- package/dist-lib/girder-core.js.map +1 -0
- package/dist-lib/girder-core.umd.cjs +1573 -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/{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 +54 -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 +35 -41
- package/{templates → dist-lib/src/templates}/widgets/editAssetstoreWidget.pug +0 -12
- package/{templates → dist-lib/src/templates}/widgets/newAssetstore.pug +0 -35
- package/dist-lib/src/utilities/EventStream.js +119 -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 +2 -21
- 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/EditAssetstoreWidget.js +0 -15
- 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 +0 -10
- 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}/AssetstoreCollection.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/EditApiKeyWidget.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
|
|
@@ -79,7 +89,8 @@ form.g-settings-form(role="form")
|
|
|
79
89
|
= JSON.stringify(settings['core.collection_create_policy'])
|
|
80
90
|
.form-group
|
|
81
91
|
label(for="g-core-user-default-folders") Create default folders for new users
|
|
82
|
-
select#g-core-user-default-folders.form-control.input-sm
|
|
92
|
+
select#g-core-user-default-folders.form-control.input-sm(
|
|
93
|
+
disabled=true)
|
|
83
94
|
option(value="none",
|
|
84
95
|
selected=(settings['core.user_default_folders'] === "none")) No
|
|
85
96
|
option(value="public_private",
|
|
@@ -87,24 +98,28 @@ form.g-settings-form(role="form")
|
|
|
87
98
|
.form-group
|
|
88
99
|
.checkbox
|
|
89
100
|
label(for="g-core-api-keys")
|
|
90
|
-
input#g-core-api-keys(type="checkbox", checked=settings['core.api_keys']
|
|
101
|
+
input#g-core-api-keys(type="checkbox", checked=settings['core.api_keys'],
|
|
102
|
+
disabled=true)
|
|
91
103
|
| Enable API keys
|
|
92
104
|
.form-group
|
|
93
105
|
.checkbox
|
|
94
106
|
label(for="g-core-enable-password-login")
|
|
95
107
|
input#g-core-enable-password-login(
|
|
96
|
-
type="checkbox", checked=settings['core.enable_password_login']
|
|
108
|
+
type="checkbox", checked=settings['core.enable_password_login'],
|
|
109
|
+
disabled=true)
|
|
97
110
|
| Enable password login
|
|
98
111
|
.g-settings-form-container
|
|
99
112
|
h4 Email Creation
|
|
100
113
|
.form-group
|
|
101
114
|
label(for="g-core-email-from-address") Email from address
|
|
102
115
|
input#g-core-email-from-address.form-control.input-sm(
|
|
116
|
+
disabled=true,
|
|
103
117
|
type="text", value=settings['core.email_from_address'] || '',
|
|
104
118
|
title="The email address the system will use when sending emails.")
|
|
105
119
|
.form-group
|
|
106
120
|
label(for="g-core-email-host") Email host
|
|
107
121
|
input#g-core-email-host.form-control.input-sm(
|
|
122
|
+
disabled=true,
|
|
108
123
|
type="text", value=settings['core.email_host'] || '',
|
|
109
124
|
title="The host email server that is shown as a link in the footer of emails.")
|
|
110
125
|
.g-settings-form-container
|
|
@@ -112,16 +127,19 @@ form.g-settings-form(role="form")
|
|
|
112
127
|
.form-group
|
|
113
128
|
label(for="g-core-smtp-host") SMTP host
|
|
114
129
|
input#g-core-smtp-host.form-control.input-sm(
|
|
130
|
+
disabled=true,
|
|
115
131
|
type="text", value=settings['core.smtp_host'] || '',
|
|
116
132
|
title="The hostname of the SMTP server used to send emails.")
|
|
117
133
|
.form-group
|
|
118
134
|
label(for="g-core-smtp-port") SMTP port
|
|
119
135
|
input#g-core-smtp-port.form-control.input-sm(
|
|
136
|
+
disabled=true,
|
|
120
137
|
type="text", value=settings['core.smtp.port'] || '',
|
|
121
138
|
title="The port number of the SMTP server used to send emails.")
|
|
122
139
|
.form-group
|
|
123
140
|
label(for="g-core-smtp-encryption") SMTP encryption
|
|
124
|
-
select#g-core-smtp-encryption.form-control.input-sm
|
|
141
|
+
select#g-core-smtp-encryption.form-control.input-sm(
|
|
142
|
+
disabled=true)
|
|
125
143
|
option(value="none",
|
|
126
144
|
selected=(settings['core.smtp.encryption'] === "none")) None
|
|
127
145
|
option(value="starttls",
|
|
@@ -131,36 +149,16 @@ form.g-settings-form(role="form")
|
|
|
131
149
|
.form-group
|
|
132
150
|
label(for="g-core-smtp-username") SMTP username
|
|
133
151
|
input#g-core-smtp-username.form-control.input-sm(
|
|
152
|
+
disabled=true,
|
|
134
153
|
type="text", value=settings['core.smtp.username'] || '',
|
|
135
154
|
title="The username, if any, used to authenticate to the SMTP server used to send emails.")
|
|
136
155
|
.form-group
|
|
137
156
|
label(for="g-core-smtp-password") SMTP password
|
|
138
157
|
input#g-core-smtp-password.form-control.input-sm(
|
|
158
|
+
disabled=true,
|
|
139
159
|
type="password", value=settings['core.smtp.password'] || '',
|
|
140
160
|
title="The password, if any, used to authenticate to the SMTP server used to send emails.")
|
|
141
161
|
|
|
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
162
|
#g-configuration-accordion.panel-group
|
|
165
163
|
.panel.panel-default
|
|
166
164
|
.panel-heading(data-toggle="collapse",
|
|
@@ -175,24 +173,17 @@ form.g-settings-form(role="form")
|
|
|
175
173
|
.form-group
|
|
176
174
|
label(for="g-core-server-root") Server root URL
|
|
177
175
|
input#g-core-server-root.form-control.input-sm(
|
|
176
|
+
disabled=true,
|
|
178
177
|
type="text", value=settings['core.server_root'] || '',
|
|
179
178
|
placeholder='Detect automatically')
|
|
180
179
|
.form-group
|
|
181
180
|
label(for="g-core-upload-minimum-chunk-size") Upload minimum chunk size (bytes)
|
|
182
181
|
br
|
|
183
|
-
span This applies to Filesystem
|
|
182
|
+
span This applies to Filesystem assetstores.
|
|
184
183
|
input#g-core-upload-minimum-chunk-size.form-control.input-sm(
|
|
184
|
+
disabled=true,
|
|
185
185
|
type="text", value=settings['core.upload_minimum_chunk_size'] || '',
|
|
186
186
|
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
187
|
.g-settings-form-container
|
|
197
188
|
h4 CORS
|
|
198
189
|
p.
|
|
@@ -202,17 +193,20 @@ form.g-settings-form(role="form")
|
|
|
202
193
|
.form-group
|
|
203
194
|
label(for="g-core-cors-allow-origin") CORS Allowed Origins
|
|
204
195
|
input#g-core-cors-allow-origin.form-control.input-sm(
|
|
196
|
+
disabled=true,
|
|
205
197
|
type="text", value=settings['core.cors.allow_origin'] || '',
|
|
206
198
|
title="A comma-separated list of allowed base URLs that can make cross-site requests. This may include *.")
|
|
207
199
|
.form-group
|
|
208
200
|
label(for="g-core-cors-allow-methods") CORS Allowed Methods
|
|
209
201
|
input#g-core-cors-allow-methods.form-control.input-sm(
|
|
202
|
+
disabled=true,
|
|
210
203
|
type="text", value=settings['core.cors.allow_methods'] || '',
|
|
211
204
|
placeholder="Default: allow all methods",
|
|
212
205
|
title="A comma-separated list of allowed methods")
|
|
213
206
|
.form-group
|
|
214
207
|
label(for="g-core-cors-allow-headers") CORS Allowed Headers
|
|
215
208
|
input#g-core-cors-allow-headers.form-control.input-sm(
|
|
209
|
+
disabled=true,
|
|
216
210
|
type="text", value=settings['core.cors.allow_headers'] || '',
|
|
217
211
|
title="A comma-separated list of allowed headers.")
|
|
218
212
|
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
|
|
@@ -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",
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import _ from 'underscore';
|
|
2
|
+
import Backbone from 'backbone';
|
|
3
|
+
|
|
4
|
+
import { getCurrentToken } from '@girder/core/auth';
|
|
5
|
+
|
|
6
|
+
const appElement = document.getElementById('app');
|
|
7
|
+
let apiRoot = (appElement && appElement.getAttribute('root')) || '';
|
|
8
|
+
apiRoot += (apiRoot.endsWith('/') ? '' : '/') + 'api/v1';
|
|
9
|
+
if (!apiRoot.startsWith('/') && apiRoot.indexOf(':') < 0) {
|
|
10
|
+
apiRoot = '/' + apiRoot;
|
|
11
|
+
}
|
|
12
|
+
let notifyRoot = apiRoot.endsWith('/api/v1') ? apiRoot.slice(0, -6) : apiRoot;
|
|
13
|
+
notifyRoot = notifyRoot.endsWith('/') ? notifyRoot.slice(0, -1) : notifyRoot;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The EventStream is an abstraction for server-sent events / long-polling via a
|
|
17
|
+
* per-user event channel endpoint using a WebSocket. When events are
|
|
18
|
+
* received on the websocket channel, this triggers a Backbone event of the form
|
|
19
|
+
* 'g:event.<type>' where <type> is the value of the event type field.
|
|
20
|
+
* Listeners can bind to specific event types on the channel.
|
|
21
|
+
*/
|
|
22
|
+
function EventStream(settings) {
|
|
23
|
+
// Possible states are 'closed', 'stopped', 'started'
|
|
24
|
+
this._state = 'closed';
|
|
25
|
+
|
|
26
|
+
// Create context bindings only once, so they can be referenced when unbinding events
|
|
27
|
+
this._onVisibilityStateChange = _.bind(this._onVisibilityStateChange, this);
|
|
28
|
+
this._onMessage = _.bind(this._onMessage, this);
|
|
29
|
+
this._onError = _.bind(this._onError, this);
|
|
30
|
+
|
|
31
|
+
return _.extend(this, Backbone.Events);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
EventStream.prototype._onVisibilityStateChange = function () {
|
|
35
|
+
if (document.visibilityState === 'visible' && this._state === 'stopped') {
|
|
36
|
+
this._start();
|
|
37
|
+
} else if (document.visibilityState === 'hidden' && this._state === 'started') {
|
|
38
|
+
this._stop();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
EventStream.prototype._onMessage = function (e) {
|
|
43
|
+
let obj;
|
|
44
|
+
try {
|
|
45
|
+
obj = window.JSON.parse(e.data);
|
|
46
|
+
} catch (err) {
|
|
47
|
+
console.error('Invalid JSON from notification stream: ' + e.data + ',' + err);
|
|
48
|
+
this.trigger('g:error', e);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.trigger('g:event.' + obj.type, obj);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
EventStream.prototype._onError = function () {
|
|
55
|
+
// TODO: Handle error
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
EventStream.prototype.open = function () {
|
|
59
|
+
if (!window.EventSource) {
|
|
60
|
+
console.error('EventSource is not supported on this platform.');
|
|
61
|
+
this.trigger('g:eventStream.disable');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (this._state !== 'closed') {
|
|
65
|
+
console.warn('EventStream should be closed.');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
this._state = 'stopped';
|
|
70
|
+
this._start();
|
|
71
|
+
|
|
72
|
+
document.addEventListener('visibilitychange', this._onVisibilityStateChange);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
EventStream.prototype._start = function () {
|
|
76
|
+
if (this._state !== 'stopped') {
|
|
77
|
+
console.warn('EventStream should be stopped');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this._websocket = new WebSocket(`${notifyRoot}/notifications/me?token=${getCurrentToken()}`);
|
|
81
|
+
this._websocket.onmessage = this._onMessage;
|
|
82
|
+
this._websocket.onerror = this._onError;
|
|
83
|
+
|
|
84
|
+
this._state = 'started';
|
|
85
|
+
this.trigger('g:eventStream.start');
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
EventStream.prototype._stop = function () {
|
|
89
|
+
if (this._state !== 'started') {
|
|
90
|
+
console.warn('EventStream should be started');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
this._websocket.close();
|
|
95
|
+
this._websocket = null;
|
|
96
|
+
|
|
97
|
+
this._state = 'stopped';
|
|
98
|
+
this.trigger('g:eventStream.stop');
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
EventStream.prototype.close = function () {
|
|
102
|
+
if (this._state === 'closed') {
|
|
103
|
+
console.warn('EventStream should not be closed');
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
document.removeEventListener('visibilitychange', this._onVisibilityStateChange);
|
|
108
|
+
|
|
109
|
+
if (this._state === 'started') {
|
|
110
|
+
this._stop();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
this._state = 'closed';
|
|
114
|
+
this.trigger('g:eventStream.close');
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const eventStream = new EventStream();
|
|
118
|
+
|
|
119
|
+
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
|
|
|
@@ -179,7 +160,7 @@ var SystemConfigurationView = View.extend({
|
|
|
179
160
|
_covertCollectionCreationPolicy: function () {
|
|
180
161
|
// get collection creation policy from AccessWidget and format the result properly
|
|
181
162
|
var settingValue = null;
|
|
182
|
-
if (this.$('.g-setting-switch').bootstrapSwitch('state')) {
|
|
163
|
+
if (this.$('.g-setting-switch').bootstrapSwitch('state') && this.accessWidget) {
|
|
183
164
|
settingValue = { open: this.$('.g-setting-switch').bootstrapSwitch('state') };
|
|
184
165
|
var accessList = this.accessWidget.getAccessList();
|
|
185
166
|
_.each(_.keys(accessList), (key) => {
|
|
@@ -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
|
})
|
|
@@ -5,7 +5,8 @@ import View from '@girder/core/views/View';
|
|
|
5
5
|
|
|
6
6
|
import dateTimeRangeWidgetTemplate from '@girder/core/templates/widgets/dateTimeRangeWidget.pug';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
// Momentjs is not require()'d in the way this library expects
|
|
9
|
+
// import 'eonasdan-bootstrap-datetimepicker'; // /src/js/bootstrap-datetimepicker.js'
|
|
9
10
|
import 'eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.css';
|
|
10
11
|
|
|
11
12
|
/**
|