@openneuro/app 4.20.6 → 4.21.0-alpha.3

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 (42) hide show
  1. package/package.json +4 -4
  2. package/src/scripts/app.tsx +16 -10
  3. package/src/scripts/components/__tests__/agreement.spec.tsx +24 -0
  4. package/src/scripts/components/agreement.tsx +76 -0
  5. package/src/scripts/dataset/__tests__/__snapshots__/snapshot-container.spec.tsx.snap +10 -354
  6. package/src/scripts/dataset/components/BrainLifeButton.tsx +38 -0
  7. package/src/scripts/dataset/components/CloneDropdown.tsx +31 -0
  8. package/src/scripts/dataset/components/DatasetAlert.tsx +25 -0
  9. package/src/scripts/dataset/components/DatasetGitAccess.tsx +82 -0
  10. package/src/scripts/dataset/components/DatasetHeader.tsx +43 -0
  11. package/src/scripts/dataset/components/DatasetHeaderMeta.tsx +22 -0
  12. package/src/scripts/dataset/components/DatasetToolButton.tsx +52 -0
  13. package/src/scripts/dataset/components/DatasetTools.tsx +149 -0
  14. package/src/scripts/dataset/components/MetaDataBlock.tsx +24 -0
  15. package/src/scripts/dataset/components/MetaDataListBlock.tsx +23 -0
  16. package/src/scripts/dataset/components/ModalitiesMetaDataBlock.tsx +32 -0
  17. package/src/scripts/dataset/components/NemarButton.tsx +34 -0
  18. package/src/scripts/dataset/components/ValidationBlock.tsx +11 -0
  19. package/src/scripts/dataset/components/VersionList.tsx +115 -0
  20. package/src/scripts/dataset/components/__tests__/DatasetAlert.spec.tsx +25 -0
  21. package/src/scripts/dataset/components/__tests__/DatasetHeaders.spec.tsx +18 -0
  22. package/src/scripts/dataset/components/__tests__/DatasetTools.spec.tsx +133 -0
  23. package/src/scripts/dataset/draft-container.tsx +9 -11
  24. package/src/scripts/dataset/files/__tests__/file.spec.jsx +13 -4
  25. package/src/scripts/dataset/files/file.tsx +27 -21
  26. package/src/scripts/dataset/fragments/dataset-alert-draft.tsx +1 -1
  27. package/src/scripts/dataset/fragments/dataset-alert-version.tsx +1 -1
  28. package/src/scripts/dataset/routes/dataset-default.tsx +1 -1
  29. package/src/scripts/dataset/routes/download-dataset.tsx +7 -1
  30. package/src/scripts/dataset/routes/snapshot-default.tsx +1 -1
  31. package/src/scripts/dataset/snapshot-container.tsx +10 -12
  32. package/src/scripts/scss/README.md +3 -0
  33. package/src/scripts/scss/dataset/comments.scss +152 -0
  34. package/src/scripts/scss/dataset/dataset-page.scss +397 -0
  35. package/src/scripts/scss/dataset/dataset-tool.scss +281 -0
  36. package/src/scripts/scss/dataset/dropdown.scss +29 -0
  37. package/src/scripts/scss/dataset/validation.scss +392 -0
  38. package/src/scripts/scss/dataset/version-dropdown.scss +121 -0
  39. package/src/scripts/scss/index.scss +6 -0
  40. package/src/scripts/scss/variables.scss +205 -0
  41. package/src/scripts/utils/__tests__/local-storage.spec.tsx +32 -0
  42. package/src/scripts/utils/local-storage.tsx +53 -0
