@girder/core 5.0.0-beta.1 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/dist-lib/Girder_Favicon.png +0 -0
  2. package/dist-lib/Girder_Mark.png +0 -0
  3. package/dist-lib/girder-core.js +48560 -0
  4. package/dist-lib/girder-core.js.map +1 -0
  5. package/dist-lib/girder-core.umd.cjs +630 -0
  6. package/dist-lib/girder-core.umd.cjs.map +1 -0
  7. package/dist-lib/index.d.ts +1 -0
  8. package/dist-lib/src/auth.js +112 -0
  9. package/dist-lib/src/collections/ApiKeyCollection.js +9 -0
  10. package/dist-lib/src/collections/AssetstoreCollection.js +9 -0
  11. package/dist-lib/src/collections/Collection.js +295 -0
  12. package/dist-lib/src/collections/CollectionCollection.js +9 -0
  13. package/dist-lib/src/collections/FileCollection.js +11 -0
  14. package/dist-lib/src/collections/FolderCollection.js +11 -0
  15. package/dist-lib/src/collections/GroupCollection.js +9 -0
  16. package/dist-lib/src/collections/ItemCollection.js +11 -0
  17. package/dist-lib/src/collections/UserCollection.js +24 -0
  18. package/dist-lib/src/collections/index.js +21 -0
  19. package/dist-lib/src/constants.js +32 -0
  20. package/dist-lib/src/dialog.js +128 -0
  21. package/dist-lib/src/events.js +6 -0
  22. package/dist-lib/src/index.d.ts +23 -0
  23. package/dist-lib/src/index.ts +80 -0
  24. package/dist-lib/src/main.ts +45 -0
  25. package/dist-lib/src/misc.js +260 -0
  26. package/dist-lib/src/models/AccessControlledModel.js +76 -0
  27. package/dist-lib/src/models/ApiKeyModel.js +31 -0
  28. package/dist-lib/src/models/AssetstoreModel.js +43 -0
  29. package/dist-lib/src/models/CollectionCreationPolicyModel.js +20 -0
  30. package/dist-lib/src/models/CollectionModel.js +12 -0
  31. package/dist-lib/src/models/FileModel.js +310 -0
  32. package/dist-lib/src/models/FolderModel.js +33 -0
  33. package/dist-lib/src/models/GroupModel.js +197 -0
  34. package/dist-lib/src/models/ItemModel.js +72 -0
  35. package/dist-lib/src/models/MetadataMixin.js +88 -0
  36. package/dist-lib/src/models/Model.js +187 -0
  37. package/dist-lib/src/models/UserModel.js +189 -0
  38. package/dist-lib/src/models/index.js +25 -0
  39. package/dist-lib/src/pluginUtils.js +11 -0
  40. package/dist-lib/src/rest.js +221 -0
  41. package/dist-lib/src/router.js +58 -0
  42. package/dist-lib/src/routes.js +229 -0
  43. package/dist-lib/src/stylesheets/apidocs/apidocs.styl +50 -0
  44. package/dist-lib/src/stylesheets/body/adminConsole.styl +21 -0
  45. package/dist-lib/src/stylesheets/body/assetstores.styl +46 -0
  46. package/dist-lib/src/stylesheets/body/collectionList.styl +39 -0
  47. package/dist-lib/src/stylesheets/body/collectionPage.styl +6 -0
  48. package/dist-lib/src/stylesheets/body/frontPage.styl +48 -0
  49. package/dist-lib/src/stylesheets/body/groupList.styl +43 -0
  50. package/dist-lib/src/stylesheets/body/groupPage.styl +116 -0
  51. package/dist-lib/src/stylesheets/body/itemPage.styl +81 -0
  52. package/dist-lib/src/stylesheets/body/plugins.styl +61 -0
  53. package/dist-lib/src/stylesheets/body/searchResultsList.styl +51 -0
  54. package/dist-lib/src/stylesheets/body/systemConfig.styl +56 -0
  55. package/dist-lib/src/stylesheets/body/userAccount.styl +57 -0
  56. package/dist-lib/src/stylesheets/body/userList.styl +79 -0
  57. package/dist-lib/src/stylesheets/body/userPage.styl +6 -0
  58. package/dist-lib/src/stylesheets/layout/footer.styl +19 -0
  59. package/dist-lib/src/stylesheets/layout/global.styl +154 -0
  60. package/dist-lib/src/stylesheets/layout/globalNav.styl +89 -0
  61. package/dist-lib/src/stylesheets/layout/header.styl +29 -0
  62. package/dist-lib/src/stylesheets/layout/headerUser.styl +33 -0
  63. package/dist-lib/src/stylesheets/layout/layout.styl +75 -0
  64. package/dist-lib/src/stylesheets/layout/layoutVars.styl +9 -0
  65. package/dist-lib/src/stylesheets/layout/loading.styl +37 -0
  66. package/dist-lib/src/stylesheets/layout/progressArea.styl +17 -0
  67. package/dist-lib/src/stylesheets/widgets/accessWidget.styl +106 -0
  68. package/dist-lib/src/stylesheets/widgets/browserWidget.styl +9 -0
  69. package/dist-lib/src/stylesheets/widgets/hierarchyWidget.styl +188 -0
  70. package/dist-lib/src/stylesheets/widgets/markdownWidget.styl +92 -0
  71. package/dist-lib/src/stylesheets/widgets/metadataWidget.styl +92 -0
  72. package/dist-lib/src/stylesheets/widgets/searchFieldWidget.styl +70 -0
  73. package/dist-lib/src/stylesheets/widgets/taskProgress.styl +41 -0
  74. package/dist-lib/src/stylesheets/widgets/timelineWidget.styl +41 -0
  75. package/dist-lib/src/stylesheets/widgets/uploadWidget.styl +43 -0
  76. package/dist-lib/src/stylesheets/widgets/userOtpManagementWidget.styl +159 -0
  77. package/dist-lib/src/templates/body/adminConsole.pug +13 -0
  78. package/dist-lib/src/templates/body/assetstores.pug +83 -0
  79. package/dist-lib/src/templates/body/collectionList.pug +40 -0
  80. package/dist-lib/src/templates/body/collectionPage.pug +36 -0
  81. package/dist-lib/src/templates/body/filesystemImport.pug +41 -0
  82. package/dist-lib/src/templates/body/frontPage.pug +84 -0
  83. package/dist-lib/src/templates/body/groupList.pug +30 -0
  84. package/dist-lib/src/templates/body/groupPage.pug +116 -0
  85. package/dist-lib/src/templates/body/itemPage.pug +61 -0
  86. package/dist-lib/src/templates/body/plugins.pug +20 -0
  87. package/dist-lib/src/templates/body/s3Import.pug +35 -0
  88. package/dist-lib/src/templates/body/searchResults.pug +15 -0
  89. package/dist-lib/src/templates/body/searchResultsType.pug +13 -0
  90. package/dist-lib/src/templates/body/systemConfiguration.pug +199 -0
  91. package/dist-lib/src/templates/body/userAccount.pug +83 -0
  92. package/dist-lib/src/templates/body/userList.pug +43 -0
  93. package/dist-lib/src/templates/body/userPage.pug +40 -0
  94. package/dist-lib/src/templates/layout/alert.pug +5 -0
  95. package/dist-lib/src/templates/layout/layout.pug +12 -0
  96. package/dist-lib/src/templates/layout/layoutFooter.pug +11 -0
  97. package/dist-lib/src/templates/layout/layoutGlobalNav.pug +7 -0
  98. package/dist-lib/src/templates/layout/layoutHeader.pug +8 -0
  99. package/dist-lib/src/templates/layout/layoutHeaderUser.pug +26 -0
  100. package/dist-lib/src/templates/layout/layoutProgressArea.pug +1 -0
  101. package/dist-lib/src/templates/layout/loginDialog.pug +30 -0
  102. package/dist-lib/src/templates/layout/registerDialog.pug +35 -0
  103. package/dist-lib/src/templates/layout/resetPasswordDialog.pug +25 -0
  104. package/dist-lib/src/templates/widgets/accessEditor.pug +23 -0
  105. package/dist-lib/src/templates/widgets/accessEditorMixins.pug +57 -0
  106. package/dist-lib/src/templates/widgets/accessEditorNonModal.pug +11 -0
  107. package/dist-lib/src/templates/widgets/accessEntry.pug +32 -0
  108. package/dist-lib/src/templates/widgets/apiKeyList.pug +50 -0
  109. package/dist-lib/src/templates/widgets/browserWidget.pug +32 -0
  110. package/dist-lib/src/templates/widgets/checkedActionsMenu.pug +46 -0
  111. package/dist-lib/src/templates/widgets/collectionInfoDialog.pug +37 -0
  112. package/dist-lib/src/templates/widgets/confirmDialog.pug +14 -0
  113. package/dist-lib/src/templates/widgets/dateTimeRangeWidget.pug +20 -0
  114. package/dist-lib/src/templates/widgets/dateTimeWidget.pug +8 -0
  115. package/dist-lib/src/templates/widgets/editApiKeyWidget.pug +43 -0
  116. package/dist-lib/src/templates/widgets/editAssetstoreWidget.pug +66 -0
  117. package/dist-lib/src/templates/widgets/editCollectionWidget.pug +27 -0
  118. package/dist-lib/src/templates/widgets/editFileWidget.pug +21 -0
  119. package/dist-lib/src/templates/widgets/editFolderWidget.pug +27 -0
  120. package/dist-lib/src/templates/widgets/editGroupWidget.pug +54 -0
  121. package/dist-lib/src/templates/widgets/editItemWidget.pug +27 -0
  122. package/dist-lib/src/templates/widgets/fileInfoDialog.pug +33 -0
  123. package/dist-lib/src/templates/widgets/fileList.pug +33 -0
  124. package/dist-lib/src/templates/widgets/folderInfoDialog.pug +42 -0
  125. package/dist-lib/src/templates/widgets/folderList.pug +21 -0
  126. package/dist-lib/src/templates/widgets/groupAdminList.pug +33 -0
  127. package/dist-lib/src/templates/widgets/groupInviteDialog.pug +76 -0
  128. package/dist-lib/src/templates/widgets/groupInviteList.pug +14 -0
  129. package/dist-lib/src/templates/widgets/groupMemberList.pug +39 -0
  130. package/dist-lib/src/templates/widgets/groupModList.pug +23 -0
  131. package/dist-lib/src/templates/widgets/hierarchyBreadcrumb.pug +37 -0
  132. package/dist-lib/src/templates/widgets/hierarchyPaginated.pug +19 -0
  133. package/dist-lib/src/templates/widgets/hierarchyWidget.pug +96 -0
  134. package/dist-lib/src/templates/widgets/itemBreadcrumb.pug +16 -0
  135. package/dist-lib/src/templates/widgets/itemList.pug +27 -0
  136. package/dist-lib/src/templates/widgets/jsonMetadatumEditWidget.pug +13 -0
  137. package/dist-lib/src/templates/widgets/jsonMetadatumView.pug +6 -0
  138. package/dist-lib/src/templates/widgets/loadingAnimation.pug +4 -0
  139. package/dist-lib/src/templates/widgets/markdownWidget.pug +34 -0
  140. package/dist-lib/src/templates/widgets/metadataWidget.pug +16 -0
  141. package/dist-lib/src/templates/widgets/metadatumEditWidget.pug +15 -0
  142. package/dist-lib/src/templates/widgets/metadatumView.pug +5 -0
  143. package/dist-lib/src/templates/widgets/newAssetstore.pug +83 -0
  144. package/dist-lib/src/templates/widgets/paginateWidget.pug +7 -0
  145. package/dist-lib/src/templates/widgets/pluginConfigBreadcrumb.pug +13 -0
  146. package/dist-lib/src/templates/widgets/rootSelectorWidget.pug +13 -0
  147. package/dist-lib/src/templates/widgets/searchField.pug +10 -0
  148. package/dist-lib/src/templates/widgets/searchHelp.pug +12 -0
  149. package/dist-lib/src/templates/widgets/searchModeSelect.pug +9 -0
  150. package/dist-lib/src/templates/widgets/searchResults.pug +14 -0
  151. package/dist-lib/src/templates/widgets/sortCollectionWidget.pug +14 -0
  152. package/dist-lib/src/templates/widgets/taskProgress.pug +16 -0
  153. package/dist-lib/src/templates/widgets/timeline.pug +15 -0
  154. package/dist-lib/src/templates/widgets/uploadWidget.pug +15 -0
  155. package/dist-lib/src/templates/widgets/uploadWidgetMixins.pug +31 -0
  156. package/dist-lib/src/templates/widgets/uploadWidgetNonModal.pug +10 -0
  157. package/dist-lib/src/templates/widgets/userOtpBegin.pug +4 -0
  158. package/dist-lib/src/templates/widgets/userOtpDisable.pug +6 -0
  159. package/dist-lib/src/templates/widgets/userOtpEnable.pug +44 -0
  160. package/dist-lib/src/utilities/EventStream.js +177 -0
  161. package/dist-lib/src/utilities/PluginUtils.js +36 -0
  162. package/dist-lib/src/utilities/S3UploadHandler.js +303 -0
  163. package/dist-lib/src/utilities/index.js +9 -0
  164. package/dist-lib/src/utilities/jquery/girderEnable.js +19 -0
  165. package/dist-lib/src/utilities/jquery/girderModal.js +48 -0
  166. package/dist-lib/src/version.js +6 -0
  167. package/dist-lib/src/views/App.js +359 -0
  168. package/dist-lib/src/views/View.js +79 -0
  169. package/dist-lib/src/views/body/AdminView.js +29 -0
  170. package/dist-lib/src/views/body/AssetstoresView.js +234 -0
  171. package/dist-lib/src/views/body/CollectionView.js +188 -0
  172. package/dist-lib/src/views/body/CollectionsView.js +120 -0
  173. package/dist-lib/src/views/body/FilesystemImportView.js +83 -0
  174. package/dist-lib/src/views/body/FolderView.js +54 -0
  175. package/dist-lib/src/views/body/FrontPageView.js +47 -0
  176. package/dist-lib/src/views/body/GroupView.js +336 -0
  177. package/dist-lib/src/views/body/GroupsView.js +106 -0
  178. package/dist-lib/src/views/body/ItemView.js +177 -0
  179. package/dist-lib/src/views/body/PluginsView.js +73 -0
  180. package/dist-lib/src/views/body/S3ImportView.js +80 -0
  181. package/dist-lib/src/views/body/SearchResultsView.js +162 -0
  182. package/dist-lib/src/views/body/SystemConfigurationView.js +182 -0
  183. package/dist-lib/src/views/body/UserAccountView.js +179 -0
  184. package/dist-lib/src/views/body/UserView.js +165 -0
  185. package/dist-lib/src/views/body/UsersView.js +124 -0
  186. package/dist-lib/src/views/body/index.js +37 -0
  187. package/dist-lib/src/views/index.js +13 -0
  188. package/dist-lib/src/views/layout/FooterView.js +29 -0
  189. package/dist-lib/src/views/layout/GlobalNavView.js +103 -0
  190. package/dist-lib/src/views/layout/HeaderUserView.js +45 -0
  191. package/dist-lib/src/views/layout/HeaderView.js +83 -0
  192. package/dist-lib/src/views/layout/LoginView.js +100 -0
  193. package/dist-lib/src/views/layout/ProgressListView.js +70 -0
  194. package/dist-lib/src/views/layout/RegisterView.js +101 -0
  195. package/dist-lib/src/views/layout/ResetPasswordView.js +70 -0
  196. package/dist-lib/src/views/layout/index.js +19 -0
  197. package/dist-lib/src/views/widgets/AccessWidget.js +427 -0
  198. package/dist-lib/src/views/widgets/ApiKeyListWidget.js +140 -0
  199. package/dist-lib/src/views/widgets/BrowserWidget.js +317 -0
  200. package/dist-lib/src/views/widgets/CheckedMenuWidget.js +68 -0
  201. package/dist-lib/src/views/widgets/CollectionInfoWidget.js +40 -0
  202. package/dist-lib/src/views/widgets/DateTimeRangeWidget.js +180 -0
  203. package/dist-lib/src/views/widgets/DateTimeWidget.js +110 -0
  204. package/dist-lib/src/views/widgets/EditApiKeyWidget.js +122 -0
  205. package/dist-lib/src/views/widgets/EditAssetstoreWidget.js +133 -0
  206. package/dist-lib/src/views/widgets/EditCollectionWidget.js +93 -0
  207. package/dist-lib/src/views/widgets/EditFileWidget.js +56 -0
  208. package/dist-lib/src/views/widgets/EditFolderWidget.js +116 -0
  209. package/dist-lib/src/views/widgets/EditGroupWidget.js +125 -0
  210. package/dist-lib/src/views/widgets/EditItemWidget.js +110 -0
  211. package/dist-lib/src/views/widgets/FileInfoWidget.js +26 -0
  212. package/dist-lib/src/views/widgets/FileListWidget.js +151 -0
  213. package/dist-lib/src/views/widgets/FolderInfoWidget.js +39 -0
  214. package/dist-lib/src/views/widgets/FolderListWidget.js +106 -0
  215. package/dist-lib/src/views/widgets/GroupAdminsWidget.js +88 -0
  216. package/dist-lib/src/views/widgets/GroupInvitesWidget.js +56 -0
  217. package/dist-lib/src/views/widgets/GroupMembersWidget.js +185 -0
  218. package/dist-lib/src/views/widgets/GroupModsWidget.js +77 -0
  219. package/dist-lib/src/views/widgets/HierarchyWidget.js +1097 -0
  220. package/dist-lib/src/views/widgets/ItemBreadcrumbWidget.js +38 -0
  221. package/dist-lib/src/views/widgets/ItemListWidget.js +345 -0
  222. package/dist-lib/src/views/widgets/LoadingAnimation.js +17 -0
  223. package/dist-lib/src/views/widgets/MarkdownWidget.js +217 -0
  224. package/dist-lib/src/views/widgets/MetadataWidget.js +508 -0
  225. package/dist-lib/src/views/widgets/NewAssetstoreWidget.js +71 -0
  226. package/dist-lib/src/views/widgets/PaginateWidget.js +37 -0
  227. package/dist-lib/src/views/widgets/PluginConfigBreadcrumbWidget.js +33 -0
  228. package/dist-lib/src/views/widgets/RootSelectorWidget.js +192 -0
  229. package/dist-lib/src/views/widgets/SearchFieldWidget.js +365 -0
  230. package/dist-lib/src/views/widgets/SearchPaginateWidget.js +149 -0
  231. package/dist-lib/src/views/widgets/SortCollectionWidget.js +53 -0
  232. package/dist-lib/src/views/widgets/TaskProgressWidget.js +91 -0
  233. package/dist-lib/src/views/widgets/TimelineWidget.js +155 -0
  234. package/dist-lib/src/views/widgets/UploadWidget.js +340 -0
  235. package/dist-lib/src/views/widgets/UserOtpManagementWidget.js +105 -0
  236. package/dist-lib/src/views/widgets/index.js +75 -0
  237. package/dist-lib/src/vite-env.d.ts +5 -0
  238. package/dist-lib/style.css +16 -0
  239. package/package.json +1 -1
