@girder/core 3.2.3 → 5.0.0-beta.1

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 -84
  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,336 +0,0 @@
1
- import $ from 'jquery';
2
- import _ from 'underscore';
3
-
4
- import EditGroupWidget from '@girder/core/views/widgets/EditGroupWidget';
5
- import GroupAdminsWidget from '@girder/core/views/widgets/GroupAdminsWidget';
6
- import GroupInvitesWidget from '@girder/core/views/widgets/GroupInvitesWidget';
7
- import GroupMembersWidget from '@girder/core/views/widgets/GroupMembersWidget';
8
- import GroupModel from '@girder/core/models/GroupModel';
9
- import GroupModsWidget from '@girder/core/views/widgets/GroupModsWidget';
10
- import LoadingAnimation from '@girder/core/views/widgets/LoadingAnimation';
11
- import router from '@girder/core/router';
12
- import UserCollection from '@girder/core/collections/UserCollection';
13
- import View from '@girder/core/views/View';
14
- import { AccessType } from '@girder/core/constants';
15
- import { cancelRestRequests } from '@girder/core/rest';
16
- import { confirm } from '@girder/core/dialog';
17
- import events from '@girder/core/events';
18
- import { getCurrentUser } from '@girder/core/auth';
19
-
20
- import GroupPageTemplate from '@girder/core/templates/body/groupPage.pug';
21
-
22
- import '@girder/core/stylesheets/body/groupPage.styl';
23
-
24
- import 'bootstrap/js/dropdown';
25
- import 'bootstrap/js/tab';
26
-
27
- /**
28
- * This view shows a single group's page.
29
- */
30
- var GroupView = View.extend({
31
- events: {
32
- 'click .g-edit-group': 'editGroup',
33
- 'click .g-group-join': 'joinGroup',
34
- 'click .g-group-leave': 'leaveGroup',
35
- 'click .g-group-delete': 'deleteGroup',
36
- 'click .g-group-request-invite': 'requestInvitation',
37
- 'click .g-group-request-accept': 'acceptMembershipRequest',
38
- 'click .g-group-request-deny': 'denyMembershipRequest',
39
-
40
- 'click #g-group-tab-pending a.g-member-name': function (e) {
41
- var userId = $(e.currentTarget).parents('li').attr('userid');
42
- router.navigate('user/' + userId, { trigger: true });
43
- }
44
- },
45
-
46
- initialize: function (settings) {
47
- cancelRestRequests('fetch');
48
- this.tab = settings.tab || 'roles';
49
- this.edit = settings.edit || false;
50
-
51
- // If group model is already passed, there is no need to fetch.
52
- if (settings.group) {
53
- this.model = settings.group;
54
- this.model.on('g:accessFetched', function () {
55
- this.render();
56
- }, this).fetchAccess();
57
- } else if (settings.id) {
58
- this.model = new GroupModel();
59
- this.model.set('_id', settings.id);
60
-
61
- this.model.on('g:fetched', function () {
62
- this.model.on('g:accessFetched', function () {
63
- this.render();
64
- }, this).fetchAccess();
65
- }, this).fetch();
66
- }
67
- },
68
-
69
- editGroup: function () {
70
- var container = $('#g-dialog-container');
71
-
72
- if (!this.editGroupWidget) {
73
- this.editGroupWidget = new EditGroupWidget({
74
- el: container,
75
- model: this.model,
76
- parentView: this
77
- }).off('g:saved').on('g:saved', function () {
78
- this.render();
79
- }, this);
80
- }
81
- this.editGroupWidget.render();
82
- },
83
-
84
- deleteGroup: function () {
85
- confirm({
86
- text: 'Are you sure you want to delete the group <b>' +
87
- this.model.escape('name') + '</b>?',
88
- escapedHtml: true,
89
- confirmCallback: () => {
90
- this.model.on('g:deleted', function () {
91
- router.navigate('groups', { trigger: true });
92
- }).destroy();
93
- }
94
- });
95
- },
96
-
97
- render: function () {
98
- this.isMember = false;
99
- this.isInvited = false;
100
- this.isRequested = false;
101
- this.isModerator = false;
102
- this.isAdmin = false;
103
-
104
- if (getCurrentUser()) {
105
- _.every(getCurrentUser().get('groups'), function (groupId) {
106
- if (groupId === this.model.get('_id')) {
107
- this.isMember = true;
108
- return false; // 'break;'
109
- }
110
- return true;
111
- }, this);
112
-
113
- _.every(getCurrentUser().get('groupInvites'), function (inv) {
114
- if (inv.groupId === this.model.get('_id')) {
115
- this.isInvited = true;
116
- return false; // 'break;'
117
- }
118
- return true;
119
- }, this);
120
-
121
- _.every(this.model.get('requests') || [], function (user) {
122
- if (user.id === getCurrentUser().get('_id')) {
123
- this.isRequested = true;
124
- return false; // 'break;'
125
- }
126
- return true;
127
- }, this);
128
- }
129
-
130
- if (this.isMember) {
131
- _.every(this.model.get('access').users || [], function (access) {
132
- if (access.id === getCurrentUser().get('_id')) {
133
- if (access.level === AccessType.WRITE) {
134
- this.isModerator = true;
135
- } else if (access.level === AccessType.ADMIN) {
136
- this.isAdmin = true;
137
- }
138
- return false; // 'break';
139
- }
140
- return true;
141
- }, this);
142
- }
143
- this.$el.html(GroupPageTemplate({
144
- group: this.model,
145
- getCurrentUser: getCurrentUser,
146
- AccessType: AccessType,
147
- isInvited: this.isInvited,
148
- isRequested: this.isRequested,
149
- isMember: this.isMember,
150
- isModerator: this.isModerator,
151
- isAdmin: this.isAdmin
152
- }));
153
-
154
- if (this.invitees) {
155
- this._renderInvitesWidget();
156
- } else {
157
- var container = this.$('.g-group-invites-body');
158
- new LoadingAnimation({
159
- el: container,
160
- parentView: this
161
- }).render();
162
-
163
- this.invitees = new UserCollection();
164
- this.invitees.altUrl =
165
- 'group/' + this.model.get('_id') + '/invitation';
166
- this.invitees.on('g:changed', () => {
167
- this._renderInvitesWidget();
168
- this.updatePendingStatus();
169
- }, this).fetch();
170
- }
171
-
172
- this._updateRolesLists();
173
-
174
- router.navigate('group/' + this.model.get('_id') + '/' +
175
- this.tab, { replace: true });
176
-
177
- if (this.edit) {
178
- if (this.model.get('_accessLevel') >= AccessType.ADMIN) {
179
- this.editGroup();
180
- }
181
- this.edit = false;
182
- }
183
-
184
- _.each($('.g-group-tabs>li>a'), (el) => {
185
- var tabLink = $(el);
186
- tabLink.tab().on('shown.bs.tab', (e) => {
187
- this.tab = $(e.currentTarget).attr('name');
188
- router.navigate('group/' + this.model.get('_id') + '/' + this.tab);
189
- });
190
-
191
- if (tabLink.attr('name') === this.tab) {
192
- tabLink.tab('show');
193
- }
194
- });
195
-
196
- return this;
197
- },
198
-
199
- _renderInvitesWidget: function () {
200
- new GroupInvitesWidget({
201
- el: this.$('.g-group-invites-body'),
202
- invitees: this.invitees,
203
- group: this.model,
204
- parentView: this
205
- }).render();
206
- this.updatePendingStatus();
207
- },
208
-
209
- updatePendingStatus: function () {
210
- var count = this.invitees.length +
211
- this.model.get('requests').length;
212
- $('#g-group-tab-pending-status').text(' (' + count + ')');
213
- },
214
-
215
- joinGroup: function () {
216
- this.model.off('g:joined').on('g:joined', function () {
217
- this.invitees.fetch(null, true);
218
- }, this).joinGroup();
219
- },
220
-
221
- leaveGroup: function () {
222
- confirm({
223
- text: 'Are you sure you want to leave this group?',
224
- confirmCallback: () => {
225
- this.model.off('g:removed').on('g:removed', () => {
226
- this.render();
227
- }).removeMember(getCurrentUser().get('_id'));
228
- }
229
- });
230
- },
231
-
232
- removeMember: function (user) {
233
- var id = user;
234
- if ($.type(user) !== 'string') {
235
- id = user.get('_id');
236
- }
237
- this.model.off('g:removed').on('g:removed', function () {
238
- this.render();
239
- }, this).removeMember(id);
240
- },
241
-
242
- requestInvitation: function () {
243
- this.model.off('g:inviteRequested').on('g:inviteRequested', function () {
244
- this.render();
245
- }, this).requestInvitation();
246
- },
247
-
248
- acceptMembershipRequest: function (e) {
249
- var userId = $(e.currentTarget).parents('li').attr('userid');
250
- this.model.off('g:invited').on('g:invited', this.render, this)
251
- .sendInvitation(userId, AccessType.READ, true);
252
- },
253
-
254
- denyMembershipRequest: function (e) {
255
- var userId = $(e.currentTarget).parents('li').attr('userid');
256
- this.model.off('g:removed').on('g:removed', this.render, this)
257
- .removeMember(userId);
258
- },
259
-
260
- _updateRolesLists: function () {
261
- var mods = [],
262
- admins = [];
263
-
264
- _.each(this.model.get('access').users, function (userAccess) {
265
- if (userAccess.level === AccessType.WRITE) {
266
- mods.push(userAccess);
267
- } else if (userAccess.level === AccessType.ADMIN) {
268
- admins.push(userAccess);
269
- }
270
- }, this);
271
-
272
- this.adminsWidget = new GroupAdminsWidget({
273
- el: this.$('.g-group-admins-container'),
274
- group: this.model,
275
- admins: admins,
276
- parentView: this
277
- }).off().on('g:demoteUser', function (userId) {
278
- this.model.off('g:demoted').on('g:demoted', this.render, this)
279
- .demoteUser(userId, AccessType.ADMIN);
280
- }, this).on('g:removeMember', this.removeMember, this)
281
- .on('g:moderatorAdded', this.render, this)
282
- .render();
283
-
284
- this.modsWidget = new GroupModsWidget({
285
- el: this.$('.g-group-mods-container'),
286
- group: this.model,
287
- moderators: mods,
288
- parentView: this
289
- }).on('g:demoteUser', function (userId) {
290
- this.model.off('g:demoted').on('g:demoted', this.render, this)
291
- .demoteUser(userId, AccessType.WRITE);
292
- }, this).on('g:removeMember', this.removeMember, this)
293
- .on('g:adminAdded', this.render, this)
294
- .render();
295
-
296
- this.membersWidget = new GroupMembersWidget({
297
- el: this.$('.g-group-members-container'),
298
- group: this.model,
299
- admins: admins,
300
- moderators: mods,
301
- parentView: this
302
- }).on('g:sendInvite', function (params) {
303
- var opts = {
304
- force: params.force || false
305
- };
306
- this.model.off('g:invited').on('g:invited', function () {
307
- this.invitees.fetch(null, true);
308
- if (params.force) {
309
- this.model.fetchAccess();
310
- }
311
- }, this).off('g:error').on('g:error', function (err) {
312
- events.trigger('g:alert', {
313
- text: err.responseJSON.message,
314
- type: 'warning'
315
- });
316
- }, this).sendInvitation(params.user.id, params.level, false, opts);
317
- }, this).on('g:removeMember', this.removeMember, this)
318
- .on('g:moderatorAdded', this.render, this)
319
- .on('g:adminAdded', this.render, this);
320
- }
321
- }, {
322
- /**
323
- * Helper function for fetching the user and rendering the view with
324
- * an arbitrary set of extra parameters.
325
- */
326
- fetchAndInit: function (groupId, params) {
327
- var group = new GroupModel();
328
- group.set({ _id: groupId }).once('g:fetched', function () {
329
- events.trigger('g:navigateTo', GroupView, _.extend({
330
- group: group
331
- }, params || {}));
332
- }, this).fetch();
333
- }
334
- });
335
-
336
- export default GroupView;
@@ -1,106 +0,0 @@
1
- import $ from 'jquery';
2
-
3
- import EditGroupWidget from '@girder/core/views/widgets/EditGroupWidget';
4
- import GroupCollection from '@girder/core/collections/GroupCollection';
5
- import GroupModel from '@girder/core/models/GroupModel';
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, DATE_DAY } from '@girder/core/misc';
12
- import { getCurrentUser } from '@girder/core/auth';
13
-
14
- import GroupListTemplate from '@girder/core/templates/body/groupList.pug';
15
-
16
- import '@girder/core/stylesheets/body/groupList.styl';
17
-
18
- /**
19
- * This view lists groups.
20
- */
21
- var GroupsView = View.extend({
22
- events: {
23
- 'click a.g-group-link': function (event) {
24
- var cid = $(event.currentTarget).attr('g-group-cid');
25
- router.navigate('group/' + this.collection.get(cid).id, { trigger: true });
26
- },
27
- 'submit .g-group-search-form': function (event) {
28
- event.preventDefault();
29
- },
30
- 'click .g-group-create-button': function () {
31
- this.createGroupDialog();
32
- }
33
- },
34
-
35
- initialize: function (settings) {
36
- cancelRestRequests('fetch');
37
- this.collection = new GroupCollection();
38
- this.collection.on('g:changed', function () {
39
- this.render();
40
- }, this).fetch();
41
-
42
- this.paginateWidget = new PaginateWidget({
43
- collection: this.collection,
44
- parentView: this
45
- });
46
-
47
- this.searchWidget = new SearchFieldWidget({
48
- placeholder: 'Search groups...',
49
- types: ['group'],
50
- parentView: this
51
- }).on('g:resultClicked', this._gotoGroup, this);
52
-
53
- this.create = settings.dialog === 'create';
54
- },
55
-
56
- render: function () {
57
- this.$el.html(GroupListTemplate({
58
- groups: this.collection.toArray(),
59
- getCurrentUser: getCurrentUser,
60
- formatDate: formatDate,
61
- DATE_DAY: DATE_DAY
62
- }));
63
-
64
- this.paginateWidget.setElement(this.$('.g-group-pagination')).render();
65
- this.searchWidget.setElement(this.$('.g-groups-search-container')).render();
66
-
67
- if (this.create) {
68
- this.createGroupDialog();
69
- this.create = false;
70
- }
71
-
72
- return this;
73
- },
74
-
75
- /**
76
- * Prompt the user to create a new group
77
- */
78
- createGroupDialog: function () {
79
- new EditGroupWidget({
80
- el: $('#g-dialog-container'),
81
- parentView: this
82
- }).off('g:saved').on('g:saved', function (group) {
83
- // Since the user has now joined this group, we can append its ID
84
- // to their groups list
85
- var userGroups = getCurrentUser().get('groups') || [];
86
- userGroups.push(group.get('_id'));
87
- getCurrentUser().set('groups', userGroups);
88
-
89
- router.navigate('group/' + group.get('_id'), { trigger: true });
90
- }, this).render();
91
- },
92
-
93
- /**
94
- * When the user clicks a search result group, this helper method
95
- * will navigate them to the view for that group.
96
- */
97
- _gotoGroup: function (result) {
98
- var group = new GroupModel();
99
- group.set('_id', result.id).on('g:fetched', function () {
100
- router.navigate('group/' + group.get('_id'), { trigger: true });
101
- }, this).fetch();
102
- }
103
-
104
- });
105
-
106
- export default GroupsView;
@@ -1,177 +0,0 @@
1
- import $ from 'jquery';
2
- import _ from 'underscore';
3
-
4
- import EditItemWidget from '@girder/core/views/widgets/EditItemWidget';
5
- import FileListWidget from '@girder/core/views/widgets/FileListWidget';
6
- import ItemBreadcrumbWidget from '@girder/core/views/widgets/ItemBreadcrumbWidget';
7
- import ItemModel from '@girder/core/models/ItemModel';
8
- import MetadataWidget from '@girder/core/views/widgets/MetadataWidget';
9
- import router from '@girder/core/router';
10
- import UploadWidget from '@girder/core/views/widgets/UploadWidget';
11
- import View from '@girder/core/views/View';
12
- import { AccessType } from '@girder/core/constants';
13
- import { cancelRestRequests } from '@girder/core/rest';
14
- import { confirm, handleClose } from '@girder/core/dialog';
15
- import events from '@girder/core/events';
16
- import { formatSize, formatDate, renderMarkdown, DATE_SECOND } from '@girder/core/misc';
17
-
18
- import ItemPageTemplate from '@girder/core/templates/body/itemPage.pug';
19
-
20
- import '@girder/core/stylesheets/body/itemPage.styl';
21
-
22
- import 'bootstrap/js/dropdown';
23
-
24
- /**
25
- * This view shows a single item's page.
26
- */
27
- var ItemView = View.extend({
28
- events: {
29
- 'click .g-edit-item': 'editItem',
30
- 'click .g-delete-item': 'deleteItem',
31
- 'click .g-upload-into-item': 'uploadIntoItem'
32
- },
33
-
34
- initialize: function (settings) {
35
- cancelRestRequests('fetch');
36
- this.edit = settings.edit || false;
37
- this.fileEdit = settings.fileEdit || false;
38
- this.upload = settings.upload || false;
39
-
40
- // If collection model is already passed, there is no need to fetch.
41
- if (settings.item) {
42
- this.model = settings.item;
43
- this.render();
44
- } else {
45
- console.error('Implement fetch then render item');
46
- }
47
- },
48
-
49
- uploadIntoItem: function () {
50
- new UploadWidget({
51
- el: $('#g-dialog-container'),
52
- parent: this.model,
53
- parentType: 'item',
54
- parentView: this
55
- }).on('g:uploadFinished', function () {
56
- handleClose('upload');
57
- this.upload = false;
58
-
59
- events.trigger('g:alert', {
60
- icon: 'ok',
61
- text: 'Files added.',
62
- type: 'success',
63
- timeout: 4000
64
- });
65
-
66
- this.fileListWidget.collection.fetch(null, true);
67
- }, this).render();
68
- },
69
-
70
- editItem: function () {
71
- var container = $('#g-dialog-container');
72
-
73
- if (!this.editItemWidget) {
74
- this.editItemWidget = new EditItemWidget({
75
- el: container,
76
- item: this.model,
77
- parentView: this
78
- }).off('g:saved').on('g:saved', function () {
79
- this.render();
80
- }, this);
81
- }
82
- this.editItemWidget.render();
83
- },
84
-
85
- deleteItem: function () {
86
- var folderId = this.model.get('folderId');
87
- var parentRoute = this.model.get('baseParentType') + '/' +
88
- this.model.get('baseParentId') + '/folder/' + folderId;
89
- confirm({
90
- text: 'Are you sure you want to delete <b>' + this.model.escape('name') + '</b>?',
91
- yesText: 'Delete',
92
- escapedHtml: true,
93
- confirmCallback: () => {
94
- this.model.on('g:deleted', () => {
95
- router.navigate(parentRoute, { trigger: true });
96
- }).off('g:error').on('g:error', () => {
97
- this.render();
98
- events.trigger('g:alert', {
99
- icon: 'cancel',
100
- text: 'Failed to delete item.',
101
- type: 'danger',
102
- timeout: 4000
103
- });
104
- }, this).destroy();
105
- }
106
- });
107
- },
108
-
109
- render: function () {
110
- // Fetch the access level asynchronously and render once we have
111
- // it. TODO: load the page and adjust only the action menu once
112
- // the access level is fetched.
113
- this.model.getAccessLevel((accessLevel) => {
114
- this.accessLevel = accessLevel;
115
- this.$el.html(ItemPageTemplate({
116
- item: this.model,
117
- accessLevel: accessLevel,
118
- AccessType: AccessType,
119
- formatSize: formatSize,
120
- formatDate: formatDate,
121
- renderMarkdown: renderMarkdown,
122
- DATE_SECOND: DATE_SECOND
123
- }));
124
-
125
- this.fileListWidget = new FileListWidget({
126
- el: this.$('.g-item-files-container'),
127
- item: this.model,
128
- fileEdit: this.fileEdit,
129
- upload: this.upload,
130
- parentView: this
131
- });
132
- this.fileListWidget.once('g:changed', function () {
133
- this.trigger('g:rendered');
134
- }, this);
135
-
136
- this.fileEdit = false;
137
- this.upload = false;
138
-
139
- this.metadataWidget = new MetadataWidget({
140
- el: this.$('.g-item-metadata'),
141
- item: this.model,
142
- accessLevel: accessLevel,
143
- parentView: this
144
- });
145
-
146
- this.model.getRootPath((resp) => {
147
- this.breadcrumbWidget = new ItemBreadcrumbWidget({
148
- el: this.$('.g-item-breadcrumb-container'),
149
- parentChain: resp,
150
- parentView: this
151
- });
152
- });
153
-
154
- if (this.edit) {
155
- this.editItem();
156
- this.edit = false;
157
- }
158
- });
159
-
160
- return this;
161
- }
162
- }, {
163
- /**
164
- * Helper function for fetching the user and rendering the view with
165
- * an arbitrary set of extra parameters.
166
- */
167
- fetchAndInit: function (itemId, params) {
168
- var item = new ItemModel();
169
- item.set({ _id: itemId }).on('g:fetched', function () {
170
- events.trigger('g:navigateTo', ItemView, _.extend({
171
- item: item
172
- }, params || {}));
173
- }, this).fetch();
174
- }
175
- });
176
-
177
- export default ItemView;
@@ -1,73 +0,0 @@
1
- import $ from 'jquery';
2
- import _ from 'underscore';
3
-
4
- import router from '@girder/core/router';
5
- import View from '@girder/core/views/View';
6
- import { getPluginConfigRoute } from '@girder/core/utilities/PluginUtils';
7
- import { restRequest, cancelRestRequests } from '@girder/core/rest';
8
-
9
- import PluginsTemplate from '@girder/core/templates/body/plugins.pug';
10
-
11
- import '@girder/core/stylesheets/body/plugins.styl';
12
-
13
- /**
14
- * This is the plugin management page for administrators.
15
- */
16
- var PluginsView = View.extend({
17
- events: {
18
- 'click a.g-plugin-config-link': function (evt) {
19
- var route = $(evt.currentTarget).attr('g-route');
20
- router.navigate(route, { trigger: true });
21
- }
22
- },
23
-
24
- initialize: function (settings) {
25
- cancelRestRequests('fetch');
26
- if (settings.all) {
27
- this.allPlugins = settings.all;
28
- this.render();
29
- } else {
30
- // Fetch the plugin list
31
- restRequest({
32
- url: 'system/plugins',
33
- method: 'GET'
34
- })
35
- .done((resp) => {
36
- this.allPlugins = resp.all;
37
- this.render();
38
- }).fail(() => {
39
- router.navigate('/', { trigger: true });
40
- });
41
- }
42
- },
43
-
44
- render: function () {
45
- _.each(this.allPlugins, function (info, name) {
46
- info.configRoute = getPluginConfigRoute(name);
47
- }, this);
48
-
49
- this.$el.html(PluginsTemplate({
50
- allPlugins: this._sortPlugins(this.allPlugins)
51
- }));
52
-
53
- return this;
54
- },
55
-
56
- _sortPlugins: function (plugins) {
57
- /* Sort a dictionary of plugins alphabetically so that the appear in a
58
- * predictable order to the user.
59
- *
60
- * @param plugins: a dictionary to sort. Each entry has a .name
61
- * attribute used for sorting.
62
- * @returns sortedPlugins: the sorted list. */
63
- var sortedPlugins = _.map(plugins, function (value, key) {
64
- return { key: key, value: value };
65
- });
66
- sortedPlugins.sort(function (a, b) {
67
- return a.value.name.localeCompare(b.value.name);
68
- });
69
- return sortedPlugins;
70
- }
71
- });
72
-
73
- export default PluginsView;