@openneuro/app 4.2.0 → 4.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -18
- package/src/scripts/common/forms/warn-button.jsx +1 -1
- package/src/scripts/pages/citation-page.tsx +41 -0
- package/src/scripts/refactor_2021/admin/admin.jsx +1 -1
- package/src/scripts/refactor_2021/admin/flagged-files.jsx +2 -1
- package/src/scripts/refactor_2021/admin/user-tools.tsx +3 -5
- package/src/scripts/refactor_2021/admin/users.jsx +7 -10
- package/src/scripts/{authentication → refactor_2021/authentication}/__tests__/profile.spec.js +1 -1
- package/src/scripts/{datalad/dataset → refactor_2021/dataset/comments}/__tests__/__snapshots__/comment.spec.jsx.snap +0 -8
- package/src/scripts/refactor_2021/dataset/comments/__tests__/__snapshots__/comments.spec.jsx.snap +129 -0
- package/src/scripts/{datalad/dataset → refactor_2021/dataset/comments}/__tests__/comment.spec.jsx +0 -0
- package/src/scripts/{datalad/dataset → refactor_2021/dataset/comments}/__tests__/comments.spec.jsx +0 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/__snapshots__/download-command-line.spec.jsx.snap +0 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/__snapshots__/download-link.spec.jsx.snap +645 -105
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/__snapshots__/shell-example.spec.jsx.snap +6 -3
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/download-command-line.spec.jsx +0 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/download-link.spec.jsx +0 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/download-native.spec.js +0 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/download/__tests__/shell-example.spec.jsx +0 -0
- package/src/scripts/refactor_2021/dataset/draft-container.tsx +11 -22
- package/src/scripts/refactor_2021/dataset/files/file-tree.jsx +3 -2
- package/src/scripts/refactor_2021/dataset/fragments/__tests__/__snapshots__/cancel-button.spec.tsx.snap +10 -0
- package/src/scripts/refactor_2021/dataset/fragments/__tests__/__snapshots__/edit-button.spec.tsx.snap +10 -0
- package/src/scripts/refactor_2021/dataset/fragments/__tests__/__snapshots__/edit-list.spec.jsx.snap +24 -0
- package/src/scripts/refactor_2021/dataset/fragments/__tests__/__snapshots__/save-button.spec.tsx.snap +10 -0
- package/src/scripts/{datalad/fragments/__tests__/__snapshots__/select-input.spec.jsx.snap → refactor_2021/dataset/fragments/__tests__/__snapshots__/select-input.spec.tsx.snap} +0 -0
- package/src/scripts/{datalad/fragments/__tests__/cancel-button.spec.jsx → refactor_2021/dataset/fragments/__tests__/cancel-button.spec.tsx} +2 -2
- package/src/scripts/{datalad → refactor_2021/dataset}/fragments/__tests__/dataset-citation.spec.jsx +0 -0
- package/src/scripts/{datalad/fragments/__tests__/edit-button.spec.jsx → refactor_2021/dataset/fragments/__tests__/edit-button.spec.tsx} +2 -2
- package/src/scripts/refactor_2021/dataset/fragments/__tests__/edit-list.spec.jsx +27 -0
- package/src/scripts/{datalad/fragments/__tests__/save-button.spec.jsx → refactor_2021/dataset/fragments/__tests__/save-button.spec.tsx} +2 -2
- package/src/scripts/{datalad/fragments/__tests__/select-input.spec.jsx → refactor_2021/dataset/fragments/__tests__/select-input.spec.tsx} +0 -0
- package/src/scripts/refactor_2021/dataset/mutations/__tests__/__snapshots__/delete.spec.jsx.snap +50 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/mutations/__tests__/__snapshots__/description.spec.jsx.snap +0 -0
- package/src/scripts/refactor_2021/dataset/mutations/__tests__/__snapshots__/update-permissions.spec.jsx.snap +27 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/mutations/__tests__/cache-id.spec.js +0 -0
- package/src/scripts/{datalad → refactor_2021/dataset}/mutations/__tests__/delete.spec.jsx +8 -8
- package/src/scripts/{datalad → refactor_2021/dataset}/mutations/__tests__/description.spec.jsx +0 -0
- package/src/scripts/{datalad/mutations/__tests__/remove-permissions.spec.jsx → refactor_2021/dataset/mutations/__tests__/remove-permissions.spec.tsx} +1 -1
- package/src/scripts/refactor_2021/dataset/mutations/__tests__/update-permissions.spec.jsx +28 -0
- package/src/scripts/refactor_2021/dataset/mutations/update-file.jsx +2 -2
- package/src/scripts/refactor_2021/dataset/snapshot-container.tsx +4 -8
- package/src/scripts/refactor_2021/routes.tsx +1 -1
- package/src/scripts/refactor_2021/search/initial-search-params.tsx +7 -7
- package/src/scripts/refactor_2021/search/inputs/index.ts +2 -2
- package/src/scripts/refactor_2021/search/inputs/{gender-radios.tsx → sex-radios.tsx} +10 -10
- package/src/scripts/refactor_2021/search/search-container.tsx +2 -2
- package/src/scripts/refactor_2021/search/search-params-ctx.tsx +3 -3
- package/src/scripts/refactor_2021/search/use-search-results.tsx +3 -3
- package/src/scripts/refactor_2021/user/api.jsx +11 -6
- package/src/sass/_bootstrap-compass.scss +0 -9
- package/src/sass/_bootstrap-mincer.scss +0 -19
- package/src/sass/_bootstrap-sprockets.scss +0 -9
- package/src/sass/_bootstrap.scss +0 -50
- package/src/sass/animate/_attention-seekers/_bounce.scss +0 -15
- package/src/sass/animate/_attention-seekers/_flash.scss +0 -14
- package/src/sass/animate/_attention-seekers/_pulse.scss +0 -17
- package/src/sass/animate/_attention-seekers/_rubberBand.scss +0 -19
- package/src/sass/animate/_attention-seekers/_shake.scss +0 -15
- package/src/sass/animate/_attention-seekers/_swing.scss +0 -19
- package/src/sass/animate/_attention-seekers/_tada.scss +0 -17
- package/src/sass/animate/_attention-seekers/_wobble.scss +0 -21
- package/src/sass/animate/_attention-seekers/attention-seekers.scss +0 -12
- package/src/sass/animate/_bouncing-entrances/_bounceIn.scss +0 -26
- package/src/sass/animate/_bouncing-entrances/_bounceInDown.scss +0 -26
- package/src/sass/animate/_bouncing-entrances/_bounceInLeft.scss +0 -26
- package/src/sass/animate/_bouncing-entrances/_bounceInRight.scss +0 -26
- package/src/sass/animate/_bouncing-entrances/_bounceInUp.scss +0 -26
- package/src/sass/animate/_bouncing-entrances/bouncing-entrances.scss +0 -9
- package/src/sass/animate/_bouncing-exits/_bounceOut.scss +0 -26
- package/src/sass/animate/_bouncing-exits/_bounceOutDown.scss +0 -23
- package/src/sass/animate/_bouncing-exits/_bounceOutLeft.scss +0 -23
- package/src/sass/animate/_bouncing-exits/_bounceOutRight.scss +0 -23
- package/src/sass/animate/_bouncing-exits/_bounceOutUp.scss +0 -23
- package/src/sass/animate/_bouncing-exits/bouncing-exits.scss +0 -4
- package/src/sass/animate/_fading-entrances/_fadeIn.scss +0 -14
- package/src/sass/animate/_fading-entrances/_fadeInDown.scss +0 -20
- package/src/sass/animate/_fading-entrances/_fadeInDownBig.scss +0 -20
- package/src/sass/animate/_fading-entrances/_fadeInLeft.scss +0 -20
- package/src/sass/animate/_fading-entrances/_fadeInLeftBig.scss +0 -20
- package/src/sass/animate/_fading-entrances/_fadeInRight.scss +0 -20
- package/src/sass/animate/_fading-entrances/_fadeInRightBig.scss +0 -20
- package/src/sass/animate/_fading-entrances/_fadeInUp.scss +0 -19
- package/src/sass/animate/_fading-entrances/_fadeInUpBig.scss +0 -20
- package/src/sass/animate/_fading-entrances/fading-entrances.scss +0 -5
- package/src/sass/animate/_fading-exits/_fadeOut.scss +0 -14
- package/src/sass/animate/_fading-exits/_fadeOutDown.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutDownBig.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutLeft.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutLeftBig.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutRight.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutRightBig.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutUp.scss +0 -20
- package/src/sass/animate/_fading-exits/_fadeOutUpBig.scss +0 -20
- package/src/sass/animate/_fading-exits/fading-exits.scss +0 -5
- package/src/sass/animate/_flippers/_flip.scss +0 -33
- package/src/sass/animate/_flippers/_flipInX.scss +0 -26
- package/src/sass/animate/_flippers/_flipInY.scss +0 -26
- package/src/sass/animate/_flippers/_flipOutX.scss +0 -20
- package/src/sass/animate/_flippers/_flipOutY.scss +0 -20
- package/src/sass/animate/_flippers/flippers.scss +0 -8
- package/src/sass/animate/_lightspeed/_lightSpeedIn.scss +0 -29
- package/src/sass/animate/_lightspeed/_lightSpeedOut.scss +0 -21
- package/src/sass/animate/_lightspeed/lightspeed.scss +0 -3
- package/src/sass/animate/_properties.scss +0 -119
- package/src/sass/animate/_rotating-entrances/_rotateIn.scss +0 -22
- package/src/sass/animate/_rotating-entrances/_rotateInDownLeft.scss +0 -22
- package/src/sass/animate/_rotating-entrances/_rotateInDownRight.scss +0 -22
- package/src/sass/animate/_rotating-entrances/_rotateInUpLeft.scss +0 -22
- package/src/sass/animate/_rotating-entrances/_rotateInUpRight.scss +0 -22
- package/src/sass/animate/_rotating-entrances/rotating-entrances.scss +0 -8
- package/src/sass/animate/_rotating-exits/_rotateOut.scss +0 -22
- package/src/sass/animate/_rotating-exits/_rotateOutDownLeft.scss +0 -22
- package/src/sass/animate/_rotating-exits/_rotateOutDownRight.scss +0 -22
- package/src/sass/animate/_rotating-exits/_rotateOutUpLeft.scss +0 -22
- package/src/sass/animate/_rotating-exits/_rotateOutUpRight.scss +0 -22
- package/src/sass/animate/_rotating-exits/rotating-exits.scss +0 -8
- package/src/sass/animate/_sliding-entrances/_slideInDown.scss +0 -19
- package/src/sass/animate/_sliding-entrances/_slideInLeft.scss +0 -19
- package/src/sass/animate/_sliding-entrances/_slideInRight.scss +0 -42
- package/src/sass/animate/_sliding-entrances/_slideInUp.scss +0 -19
- package/src/sass/animate/_sliding-entrances/sliding-entrances.scss +0 -7
- package/src/sass/animate/_sliding-exits/_slideOutDown.scss +0 -19
- package/src/sass/animate/_sliding-exits/_slideOutLeft.scss +0 -19
- package/src/sass/animate/_sliding-exits/_slideOutRight.scss +0 -19
- package/src/sass/animate/_sliding-exits/_slideOutUp.scss +0 -19
- package/src/sass/animate/_sliding-exits/sliding-exits.scss +0 -7
- package/src/sass/animate/_specials/_hinge.scss +0 -37
- package/src/sass/animate/_specials/_rollIn.scss +0 -20
- package/src/sass/animate/_specials/_rollOut.scss +0 -22
- package/src/sass/animate/_specials/specials.scss +0 -6
- package/src/sass/animate/_zooming-entrances/_zoomIn.scss +0 -19
- package/src/sass/animate/_zooming-entrances/_zoomInDown.scss +0 -22
- package/src/sass/animate/_zooming-entrances/_zoomInLeft.scss +0 -22
- package/src/sass/animate/_zooming-entrances/_zoomInRight.scss +0 -22
- package/src/sass/animate/_zooming-entrances/_zoomInUp.scss +0 -22
- package/src/sass/animate/_zooming-entrances/zooming-entrances.scss +0 -4
- package/src/sass/animate/_zooming-exits/_zoomOut.scss +0 -22
- package/src/sass/animate/_zooming-exits/_zoomOutDown.scss +0 -23
- package/src/sass/animate/_zooming-exits/_zoomOutLeft.scss +0 -21
- package/src/sass/animate/_zooming-exits/_zoomOutRight.scss +0 -21
- package/src/sass/animate/_zooming-exits/_zoomOutUp.scss +0 -23
- package/src/sass/animate/_zooming-exits/zooming-exits.scss +0 -4
- package/src/sass/animate/animate.css +0 -7497
- package/src/sass/animate/animate.css.map +0 -7
- package/src/sass/animate/animate.min.css +0 -2
- package/src/sass/animate/animate.min.css.map +0 -7
- package/src/sass/animate/animate.scss +0 -30
- package/src/sass/animate/bower.json +0 -22
- package/src/sass/bootstrap/_alerts.scss +0 -70
- package/src/sass/bootstrap/_badges.scss +0 -68
- package/src/sass/bootstrap/_breadcrumbs.scss +0 -26
- package/src/sass/bootstrap/_button-groups.scss +0 -243
- package/src/sass/bootstrap/_buttons.scss +0 -160
- package/src/sass/bootstrap/_carousel.scss +0 -269
- package/src/sass/bootstrap/_close.scss +0 -36
- package/src/sass/bootstrap/_code.scss +0 -69
- package/src/sass/bootstrap/_component-animations.scss +0 -37
- package/src/sass/bootstrap/_dropdowns.scss +0 -223
- package/src/sass/bootstrap/_forms.scss +0 -613
- package/src/sass/bootstrap/_grid.scss +0 -84
- package/src/sass/bootstrap/_input-groups.scss +0 -166
- package/src/sass/bootstrap/_jumbotron.scss +0 -50
- package/src/sass/bootstrap/_labels.scss +0 -66
- package/src/sass/bootstrap/_list-group.scss +0 -124
- package/src/sass/bootstrap/_media.scss +0 -61
- package/src/sass/bootstrap/_mixins.scss +0 -39
- package/src/sass/bootstrap/_modals.scss +0 -150
- package/src/sass/bootstrap/_navbar.scss +0 -647
- package/src/sass/bootstrap/_navs.scss +0 -243
- package/src/sass/bootstrap/_normalize.scss +0 -427
- package/src/sass/bootstrap/_pager.scss +0 -54
- package/src/sass/bootstrap/_pagination.scss +0 -88
- package/src/sass/bootstrap/_panels.scss +0 -265
- package/src/sass/bootstrap/_popovers.scss +0 -135
- package/src/sass/bootstrap/_print.scss +0 -107
- package/src/sass/bootstrap/_progress-bars.scss +0 -87
- package/src/sass/bootstrap/_responsive-embed.scss +0 -35
- package/src/sass/bootstrap/_responsive-utilities.scss +0 -177
- package/src/sass/bootstrap/_scaffolding.scss +0 -162
- package/src/sass/bootstrap/_tables.scss +0 -234
- package/src/sass/bootstrap/_theme.scss +0 -273
- package/src/sass/bootstrap/_thumbnails.scss +0 -38
- package/src/sass/bootstrap/_tooltip.scss +0 -102
- package/src/sass/bootstrap/_type.scss +0 -298
- package/src/sass/bootstrap/_utilities.scss +0 -55
- package/src/sass/bootstrap/_variables.scss +0 -866
- package/src/sass/bootstrap/_wells.scss +0 -29
- package/src/sass/bootstrap/float-label.scss +0 -70
- package/src/sass/bootstrap/mixins/_alerts.scss +0 -14
- package/src/sass/bootstrap/mixins/_background-variant.scss +0 -11
- package/src/sass/bootstrap/mixins/_border-radius.scss +0 -18
- package/src/sass/bootstrap/mixins/_buttons.scss +0 -52
- package/src/sass/bootstrap/mixins/_center-block.scss +0 -7
- package/src/sass/bootstrap/mixins/_clearfix.scss +0 -22
- package/src/sass/bootstrap/mixins/_forms.scss +0 -88
- package/src/sass/bootstrap/mixins/_gradients.scss +0 -58
- package/src/sass/bootstrap/mixins/_grid-framework.scss +0 -81
- package/src/sass/bootstrap/mixins/_grid.scss +0 -122
- package/src/sass/bootstrap/mixins/_hide-text.scss +0 -21
- package/src/sass/bootstrap/mixins/_image.scss +0 -33
- package/src/sass/bootstrap/mixins/_labels.scss +0 -12
- package/src/sass/bootstrap/mixins/_list-group.scss +0 -31
- package/src/sass/bootstrap/mixins/_nav-divider.scss +0 -10
- package/src/sass/bootstrap/mixins/_nav-vertical-align.scss +0 -9
- package/src/sass/bootstrap/mixins/_opacity.scss +0 -8
- package/src/sass/bootstrap/mixins/_pagination.scss +0 -23
- package/src/sass/bootstrap/mixins/_panels.scss +0 -24
- package/src/sass/bootstrap/mixins/_progress-bar.scss +0 -10
- package/src/sass/bootstrap/mixins/_reset-filter.scss +0 -8
- package/src/sass/bootstrap/mixins/_resize.scss +0 -6
- package/src/sass/bootstrap/mixins/_responsive-visibility.scss +0 -21
- package/src/sass/bootstrap/mixins/_size.scss +0 -10
- package/src/sass/bootstrap/mixins/_tab-focus.scss +0 -9
- package/src/sass/bootstrap/mixins/_table-row.scss +0 -28
- package/src/sass/bootstrap/mixins/_text-emphasis.scss +0 -11
- package/src/sass/bootstrap/mixins/_text-overflow.scss +0 -8
- package/src/sass/bootstrap/mixins/_vendor-prefixes.scss +0 -222
- package/src/sass/crn_app/_admin.admin.scss +0 -205
- package/src/sass/crn_app/_admin.graphs.scss +0 -51
- package/src/sass/crn_app/_admin.tools.scss +0 -24
- package/src/sass/crn_app/_api.scss +0 -65
- package/src/sass/crn_app/_bootstrap.overrides.scss +0 -54
- package/src/sass/crn_app/_colors.scss +0 -88
- package/src/sass/crn_app/_common.click-to-edit.scss +0 -187
- package/src/sass/crn_app/_common.modals.scss +0 -686
- package/src/sass/crn_app/_common.pagination.scss +0 -41
- package/src/sass/crn_app/_common.papaya.scss +0 -348
- package/src/sass/crn_app/_common.progress-bar.scss +0 -26
- package/src/sass/crn_app/_common.spinner.scss +0 -63
- package/src/sass/crn_app/_common.status.scss +0 -103
- package/src/sass/crn_app/_common.tooltip.scss +0 -22
- package/src/sass/crn_app/_common.typeahead.scss +0 -31
- package/src/sass/crn_app/_common.variables.scss +0 -16
- package/src/sass/crn_app/_dashboard.datasets.scss +0 -588
- package/src/sass/crn_app/_dataset.comments.scss +0 -201
- package/src/sass/crn_app/_dataset.dataset.scss +0 -161
- package/src/sass/crn_app/_dataset.file-tree.scss +0 -277
- package/src/sass/crn_app/_dataset.jobs.scss +0 -701
- package/src/sass/crn_app/_dataset.sidebar.scss +0 -265
- package/src/sass/crn_app/_dataset.tools.scss +0 -118
- package/src/sass/crn_app/_elements-wrappers.scss +0 -870
- package/src/sass/crn_app/_faq.scss +0 -37
- package/src/sass/crn_app/_frontPage.scss +0 -569
- package/src/sass/crn_app/_nav.navbar.scss +0 -387
- package/src/sass/crn_app/_theme.scss +0 -87
- package/src/sass/crn_app/_upload.upload.scss +0 -393
- package/src/sass/crn_app/_upload.validation.scss +0 -210
- package/src/sass/draft/draft.scss +0 -11
- package/src/sass/draft/rich-editor.scss +0 -73
- package/src/sass/font-awesome/_animated.scss +0 -34
- package/src/sass/font-awesome/_bordered-pulled.scss +0 -25
- package/src/sass/font-awesome/_core.scss +0 -12
- package/src/sass/font-awesome/_fixed-width.scss +0 -6
- package/src/sass/font-awesome/_font-awesome.scss +0 -17
- package/src/sass/font-awesome/_icons.scss +0 -697
- package/src/sass/font-awesome/_larger.scss +0 -13
- package/src/sass/font-awesome/_list.scss +0 -19
- package/src/sass/font-awesome/_mixins.scss +0 -26
- package/src/sass/font-awesome/_path.scss +0 -15
- package/src/sass/font-awesome/_rotated-flipped.scss +0 -20
- package/src/sass/font-awesome/_stacked.scss +0 -20
- package/src/sass/font-awesome/_variables.scss +0 -713
- package/src/sass/main.scss +0 -317
- package/src/sass/pre-refactor-with-wrapper-main.scss +0 -1549
- package/src/scripts/admin/__tests__/__snapshots__/exports.spec.jsx.snap +0 -112
- package/src/scripts/admin/__tests__/exports.spec.jsx +0 -15
- package/src/scripts/admin/__tests__/users.spec.jsx +0 -15
- package/src/scripts/admin/admin.jsx +0 -53
- package/src/scripts/admin/flagged-files.jsx +0 -178
- package/src/scripts/admin/user-fragment.ts +0 -14
- package/src/scripts/admin/user-tools.tsx +0 -83
- package/src/scripts/admin/users.jsx +0 -224
- package/src/scripts/authentication/admin-user.jsx +0 -23
- package/src/scripts/authentication/buttons.jsx +0 -26
- package/src/scripts/authentication/globus-button.jsx +0 -39
- package/src/scripts/authentication/google-button.jsx +0 -32
- package/src/scripts/authentication/logged-in.jsx +0 -12
- package/src/scripts/authentication/logged-out.jsx +0 -12
- package/src/scripts/authentication/loginCheck.js +0 -7
- package/src/scripts/authentication/orcid-button.jsx +0 -32
- package/src/scripts/authentication/withProfile.jsx +0 -22
- package/src/scripts/classic.tsx +0 -18
- package/src/scripts/common/forms/file-select.tsx +0 -71
- package/src/scripts/common/partials/__tests__/__snapshots__/footer.spec.jsx.snap +0 -42
- package/src/scripts/common/partials/__tests__/__snapshots__/metric.spec.jsx.snap +0 -101
- package/src/scripts/common/partials/__tests__/footer.spec.jsx +0 -10
- package/src/scripts/common/partials/__tests__/metric.spec.jsx +0 -31
- package/src/scripts/common/partials/footer.jsx +0 -40
- package/src/scripts/common/partials/login.jsx +0 -99
- package/src/scripts/common/partials/metric.jsx +0 -73
- package/src/scripts/common/partials/spinner.jsx +0 -34
- package/src/scripts/common/partials/status.jsx +0 -96
- package/src/scripts/common/partials/timeout.jsx +0 -47
- package/src/scripts/common/partials/tooltip.jsx +0 -36
- package/src/scripts/components/__tests__/dropdown-button.spec.tsx +0 -49
- package/src/scripts/components/dropdown-button.tsx +0 -42
- package/src/scripts/components/panel-group.tsx +0 -24
- package/src/scripts/components/panel.tsx +0 -42
- package/src/scripts/datalad/__tests__/snapshotVersion.spec.js +0 -21
- package/src/scripts/datalad/comments/__tests__/comment-editor.spec.jsx +0 -19
- package/src/scripts/datalad/comments/block-style-controls.jsx +0 -46
- package/src/scripts/datalad/comments/comment-editor.jsx +0 -79
- package/src/scripts/datalad/comments/inline-style-controls.jsx +0 -34
- package/src/scripts/datalad/comments/style-button.jsx +0 -28
- package/src/scripts/datalad/dashboard/__tests__/__snapshots__/dashboard.spec.jsx.snap +0 -163
- package/src/scripts/datalad/dashboard/__tests__/dashboard.spec.jsx +0 -21
- package/src/scripts/datalad/dashboard/dashboard.jsx +0 -54
- package/src/scripts/datalad/dashboard/datasets/__tests__/__snapshots__/dataset-filter.spec.jsx.snap +0 -20
- package/src/scripts/datalad/dashboard/datasets/__tests__/__snapshots__/dataset-row-skeleton.spec.jsx.snap +0 -13
- package/src/scripts/datalad/dashboard/datasets/__tests__/__snapshots__/dataset-row.spec.jsx.snap +0 -65
- package/src/scripts/datalad/dashboard/datasets/__tests__/__snapshots__/dataset-sorter.spec.jsx.snap +0 -14
- package/src/scripts/datalad/dashboard/datasets/__tests__/__snapshots__/dataset-virtual-scroller.spec.jsx.snap +0 -17
- package/src/scripts/datalad/dashboard/datasets/__tests__/__snapshots__/uploaded.spec.jsx.snap +0 -27
- package/src/scripts/datalad/dashboard/datasets/__tests__/dataset-filter.spec.jsx +0 -67
- package/src/scripts/datalad/dashboard/datasets/__tests__/dataset-query.spec.jsx +0 -72
- package/src/scripts/datalad/dashboard/datasets/__tests__/dataset-row-skeleton.spec.jsx +0 -9
- package/src/scripts/datalad/dashboard/datasets/__tests__/dataset-row.spec.jsx +0 -53
- package/src/scripts/datalad/dashboard/datasets/__tests__/dataset-sorter.spec.jsx +0 -69
- package/src/scripts/datalad/dashboard/datasets/__tests__/dataset-virtual-scroller.spec.jsx +0 -65
- package/src/scripts/datalad/dashboard/datasets/__tests__/uploaded.spec.jsx +0 -17
- package/src/scripts/datalad/dashboard/datasets/dataset-filter.jsx +0 -78
- package/src/scripts/datalad/dashboard/datasets/dataset-query.jsx +0 -102
- package/src/scripts/datalad/dashboard/datasets/dataset-row-error-boundary.jsx +0 -52
- package/src/scripts/datalad/dashboard/datasets/dataset-row-skeleton.jsx +0 -10
- package/src/scripts/datalad/dashboard/datasets/dataset-row.jsx +0 -58
- package/src/scripts/datalad/dashboard/datasets/dataset-sorter.jsx +0 -148
- package/src/scripts/datalad/dashboard/datasets/dataset-statuses.jsx +0 -44
- package/src/scripts/datalad/dashboard/datasets/dataset-tab.jsx +0 -192
- package/src/scripts/datalad/dashboard/datasets/dataset-virtual-scroller.jsx +0 -126
- package/src/scripts/datalad/dashboard/datasets/row-height.jsx +0 -7
- package/src/scripts/datalad/dashboard/datasets/uploaded.jsx +0 -33
- package/src/scripts/datalad/dataset/__tests__/__snapshots__/comments.spec.jsx.snap +0 -137
- package/src/scripts/datalad/dataset/__tests__/__snapshots__/dataset-page.spec.jsx.snap +0 -69
- package/src/scripts/datalad/dataset/__tests__/__snapshots__/dataset-query.spec.jsx.snap +0 -15
- package/src/scripts/datalad/dataset/__tests__/__snapshots__/left-siderbar.spec.jsx.snap +0 -85
- package/src/scripts/datalad/dataset/__tests__/dataset-page.spec.jsx +0 -33
- package/src/scripts/datalad/dataset/__tests__/dataset-query.spec.jsx +0 -20
- package/src/scripts/datalad/dataset/__tests__/left-siderbar.spec.jsx +0 -106
- package/src/scripts/datalad/dataset/comment.jsx +0 -90
- package/src/scripts/datalad/dataset/comments.jsx +0 -83
- package/src/scripts/datalad/dataset/dataset-description.jsx +0 -111
- package/src/scripts/datalad/dataset/dataset-main.jsx +0 -29
- package/src/scripts/datalad/dataset/dataset-page.jsx +0 -63
- package/src/scripts/datalad/dataset/dataset-query.jsx +0 -192
- package/src/scripts/datalad/dataset/dataset.jsx +0 -22
- package/src/scripts/datalad/dataset/delete-page.tsx +0 -92
- package/src/scripts/datalad/dataset/left-sidebar.jsx +0 -109
- package/src/scripts/datalad/download/__tests__/__snapshots__/download-dataset.spec.jsx.snap +0 -7
- package/src/scripts/datalad/download/__tests__/__snapshots__/download-tool.spec.jsx.snap +0 -26
- package/src/scripts/datalad/download/__tests__/download-dataset.spec.jsx +0 -19
- package/src/scripts/datalad/download/__tests__/download-tool.spec.jsx +0 -19
- package/src/scripts/datalad/download/download-command-line.jsx +0 -43
- package/src/scripts/datalad/download/download-datalad.jsx +0 -58
- package/src/scripts/datalad/download/download-dataset.jsx +0 -61
- package/src/scripts/datalad/download/download-link.jsx +0 -41
- package/src/scripts/datalad/download/download-native.js +0 -118
- package/src/scripts/datalad/download/download-query.js +0 -22
- package/src/scripts/datalad/download/download-s3.jsx +0 -46
- package/src/scripts/datalad/download/download-tool.jsx +0 -44
- package/src/scripts/datalad/download/native-file-toast.jsx +0 -90
- package/src/scripts/datalad/download/shell-example.jsx +0 -9
- package/src/scripts/datalad/download/track-download.js +0 -15
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/cancel-button.spec.jsx.snap +0 -21
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/dataset-analytics.spec.jsx.snap +0 -41
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/dataset-authors.spec.jsx.snap +0 -13
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/dataset-readme.spec.jsx.snap +0 -49
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/dataset-title.spec.jsx.snap +0 -7
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/dataset-tools.spec.jsx.snap +0 -346
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/dataset-uploaded.spec.jsx.snap +0 -7
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/edit-button.spec.jsx.snap +0 -21
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/edit-list.spec.jsx.snap +0 -34
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/edit-readme.spec.jsx.snap +0 -3
- package/src/scripts/datalad/fragments/__tests__/__snapshots__/save-button.spec.jsx.snap +0 -21
- package/src/scripts/datalad/fragments/__tests__/dataset-analytics.spec.jsx +0 -16
- package/src/scripts/datalad/fragments/__tests__/dataset-authors.spec.jsx +0 -22
- package/src/scripts/datalad/fragments/__tests__/dataset-prominent-links.spec.jsx +0 -32
- package/src/scripts/datalad/fragments/__tests__/dataset-readme.spec.jsx +0 -10
- package/src/scripts/datalad/fragments/__tests__/dataset-summary.spec.jsx +0 -55
- package/src/scripts/datalad/fragments/__tests__/dataset-title.spec.jsx +0 -10
- package/src/scripts/datalad/fragments/__tests__/dataset-tools.spec.jsx +0 -55
- package/src/scripts/datalad/fragments/__tests__/dataset-uploaded.spec.jsx +0 -16
- package/src/scripts/datalad/fragments/__tests__/edit-list.spec.jsx +0 -25
- package/src/scripts/datalad/fragments/__tests__/edit-readme.spec.jsx +0 -10
- package/src/scripts/datalad/fragments/cancel-button.jsx +0 -24
- package/src/scripts/datalad/fragments/copyable-tooltip.jsx +0 -82
- package/src/scripts/datalad/fragments/dataset-analytics.jsx +0 -27
- package/src/scripts/datalad/fragments/dataset-authors.jsx +0 -16
- package/src/scripts/datalad/fragments/dataset-citation.jsx +0 -77
- package/src/scripts/datalad/fragments/dataset-files.jsx +0 -50
- package/src/scripts/datalad/fragments/dataset-git-access.jsx +0 -56
- package/src/scripts/datalad/fragments/dataset-git-hash.jsx +0 -27
- package/src/scripts/datalad/fragments/dataset-history.jsx +0 -95
- package/src/scripts/datalad/fragments/dataset-modified.jsx +0 -17
- package/src/scripts/datalad/fragments/dataset-prominent-links.jsx +0 -129
- package/src/scripts/datalad/fragments/dataset-readme.jsx +0 -42
- package/src/scripts/datalad/fragments/dataset-summary.jsx +0 -230
- package/src/scripts/datalad/fragments/dataset-title.jsx +0 -10
- package/src/scripts/datalad/fragments/dataset-tools.jsx +0 -190
- package/src/scripts/datalad/fragments/dataset-uploaded.jsx +0 -25
- package/src/scripts/datalad/fragments/edit-button.jsx +0 -24
- package/src/scripts/datalad/fragments/edit-description-field.jsx +0 -54
- package/src/scripts/datalad/fragments/edit-description-list.jsx +0 -49
- package/src/scripts/datalad/fragments/edit-list.jsx +0 -82
- package/src/scripts/datalad/fragments/edit-readme.jsx +0 -44
- package/src/scripts/datalad/fragments/incomplete-dataset.jsx +0 -23
- package/src/scripts/datalad/fragments/metadata-tool.jsx +0 -34
- package/src/scripts/datalad/fragments/number-input.tsx +0 -126
- package/src/scripts/datalad/fragments/save-button.jsx +0 -24
- package/src/scripts/datalad/fragments/select-input.tsx +0 -247
- package/src/scripts/datalad/fragments/share-dataset-button.jsx +0 -32
- package/src/scripts/datalad/fragments/text-array-input.tsx +0 -119
- package/src/scripts/datalad/fragments/text-input.tsx +0 -206
- package/src/scripts/datalad/mutations/__tests__/__snapshots__/comment.spec.jsx.snap +0 -5
- package/src/scripts/datalad/mutations/__tests__/__snapshots__/delete.spec.jsx.snap +0 -181
- package/src/scripts/datalad/mutations/__tests__/__snapshots__/manage-permissions.spec.jsx.snap +0 -361
- package/src/scripts/datalad/mutations/__tests__/__snapshots__/subscribe-to-newsletter.spec.jsx.snap +0 -83
- package/src/scripts/datalad/mutations/__tests__/__snapshots__/update-file.spec.jsx.snap +0 -25
- package/src/scripts/datalad/mutations/__tests__/__snapshots__/update-permissions.spec.jsx.snap +0 -361
- package/src/scripts/datalad/mutations/__tests__/comment.spec.jsx +0 -154
- package/src/scripts/datalad/mutations/__tests__/manage-permissions.spec.jsx +0 -21
- package/src/scripts/datalad/mutations/__tests__/subscribe-to-newsletter.spec.jsx +0 -10
- package/src/scripts/datalad/mutations/__tests__/update-file.spec.jsx +0 -15
- package/src/scripts/datalad/mutations/__tests__/update-permissions.spec.jsx +0 -21
- package/src/scripts/datalad/mutations/add-metadata.jsx +0 -164
- package/src/scripts/datalad/mutations/comment.jsx +0 -164
- package/src/scripts/datalad/mutations/delete-dataset-form.jsx +0 -82
- package/src/scripts/datalad/mutations/description.jsx +0 -129
- package/src/scripts/datalad/mutations/flag-annex-object.jsx +0 -62
- package/src/scripts/datalad/mutations/metadata-form.jsx +0 -388
- package/src/scripts/datalad/mutations/readme.jsx +0 -53
- package/src/scripts/datalad/mutations/remove-annex-object.jsx +0 -71
- package/src/scripts/datalad/mutations/subscribe-to-newsletter.jsx +0 -26
- package/src/scripts/datalad/mutations/update-file.jsx +0 -51
- package/src/scripts/datalad/routes/__tests__/__snapshots__/manage-permissions.spec.jsx.snap +0 -159
- package/src/scripts/datalad/routes/__tests__/__snapshots__/snapshot.spec.jsx.snap +0 -31
- package/src/scripts/datalad/routes/__tests__/dataset-content.spec.jsx +0 -108
- package/src/scripts/datalad/routes/__tests__/file-display.spec.jsx +0 -22
- package/src/scripts/datalad/routes/__tests__/manage-permissions.spec.jsx +0 -101
- package/src/scripts/datalad/routes/__tests__/snapshot.spec.jsx +0 -49
- package/src/scripts/datalad/routes/admin-datalad.jsx +0 -45
- package/src/scripts/datalad/routes/admin-exports.jsx +0 -125
- package/src/scripts/datalad/routes/dataset-content.jsx +0 -198
- package/src/scripts/datalad/routes/dataset-routes.jsx +0 -162
- package/src/scripts/datalad/routes/file-display.jsx +0 -84
- package/src/scripts/datalad/routes/manage-permissions.jsx +0 -128
- package/src/scripts/datalad/routes/snapshot-content.jsx +0 -135
- package/src/scripts/datalad/routes/snapshot.jsx +0 -131
- package/src/scripts/datalad/snapshotVersion.js +0 -7
- package/src/scripts/datalad/validation/validation-panel.jsx +0 -48
- package/src/scripts/datalad/validation/validation-status.jsx +0 -120
- package/src/scripts/datalad/validation/validation.jsx +0 -40
- package/src/scripts/dataset/dataset.metrics.jsx +0 -61
- package/src/scripts/file-tree/__tests__/__snapshots__/file-tree-unloaded-directory.spec.jsx.snap +0 -26
- package/src/scripts/file-tree/__tests__/__snapshots__/file-tree.spec.jsx.snap +0 -18
- package/src/scripts/file-tree/__tests__/__snapshots__/file.spec.jsx.snap +0 -81
- package/src/scripts/file-tree/__tests__/file-tree-loading.spec.jsx +0 -18
- package/src/scripts/file-tree/__tests__/file-tree-unloaded-directory.spec.jsx +0 -74
- package/src/scripts/file-tree/__tests__/file-tree.spec.jsx +0 -94
- package/src/scripts/file-tree/__tests__/file-viewer-type.spec.jsx +0 -15
- package/src/scripts/file-tree/__tests__/file.spec.jsx +0 -44
- package/src/scripts/file-tree/__tests__/flat-to-tree.spec.js +0 -55
- package/src/scripts/file-tree/file-tree-loading.jsx +0 -64
- package/src/scripts/file-tree/file-tree-unloaded-directory.jsx +0 -108
- package/src/scripts/file-tree/file-tree.jsx +0 -133
- package/src/scripts/file-tree/file-view.jsx +0 -31
- package/src/scripts/file-tree/file-viewer-type.jsx +0 -45
- package/src/scripts/file-tree/file.jsx +0 -123
- package/src/scripts/file-tree/files.jsx +0 -126
- package/src/scripts/file-tree/flat-to-tree.js +0 -49
- package/src/scripts/file-tree/viewers/__tests__/__snapshots__/file-viewer-json.spec.jsx.snap +0 -51
- package/src/scripts/file-tree/viewers/__tests__/file-viewer-json.spec.jsx +0 -15
- package/src/scripts/file-tree/viewers/__tests__/parse-tabular.spec.js +0 -24
- package/src/scripts/file-tree/viewers/file-viewer-csv.jsx +0 -16
- package/src/scripts/file-tree/viewers/file-viewer-html.jsx +0 -20
- package/src/scripts/file-tree/viewers/file-viewer-json.jsx +0 -50
- package/src/scripts/file-tree/viewers/file-viewer-nifti.jsx +0 -11
- package/src/scripts/file-tree/viewers/file-viewer-table.jsx +0 -34
- package/src/scripts/file-tree/viewers/file-viewer-text.jsx +0 -13
- package/src/scripts/file-tree/viewers/file-viewer-tsv.jsx +0 -16
- package/src/scripts/file-tree/viewers/parse-tabular.js +0 -18
- package/src/scripts/front-page/__tests__/__snapshots__/email-subscription-box.spec.jsx.snap +0 -190
- package/src/scripts/front-page/__tests__/__snapshots__/front-page-stats.spec.jsx.snap +0 -29
- package/src/scripts/front-page/__tests__/__snapshots__/front-page-top-datasets.spec.jsx.snap +0 -464
- package/src/scripts/front-page/__tests__/dataset-count.spec.jsx +0 -33
- package/src/scripts/front-page/__tests__/email-subscription-box.spec.jsx +0 -57
- package/src/scripts/front-page/__tests__/front-page-stats.spec.jsx +0 -10
- package/src/scripts/front-page/__tests__/front-page-top-datasets.spec.jsx +0 -27
- package/src/scripts/front-page/__tests__/participant-count.spec.jsx +0 -31
- package/src/scripts/front-page/dataset-count.jsx +0 -29
- package/src/scripts/front-page/email-subscription-box.jsx +0 -131
- package/src/scripts/front-page/front-page-additional-info.jsx +0 -15
- package/src/scripts/front-page/front-page-collaborators.jsx +0 -117
- package/src/scripts/front-page/front-page-stats.jsx +0 -71
- package/src/scripts/front-page/front-page-support.jsx +0 -30
- package/src/scripts/front-page/front-page-tabs.jsx +0 -166
- package/src/scripts/front-page/front-page-top-datasets.jsx +0 -203
- package/src/scripts/front-page/front-page.jsx +0 -95
- package/src/scripts/front-page/participant-count.jsx +0 -25
- package/src/scripts/hooks/use-measure.js +0 -15
- package/src/scripts/hooks/use-previous.js +0 -7
- package/src/scripts/nav/assets/brand_mark.png +0 -0
- package/src/scripts/nav/assets/favicon-upload.png +0 -0
- package/src/scripts/nav/assets/logo_app.png +0 -0
- package/src/scripts/nav/navbar.jsx +0 -144
- package/src/scripts/nav/navbar.navmenu.jsx +0 -106
- package/src/scripts/nav/navbar.usermenu.jsx +0 -52
- package/src/scripts/pages/citation-page.jsx +0 -43
- package/src/scripts/pet/__tests__/__snapshots__/dummy.spec.jsx.snap +0 -70
- package/src/scripts/pet/__tests__/dummy.spec.jsx +0 -10
- package/src/scripts/pet/dummy.jsx +0 -61
- package/src/scripts/refactor_2021/dataset/dataset-pre-refactor-container.tsx +0 -12
- package/src/scripts/routes.tsx +0 -36
- package/src/scripts/search/search-input.tsx +0 -42
- package/src/scripts/search/search-results.tsx +0 -114
- package/src/scripts/styles/capitalized.jsx +0 -6
- package/src/scripts/styles/uppercase.jsx +0 -6
- package/src/scripts/uploader/__tests__/add-path-to-files.spec.js +0 -29
- package/src/scripts/uploader/__tests__/file-upload.spec.js +0 -116
- package/src/scripts/uploader/__tests__/upload-disclaimer.spec.jsx +0 -67
- package/src/scripts/uploader/__tests__/upload-mutation.spec.js +0 -57
- package/src/scripts/uploader/__tests__/uploader.spec.js +0 -31
- package/src/scripts/uploader/add-path-to-files.js +0 -19
- package/src/scripts/uploader/file-upload.js +0 -88
- package/src/scripts/uploader/upload-button.jsx +0 -18
- package/src/scripts/uploader/upload-disclaimer.jsx +0 -92
- package/src/scripts/uploader/upload-file-status.jsx +0 -20
- package/src/scripts/uploader/upload-issues.jsx +0 -131
- package/src/scripts/uploader/upload-metadata.jsx +0 -59
- package/src/scripts/uploader/upload-mutation.js +0 -111
- package/src/scripts/uploader/upload-progress-button.jsx +0 -20
- package/src/scripts/uploader/upload-progress-class.js +0 -36
- package/src/scripts/uploader/upload-progress.jsx +0 -15
- package/src/scripts/uploader/upload-rename.jsx +0 -33
- package/src/scripts/uploader/upload-resume.jsx +0 -35
- package/src/scripts/uploader/upload-select.jsx +0 -29
- package/src/scripts/uploader/upload-status.jsx +0 -23
- package/src/scripts/uploader/upload-step.jsx +0 -48
- package/src/scripts/uploader/uploader-context.js +0 -6
- package/src/scripts/uploader/uploader-location.js +0 -5
- package/src/scripts/uploader/uploader-modal.jsx +0 -27
- package/src/scripts/uploader/uploader-setup-routes.jsx +0 -52
- package/src/scripts/uploader/uploader-status-routes.jsx +0 -30
- package/src/scripts/uploader/uploader-view.jsx +0 -45
- package/src/scripts/uploader/uploader.jsx +0 -388
- package/src/scripts/user/__mocks__/user.store.js +0 -1
- package/src/scripts/user/api.jsx +0 -132
- package/src/scripts/user/avatar.jsx +0 -40
- package/src/scripts/utils/crn.js +0 -15
- package/src/scripts/utils/request.js +0 -107
- package/src/scripts/utils/user.js +0 -18
- package/src/scripts/validation/validation-results.issues.issue.jsx +0 -90
- package/src/scripts/validation/validation-results.issues.jsx +0 -79
- package/src/scripts/validation/validation-results.jsx +0 -96
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { getRelativePath, encodeFilePath } from '../file-upload.js'
|
|
2
|
-
|
|
3
|
-
describe('file upload helpers', () => {
|
|
4
|
-
describe('getRelativePath', () => {
|
|
5
|
-
it('works with a few directory levels', () => {
|
|
6
|
-
expect(
|
|
7
|
-
getRelativePath({ webkitRelativePath: 'test/paths/like/this' }),
|
|
8
|
-
).toBe('paths/like/this')
|
|
9
|
-
})
|
|
10
|
-
it('works if the path is not actually relative', () => {
|
|
11
|
-
expect(
|
|
12
|
-
getRelativePath({ webkitRelativePath: 'dataset_description.json' }),
|
|
13
|
-
).toBe('dataset_description.json')
|
|
14
|
-
})
|
|
15
|
-
})
|
|
16
|
-
describe('encodeFilePath', () => {
|
|
17
|
-
it('supports directory upload from a webkit-derived browser (stripRelativePath: true)', () => {
|
|
18
|
-
expect(
|
|
19
|
-
encodeFilePath(
|
|
20
|
-
{
|
|
21
|
-
name: 'sub-02_T1w.nii.gz',
|
|
22
|
-
lastModified: 1604713385516,
|
|
23
|
-
webkitRelativePath: 'dataset/sub-02/anat/sub-02_T1w.nii.gz',
|
|
24
|
-
size: 311112,
|
|
25
|
-
type: 'application/gzip',
|
|
26
|
-
},
|
|
27
|
-
{ stripRelativePath: true },
|
|
28
|
-
),
|
|
29
|
-
).toEqual('sub-02:anat:sub-02_T1w.nii.gz')
|
|
30
|
-
})
|
|
31
|
-
it('supports directory upload from a webkit-derived browser (stripRelativePath: false)', () => {
|
|
32
|
-
expect(
|
|
33
|
-
encodeFilePath(
|
|
34
|
-
{
|
|
35
|
-
name: 'sub-02_T1w.nii.gz',
|
|
36
|
-
lastModified: 1604713385516,
|
|
37
|
-
webkitRelativePath: 'sub-02/anat/sub-02_T1w.nii.gz',
|
|
38
|
-
size: 311112,
|
|
39
|
-
type: 'application/gzip',
|
|
40
|
-
},
|
|
41
|
-
{ stripRelativePath: false },
|
|
42
|
-
),
|
|
43
|
-
).toEqual('sub-02:anat:sub-02_T1w.nii.gz')
|
|
44
|
-
})
|
|
45
|
-
it('supports file upload from a webkit-derived browser (stripRelativePath: true)', () => {
|
|
46
|
-
expect(
|
|
47
|
-
encodeFilePath(
|
|
48
|
-
{
|
|
49
|
-
name: 'README',
|
|
50
|
-
lastModified: 1604713385516,
|
|
51
|
-
webkitRelativePath: '',
|
|
52
|
-
size: 809,
|
|
53
|
-
type: 'text/plain',
|
|
54
|
-
},
|
|
55
|
-
{ stripRelativePath: true },
|
|
56
|
-
),
|
|
57
|
-
).toEqual('README')
|
|
58
|
-
})
|
|
59
|
-
it('supports file upload from a webkit-derived browser (stripRelativePath: false)', () => {
|
|
60
|
-
expect(
|
|
61
|
-
encodeFilePath(
|
|
62
|
-
{
|
|
63
|
-
name: 'README',
|
|
64
|
-
lastModified: 1604713385516,
|
|
65
|
-
webkitRelativePath: '',
|
|
66
|
-
size: 809,
|
|
67
|
-
type: 'text/plain',
|
|
68
|
-
},
|
|
69
|
-
{ stripRelativePath: false },
|
|
70
|
-
),
|
|
71
|
-
).toEqual('README')
|
|
72
|
-
})
|
|
73
|
-
it('supports nested file upload from a webkit-derived browser (stripRelativePath: true)', () => {
|
|
74
|
-
expect(
|
|
75
|
-
encodeFilePath(
|
|
76
|
-
{
|
|
77
|
-
name: 'sub-02_T1w.nii.gz',
|
|
78
|
-
lastModified: 1604713385516,
|
|
79
|
-
webkitRelativePath: '/dataset/sub-02/anat/',
|
|
80
|
-
size: 2000,
|
|
81
|
-
type: 'text/plain',
|
|
82
|
-
},
|
|
83
|
-
{ stripRelativePath: true },
|
|
84
|
-
),
|
|
85
|
-
).toEqual('sub-02:anat:sub-02_T1w.nii.gz')
|
|
86
|
-
})
|
|
87
|
-
it('supports nested file upload from a webkit-derived browser (stripRelativePath: false)', () => {
|
|
88
|
-
expect(
|
|
89
|
-
encodeFilePath(
|
|
90
|
-
{
|
|
91
|
-
name: 'sub-02_T1w.nii.gz',
|
|
92
|
-
lastModified: 1604713385516,
|
|
93
|
-
webkitRelativePath: '/sub-02/anat/',
|
|
94
|
-
size: 2000,
|
|
95
|
-
type: 'text/plain',
|
|
96
|
-
},
|
|
97
|
-
{ stripRelativePath: false },
|
|
98
|
-
),
|
|
99
|
-
).toEqual('sub-02:anat:sub-02_T1w.nii.gz')
|
|
100
|
-
})
|
|
101
|
-
it('supports nested directory upload from a webkit-derived browser (stripRelativePath: false)', () => {
|
|
102
|
-
expect(
|
|
103
|
-
encodeFilePath(
|
|
104
|
-
{
|
|
105
|
-
name: 'sub-02_T1w.nii.gz',
|
|
106
|
-
lastModified: 1604713385516,
|
|
107
|
-
webkitRelativePath: '/sub-02/anat/sub-02_T1w.nii.gz',
|
|
108
|
-
size: 2000,
|
|
109
|
-
type: 'text/plain',
|
|
110
|
-
},
|
|
111
|
-
{ stripRelativePath: false },
|
|
112
|
-
),
|
|
113
|
-
).toEqual('sub-02:anat:sub-02_T1w.nii.gz')
|
|
114
|
-
})
|
|
115
|
-
})
|
|
116
|
-
})
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render, screen, fireEvent } from '@testing-library/react'
|
|
3
|
-
import UploadDisclaimer from '../upload-disclaimer.jsx'
|
|
4
|
-
import UploaderContext from '../uploader-context.js'
|
|
5
|
-
|
|
6
|
-
describe('UploadDisclaimer component', () => {
|
|
7
|
-
it('renders as expected', () => {
|
|
8
|
-
expect(() =>
|
|
9
|
-
render(
|
|
10
|
-
<UploaderContext.Provider value={{ uploader: jest.fn() }}>
|
|
11
|
-
<UploadDisclaimer />
|
|
12
|
-
</UploaderContext.Provider>,
|
|
13
|
-
),
|
|
14
|
-
).not.toThrowError()
|
|
15
|
-
})
|
|
16
|
-
it('starts with the upload button disabled', () => {
|
|
17
|
-
render(
|
|
18
|
-
<UploaderContext.Provider value={{ uploader: jest.fn() }}>
|
|
19
|
-
<UploadDisclaimer />
|
|
20
|
-
</UploaderContext.Provider>,
|
|
21
|
-
)
|
|
22
|
-
expect(screen.getByText('I Agree')).toBeDisabled()
|
|
23
|
-
})
|
|
24
|
-
it('disable the upload button when both boxes are checked', () => {
|
|
25
|
-
const { getByLabelText } = render(
|
|
26
|
-
<UploaderContext.Provider value={{ uploader: jest.fn() }}>
|
|
27
|
-
<UploadDisclaimer />
|
|
28
|
-
</UploaderContext.Provider>,
|
|
29
|
-
)
|
|
30
|
-
fireEvent.click(
|
|
31
|
-
getByLabelText(
|
|
32
|
-
'All structural scans have been defaced, obscuring any tissue on or near the face that could potentially be used to reconstruct the facial structure.',
|
|
33
|
-
),
|
|
34
|
-
)
|
|
35
|
-
fireEvent.click(
|
|
36
|
-
getByLabelText(
|
|
37
|
-
'I have explicit participant consent and ethical authorization to publish structural scans without defacing.',
|
|
38
|
-
),
|
|
39
|
-
)
|
|
40
|
-
expect(screen.getByText('I Agree')).toBeDisabled()
|
|
41
|
-
})
|
|
42
|
-
it('enable the upload button when one box is checked', () => {
|
|
43
|
-
const { getByLabelText } = render(
|
|
44
|
-
<UploaderContext.Provider value={{ uploader: jest.fn() }}>
|
|
45
|
-
<UploadDisclaimer />
|
|
46
|
-
</UploaderContext.Provider>,
|
|
47
|
-
)
|
|
48
|
-
fireEvent.click(
|
|
49
|
-
getByLabelText(
|
|
50
|
-
'All structural scans have been defaced, obscuring any tissue on or near the face that could potentially be used to reconstruct the facial structure.',
|
|
51
|
-
),
|
|
52
|
-
)
|
|
53
|
-
expect(screen.getByText('I Agree')).not.toBeDisabled()
|
|
54
|
-
// Disable the first and enable the second to test the alternate state
|
|
55
|
-
fireEvent.click(
|
|
56
|
-
getByLabelText(
|
|
57
|
-
'All structural scans have been defaced, obscuring any tissue on or near the face that could potentially be used to reconstruct the facial structure.',
|
|
58
|
-
),
|
|
59
|
-
)
|
|
60
|
-
fireEvent.click(
|
|
61
|
-
getByLabelText(
|
|
62
|
-
'I have explicit participant consent and ethical authorization to publish structural scans without defacing.',
|
|
63
|
-
),
|
|
64
|
-
)
|
|
65
|
-
expect(screen.getByText('I Agree')).not.toBeDisabled()
|
|
66
|
-
})
|
|
67
|
-
})
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { mkLevels, treeFromList } from '../upload-mutation.js'
|
|
2
|
-
|
|
3
|
-
describe('Uploader mutations', () => {
|
|
4
|
-
describe('mkLevels', () => {
|
|
5
|
-
it('updates the parent argument by pushing file objects', () => {
|
|
6
|
-
const file = new Blob(['Trouble on Blobolonia'], { type: 'text/plain' })
|
|
7
|
-
const parent = { files: [], directories: [], name: '' }
|
|
8
|
-
mkLevels(file, parent, ['README'])
|
|
9
|
-
expect(parent.files).toEqual([file])
|
|
10
|
-
expect(parent.directories).toEqual([])
|
|
11
|
-
})
|
|
12
|
-
it('creates new directories for nested paths', () => {
|
|
13
|
-
const file = new Blob(['1234'], { type: 'text/plain' })
|
|
14
|
-
const parent = { files: [], directories: [], name: '' }
|
|
15
|
-
mkLevels(file, parent, ['derivatives', 'README'])
|
|
16
|
-
expect(parent.files).toEqual([])
|
|
17
|
-
expect(parent.directories).toHaveLength(1)
|
|
18
|
-
expect(parent.directories[0].files).toHaveLength(1)
|
|
19
|
-
expect(parent.directories[0].files[0]).toEqual(file)
|
|
20
|
-
})
|
|
21
|
-
it('updates existing directories with newly found files', () => {
|
|
22
|
-
const file = new Blob(['{}'], { type: 'application/json' })
|
|
23
|
-
const parent = {
|
|
24
|
-
files: [],
|
|
25
|
-
directories: [{ name: '/derivatives', files: [], directories: [] }],
|
|
26
|
-
name: '',
|
|
27
|
-
}
|
|
28
|
-
mkLevels(file, parent, ['derivatives', 'data.json'])
|
|
29
|
-
expect(parent.files).toEqual([])
|
|
30
|
-
expect(parent.directories).toHaveLength(1)
|
|
31
|
-
expect(parent.directories[0].files).toHaveLength(1)
|
|
32
|
-
expect(parent.directories[0].files[0]).toEqual(file)
|
|
33
|
-
})
|
|
34
|
-
})
|
|
35
|
-
describe('treeFromList', () => {
|
|
36
|
-
it('handles a tree from <input type="file" multiple />', () => {
|
|
37
|
-
const mockFileA = new Blob(['file one'], { type: 'text/plain' })
|
|
38
|
-
const mockFileB = new Blob(['file two'], { type: 'text/plain' })
|
|
39
|
-
mockFileA.webkitRelativePath = '/'
|
|
40
|
-
mockFileB.webkitRelativePath = '/'
|
|
41
|
-
const mockFileList = [mockFileA, mockFileB]
|
|
42
|
-
const fileTree = treeFromList(mockFileList)
|
|
43
|
-
expect(typeof fileTree).toBe('object')
|
|
44
|
-
expect(fileTree.directories).toEqual([])
|
|
45
|
-
expect(fileTree.files).toHaveLength(2)
|
|
46
|
-
expect(fileTree.name).toBe('')
|
|
47
|
-
})
|
|
48
|
-
it('should work for files without webkitRelativePath', () => {
|
|
49
|
-
const mockFile = new Blob(['a boy and his blob'], { type: 'text/plain' })
|
|
50
|
-
const mockFileList = [mockFile]
|
|
51
|
-
const fileTree = treeFromList(mockFileList)
|
|
52
|
-
expect(fileTree.directories).toEqual([])
|
|
53
|
-
expect(fileTree.files).toHaveLength(1)
|
|
54
|
-
expect(fileTree.name).toBe('')
|
|
55
|
-
})
|
|
56
|
-
})
|
|
57
|
-
})
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { shallow } from 'enzyme'
|
|
3
|
-
import { UploadClient } from '../uploader.jsx'
|
|
4
|
-
import { JSDOM } from 'jsdom'
|
|
5
|
-
const { window } = new JSDOM('', { runScripts: 'outside-only' })
|
|
6
|
-
|
|
7
|
-
// Stub constructor for File-like objects with webkitRelativePath
|
|
8
|
-
function TestFile(body, name, webkitRelativePath) {
|
|
9
|
-
const file = new window.Blob(body)
|
|
10
|
-
file.name = name
|
|
11
|
-
file.webkitRelativePath = webkitRelativePath ? webkitRelativePath : name
|
|
12
|
-
return file
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
describe('uploader', () => {
|
|
16
|
-
it('select files updates state', async done => {
|
|
17
|
-
const wrapper = shallow(<UploadClient />)
|
|
18
|
-
try {
|
|
19
|
-
await wrapper.instance().selectFiles({
|
|
20
|
-
files: [
|
|
21
|
-
new TestFile(['file body one'], 'file_one'),
|
|
22
|
-
new TestFile(['file body two'], 'file_two'),
|
|
23
|
-
],
|
|
24
|
-
})
|
|
25
|
-
expect(wrapper.instance().state.files).toHaveLength(2)
|
|
26
|
-
done()
|
|
27
|
-
} catch (e) {
|
|
28
|
-
done.fail(e)
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
})
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Prefix all files with a path
|
|
3
|
-
* This supports uploading within another directory
|
|
4
|
-
* @param {any[]} fileList FileList for upload
|
|
5
|
-
* @param {string} path Prefix path for all files
|
|
6
|
-
* @returns {Array} Updated array of files with adapted paths
|
|
7
|
-
*/
|
|
8
|
-
export const addPathToFiles = (fileList, path) => {
|
|
9
|
-
return path
|
|
10
|
-
? Array.prototype.map.call(fileList, file => {
|
|
11
|
-
// Override webkitRelativePath with a new property
|
|
12
|
-
Object.defineProperty(file, 'webkitRelativePath', {
|
|
13
|
-
value: `/${path}/${file.webkitRelativePath}`,
|
|
14
|
-
writable: false,
|
|
15
|
-
})
|
|
16
|
-
return file
|
|
17
|
-
})
|
|
18
|
-
: fileList
|
|
19
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { config } from '../config'
|
|
2
|
-
import { uploads } from '@openneuro/client'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Trim the webkitRelativePath value to only include the dataset relative path
|
|
6
|
-
* @param {File} file FileAPI object from a browser multiple file selector
|
|
7
|
-
*/
|
|
8
|
-
export const getRelativePath = (
|
|
9
|
-
file,
|
|
10
|
-
options = { stripRelativePath: true },
|
|
11
|
-
) => {
|
|
12
|
-
const path = file.webkitRelativePath
|
|
13
|
-
const pathTokens = path.split('/')
|
|
14
|
-
if (pathTokens.length === 1) {
|
|
15
|
-
return path
|
|
16
|
-
}
|
|
17
|
-
if (pathTokens[0] === '') {
|
|
18
|
-
pathTokens.shift()
|
|
19
|
-
}
|
|
20
|
-
if (pathTokens[pathTokens.length - 1] === '') {
|
|
21
|
-
pathTokens[pathTokens.length - 1] = file.name
|
|
22
|
-
}
|
|
23
|
-
if (options.stripRelativePath) {
|
|
24
|
-
return pathTokens.slice(1).join('/')
|
|
25
|
-
} else {
|
|
26
|
-
return pathTokens.join('/')
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Handle all variants of File objects and return the encoded upload file path
|
|
32
|
-
*
|
|
33
|
-
* Top level files have webkitRelativePath '' in some scenarios, use just the filename in that case
|
|
34
|
-
*
|
|
35
|
-
* @param {File} file
|
|
36
|
-
* @param {object} options
|
|
37
|
-
* @param {boolean} options.stripRelativePath
|
|
38
|
-
**/
|
|
39
|
-
export const encodeFilePath = (file, options = { stripRelativePath: false }) =>
|
|
40
|
-
file.webkitRelativePath
|
|
41
|
-
? uploads.encodeFilePath(getRelativePath(file, options))
|
|
42
|
-
: file.name
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* This provides a similar interface to Apollo mutation for a background fetch with a promise that resolves once all promises have settled
|
|
46
|
-
* @param {object} options
|
|
47
|
-
* @param {string} options.uploadId Upload identifier for resume
|
|
48
|
-
* @param {string} options.datasetId Accession number
|
|
49
|
-
* @param {number} options.endpoint Offset for upload endpoint
|
|
50
|
-
* @param {Array<object>} options.filesToUpload Array of file objects
|
|
51
|
-
* @param {string} options.token Credentials
|
|
52
|
-
* @param {import('./upload-progress-class').UploadProgress} options.uploadProgress Controller for reporting upload progress
|
|
53
|
-
* @param {AbortController} options.abortController Fetch AbortController for halting uploads
|
|
54
|
-
* @param {boolean} options.stripRelativePath True will remove the top-most directory name
|
|
55
|
-
*/
|
|
56
|
-
export async function uploadFiles({
|
|
57
|
-
uploadId,
|
|
58
|
-
datasetId,
|
|
59
|
-
endpoint,
|
|
60
|
-
filesToUpload,
|
|
61
|
-
token,
|
|
62
|
-
uploadProgress,
|
|
63
|
-
abortController,
|
|
64
|
-
stripRelativePath = true,
|
|
65
|
-
}) {
|
|
66
|
-
// Maps FileAPI objects to Request with the correct URL and body
|
|
67
|
-
let totalSize = 0
|
|
68
|
-
const requests = filesToUpload.map(f => {
|
|
69
|
-
totalSize += f.size
|
|
70
|
-
const encodedFilePath = encodeFilePath(f, {
|
|
71
|
-
stripRelativePath,
|
|
72
|
-
})
|
|
73
|
-
const fileUrl = `${config.url}/uploads/${endpoint}/${datasetId}/${uploadId}/${encodedFilePath}`
|
|
74
|
-
return new Request(fileUrl, {
|
|
75
|
-
method: 'POST',
|
|
76
|
-
body: f,
|
|
77
|
-
headers: {
|
|
78
|
-
Authorization: `Bearer ${token}`,
|
|
79
|
-
},
|
|
80
|
-
credentials: 'omit',
|
|
81
|
-
signal: abortController.signal,
|
|
82
|
-
})
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
// No background fetch
|
|
86
|
-
// Parallelism is handled by the client in this case
|
|
87
|
-
return uploads.uploadParallel(requests, totalSize, uploadProgress, fetch)
|
|
88
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import PropTypes from 'prop-types'
|
|
3
|
-
|
|
4
|
-
const UploadButton = ({ onClick }) => (
|
|
5
|
-
<span className="upload-btn-wrap">
|
|
6
|
-
<a className="nav-link nl-upload" onClick={onClick}>
|
|
7
|
-
<span className="link-name">
|
|
8
|
-
<i className="fa fa-upload" /> Upload Dataset
|
|
9
|
-
</span>
|
|
10
|
-
</a>
|
|
11
|
-
</span>
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
UploadButton.propTypes = {
|
|
15
|
-
onClick: PropTypes.func,
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default UploadButton
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react'
|
|
2
|
-
import UploaderContext from './uploader-context.js'
|
|
3
|
-
|
|
4
|
-
const UploadDisclaimer = () => {
|
|
5
|
-
const [affirmedDefaced, setAffirmedDefaced] = useState(false)
|
|
6
|
-
const [affirmedConsent, setAffirmedConsent] = useState(false)
|
|
7
|
-
return (
|
|
8
|
-
<UploaderContext.Consumer>
|
|
9
|
-
{uploader => (
|
|
10
|
-
<div className="disclaimer fade-in">
|
|
11
|
-
<h4>
|
|
12
|
-
By uploading this dataset to OpenNeuro I agree to the following
|
|
13
|
-
conditions:
|
|
14
|
-
</h4>
|
|
15
|
-
<p>
|
|
16
|
-
I am the owner of this dataset and have any necessary ethics
|
|
17
|
-
permissions to share the data publicly. This dataset does not
|
|
18
|
-
include any identifiable personal health information as defined by
|
|
19
|
-
the{' '}
|
|
20
|
-
<a href="https://www.hhs.gov/hipaa/for-professionals/privacy/laws-regulations/">
|
|
21
|
-
Health Insurance Portability and Accountability Act of 1996
|
|
22
|
-
</a>{' '}
|
|
23
|
-
(including names, zip codes, dates of birth, acquisition dates,
|
|
24
|
-
etc). I agree to destroy any key linking the personal identity of
|
|
25
|
-
research participants to the subject codes used in the dataset.
|
|
26
|
-
</p>
|
|
27
|
-
<p>
|
|
28
|
-
I agree that this dataset will become publicly available under a{' '}
|
|
29
|
-
<a href="https://wiki.creativecommons.org/wiki/CC0">
|
|
30
|
-
Creative Commons CC0
|
|
31
|
-
</a>{' '}
|
|
32
|
-
license after a grace period of 36 months counted from the date of
|
|
33
|
-
the first snapshot creation for this dataset. You will be able to
|
|
34
|
-
apply for up to two 6 month extensions to increase the grace period
|
|
35
|
-
in case the publication of a corresponding paper takes longer than
|
|
36
|
-
expected. See <a href="/faq">FAQ</a> for details.
|
|
37
|
-
</p>
|
|
38
|
-
<p>This dataset is not subject to GDPR protections.</p>
|
|
39
|
-
<p>
|
|
40
|
-
Generally, data should only be uploaded to a single data archive. In
|
|
41
|
-
the rare cases where it is necessary to upload the data to two
|
|
42
|
-
databases (such as the NIMH Data Archive), I agree to ensure that
|
|
43
|
-
the datasets are harmonized across archives.
|
|
44
|
-
</p>
|
|
45
|
-
<p>Please affirm one of the following:</p>
|
|
46
|
-
<label>
|
|
47
|
-
<input
|
|
48
|
-
type="checkbox"
|
|
49
|
-
onChange={() => setAffirmedDefaced(!affirmedDefaced)}
|
|
50
|
-
defaultChecked={affirmedDefaced}
|
|
51
|
-
/>
|
|
52
|
-
All structural scans have been defaced, obscuring any tissue
|
|
53
|
-
on or near the face that could potentially be used to reconstruct
|
|
54
|
-
the facial structure.
|
|
55
|
-
</label>
|
|
56
|
-
<label>
|
|
57
|
-
<input
|
|
58
|
-
type="checkbox"
|
|
59
|
-
onChange={() => setAffirmedConsent(!affirmedConsent)}
|
|
60
|
-
defaultChecked={affirmedConsent}
|
|
61
|
-
/>
|
|
62
|
-
I have explicit participant consent and ethical authorization
|
|
63
|
-
to publish structural scans without defacing.
|
|
64
|
-
</label>
|
|
65
|
-
<span className="message">
|
|
66
|
-
<button
|
|
67
|
-
className="fileupload-btn btn-blue"
|
|
68
|
-
onClick={() => {
|
|
69
|
-
uploader.captureMetadata({
|
|
70
|
-
...uploader.metadata,
|
|
71
|
-
affirmedDefaced,
|
|
72
|
-
affirmedConsent,
|
|
73
|
-
})
|
|
74
|
-
uploader.upload({ affirmedDefaced, affirmedConsent })
|
|
75
|
-
}}
|
|
76
|
-
disabled={
|
|
77
|
-
!(
|
|
78
|
-
(affirmedDefaced && !affirmedConsent) ||
|
|
79
|
-
(!affirmedDefaced && affirmedConsent)
|
|
80
|
-
)
|
|
81
|
-
}
|
|
82
|
-
>
|
|
83
|
-
I Agree
|
|
84
|
-
</button>
|
|
85
|
-
</span>
|
|
86
|
-
</div>
|
|
87
|
-
)}
|
|
88
|
-
</UploaderContext.Consumer>
|
|
89
|
-
)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export default UploadDisclaimer
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import PropTypes from 'prop-types'
|
|
3
|
-
|
|
4
|
-
const UploadFileStatus = ({ uploadingFiles, failedFiles }) => (
|
|
5
|
-
<>
|
|
6
|
-
<p>{[...uploadingFiles].join(', ')}</p>
|
|
7
|
-
<p>
|
|
8
|
-
{failedFiles.size
|
|
9
|
-
? `Too many failed attempts for '${[...failedFiles].join(', ')}'`
|
|
10
|
-
: null}
|
|
11
|
-
</p>
|
|
12
|
-
</>
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
UploadFileStatus.propTypes = {
|
|
16
|
-
uploadingFiles: PropTypes.instanceOf(Set),
|
|
17
|
-
failedFiles: PropTypes.instanceOf(Set),
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default UploadFileStatus
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import PropTypes from 'prop-types'
|
|
3
|
-
import pluralize from 'pluralize'
|
|
4
|
-
import Spinner from '../common/partials/spinner.jsx'
|
|
5
|
-
import Results from '../validation/validation-results.jsx'
|
|
6
|
-
import UploaderContext from './uploader-context.js'
|
|
7
|
-
import validate from '../workers/validate'
|
|
8
|
-
|
|
9
|
-
const UploadValidatorStatus = ({ issues, next, reset }) => {
|
|
10
|
-
const errorCount = issues.errors.length
|
|
11
|
-
const warnCount = issues.warnings.length
|
|
12
|
-
const issuesCount = errorCount + warnCount
|
|
13
|
-
if (issuesCount === 0) {
|
|
14
|
-
return (
|
|
15
|
-
<div className="message fade-in">
|
|
16
|
-
This dataset has no issues.
|
|
17
|
-
<button className="fileupload-btn btn-blue" onClick={next}>
|
|
18
|
-
Continue
|
|
19
|
-
</button>
|
|
20
|
-
</div>
|
|
21
|
-
)
|
|
22
|
-
} else if (errorCount === 0 && warnCount > 0) {
|
|
23
|
-
return (
|
|
24
|
-
<div className="message warn fade-in">
|
|
25
|
-
We found {warnCount} {pluralize('warning', warnCount)} in your dataset.
|
|
26
|
-
You are not required to fix warnings, but doing so will make your
|
|
27
|
-
dataset more BIDS compliant. Continue or fix the issues and select
|
|
28
|
-
folder again.
|
|
29
|
-
<button className="fileupload-btn btn-blue" onClick={next}>
|
|
30
|
-
Continue
|
|
31
|
-
</button>
|
|
32
|
-
</div>
|
|
33
|
-
)
|
|
34
|
-
} else {
|
|
35
|
-
return (
|
|
36
|
-
<div className="message error fade-in">
|
|
37
|
-
Your dataset is not a valid BIDS dataset. Fix the{' '}
|
|
38
|
-
<strong>
|
|
39
|
-
{errorCount} {pluralize('error', errorCount)}
|
|
40
|
-
</strong>{' '}
|
|
41
|
-
and{' '}
|
|
42
|
-
<a
|
|
43
|
-
href="#"
|
|
44
|
-
onClick={e => {
|
|
45
|
-
e.preventDefault()
|
|
46
|
-
reset()
|
|
47
|
-
}}>
|
|
48
|
-
select your folder again.
|
|
49
|
-
</a>{' '}
|
|
50
|
-
</div>
|
|
51
|
-
)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
class UploadValidator extends React.Component {
|
|
56
|
-
constructor(props) {
|
|
57
|
-
super(props)
|
|
58
|
-
this.state = {
|
|
59
|
-
validating: true,
|
|
60
|
-
issues: {
|
|
61
|
-
errors: [],
|
|
62
|
-
warnings: [],
|
|
63
|
-
},
|
|
64
|
-
summary: {},
|
|
65
|
-
}
|
|
66
|
-
const options = {
|
|
67
|
-
config: {
|
|
68
|
-
error: ['NO_AUTHORS'],
|
|
69
|
-
ignoreSubjectConsistency: true,
|
|
70
|
-
},
|
|
71
|
-
}
|
|
72
|
-
validate(this.props.files, options).then(this.done)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Called when validation finishes
|
|
77
|
-
*/
|
|
78
|
-
done = ({ issues, summary }) => {
|
|
79
|
-
this.setState({ issues, summary, validating: false })
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
render() {
|
|
83
|
-
if (this.state.validating) {
|
|
84
|
-
return <Spinner text="validating" active={true} />
|
|
85
|
-
} else {
|
|
86
|
-
return (
|
|
87
|
-
<div>
|
|
88
|
-
<UploadValidatorStatus
|
|
89
|
-
issues={this.state.issues}
|
|
90
|
-
next={this.props.next}
|
|
91
|
-
reset={this.props.reset}
|
|
92
|
-
/>
|
|
93
|
-
<Results
|
|
94
|
-
errors={this.state.issues.errors}
|
|
95
|
-
warnings={this.state.issues.warnings}
|
|
96
|
-
/>
|
|
97
|
-
<span className="bids-link">
|
|
98
|
-
Click to view details on{' '}
|
|
99
|
-
<a
|
|
100
|
-
href="http://bids.neuroimaging.io"
|
|
101
|
-
target="_blank"
|
|
102
|
-
rel="noopener noreferrer">
|
|
103
|
-
BIDS specification
|
|
104
|
-
</a>
|
|
105
|
-
</span>
|
|
106
|
-
</div>
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
UploadValidator.propTypes = {
|
|
113
|
-
// Files can be an FileList object or an array of File objects
|
|
114
|
-
files: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
|
|
115
|
-
next: PropTypes.func,
|
|
116
|
-
reset: PropTypes.func,
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const UploadIssues = () => (
|
|
120
|
-
<UploaderContext.Consumer>
|
|
121
|
-
{uploader => (
|
|
122
|
-
<UploadValidator
|
|
123
|
-
files={uploader.selectedFiles}
|
|
124
|
-
next={() => uploader.setLocation('/upload/metadata')}
|
|
125
|
-
reset={() => uploader.setLocation('/upload')}
|
|
126
|
-
/>
|
|
127
|
-
)}
|
|
128
|
-
</UploaderContext.Consumer>
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
export default UploadIssues
|