@@ -0,0 +1,188 @@
1
+ import $ from 'jquery';
2
+ import _ from 'underscore';
3
+
4
+ import AccessWidget from '@girder/core/views/widgets/AccessWidget';
5
+ import CollectionModel from '@girder/core/models/CollectionModel';
6
+ import EditCollectionWidget from '@girder/core/views/widgets/EditCollectionWidget';
7
+ import FolderModel from '@girder/core/models/FolderModel';
8
+ import HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';
9
+ import router from '@girder/core/router';
10
+ import View from '@girder/core/views/View';
11
+ import { AccessType } from '@girder/core/constants';
12
+ import { cancelRestRequests } from '@girder/core/rest';
13
+ import { confirm } from '@girder/core/dialog';
14
+ import { renderMarkdown, formatSize } from '@girder/core/misc';
15
+ import events from '@girder/core/events';
16
+
17
+ import CollectionPageTemplate from '@girder/core/templates/body/collectionPage.pug';
18
+
19
+ import '@girder/core/stylesheets/body/collectionPage.styl';
20
+
21
+ import 'bootstrap/js/dropdown';
22
+
23
+ /**
24
+ * This view shows a single collection's page.
25
+ */
26
+ var CollectionView = View.extend({
27
+ events: {
28
+ 'click .g-edit-collection': 'editCollection',
29
+ 'click .g-collection-access-control': 'editAccess',
30
+ 'click .g-delete-collection': 'deleteConfirmation'
31
+ },
32
+
33
+ initialize: function (settings) {
34
+ cancelRestRequests('fetch');
35
+
36
+ this.upload = settings.upload || false;
37
+ this.access = settings.access || false;
38
+ this.edit = settings.edit || false;
39
+ this.folderAccess = settings.folderAccess || false;
40
+ this.folderCreate = settings.folderCreate || false;
41
+ this.folderEdit = settings.folderEdit || false;
42
+ this.itemCreate = settings.itemCreate || false;
43
+
44
+ // If collection model is already passed, there is no need to fetch.
45
+ if (settings.collection) {
46
+ this.model = settings.collection;
47
+
48
+ if (settings.folderId) {
49
+ this.folder = new FolderModel();
50
+ this.folder.set({
51
+ _id: settings.folderId
52
+ }).on('g:fetched', function () {
53
+ this.render();
54
+ }, this).on('g:error', function () {
55
+ this.folder = null;
56
+ this.render();
57
+ }, this).fetch();
58
+ } else {
59
+ this.render();
60
+ }
61
+ } else if (settings.id) {
62
+ this.model = new CollectionModel();
63
+ this.model.set('_id', settings.id);
64
+
65
+ this.model.on('g:fetched', function () {
66
+ this.render();
67
+ }, this).fetch();
68
+ }
69
+ },
70
+
71
+ editCollection: function () {
72
+ var container = $('#g-dialog-container');
73
+
74
+ if (!this.editCollectionWidget) {
75
+ this.editCollectionWidget = new EditCollectionWidget({
76
+ el: container,
77
+ model: this.model,
78
+ parentView: this
79
+ }).on('g:saved', function () {
80
+ this.render();
81
+ }, this);
82
+ }
83
+ this.editCollectionWidget.render();
84
+ },
85
+
86
+ render: function () {
87
+ this.$el.html(CollectionPageTemplate({
88
+ collection: this.model,
89
+ AccessType: AccessType,
90
+ renderMarkdown: renderMarkdown
91
+ }));
92
+
93
+ if (!this.hierarchyWidget) {
94
+ // The HierarchyWidget will self-render when instantiated
95
+ this.hierarchyWidget = new HierarchyWidget({
96
+ el: this.$('.g-collection-hierarchy-container'),
97
+ parentModel: this.folder || this.model,
98
+ upload: this.upload,
99
+ folderAccess: this.folderAccess,
100
+ folderEdit: this.folderEdit,
101
+ folderCreate: this.folderCreate,
102
+ itemCreate: this.itemCreate,
103
+ parentView: this
104
+ }).on('g:setCurrentModel', () => {
105
+ // When a user descends into the hierarchy, hide the collection
106
+ // actions list to avoid confusion.
107
+ this.$('.g-collection-header .g-collection-actions-button').hide();
108
+ });
109
+ } else {
110
+ this.hierarchyWidget
111
+ .setElement(this.$('.g-collection-hierarchy-container'))
112
+ .render();
113
+ }
114
+
115
+ this.upload = false;
116
+ this.folderAccess = false;
117
+ this.folderEdit = false;
118
+ this.folderCreate = false;
119
+ this.itemCreate = false;
120
+
121
+ if (this.edit) {
122
+ this.editCollection();
123
+ } else if (this.access) {
124
+ this.editAccess();
125
+ }
126
+
127
+ return this;
128
+ },
129
+
130
+ editAccess: function () {
131
+ new AccessWidget({
132
+ el: $('#g-dialog-container'),
133
+ modelType: 'collection',
134
+ model: this.model,
135
+ parentView: this
136
+ }).on('g:accessListSaved', function (params) {
137
+ if (params.recurse) {
138
+ this.hierarchyWidget.refreshFolderList();
139
+ }
140
+ }, this);
141
+ },
142
+
143
+ deleteConfirmation: function () {
144
+ let params = {
145
+ text: 'Are you sure you want to delete the collection <b>' +
146
+ this.model.escape('name') + this.model.escape('nFolders') + '</b>?',
147
+ yesText: 'Delete',
148
+ escapedHtml: true,
149
+ confirmCallback: () => {
150
+ this.model.on('g:deleted', function () {
151
+ events.trigger('g:alert', {
152
+ icon: 'ok',
153
+ text: 'Collection deleted.',
154
+ type: 'success',
155
+ timeout: 4000
156
+ });
157
+ router.navigate('collections', { trigger: true });
158
+ }).destroy();
159
+ }
160
+ };
161
+ if (this.model.get('nFolders') !== 0 || this.model.get('size') !== 0) {
162
+ params = _.extend({
163
+ additionalText: '<b>' + this.model.escape('name') + '</b>' +
164
+ ' contains <b>' + this.model.escape('nFolders') +
165
+ ' folders</b> taking up <b>' +
166
+ formatSize(parseInt(this.model.get('size'), 10)) + '</b>',
167
+ msgConfirmation: true,
168
+ name: this.model.escape('name')
169
+ }, params);
170
+ }
171
+ confirm(params);
172
+ }
173
+ }, {
174
+ /**
175
+ * Helper function for fetching the user and rendering the view with
176
+ * an arbitrary set of extra parameters.
177
+ */
178
+ fetchAndInit: function (cid, params) {
179
+ var collection = new CollectionModel();
180
+ collection.set({ _id: cid }).on('g:fetched', function () {
181
+ events.trigger('g:navigateTo', CollectionView, _.extend({
182
+ collection: collection
183
+ }, params || {}));
184
+ }, this).fetch();
185
+ }
186
+ });
187
+
188
+ export default CollectionView;
@@ -0,0 +1,120 @@
1
+ import $ from 'jquery';
2
+
3
+ import CollectionCollection from '@girder/core/collections/CollectionCollection';
4
+ import CollectionModel from '@girder/core/models/CollectionModel';
5
+ import EditCollectionWidget from '@girder/core/views/widgets/EditCollectionWidget';
6
+ import PaginateWidget from '@girder/core/views/widgets/PaginateWidget';
7
+ import router from '@girder/core/router';
8
+ import SearchFieldWidget from '@girder/core/views/widgets/SearchFieldWidget';
9
+ import View from '@girder/core/views/View';
10
+ import { cancelRestRequests } from '@girder/core/rest';
11
+ import { formatDate, formatSize, renderMarkdown, DATE_MINUTE } from '@girder/core/misc';
12
+ import { getCurrentUser } from '@girder/core/auth';
13
+
14
+ import CollectionListTemplate from '@girder/core/templates/body/collectionList.pug';
15
+
16
+ import '@girder/core/stylesheets/body/collectionList.styl';
17
+
18
+ /**
19
+ * This view lists the collections.
20
+ */
21
+ var CollectionsView = View.extend({
22
+ events: {
23
+ 'click a.g-collection-link': function (event) {
24
+ var cid = $(event.currentTarget).attr('g-collection-cid');
25
+ router.navigate('collection/' + this.collection.get(cid).id, { trigger: true });
26
+ },
27
+ 'click button.g-collection-create-button': 'createCollectionDialog',
28
+ 'submit .g-collections-search-form': function (event) {
29
+ event.preventDefault();
30
+ },
31
+ 'click .g-show-description': '_toggleDescription'
32
+ },
33
+
34
+ initialize: function (settings) {
35
+ cancelRestRequests('fetch');
36
+ this.collection = new CollectionCollection();
37
+ this.collection.on('g:changed', function () {
38
+ this.render();
39
+ }, this).fetch();
40
+
41
+ this.paginateWidget = new PaginateWidget({
42
+ collection: this.collection,
43
+ parentView: this
44
+ });
45
+
46
+ this.searchWidget = new SearchFieldWidget({
47
+ placeholder: 'Search collections...',
48
+ types: ['collection'],
49
+ parentView: this
50
+ }).on('g:resultClicked', this._gotoCollection, this);
51
+
52
+ this.create = settings.dialog === 'create';
53
+ },
54
+
55
+ /**
56
+ * Prompt the user to create a new collection
57
+ */
58
+ createCollectionDialog: function () {
59
+ var container = $('#g-dialog-container');
60
+
61
+ new EditCollectionWidget({
62
+ el: container,
63
+ parentView: this
64
+ }).on('g:saved', function (collection) {
65
+ router.navigate('collection/' + collection.get('_id'),
66
+ { trigger: true });
67
+ }, this).render();
68
+ },
69
+
70
+ render: function () {
71
+ this.$el.html(CollectionListTemplate({
72
+ collections: this.collection.toArray(),
73
+ getCurrentUser: getCurrentUser,
74
+ formatDate: formatDate,
75
+ DATE_MINUTE: DATE_MINUTE,
76
+ formatSize: formatSize
77
+ }));
78
+
79
+ this.paginateWidget.setElement(this.$('.g-collection-pagination')).render();
80
+ this.searchWidget.setElement(this.$('.g-collections-search-container')).render();
81
+
82
+ if (this.create) {
83
+ this.createCollectionDialog();
84
+ }
85
+
86
+ return this;
87
+ },
88
+
89
+ /**
90
+ * When the user clicks a search result collection, this helper method
91
+ * will navigate them to the view for that specific collection.
92
+ */
93
+ _gotoCollection: function (result) {
94
+ var collection = new CollectionModel();
95
+ collection.set('_id', result.id).on('g:fetched', function () {
96
+ router.navigate('/collection/' + collection.get('_id'), { trigger: true });
97
+ }, this).fetch();
98
+ },
99
+
100
+ _toggleDescription: function (e) {
101
+ const link = $(e.currentTarget);
102
+ const cid = link.attr('cid');
103
+ const dest = this.$(`.g-collection-description[cid="${cid}"]`);
104
+
105
+ if (link.attr('state') === 'hidden') {
106
+ renderMarkdown(this.collection.get(cid).get('description'), dest);
107
+ dest.removeClass('hide');
108
+ link.attr('state', 'visible');
109
+ link.find('i').removeClass('icon-down-dir').addClass('icon-up-dir');
110
+ link.find('span').text('Hide description');
111
+ } else {
112
+ dest.addClass('hide');
113
+ link.attr('state', 'hidden');
114
+ link.find('i').removeClass('icon-up-dir').addClass('icon-down-dir');
115
+ link.find('span').text('Show description');
116
+ }
117
+ }
118
+ });
119
+
120
+ export default CollectionsView;
@@ -0,0 +1,83 @@
1
+ import $ from 'jquery';
2
+
3
+ import BrowserWidget from '@girder/core/views/widgets/BrowserWidget';
4
+ import router from '@girder/core/router';
5
+ import View from '@girder/core/views/View';
6
+ import { restRequest } from '@girder/core/rest';
7
+
8
+ import FilesystemImportTemplate from '@girder/core/templates/body/filesystemImport.pug';
9
+
10
+ var FilesystemImportView = View.extend({
11
+ events: {
12
+ 'submit .g-filesystem-import-form': function (e) {
13
+ e.preventDefault();
14
+
15
+ var destId = this.$('#g-filesystem-import-dest-id').val().trim().split(/\s/)[0],
16
+ destType = this.$('#g-filesystem-import-dest-type').val(),
17
+ foldersAsItems = this.$('#g-filesystem-import-leaf-items').val();
18
+
19
+ this.$('.g-validation-failed-message').empty();
20
+
21
+ this.assetstore.off('g:imported').on('g:imported', function () {
22
+ router.navigate(destType + '/' + destId, { trigger: true });
23
+ }, this).on('g:error', function (resp) {
24
+ this.$('.g-validation-failed-message').text(resp.responseJSON.message);
25
+ }, this).import({
26
+ importPath: this.$('#g-filesystem-import-path').val().trim(),
27
+ leafFoldersAsItems: foldersAsItems,
28
+ destinationId: destId,
29
+ destinationType: destType,
30
+ progress: true
31
+ });
32
+ },
33
+ 'click .g-open-browser': '_openBrowser'
34
+ },
35
+
36
+ initialize: function (settings) {
37
+ this._browserWidgetView = new BrowserWidget({
38
+ parentView: this,
39
+ titleText: 'Destination',
40
+ helpText: 'Browse to a location to select it as the destination.',
41
+ submitText: 'Select Destination',
42
+ validate: function (model) {
43
+ const isValid = $.Deferred();
44
+ if (!model) {
45
+ isValid.reject('Please select a valid root.');
46
+ } else {
47
+ isValid.resolve();
48
+ }
49
+ return isValid.promise();
50
+ }
51
+ });
52
+ this.listenTo(this._browserWidgetView, 'g:saved', function (val) {
53
+ this.$('#g-filesystem-import-dest-id').val(val.id);
54
+ this.$('#g-filesystem-import-dest-type').val(val.get('_modelType'));
55
+ restRequest({
56
+ url: `resource/${val.id}/path`,
57
+ method: 'GET',
58
+ data: { type: val.get('_modelType') }
59
+ }).done((result) => {
60
+ // Only add the resource path if the value wasn't altered
61
+ if (this.$('#g-filesystem-import-dest-id').val() === val.id) {
62
+ this.$('#g-filesystem-import-dest-id').val(`${val.id} (${result})`);
63
+ }
64
+ });
65
+ });
66
+ this.assetstore = settings.assetstore;
67
+ this.render();
68
+ },
69
+
70
+ render: function () {
71
+ this.$el.html(FilesystemImportTemplate({
72
+ assetstore: this.assetstore
73
+ }));
74
+
75
+ return this;
76
+ },
77
+
78
+ _openBrowser: function () {
79
+ this._browserWidgetView.setElement($('#g-dialog-container')).render();
80
+ }
81
+ });
82
+
83
+ export default FilesystemImportView;
@@ -0,0 +1,54 @@
1
+ import _ from 'underscore';
2
+
3
+ import FolderModel from '@girder/core/models/FolderModel';
4
+ import HierarchyWidget from '@girder/core/views/widgets/HierarchyWidget';
5
+ import View from '@girder/core/views/View';
6
+ import { cancelRestRequests } from '@girder/core/rest';
7
+ import events from '@girder/core/events';
8
+
9
+ /**
10
+ * This view shows a single folder as a hierarchy widget.
11
+ */
12
+ var FolderView = View.extend({
13
+ initialize: function (settings) {
14
+ cancelRestRequests('fetch');
15
+ this.folder = settings.folder;
16
+ this.upload = settings.upload || false;
17
+ this.folderAccess = settings.folderAccess || false;
18
+ this.folderCreate = settings.folderCreate || false;
19
+ this.folderEdit = settings.folderEdit || false;
20
+ this.itemCreate = settings.itemCreate || false;
21
+
22
+ this.render();
23
+ },
24
+
25
+ render: function () {
26
+ this.hierarchyWidget = new HierarchyWidget({
27
+ el: this.$el,
28
+ parentModel: this.folder,
29
+ upload: this.upload,
30
+ folderAccess: this.folderAccess,
31
+ folderEdit: this.folderEdit,
32
+ folderCreate: this.folderCreate,
33
+ itemCreate: this.itemCreate,
34
+ parentView: this
35
+ });
36
+
37
+ return this;
38
+ }
39
+ }, {
40
+ /**
41
+ * Helper function for fetching the folder by id, then render the view.
42
+ */
43
+ fetchAndInit: function (id, params) {
44
+ var folder = new FolderModel();
45
+ folder.set({ _id: id }).on('g:fetched', function () {
46
+ events.trigger('g:navigateTo', FolderView, _.extend({
47
+ folder: folder
48
+ }, params || {}));
49
+ }, this).fetch();
50
+ }
51
+
52
+ });
53
+
54
+ export default FolderView;
@@ -0,0 +1,47 @@
1
+ import $ from 'jquery';
2
+
3
+ import version from '@girder/core/version';
4
+ import View from '@girder/core/views/View';
5
+ import { cancelRestRequests, getApiRoot } from '@girder/core/rest';
6
+ import events from '@girder/core/events';
7
+ import { getCurrentUser } from '@girder/core/auth';
8
+
9
+ import FrontPageTemplate from '@girder/core/templates/body/frontPage.pug';
10
+
11
+ import '@girder/core/stylesheets/body/frontPage.styl';
12
+
13
+ /**
14
+ * This is the view for the front page of the app.
15
+ */
16
+ var FrontPageView = View.extend({
17
+ events: {
18
+ 'click .g-register-link': function () {
19
+ events.trigger('g:registerUi');
20
+ },
21
+ 'click .g-login-link': function () {
22
+ events.trigger('g:loginUi');
23
+ },
24
+ 'click .g-quicksearch-link': function () {
25
+ $('.g-quick-search-container .g-search-field').trigger('focus');
26
+ }
27
+ },
28
+
29
+ initialize: function (settings) {
30
+ cancelRestRequests('fetch');
31
+ this.brandName = settings.brandName || 'Girder';
32
+ this.render();
33
+ },
34
+
35
+ render: function () {
36
+ this.$el.html(FrontPageTemplate({
37
+ apiRoot: getApiRoot(),
38
+ currentUser: getCurrentUser(),
39
+ version,
40
+ brandName: this.brandName
41
+ }));
42
+
43
+ return this;
44
+ }
45
+ });
46
+
47
+ export default FrontPageView;