@girder/core 3.2.8 → 5.0.0-a7

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 (231) hide show
  1. package/README.md +61 -0
  2. package/package.json +79 -31
  3. package/assets/Girder_Mark.png +0 -0
  4. package/auth.js +0 -152
  5. package/collections/ApiKeyCollection.js +0 -9
  6. package/collections/AssetstoreCollection.js +0 -9
  7. package/collections/Collection.js +0 -295
  8. package/collections/CollectionCollection.js +0 -9
  9. package/collections/FileCollection.js +0 -11
  10. package/collections/FolderCollection.js +0 -11
  11. package/collections/GroupCollection.js +0 -9
  12. package/collections/ItemCollection.js +0 -11
  13. package/collections/UserCollection.js +0 -24
  14. package/collections/index.js +0 -21
  15. package/constants.js +0 -33
  16. package/dialog.js +0 -128
  17. package/events.js +0 -6
  18. package/index.js +0 -31
  19. package/main.js +0 -21
  20. package/misc.js +0 -260
  21. package/models/AccessControlledModel.js +0 -76
  22. package/models/ApiKeyModel.js +0 -31
  23. package/models/AssetstoreModel.js +0 -43
  24. package/models/CollectionCreationPolicyModel.js +0 -20
  25. package/models/CollectionModel.js +0 -12
  26. package/models/FileModel.js +0 -310
  27. package/models/FolderModel.js +0 -33
  28. package/models/GroupModel.js +0 -197
  29. package/models/ItemModel.js +0 -72
  30. package/models/MetadataMixin.js +0 -88
  31. package/models/Model.js +0 -187
  32. package/models/UserModel.js +0 -189
  33. package/models/index.js +0 -25
  34. package/pluginUtils.js +0 -11
  35. package/rest.js +0 -216
  36. package/router.js +0 -58
  37. package/routes.js +0 -231
  38. package/stylesheets/apidocs/apidocs.styl +0 -50
  39. package/stylesheets/body/adminConsole.styl +0 -21
  40. package/stylesheets/body/assetstores.styl +0 -46
  41. package/stylesheets/body/collectionList.styl +0 -39
  42. package/stylesheets/body/collectionPage.styl +0 -6
  43. package/stylesheets/body/frontPage.styl +0 -48
  44. package/stylesheets/body/groupList.styl +0 -43
  45. package/stylesheets/body/groupPage.styl +0 -116
  46. package/stylesheets/body/itemPage.styl +0 -81
  47. package/stylesheets/body/plugins.styl +0 -61
  48. package/stylesheets/body/searchResultsList.styl +0 -51
  49. package/stylesheets/body/systemConfig.styl +0 -56
  50. package/stylesheets/body/userAccount.styl +0 -57
  51. package/stylesheets/body/userList.styl +0 -79
  52. package/stylesheets/body/userPage.styl +0 -6
  53. package/stylesheets/layout/footer.styl +0 -19
  54. package/stylesheets/layout/global.styl +0 -154
  55. package/stylesheets/layout/globalNav.styl +0 -89
  56. package/stylesheets/layout/header.styl +0 -29
  57. package/stylesheets/layout/headerUser.styl +0 -33
  58. package/stylesheets/layout/layout.styl +0 -75
  59. package/stylesheets/layout/layoutVars.styl +0 -9
  60. package/stylesheets/layout/loading.styl +0 -37
  61. package/stylesheets/layout/progressArea.styl +0 -17
  62. package/stylesheets/widgets/accessWidget.styl +0 -106
  63. package/stylesheets/widgets/browserWidget.styl +0 -9
  64. package/stylesheets/widgets/hierarchyWidget.styl +0 -188
  65. package/stylesheets/widgets/markdownWidget.styl +0 -92
  66. package/stylesheets/widgets/metadataWidget.styl +0 -92
  67. package/stylesheets/widgets/searchFieldWidget.styl +0 -70
  68. package/stylesheets/widgets/taskProgress.styl +0 -41
  69. package/stylesheets/widgets/timelineWidget.styl +0 -41
  70. package/stylesheets/widgets/uploadWidget.styl +0 -43
  71. package/stylesheets/widgets/userOtpManagementWidget.styl +0 -159
  72. package/templates/body/adminConsole.pug +0 -13
  73. package/templates/body/assetstores.pug +0 -98
  74. package/templates/body/collectionList.pug +0 -40
  75. package/templates/body/collectionPage.pug +0 -36
  76. package/templates/body/filesystemImport.pug +0 -41
  77. package/templates/body/frontPage.pug +0 -83
  78. package/templates/body/groupList.pug +0 -30
  79. package/templates/body/groupPage.pug +0 -116
  80. package/templates/body/itemPage.pug +0 -61
  81. package/templates/body/plugins.pug +0 -20
  82. package/templates/body/s3Import.pug +0 -35
  83. package/templates/body/searchResults.pug +0 -15
  84. package/templates/body/searchResultsType.pug +0 -13
  85. package/templates/body/systemConfiguration.pug +0 -221
  86. package/templates/body/userAccount.pug +0 -83
  87. package/templates/body/userList.pug +0 -43
  88. package/templates/body/userPage.pug +0 -40
  89. package/templates/layout/alert.pug +0 -5
  90. package/templates/layout/layout.pug +0 -12
  91. package/templates/layout/layoutFooter.pug +0 -11
  92. package/templates/layout/layoutGlobalNav.pug +0 -7
  93. package/templates/layout/layoutHeader.pug +0 -8
  94. package/templates/layout/layoutHeaderUser.pug +0 -26
  95. package/templates/layout/layoutProgressArea.pug +0 -1
  96. package/templates/layout/loginDialog.pug +0 -30
  97. package/templates/layout/registerDialog.pug +0 -35
  98. package/templates/layout/resetPasswordDialog.pug +0 -25
  99. package/templates/widgets/accessEditor.pug +0 -23
  100. package/templates/widgets/accessEditorMixins.pug +0 -57
  101. package/templates/widgets/accessEditorNonModal.pug +0 -11
  102. package/templates/widgets/accessEntry.pug +0 -32
  103. package/templates/widgets/apiKeyList.pug +0 -50
  104. package/templates/widgets/browserWidget.pug +0 -32
  105. package/templates/widgets/checkedActionsMenu.pug +0 -46
  106. package/templates/widgets/collectionInfoDialog.pug +0 -37
  107. package/templates/widgets/confirmDialog.pug +0 -14
  108. package/templates/widgets/dateTimeRangeWidget.pug +0 -20
  109. package/templates/widgets/dateTimeWidget.pug +0 -8
  110. package/templates/widgets/editApiKeyWidget.pug +0 -43
  111. package/templates/widgets/editAssetstoreWidget.pug +0 -78
  112. package/templates/widgets/editCollectionWidget.pug +0 -27
  113. package/templates/widgets/editFileWidget.pug +0 -21
  114. package/templates/widgets/editFolderWidget.pug +0 -27
  115. package/templates/widgets/editGroupWidget.pug +0 -54
  116. package/templates/widgets/editItemWidget.pug +0 -27
  117. package/templates/widgets/fileInfoDialog.pug +0 -33
  118. package/templates/widgets/fileList.pug +0 -33
  119. package/templates/widgets/folderInfoDialog.pug +0 -42
  120. package/templates/widgets/folderList.pug +0 -21
  121. package/templates/widgets/groupAdminList.pug +0 -33
  122. package/templates/widgets/groupInviteDialog.pug +0 -76
  123. package/templates/widgets/groupInviteList.pug +0 -14
  124. package/templates/widgets/groupMemberList.pug +0 -39
  125. package/templates/widgets/groupModList.pug +0 -23
  126. package/templates/widgets/hierarchyBreadcrumb.pug +0 -37
  127. package/templates/widgets/hierarchyPaginated.pug +0 -19
  128. package/templates/widgets/hierarchyWidget.pug +0 -96
  129. package/templates/widgets/itemBreadcrumb.pug +0 -16
  130. package/templates/widgets/itemList.pug +0 -27
  131. package/templates/widgets/jsonMetadatumEditWidget.pug +0 -13
  132. package/templates/widgets/jsonMetadatumView.pug +0 -6
  133. package/templates/widgets/loadingAnimation.pug +0 -4
  134. package/templates/widgets/markdownWidget.pug +0 -34
  135. package/templates/widgets/metadataWidget.pug +0 -16
  136. package/templates/widgets/metadatumEditWidget.pug +0 -15
  137. package/templates/widgets/metadatumView.pug +0 -5
  138. package/templates/widgets/newAssetstore.pug +0 -118
  139. package/templates/widgets/paginateWidget.pug +0 -7
  140. package/templates/widgets/pluginConfigBreadcrumb.pug +0 -13
  141. package/templates/widgets/rootSelectorWidget.pug +0 -13
  142. package/templates/widgets/searchField.pug +0 -10
  143. package/templates/widgets/searchHelp.pug +0 -12
  144. package/templates/widgets/searchModeSelect.pug +0 -9
  145. package/templates/widgets/searchResults.pug +0 -14
  146. package/templates/widgets/sortCollectionWidget.pug +0 -14
  147. package/templates/widgets/taskProgress.pug +0 -16
  148. package/templates/widgets/timeline.pug +0 -15
  149. package/templates/widgets/uploadWidget.pug +0 -15
  150. package/templates/widgets/uploadWidgetMixins.pug +0 -31
  151. package/templates/widgets/uploadWidgetNonModal.pug +0 -10
  152. package/templates/widgets/userOtpBegin.pug +0 -4
  153. package/templates/widgets/userOtpDisable.pug +0 -6
  154. package/templates/widgets/userOtpEnable.pug +0 -44
  155. package/utilities/EventStream.js +0 -177
  156. package/utilities/PluginUtils.js +0 -36
  157. package/utilities/S3UploadHandler.js +0 -303
  158. package/utilities/index.js +0 -9
  159. package/utilities/jquery/girderEnable.js +0 -19
  160. package/utilities/jquery/girderModal.js +0 -48
  161. package/version.js +0 -10
  162. package/views/App.js +0 -359
  163. package/views/View.js +0 -78
  164. package/views/body/AdminView.js +0 -29
  165. package/views/body/AssetstoresView.js +0 -235
  166. package/views/body/CollectionView.js +0 -188
  167. package/views/body/CollectionsView.js +0 -120
  168. package/views/body/FilesystemImportView.js +0 -83
  169. package/views/body/FolderView.js +0 -54
  170. package/views/body/FrontPageView.js +0 -47
  171. package/views/body/GroupView.js +0 -336
  172. package/views/body/GroupsView.js +0 -106
  173. package/views/body/ItemView.js +0 -177
  174. package/views/body/PluginsView.js +0 -73
  175. package/views/body/S3ImportView.js +0 -80
  176. package/views/body/SearchResultsView.js +0 -162
  177. package/views/body/SystemConfigurationView.js +0 -196
  178. package/views/body/UserAccountView.js +0 -179
  179. package/views/body/UserView.js +0 -165
  180. package/views/body/UsersView.js +0 -124
  181. package/views/body/index.js +0 -37
  182. package/views/index.js +0 -13
  183. package/views/layout/FooterView.js +0 -29
  184. package/views/layout/GlobalNavView.js +0 -103
  185. package/views/layout/HeaderUserView.js +0 -45
  186. package/views/layout/HeaderView.js +0 -83
  187. package/views/layout/LoginView.js +0 -100
  188. package/views/layout/ProgressListView.js +0 -70
  189. package/views/layout/RegisterView.js +0 -101
  190. package/views/layout/ResetPasswordView.js +0 -70
  191. package/views/layout/index.js +0 -19
  192. package/views/widgets/AccessWidget.js +0 -427
  193. package/views/widgets/ApiKeyListWidget.js +0 -140
  194. package/views/widgets/BrowserWidget.js +0 -317
  195. package/views/widgets/CheckedMenuWidget.js +0 -68
  196. package/views/widgets/CollectionInfoWidget.js +0 -40
  197. package/views/widgets/DateTimeRangeWidget.js +0 -179
  198. package/views/widgets/DateTimeWidget.js +0 -109
  199. package/views/widgets/EditApiKeyWidget.js +0 -122
  200. package/views/widgets/EditAssetstoreWidget.js +0 -148
  201. package/views/widgets/EditCollectionWidget.js +0 -93
  202. package/views/widgets/EditFileWidget.js +0 -56
  203. package/views/widgets/EditFolderWidget.js +0 -116
  204. package/views/widgets/EditGroupWidget.js +0 -125
  205. package/views/widgets/EditItemWidget.js +0 -110
  206. package/views/widgets/FileInfoWidget.js +0 -26
  207. package/views/widgets/FileListWidget.js +0 -151
  208. package/views/widgets/FolderInfoWidget.js +0 -39
  209. package/views/widgets/FolderListWidget.js +0 -106
  210. package/views/widgets/GroupAdminsWidget.js +0 -88
  211. package/views/widgets/GroupInvitesWidget.js +0 -56
  212. package/views/widgets/GroupMembersWidget.js +0 -185
  213. package/views/widgets/GroupModsWidget.js +0 -77
  214. package/views/widgets/HierarchyWidget.js +0 -1097
  215. package/views/widgets/ItemBreadcrumbWidget.js +0 -38
  216. package/views/widgets/ItemListWidget.js +0 -345
  217. package/views/widgets/LoadingAnimation.js +0 -17
  218. package/views/widgets/MarkdownWidget.js +0 -217
  219. package/views/widgets/MetadataWidget.js +0 -504
  220. package/views/widgets/NewAssetstoreWidget.js +0 -81
  221. package/views/widgets/PaginateWidget.js +0 -37
  222. package/views/widgets/PluginConfigBreadcrumbWidget.js +0 -33
  223. package/views/widgets/RootSelectorWidget.js +0 -192
  224. package/views/widgets/SearchFieldWidget.js +0 -365
  225. package/views/widgets/SearchPaginateWidget.js +0 -149
  226. package/views/widgets/SortCollectionWidget.js +0 -53
  227. package/views/widgets/TaskProgressWidget.js +0 -91
  228. package/views/widgets/TimelineWidget.js +0 -155
  229. package/views/widgets/UploadWidget.js +0 -340
  230. package/views/widgets/UserOtpManagementWidget.js +0 -105
  231. package/views/widgets/index.js +0 -75