@@ -0,0 +1,397 @@
1
+ @import '../variables.scss';
2
+ .dataset {
3
+ .dataset-header {
4
+ h1 {
5
+ display: flex;
6
+ align-items: center;
7
+ color: #fff;
8
+ font-size: 24px;
9
+ @media (max-width: 767px) {
10
+ font-size: 20px;
11
+ flex-wrap: wrap;
12
+ justify-content: center;
13
+ }
14
+ }
15
+ .hexagon-wrapper {
16
+ margin-right: 10px;
17
+ @media (max-width: 767px) {
18
+ width: 56px;
19
+ height: 56px;
20
+ div.label {
21
+ font-size: 17px;
22
+ }
23
+ }
24
+ }
25
+ }
26
+
27
+ .dataset-header-alert {
28
+ padding: 10px 20px;
29
+ background: #b5f1b5;
30
+ display: flex;
31
+ justify-content: center;
32
+ flex-direction: column;
33
+ align-items: center;
34
+ &.warning {
35
+ background-color: #fff3c5;
36
+ }
37
+ &.error {
38
+ background-color: #ff8686;
39
+ }
40
+ span[data-tooltip] {
41
+ display: inline;
42
+ }
43
+ }
44
+
45
+ .dataset-content {
46
+ margin-top: 25px;
47
+ }
48
+
49
+ .dataset-validation {
50
+ display: flex;
51
+ justify-content: space-between;
52
+ margin-bottom: 25px;
53
+ @media (max-width: 767px) {
54
+ flex-wrap: wrap;
55
+ justify-content: flex-start;
56
+ }
57
+ .validation-accordion {
58
+ flex-grow: 1;
59
+ margin-right: 20px;
60
+ @media (max-width: 990px) {
61
+ margin-bottom: 20px;
62
+ }
63
+ @media (max-width: 767px) {
64
+ min-width: 100%;
65
+ }
66
+ }
67
+ .brainlife-block {
68
+ margin-right: 20px;
69
+ }
70
+ .clone-dropdown {
71
+ position: relative;
72
+ .clone-link i {
73
+ margin-left: 10px;
74
+ }
75
+ .toggle {
76
+ .fa-caret-up {
77
+ display: none;
78
+ }
79
+ .fa-caret-down {
80
+ display: inline;
81
+ }
82
+ &.active {
83
+ .fa-caret-up {
84
+ display: inline;
85
+ }
86
+ .fa-caret-down {
87
+ display: none;
88
+ }
89
+ }
90
+ }
91
+ .menu {
92
+ box-shadow: 0px 1px 5px -1px rgba(0, 0, 0, 51%);
93
+ margin-top: 4px;
94
+ @media (max-width: 767px) {
95
+ left: 0;
96
+ }
97
+ .dataset-git-access {
98
+ width: 450px;
99
+ background: #fff;
100
+ border-radius: $border-radius-default;
101
+ padding: 20px;
102
+ @media (max-width: 800px) {
103
+ width: 100%;
104
+ }
105
+ span {
106
+ display: flex;
107
+ justify-content: space-between;
108
+ align-items: center;
109
+ font-size: 14px;
110
+ h4 {
111
+ margin: 0;
112
+ font-size: 18px;
113
+ }
114
+ }
115
+ .git-url,
116
+ .git-hash {
117
+ display: flex;
118
+ justify-content: space-between;
119
+ align-items: center;
120
+ margin: 20px 0 0;
121
+ font-size: 14px;
122
+ flex-wrap: wrap;
123
+ > div {
124
+ flex-grow: 1;
125
+ padding: 5px;
126
+ text-overflow: ellipsis;
127
+ max-width: 100%;
128
+ overflow: hidden;
129
+ }
130
+ }
131
+ }
132
+ i {
133
+ color: var(--current-theme-primary);
134
+ &:hover {
135
+ color: var(--current-theme-primary-hover);
136
+ }
137
+ }
138
+ button {
139
+ padding: 0;
140
+ margin-right: 10px;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+
147
+ .dataset {
148
+ .hexagon-wrapper {
149
+ text-align: center;
150
+ margin: 20px auto;
151
+ position: relative;
152
+ display: inline-block;
153
+ width: 45px;
154
+ height: 45px;
155
+ div.label {
156
+ position: absolute;
157
+ top: 0;
158
+ text-align: center;
159
+ width: 100%;
160
+ left: 0;
161
+ right: 0;
162
+ bottom: 0;
163
+ display: flex;
164
+ justify-content: center;
165
+ align-items: center;
166
+ font-weight: 600;
167
+ font-size: 13px;
168
+ }
169
+
170
+ .hexagon {
171
+ height: 100%;
172
+ width: calc(100% * 0.57735);
173
+ display: inline-block;
174
+ }
175
+
176
+ .hexagon:before {
177
+ position: absolute;
178
+ top: 0;
179
+ right: calc((100% / 2) - ((100% * 0.57735) / 2));
180
+ background-color: inherit;
181
+ height: inherit;
182
+ width: inherit;
183
+ content: '';
184
+ transform: rotateZ(60deg);
185
+ }
186
+
187
+ .hexagon:after {
188
+ position: absolute;
189
+ top: 0;
190
+ right: calc((100% / 2) - ((100% * 0.57735) / 2));
191
+ background-color: inherit;
192
+ height: inherit;
193
+ width: inherit;
194
+ content: '';
195
+ transform: rotateZ(-60deg);
196
+ }
197
+ }
198
+
199
+ a {
200
+ .hexagon {
201
+ transition: color 0.3s;
202
+ background-color: #fff;
203
+
204
+ &.mri {
205
+ color: $mri-theme;
206
+ }
207
+ &.eeg {
208
+ color: $eeg-theme;
209
+ }
210
+
211
+ &.pet {
212
+ color: $pet-theme;
213
+ }
214
+ &.ieeg {
215
+ color: $ieeg-theme;
216
+ }
217
+
218
+ &.meg {
219
+ color: $meg-theme;
220
+ }
221
+ }
222
+ &:hover {
223
+ .hexagon {
224
+ color: lighten($on-dark-aqua, 15%);
225
+ &.mri {
226
+ color: lighten($mri-theme, 10%);
227
+ }
228
+ &.eeg {
229
+ color: lighten($eeg-theme, 10%);
230
+ }
231
+
232
+ &.pet {
233
+ color: lighten($pet-theme, 10%);
234
+ }
235
+ &.ieeg {
236
+ color: lighten($ieeg-theme, 10%);
237
+ }
238
+
239
+ &.meg {
240
+ color: lighten($meg-theme, 10%);
241
+ }
242
+ }
243
+ }
244
+ }
245
+ }
246
+
247
+ .sidebar .dataset-meta-block {
248
+ margin-bottom: 25px;
249
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,
250
+ sans-serif, Apple Color Emoji, Segoe UI Emoji;
251
+ word-break: break-word;
252
+ .dmb-heading {
253
+ font-size: 14px;
254
+ margin: 0 0 10px;
255
+ }
256
+
257
+ &.dmb-inline-list {
258
+ ul {
259
+ padding: 0;
260
+ margin: 0;
261
+ list-style: none;
262
+ display: flex;
263
+ flex-wrap: wrap;
264
+ li {
265
+ margin-right: 5px;
266
+ &:after {
267
+ content: ',';
268
+ }
269
+ &:last-child {
270
+ margin: 0;
271
+ &:after {
272
+ content: '';
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ &.dmb-modalities {
279
+ padding: 0;
280
+ margin: 0 0 25px;
281
+ list-style: none;
282
+ display: flex;
283
+ flex-wrap: wrap;
284
+ h2 {
285
+ flex-basis: 100%;
286
+ min-width: 100%;
287
+ }
288
+ a {
289
+ display: block;
290
+ font-size: 12px;
291
+ font-weight: bold;
292
+ letter-spacing: 1px;
293
+ margin-right: 5px;
294
+ border: 1px solid;
295
+ background: var(--current-theme-primary);
296
+ padding: 5px 12px;
297
+ color: #fff;
298
+ text-decoration: none;
299
+ border-radius: $border-radius-default;
300
+ &:hover {
301
+ background: var(--current-theme-primary-hover);
302
+ }
303
+ }
304
+ }
305
+ &.dmb-list {
306
+ a {
307
+ word-break: break-word;
308
+ }
309
+ }
310
+
311
+ .cite-content-block {
312
+ background-color: #f6f6f6;
313
+ margin: 10px 0;
314
+ border: 1px solid #eee;
315
+ border-radius: 4px;
316
+ padding: 10px;
317
+ }
318
+ }
319
+
320
+ .dataset-meta-block.dataset-readme {
321
+ border: 1px solid #ccc;
322
+ border-radius: $border-radius-default;
323
+ padding: 20px 15px;
324
+ margin-bottom: 25px;
325
+ .dmb-heading {
326
+ font-size: 14px;
327
+ margin: 0 0 10px;
328
+ border: 0;
329
+ }
330
+ a {
331
+ word-break: break-all;
332
+ }
333
+ }
334
+
335
+ .dataset-meta-block.dataset-readme.markdown-body {
336
+ h1 {
337
+ font-size: 1.7em;
338
+ }
339
+ }
340
+
341
+ .deprecated-modal {
342
+ .modal-body {
343
+ width: 500px;
344
+ padding: 30px 0 0;
345
+ font-weight: bold;
346
+ }
347
+ }
348
+
349
+ .dataset-header {
350
+ background-color: #333;
351
+ }
352
+
353
+ .dataset-page {
354
+ .dataset-header {
355
+ background-color: var(--current-theme-header);
356
+ background: linear-gradient(
357
+ 16deg,
358
+ var(--current-theme-header-dark),
359
+ var(--current-theme-header)
360
+ );
361
+ }
362
+ }
363
+
364
+ // Collapsible panels (aka, accordion)
365
+ //
366
+ // Wrap a series of panels in `.panel-group` to turn them into an accordion with
367
+ // the help of our collapse JavaScript plugin.
368
+
369
+ .panel-group {
370
+ margin-bottom: 10px;
371
+
372
+ // Tighten up margin so it's only between panels
373
+ .panel {
374
+ margin-bottom: 0;
375
+ border-radius: 4px;
376
+
377
+ + .panel {
378
+ margin-top: 5px;
379
+ }
380
+ }
381
+
382
+ .panel-heading {
383
+ border-bottom: 0;
384
+
385
+ + .panel-collapse > .panel-body,
386
+ + .panel-collapse > .list-group {
387
+ border-top: 1px solid;
388
+ }
389
+ }
390
+
391
+ .panel-footer {
392
+ border-top: 0;
393
+ + .panel-collapse .panel-body {
394
+ border-bottom: 1px solid;
395
+ }
396
+ }
397
+ }
@@ -0,0 +1,281 @@
1
+ @import '../variables.scss';
2
+ //share table
3
+ .download-link {
4
+ .return-link {
5
+ text-transform: uppercase;
6
+ color: #333;
7
+ font-weight: 600;
8
+ text-decoration: none;
9
+ margin-left: 40px;
10
+ font-size: 14px;
11
+ &:hover {
12
+ text-decoration: underline;
13
+ }
14
+ }
15
+ }
16
+
17
+ .return-link {
18
+ text-transform: uppercase;
19
+ color: #333;
20
+ font-weight: 600;
21
+ text-decoration: none;
22
+ margin-left: 40px;
23
+ font-size: 14px;
24
+ &:hover {
25
+ text-decoration: underline;
26
+ }
27
+ }
28
+
29
+ //share table
30
+ .metadata-form {
31
+ margin-bottom: 40px;
32
+ .return-link {
33
+ text-transform: uppercase;
34
+ color: #333;
35
+ font-weight: 600;
36
+ text-decoration: none;
37
+ margin-left: 40px;
38
+ font-size: 14px;
39
+ &:hover {
40
+ text-decoration: underline;
41
+ }
42
+ }
43
+ }
44
+
45
+ //share table
46
+ .dataset-share-form {
47
+ .data-table-header,
48
+ .data-table-content {
49
+ display: flex;
50
+ justify-content: space-between;
51
+ align-content: center;
52
+ @media (max-width: 767px) {
53
+ flex-wrap: wrap;
54
+ }
55
+ > span {
56
+ display: block;
57
+ min-width: 33.3333%;
58
+ margin-bottom: 11px;
59
+ label {
60
+ font-weight: bold;
61
+ font-size: 14px;
62
+ display: none;
63
+ @media (max-width: 767px) {
64
+ display: block;
65
+ }
66
+ }
67
+ }
68
+ }
69
+
70
+ .data-table-content {
71
+ margin-bottom: 20px;
72
+ border-bottom: 1px solid #ccc;
73
+ }
74
+
75
+ .data-table-header {
76
+ font-weight: bold;
77
+ font-size: 14px;
78
+ @media (max-width: 767px) {
79
+ display: none;
80
+ }
81
+ }
82
+
83
+ .share-input-group {
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ align-items: center;
87
+ input {
88
+ margin-right: 10px;
89
+ width: 400px;
90
+ max-width: 90%;
91
+ }
92
+ button {
93
+ margin-right: 10px;
94
+ }
95
+ }
96
+ .warn-btn .warn-btn-group button {
97
+ width: auto;
98
+ }
99
+ .warn-btn .btn-warn-component {
100
+ padding: 11px;
101
+ }
102
+ .return-link {
103
+ text-transform: uppercase;
104
+ color: #333;
105
+ font-weight: 600;
106
+ text-decoration: none;
107
+ margin-left: 40px;
108
+ font-size: 14px;
109
+ &:hover {
110
+ text-decoration: underline;
111
+ }
112
+ }
113
+
114
+ .share-form-controls {
115
+ margin-top: 30px;
116
+ }
117
+ }
118
+
119
+ .dataset-snapshot-form {
120
+ .data-table-header,
121
+ .data-table-content {
122
+ display: flex;
123
+ justify-content: space-between;
124
+ align-content: center;
125
+ @media (max-width: 767px) {
126
+ flex-wrap: wrap;
127
+ }
128
+ > span {
129
+ display: block;
130
+ min-width: 33.3333%;
131
+ margin-bottom: 11px;
132
+ label {
133
+ font-weight: bold;
134
+ font-size: 14px;
135
+ display: none;
136
+ @media (max-width: 767px) {
137
+ display: block;
138
+ }
139
+ }
140
+ }
141
+ }
142
+ .input-group-btn {
143
+ margin-left: 20px;
144
+ }
145
+ .snapshot-input-group {
146
+ display: flex;
147
+ flex-wrap: wrap;
148
+ align-items: center;
149
+ input {
150
+ margin-right: 10px;
151
+ width: 400px;
152
+ max-width: 90%;
153
+ }
154
+ button {
155
+ margin-right: 10px;
156
+ }
157
+ }
158
+ }
159
+
160
+ .datalad-dataset-form {
161
+ margin: 20px auto;
162
+ .actions {
163
+ align-items: center;
164
+ justify-content: flex-end;
165
+ button {
166
+ margin-left: 5px;
167
+ margin-bottom: 10px;
168
+ }
169
+ }
170
+ .dataset-form-controls {
171
+ margin-top: 20px;
172
+ }
173
+ .faux-table {
174
+ padding-top: 10px;
175
+ padding-bottom: 10px;
176
+ label {
177
+ font-weight: 600;
178
+ display: none;
179
+ }
180
+ &:nth-child(even) {
181
+ background-color: #eee;
182
+ }
183
+ }
184
+ .col.commit {
185
+ word-break: break-all;
186
+ }
187
+ @media (max-width: 990px) {
188
+ .faux-table-header {
189
+ display: none;
190
+ }
191
+ .faux-table {
192
+ label {
193
+ margin-right: 5px;
194
+ display: inline-block;
195
+ }
196
+ }
197
+ .actions {
198
+ justify-content: flex-start;
199
+ }
200
+ }
201
+ }
202
+
203
+
204
+
205
+ .reviewer-link {
206
+ > div {
207
+ display: flex;
208
+ align-items: center;
209
+ .tooltip {
210
+ margin: 0 20px 0 0;
211
+ min-width: 160px;
212
+ }
213
+ pre {
214
+ word-break: break-all;
215
+ display: block;
216
+ white-space: break-spaces;
217
+ }
218
+ }
219
+ small {
220
+ margin-bottom: 20px;
221
+ display: block;
222
+ }
223
+ }
224
+ .dataset-anonymous-form {
225
+ margin-bottom: 20px;
226
+ .dataset-form-body {
227
+ margin: 20px 0;
228
+ padding: 10px 10px 0;
229
+ background: #eee;
230
+ h3 {
231
+ margin-top: 0;
232
+ }
233
+ }
234
+ .data-table-header,
235
+ .data-table-content {
236
+ display: flex;
237
+ justify-content: space-between;
238
+ align-content: center;
239
+ @media (max-width: 767px) {
240
+ flex-wrap: wrap;
241
+ }
242
+ > span {
243
+ display: block;
244
+ min-width: 33.3333%;
245
+ margin-bottom: 11px;
246
+ label {
247
+ font-weight: bold;
248
+ font-size: 14px;
249
+ display: none;
250
+ @media (max-width: 767px) {
251
+ display: block;
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ .data-table-content {
258
+ margin-bottom: 20px;
259
+ border-bottom: 1px solid #ccc;
260
+ }
261
+
262
+ .data-table-header {
263
+ font-weight: bold;
264
+ font-size: 14px;
265
+ @media (max-width: 767px) {
266
+ display: none;
267
+ }
268
+ }
269
+
270
+ .return-link {
271
+ text-transform: uppercase;
272
+ color: #333;
273
+ font-weight: 600;
274
+ text-decoration: none;
275
+ margin-left: 40px;
276
+ font-size: 14px;
277
+ &:hover {
278
+ text-decoration: underline;
279
+ }
280
+ }
281
+ }
@@ -0,0 +1,29 @@
1
+ @import '../variables.scss';
2
+
3
+ .dropdown-wrapper {
4
+ display: inline-block;
5
+ .toggle {
6
+ cursor: pointer;
7
+ }
8
+ .menu {
9
+ position: absolute;
10
+ overflow: hidden;
11
+ height: 0;
12
+ z-index: 9999;
13
+ right: 0;
14
+ background-color: #fff;
15
+ border-radius: $border-radius-default;
16
+ @media (max-width: 800px) {
17
+ width: 290px;
18
+ right: 0;
19
+ }
20
+ @media (max-width: 435px) {
21
+ right: 0;
22
+ left: 0;
23
+ }
24
+
25
+ &.expanded {
26
+ height: auto;
27
+ }
28
+ }
29
+ }