@@ -1,504 +0,0 @@
1
- import $ from 'jquery';
2
- import _ from 'underscore';
3
-
4
- import View from '@girder/core/views/View';
5
- import { AccessType } from '@girder/core/constants';
6
- import { confirm } from '@girder/core/dialog';
7
- import events from '@girder/core/events';
8
- import { localeSort } from '@girder/core/misc';
9
-
10
- import JsonMetadatumEditWidgetTemplate from '@girder/core/templates/widgets/jsonMetadatumEditWidget.pug';
11
- import JsonMetadatumViewTemplate from '@girder/core/templates/widgets/jsonMetadatumView.pug';
12
- import MetadataWidgetTemplate from '@girder/core/templates/widgets/metadataWidget.pug';
13
- import MetadatumEditWidgetTemplate from '@girder/core/templates/widgets/metadatumEditWidget.pug';
14
- import MetadatumViewTemplate from '@girder/core/templates/widgets/metadatumView.pug';
15
-
16
- import '@girder/core/stylesheets/widgets/metadataWidget.styl';
17
-
18
- import JSONEditor from 'jsoneditor/dist/jsoneditor.js'; // can't 'jsoneditor'
19
- import 'jsoneditor/dist/jsoneditor.css';
20
-
21
- import 'bootstrap/js/dropdown';
22
-
23
- var MetadatumWidget = View.extend({
24
- className: 'g-widget-metadata-row',
25
-
26
- events: {
27
- 'click .g-widget-metadata-edit-button': 'editMetadata'
28
- },
29
-
30
- initialize: function (settings) {
31
- if (!_.has(this.parentView.modes, settings.mode)) {
32
- throw new Error('Unsupported metadatum mode ' + settings.mode + ' detected.');
33
- }
34
-
35
- this.mode = settings.mode;
36
- this.key = settings.key;
37
- this.value = settings.value;
38
- this.accessLevel = settings.accessLevel;
39
- this.parentView = settings.parentView;
40
- this.fieldName = settings.fieldName;
41
- this.apiPath = settings.apiPath;
42
- this.onMetadataEdited = settings.onMetadataEdited;
43
- this.onMetadataAdded = settings.onMetadataAdded;
44
- },
45
-
46
- _validate: function (from, to, value) {
47
- var newMode = this.parentView.modes[to];
48
-
49
- if (_.has(newMode, 'validation') &&
50
- _.has(newMode.validation, 'from') &&
51
- _.has(newMode.validation.from, from)) {
52
- var validate = newMode.validation.from[from][0];
53
- var msg = newMode.validation.from[from][1];
54
-
55
- if (!validate(value)) {
56
- events.trigger('g:alert', {
57
- text: msg,
58
- type: 'warning'
59
- });
60
- return false;
61
- }
62
- }
63
-
64
- return true;
65
- },
66
-
67
- // @todo too much duplication with editMetadata
68
- toggleEditor: function (event, newEditorMode, existingEditor, overrides) {
69
- var fromEditorMode = (existingEditor instanceof JsonMetadatumEditWidget) ? 'json' : 'simple';
70
- var newValue = (overrides || {}).value || existingEditor.$el.attr('g-value');
71
- if (!this._validate(fromEditorMode, newEditorMode, newValue)) {
72
- return;
73
- }
74
-
75
- var row = existingEditor.$el;
76
- existingEditor.destroy();
77
- row.addClass('editing').empty();
78
-
79
- var opts = _.extend({
80
- el: row,
81
- item: this.parentView.item,
82
- key: row.attr('g-key'),
83
- value: row.attr('g-value'),
84
- accessLevel: this.accessLevel,
85
- newDatum: false,
86
- parentView: this,
87
- fieldName: this.fieldName,
88
- apiPath: this.apiPath,
89
- onMetadataEdited: this.onMetadataEdited,
90
- onMetadataAdded: this.onMetadataAdded
91
- }, overrides || {});
92
-
93
- this.parentView.modes[newEditorMode].editor(opts).render();
94
- },
95
-
96
- editMetadata: function (event) {
97
- this.$el.addClass('editing');
98
- this.$el.empty();
99
-
100
- var opts = {
101
- item: this.parentView.item,
102
- key: this.$el.attr('g-key'),
103
- value: this.$el.attr('g-value'),
104
- accessLevel: this.accessLevel,
105
- newDatum: false,
106
- parentView: this,
107
- fieldName: this.fieldName,
108
- apiPath: this.apiPath,
109
- onMetadataEdited: this.onMetadataEdited,
110
- onMetadataAdded: this.onMetadataAdded
111
- };
112
-
113
- // If they're trying to open false, null, 6, etc which are not stored as strings
114
- if (this.mode === 'json') {
115
- try {
116
- var jsonValue = JSON.parse(this.$el.attr('g-value'));
117
-
118
- if (jsonValue !== undefined && !_.isObject(jsonValue)) {
119
- opts.value = jsonValue;
120
- }
121
- } catch (e) {}
122
- }
123
-
124
- this.parentView.modes[this.mode].editor(opts)
125
- .render()
126
- .$el.appendTo(this.$el);
127
- },
128
-
129
- render: function () {
130
- this.$el.attr({
131
- 'g-key': this.key,
132
- 'g-value': _.bind(this.parentView.modes[this.mode].displayValue, this)()
133
- }).empty();
134
-
135
- this.$el.html(this.parentView.modes[this.mode].template({
136
- key: this.key,
137
- value: _.bind(this.parentView.modes[this.mode].displayValue, this)(),
138
- accessLevel: this.accessLevel,
139
- AccessType: AccessType
140
- }));
141
-
142
- return this;
143
- }
144
- });
145
-
146
- var MetadatumEditWidget = View.extend({
147
- events: {
148
- 'click .g-widget-metadata-cancel-button': 'cancelEdit',
149
- 'click .g-widget-metadata-save-button': 'save',
150
- 'click .g-widget-metadata-delete-button': 'deleteMetadatum',
151
- 'click .g-widget-metadata-toggle-button': function (event) {
152
- var editorType;
153
- // @todo modal
154
- // in the future this event will have the new editorType (assuming a dropdown)
155
- if (this instanceof JsonMetadatumEditWidget) {
156
- editorType = 'simple';
157
- } else {
158
- editorType = 'json';
159
- }
160
-
161
- this.parentView.toggleEditor(event, editorType, this, {
162
- // Save state before toggling editor
163
- key: this.$el.find('.g-widget-metadata-key-input').val(),
164
- value: this.getCurrentValue()
165
- });
166
- }
167
- },
168
-
169
- initialize: function (settings) {
170
- this.item = settings.item;
171
- this.key = settings.key || '';
172
- this.fieldName = settings.fieldName || 'meta';
173
- this.value = (settings.value !== undefined) ? settings.value : '';
174
- this.accessLevel = settings.accessLevel;
175
- this.newDatum = settings.newDatum;
176
- this.fieldName = settings.fieldName;
177
- this.apiPath = settings.apiPath;
178
- this.onMetadataEdited = settings.onMetadataEdited;
179
- this.onMetadataAdded = settings.onMetadataAdded;
180
- },
181
-
182
- editTemplate: MetadatumEditWidgetTemplate,
183
-
184
- getCurrentValue: function () {
185
- return this.$el.find('.g-widget-metadata-value-input').val();
186
- },
187
-
188
- deleteMetadatum: function (event) {
189
- event.stopImmediatePropagation();
190
- const target = $(event.currentTarget);
191
- var metadataList = target.parent().parent();
192
- var params = {
193
- text: 'Are you sure you want to delete the metadatum <b>' +
194
- _.escape(this.key) + '</b>?',
195
- escapedHtml: true,
196
- yesText: 'Delete',
197
- confirmCallback: () => {
198
- this.item.removeMetadata(this.key, function () {
199
- metadataList.remove();
200
- }, null, {
201
- field: this.fieldName,
202
- path: this.apiPath
203
- });
204
- }
205
- };
206
- confirm(params);
207
- },
208
-
209
- cancelEdit: function (event) {
210
- event.stopImmediatePropagation();
211
- const target = $(event.currentTarget);
212
- var curRow = target.parent().parent();
213
- if (this.newDatum) {
214
- curRow.remove();
215
- } else {
216
- this.parentView.render();
217
- }
218
- },
219
-
220
- save: function (event, value) {
221
- event.stopImmediatePropagation();
222
- const target = $(event.currentTarget);
223
- var curRow = target.parent(),
224
- tempKey = curRow.find('.g-widget-metadata-key-input').val(),
225
- tempValue = (value !== undefined) ? value : curRow.find('.g-widget-metadata-value-input').val();
226
-
227
- if (this.newDatum && tempKey === '') {
228
- events.trigger('g:alert', {
229
- text: 'A key is required for all metadata.',
230
- type: 'warning'
231
- });
232
- return;
233
- }
234
-
235
- var saveCallback = () => {
236
- this.key = tempKey;
237
- this.value = tempValue;
238
-
239
- this.parentView.key = this.key;
240
- this.parentView.value = this.value;
241
-
242
- if (this instanceof JsonMetadatumEditWidget) {
243
- this.parentView.mode = 'json';
244
- } else {
245
- this.parentView.mode = 'simple';
246
- }
247
-
248
- this.parentView.render();
249
-
250
- this.newDatum = false;
251
- };
252
-
253
- var errorCallback = function (out) {
254
- events.trigger('g:alert', {
255
- text: out.message,
256
- type: 'danger'
257
- });
258
- };
259
-
260
- if (this.newDatum) {
261
- if (this.onMetadataAdded) {
262
- this.onMetadataAdded(tempKey, tempValue, saveCallback, errorCallback);
263
- } else {
264
- this.item.addMetadata(tempKey, tempValue, saveCallback, errorCallback, {
265
- field: this.fieldName,
266
- path: this.apiPath
267
- });
268
- }
269
- } else {
270
- if (this.onMetadataEdited) {
271
- this.onMetadataEdited(tempKey, this.key, tempValue, saveCallback, errorCallback);
272
- } else {
273
- this.item.editMetadata(tempKey, this.key, tempValue, saveCallback, errorCallback, {
274
- field: this.fieldName,
275
- path: this.apiPath
276
- });
277
- }
278
- }
279
- },
280
-
281
- render: function () {
282
- this.$el.html(this.editTemplate({
283
- item: this.item,
284
- key: this.key,
285
- value: this.value,
286
- accessLevel: this.accessLevel,
287
- newDatum: this.newDatum,
288
- AccessType: AccessType
289
- }));
290
- this.$el.find('.g-widget-metadata-key-input').trigger('focus');
291
-
292
- return this;
293
- }
294
- });
295
-
296
- var JsonMetadatumEditWidget = MetadatumEditWidget.extend({
297
- editTemplate: JsonMetadatumEditWidgetTemplate,
298
-
299
- getCurrentValue: function () {
300
- return this.editor.getText();
301
- },
302
-
303
- save: function (event) {
304
- try {
305
- MetadatumEditWidget.prototype.save.call(
306
- this, event, this.editor.get());
307
- } catch (err) {
308
- events.trigger('g:alert', {
309
- text: 'The field contains invalid JSON and can not be saved.',
310
- type: 'warning'
311
- });
312
- }
313
- },
314
-
315
- render: function () {
316
- MetadatumEditWidget.prototype.render.apply(this, arguments);
317
-
318
- const jsonEditorEl = this.$el.find('.g-json-editor');
319
- this.editor = new JSONEditor(jsonEditorEl[0], {
320
- mode: 'tree',
321
- modes: ['code', 'tree'],
322
- onError: () => {
323
- events.trigger('g:alert', {
324
- text: 'The field contains invalid JSON and can not be viewed in Tree Mode.',
325
- type: 'warning'
326
- });
327
- }
328
- });
329
-
330
- if (this.value !== undefined) {
331
- this.editor.setText(JSON.stringify(this.value));
332
- this.editor.expandAll();
333
- }
334
-
335
- return this;
336
- }
337
- });
338
-
339
- /**
340
- * This widget shows a list of metadata in a given item.
341
- */
342
- var MetadataWidget = View.extend({
343
- events: {
344
- 'click .g-add-json-metadata': function (event) {
345
- this.addMetadata(event, 'json');
346
- },
347
- 'click .g-add-simple-metadata': function (event) {
348
- this.addMetadata(event, 'simple');
349
- }
350
- },
351
-
352
- /**
353
- * Creates a widget to display and optionally edit metadata fields.
354
- *
355
- * @param settings.item {Model} The model object whose metadata to display.
356
- * Can be any model type that inherits MetadataMixin.
357
- * @param [settings.fieldName='meta'] {string} The name of the model attribute
358
- * to display/edit. The model attribute with this name should be an object
359
- * whose top level keys represent metadata keys.
360
- * @param [settings.title='Metadata'] {string} Title for the widget.
361
- * @param [settings.apiPath] {string} The relative API path to use when editing
362
- * metadata keys for this model. Defaults to using the MetadataMixin default path.
363
- * @param [settings.accessLevel=AccessType.READ] {AccessType} The
364
- * access level for this widget. Use READ for read-only, or WRITE (or greater)
365
- * for adding editing capabilities as well.
366
- * @param [settings.onMetadataAdded] {Function} A custom callback for when a
367
- * new metadata key is added to the list. If passed, will override the
368
- * default behavior of calling MetadataMixin.addMetadata.
369
- * @param [settings.onMetadataEdited] {Function} A custom callback for when an
370
- * existing metadata key is updated. If passed, will override the default
371
- * behavior of calling MetadataMixin.editMetadata.
372
- */
373
- initialize: function (settings) {
374
- this.item = settings.item;
375
- this.fieldName = settings.fieldName || 'meta';
376
- this.title = settings.title || 'Metadata';
377
- this.apiPath = settings.apiPath;
378
- this.accessLevel = settings.accessLevel;
379
- this.onMetadataEdited = settings.onMetadataEdited;
380
- this.onMetadataAdded = settings.onMetadataAdded;
381
-
382
- this.item.on('g:changed', function () {
383
- this.render();
384
- }, this);
385
- this.render();
386
- },
387
-
388
- modes: {
389
- simple: {
390
- editor: function (args) {
391
- return new MetadatumEditWidget(args);
392
- },
393
- displayValue: function () {
394
- return this.value;
395
- },
396
- template: MetadatumViewTemplate
397
- },
398
- json: {
399
- editor: function (args) {
400
- if (args.value !== undefined) {
401
- args.value = JSON.parse(args.value);
402
- }
403
- return new JsonMetadatumEditWidget(args);
404
- },
405
- displayValue: function () {
406
- return JSON.stringify(this.value, null, 4);
407
- },
408
- validation: {
409
- from: {
410
- simple: [
411
- function (value) {
412
- try {
413
- JSON.parse(value);
414
- return true;
415
- } catch (e) {}
416
-
417
- return false;
418
- },
419
- 'The simple field is not valid JSON and can not be converted.'
420
- ]
421
- }
422
- },
423
- template: JsonMetadatumViewTemplate
424
- }
425
- },
426
-
427
- setItem: function (item) {
428
- this.item = item;
429
- return this;
430
- },
431
-
432
- // Does not support modal editing
433
- getModeFromValue: function (value) {
434
- return _.isString(value) ? 'simple' : 'json';
435
- },
436
-
437
- addMetadata: function (event, mode) {
438
- var EditWidget = this.modes[mode].editor;
439
- var value = (mode === 'json') ? '{}' : '';
440
-
441
- var widget = new MetadatumWidget({
442
- className: 'g-widget-metadata-row editing',
443
- mode: mode,
444
- key: '',
445
- value: value,
446
- item: this.item,
447
- fieldName: this.fieldName,
448
- apiPath: this.apiPath,
449
- accessLevel: this.accessLevel,
450
- parentView: this,
451
- onMetadataEdited: this.onMetadataEdited,
452
- onMetadataAdded: this.onMetadataAdded
453
- });
454
- widget.$el.appendTo(this.$('.g-widget-metadata-container'));
455
-
456
- new EditWidget({
457
- item: this.item,
458
- key: '',
459
- value: value,
460
- fieldName: this.fieldName,
461
- apiPath: this.apiPath,
462
- accessLevel: this.accessLevel,
463
- newDatum: true,
464
- parentView: widget,
465
- onMetadataEdited: this.onMetadataEdited,
466
- onMetadataAdded: this.onMetadataAdded
467
- })
468
- .render()
469
- .$el.appendTo(widget.$el);
470
- },
471
-
472
- render: function () {
473
- var metaDict = this.item.get(this.fieldName) || {};
474
- var metaKeys = Object.keys(metaDict);
475
- metaKeys.sort(localeSort);
476
-
477
- // Metadata header
478
- this.$el.html(MetadataWidgetTemplate({
479
- item: this.item,
480
- title: this.title,
481
- accessLevel: this.accessLevel,
482
- AccessType: AccessType
483
- }));
484
-
485
- // Append each metadatum
486
- _.each(metaKeys, function (metaKey) {
487
- this.$el.find('.g-widget-metadata-container').append(new MetadatumWidget({
488
- mode: this.getModeFromValue(metaDict[metaKey]),
489
- key: metaKey,
490
- value: metaDict[metaKey],
491
- accessLevel: this.accessLevel,
492
- parentView: this,
493
- fieldName: this.fieldName,
494
- apiPath: this.apiPath,
495
- onMetadataEdited: this.onMetadataEdited,
496
- onMetadataAdded: this.onMetadataAdded
497
- }).render().$el);
498
- }, this);
499
-
500
- return this;
501
- }
502
- });
503
-
504
- export default MetadataWidget;
@@ -1,81 +0,0 @@
1
- import AssetstoreModel from '@girder/core/models/AssetstoreModel';
2
- import View from '@girder/core/views/View';
3
- import { AssetstoreType } from '@girder/core/constants';
4
-
5
- import NewAssetstoreTemplate from '@girder/core/templates/widgets/newAssetstore.pug';
6
-
7
- import 'bootstrap/js/collapse';
8
- import 'bootstrap/js/transition';
9
-
10
- import '@girder/core/utilities/jquery/girderEnable';
11
-
12
- /**
13
- * This widget is for creating new assetstores. The parent view is responsible
14
- * for checking admin privileges before rendering this widget.
15
- */
16
- var NewAssetstoreWidget = View.extend({
17
- events: {
18
- 'submit #g-new-fs-form': function (e) {
19
- this.createAssetstore(e, this.$('#g-new-fs-error'), {
20
- type: AssetstoreType.FILESYSTEM,
21
- name: this.$('#g-new-fs-name').val(),
22
- root: this.$('#g-new-fs-root').val()
23
- });
24
- },
25
-
26
- 'submit #g-new-gridfs-form': function (e) {
27
- this.createAssetstore(e, this.$('#g-new-gridfs-error'), {
28
- type: AssetstoreType.GRIDFS,
29
- name: this.$('#g-new-gridfs-name').val(),
30
- db: this.$('#g-new-gridfs-db').val(),
31
- mongohost: this.$('#g-new-gridfs-mongohost').val(),
32
- replicaset: this.$('#g-new-gridfs-replicaset').val()
33
- });
34
- },
35
-
36
- 'submit #g-new-s3-form': function (e) {
37
- this.createAssetstore(e, this.$('#g-new-s3-error'), {
38
- type: AssetstoreType.S3,
39
- name: this.$('#g-new-s3-name').val(),
40
- bucket: this.$('#g-new-s3-bucket').val(),
41
- prefix: this.$('#g-new-s3-prefix').val(),
42
- accessKeyId: this.$('#g-new-s3-access-key-id').val(),
43
- secret: this.$('#g-new-s3-secret').val(),
44
- service: this.$('#g-new-s3-service').val(),
45
- region: this.$('#g-new-s3-region').val(),
46
- readOnly: this.$('#g-new-s3-readonly').is(':checked'),
47
- inferCredentials: this.$('#g-new-s3-infercredentials').is(':checked'),
48
- serverSideEncryption: this.$('#g-new-s3-sse').is(':checked')
49
- });
50
- }
51
- },
52
-
53
- render: function () {
54
- this.$el.html(NewAssetstoreTemplate());
55
- return this;
56
- },
57
-
58
- /**
59
- * Call this to make the request to the server to create the assetstore.
60
- * @param e The submit event from the form.
61
- * @param container The element to write the error message into.
62
- * @param data The form data to POST to /assetstore
63
- */
64
- createAssetstore: function (e, container, data) {
65
- e.preventDefault();
66
- this.$('.g-new-assetstore-submit').girderEnable(false);
67
- container.empty();
68
-
69
- var assetstore = new AssetstoreModel();
70
- assetstore.set(data);
71
- assetstore.on('g:saved', function () {
72
- this.$('.g-new-assetstore-submit').girderEnable(true);
73
- this.trigger('g:created', assetstore);
74
- }, this).on('g:error', function (err) {
75
- this.$('.g-new-assetstore-submit').girderEnable(true);
76
- container.text(err.responseJSON.message);
77
- }, this).save();
78
- }
79
- });
80
-
81
- export default NewAssetstoreWidget;
@@ -1,37 +0,0 @@
1
- import View from '@girder/core/views/View';
2
-
3
- import PaginateWidgetTemplate from '@girder/core/templates/widgets/paginateWidget.pug';
4
-
5
- /**
6
- * This widget is used to provide a consistent widget for iterating amongst
7
- * pages of a Collection.
8
- */
9
- var PaginateWidget = View.extend({
10
- events: {
11
- 'click .g-page-next:not(.disabled)': function (e) {
12
- this.collection.fetchNextPage();
13
- },
14
- 'click .g-page-prev:not(.disabled)': function (e) {
15
- this.collection.fetchPreviousPage();
16
- }
17
- },
18
-
19
- initialize: function (settings) {
20
- this.collection = settings.collection;
21
- },
22
-
23
- /**
24
- * Do not call render() until the collection has been fetched once.
25
- */
26
- render: function () {
27
- this.$el.html(PaginateWidgetTemplate({
28
- collection: this.collection
29
- }));
30
-
31
- this.$('.g-page-next').girderEnable(this.collection.hasNextPage());
32
- this.$('.g-page-prev').girderEnable(this.collection.hasPreviousPage());
33
- return this;
34
- }
35
- });
36
-
37
- export default PaginateWidget;
@@ -1,33 +0,0 @@
1
- import router from '@girder/core/router';
2
- import View from '@girder/core/views/View';
3
-
4
- import PluginConfigBreadcrumbTemplate from '@girder/core/templates/widgets/pluginConfigBreadcrumb.pug';
5
-
6
- /**
7
- * This widget provides a consistent breadcrumb to be displayed on the admin
8
- * configuration pages for plugins.
9
- */
10
- var PluginConfigBreadcrumbWidget = View.extend({
11
- events: {
12
- 'click a.g-admin-console-link': function () {
13
- router.navigate('admin', { trigger: true });
14
- },
15
- 'click a.g-plugins-link': function () {
16
- router.navigate('plugins', { trigger: true });
17
- }
18
- },
19
-
20
- initialize: function (settings) {
21
- this.pluginName = settings.pluginName;
22
- },
23
-
24
- render: function () {
25
- this.$el.html(PluginConfigBreadcrumbTemplate({
26
- pluginName: this.pluginName
27
- }));
28
-
29
- return this;
30
- }
31
- });
32
-
33
- export default PluginConfigBreadcrumbWidget;