invenio-app-rdm 13.0.0b1.dev29__py2.py3-none-any.whl → 13.0.0b1.dev30__py2.py3-none-any.whl

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 (19) hide show
  1. invenio_app_rdm/__init__.py +1 -1
  2. invenio_app_rdm/administration/records/records.py +5 -0
  3. invenio_app_rdm/config.py +3 -0
  4. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js +83 -0
  5. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +0 -1
  6. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +77 -0
  7. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js +128 -0
  8. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js +41 -2
  9. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js +5 -0
  10. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js +3 -0
  11. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides +2 -0
  12. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html +15 -0
  13. invenio_app_rdm/theme/webpack.py +5 -0
  14. {invenio_app_rdm-13.0.0b1.dev29.dist-info → invenio_app_rdm-13.0.0b1.dev30.dist-info}/METADATA +5 -1
  15. {invenio_app_rdm-13.0.0b1.dev29.dist-info → invenio_app_rdm-13.0.0b1.dev30.dist-info}/RECORD +19 -15
  16. {invenio_app_rdm-13.0.0b1.dev29.dist-info → invenio_app_rdm-13.0.0b1.dev30.dist-info}/LICENSE +0 -0
  17. {invenio_app_rdm-13.0.0b1.dev29.dist-info → invenio_app_rdm-13.0.0b1.dev30.dist-info}/WHEEL +0 -0
  18. {invenio_app_rdm-13.0.0b1.dev29.dist-info → invenio_app_rdm-13.0.0b1.dev30.dist-info}/entry_points.txt +0 -0
  19. {invenio_app_rdm-13.0.0b1.dev29.dist-info → invenio_app_rdm-13.0.0b1.dev30.dist-info}/top_level.txt +0 -0
@@ -17,6 +17,6 @@
17
17
  #
18
18
  # See PEP 0440 for details - https://www.python.org/dev/peps/pep-0440
19
19
 
20
- __version__ = "13.0.0b1.dev29"
20
+ __version__ = "13.0.0b1.dev30"
21
21
 
22
22
  __all__ = ("__version__",)
@@ -56,6 +56,11 @@ class RecordAdminListView(AdminResourceListView):
56
56
  "payload_schema": None,
57
57
  "order": 1,
58
58
  },
59
+ "compare": {
60
+ "text": _("Compare revisions"),
61
+ "payload_schema": None,
62
+ "order": 1,
63
+ },
59
64
  }
60
65
 
61
66
  search_config_name = "RDM_SEARCH"
invenio_app_rdm/config.py CHANGED
@@ -1461,6 +1461,9 @@ from invenio_app_rdm import __version__
1461
1461
  ADMINISTRATION_DISPLAY_VERSIONS = [("invenio-app-rdm", f"v{__version__}")]
1462
1462
  """Show the InvenioRDM version in the administration panel."""
1463
1463
 
1464
+ ADMINISTRATION_THEME_BASE_TEMPLATE = "invenio_app_rdm/administration_page.html"
1465
+ """Administration base template."""
1466
+
1464
1467
 
1465
1468
  APP_RDM_SUBCOMMUNITIES_LABEL = "Subcommunities"
1466
1469
  """Label for the subcommunities in the community browse page."""
@@ -0,0 +1,83 @@
1
+ /*
2
+ * // This file is part of Invenio-App-Rdm
3
+ * // Copyright (C) 2025 CERN.
4
+ * //
5
+ * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
+ * // under the terms of the MIT License; see LICENSE file for more details.
7
+ */
8
+
9
+ import React, { useState } from "react";
10
+ import PropTypes from "prop-types";
11
+ import { Grid, Dropdown, Button } from "semantic-ui-react";
12
+
13
+ export const CompareRevisionsDropdown = ({
14
+ loading,
15
+ options,
16
+ onCompare,
17
+ srcRevision: srcOption,
18
+ targetRevision: targetOption,
19
+ }) => {
20
+ // Local state for selected revisions
21
+ const [srcRevision, setSrcRevision] = useState(srcOption);
22
+ const [targetRevision, setTargetRevision] = useState(targetOption);
23
+
24
+ const handleCompare = () => {
25
+ onCompare(srcRevision, targetRevision);
26
+ };
27
+
28
+ return (
29
+ <Grid>
30
+ <Grid.Column mobile={16} computer={6} tablet={16} largeScreen={6} widescreen={6}>
31
+ <label htmlFor="source-revision">From</label>
32
+ <Dropdown
33
+ id="source-revision"
34
+ loading={loading}
35
+ placeholder="Source revision..."
36
+ fluid
37
+ selection
38
+ value={srcRevision}
39
+ onChange={(e, { value }) => setSrcRevision(value)}
40
+ options={options}
41
+ scrolling
42
+ />
43
+ </Grid.Column>
44
+ <Grid.Column mobile={16} computer={6} tablet={16} largeScreen={6} widescreen={6}>
45
+ <label htmlFor="target-revision">To</label>
46
+ <Dropdown
47
+ id="target-revision"
48
+ loading={loading}
49
+ placeholder="Target revision..."
50
+ fluid
51
+ selection
52
+ value={targetRevision}
53
+ onChange={(e, { value }) => setTargetRevision(value)}
54
+ options={options}
55
+ scrolling
56
+ />
57
+ </Grid.Column>
58
+ <Grid.Column
59
+ verticalAlign="bottom"
60
+ mobile={16}
61
+ computer={2}
62
+ tablet={16}
63
+ largeScreen={2}
64
+ widescreen={2}
65
+ >
66
+ <Button
67
+ onClick={handleCompare}
68
+ disabled={loading || !srcRevision || !targetRevision}
69
+ >
70
+ Compare
71
+ </Button>
72
+ </Grid.Column>
73
+ </Grid>
74
+ );
75
+ };
76
+
77
+ CompareRevisionsDropdown.propTypes = {
78
+ loading: PropTypes.bool.isRequired,
79
+ options: PropTypes.array.isRequired,
80
+ onCompare: PropTypes.func.isRequired,
81
+ srcRevision: PropTypes.object,
82
+ targetRevision: PropTypes.object,
83
+ };
@@ -83,7 +83,6 @@ export class ImpersonateUserForm extends Component {
83
83
  render() {
84
84
  const { error, loading } = this.state;
85
85
  const { user } = this.props;
86
- console.log({ user });
87
86
  return (
88
87
  <Formik
89
88
  onSubmit={this.handleSubmit}
@@ -0,0 +1,77 @@
1
+ /*
2
+ * // This file is part of Invenio-App-Rdm
3
+ * // Copyright (C) 2025 CERN.
4
+ * //
5
+ * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
+ * // under the terms of the MIT License; see LICENSE file for more details.
7
+ */
8
+
9
+ import React, { Component } from "react";
10
+ import PropTypes from "prop-types";
11
+ import { Grid, Container } from "semantic-ui-react";
12
+ import { Differ, Viewer } from "json-diff-kit";
13
+
14
+ export class RevisionsDiffViewer extends Component {
15
+ constructor(props) {
16
+ super(props);
17
+ this.differ = new Differ({
18
+ detectCircular: true,
19
+ maxDepth: null,
20
+ showModifications: true,
21
+ arrayDiffMethod: "lcs",
22
+ ignoreCase: false,
23
+ ignoreCaseForKey: false,
24
+ recursiveEqual: true,
25
+ });
26
+
27
+ this.viewerProps = {
28
+ indent: 4,
29
+ lineNumbers: true,
30
+ highlightInlineDiff: true,
31
+ inlineDiffOptions: {
32
+ mode: "word",
33
+ wordSeparator: " ",
34
+ },
35
+ hideUnchangedLines: true,
36
+ syntaxHighlight: false,
37
+ virtual: true,
38
+ };
39
+
40
+ this.state = {
41
+ currentDiff: undefined,
42
+ };
43
+ }
44
+
45
+ componentDidUpdate(prevProps) {
46
+ const { diff } = this.props;
47
+
48
+ if (diff !== prevProps.diff) {
49
+ this.computeDiff();
50
+ }
51
+ }
52
+
53
+ computeDiff = () => {
54
+ const { diff } = this.props;
55
+ const _diff = this.differ.diff(diff?.srcRevision, diff?.targetRevision);
56
+ this.setState({ currentDiff: _diff });
57
+ };
58
+
59
+ render() {
60
+ const { currentDiff } = this.state;
61
+
62
+ return currentDiff ? (
63
+ <Grid>
64
+ <Grid.Column width={16}>
65
+ <Container fluid>
66
+ <Viewer diff={currentDiff} {...this.viewerProps} />
67
+ </Container>
68
+ </Grid.Column>
69
+ </Grid>
70
+ ) : null;
71
+ }
72
+ }
73
+
74
+ RevisionsDiffViewer.propTypes = {
75
+ diff: PropTypes.object,
76
+ viewerProps: PropTypes.object.isRequired,
77
+ };
@@ -0,0 +1,128 @@
1
+ /*
2
+ * // This file is part of Invenio-App-Rdm
3
+ * // Copyright (C) 2025 CERN.
4
+ * //
5
+ * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
+ * // under the terms of the MIT License; see LICENSE file for more details.
7
+ */
8
+ import React, { Component } from "react";
9
+ import PropTypes from "prop-types";
10
+ import { RecordModerationApi } from "./api";
11
+ import { withCancel, ErrorMessage } from "react-invenio-forms";
12
+ import { Modal, Button, Grid } from "semantic-ui-react";
13
+ import { i18next } from "@translations/invenio_app_rdm/i18next";
14
+ import { CompareRevisionsDropdown } from "../components/CompareRevisionsDropdown";
15
+ import { RevisionsDiffViewer } from "../components/RevisionsDiffViewer";
16
+
17
+ export class CompareRevisions extends Component {
18
+ constructor(props) {
19
+ super(props);
20
+
21
+ this.state = {
22
+ loading: true,
23
+ error: undefined,
24
+ allRevisions: {},
25
+ srcRevision: undefined,
26
+ targetRevision: undefined,
27
+ diff: undefined,
28
+ };
29
+ }
30
+
31
+ async fetchRevisions() {
32
+ const { resource } = this.props;
33
+ this.setState({ loading: true });
34
+
35
+ try {
36
+ this.cancellableAction = withCancel(RecordModerationApi.getRevisions(resource));
37
+ const response = await this.cancellableAction.promise;
38
+ const revisions = await response.data;
39
+
40
+ this.setState({
41
+ allRevisions: revisions,
42
+ targetRevision: revisions[0],
43
+ srcRevision: revisions.length > 1 ? revisions[1] : revisions[0],
44
+ loading: false,
45
+ });
46
+ } catch (error) {
47
+ if (error === "UNMOUNTED") return;
48
+ this.setState({ error: error, loading: false });
49
+ console.error(error);
50
+ }
51
+ }
52
+
53
+ componentDidMount() {
54
+ this.fetchRevisions();
55
+ }
56
+
57
+ componentWillUnmount() {
58
+ this.cancellableAction && this.cancellableAction.cancel();
59
+ }
60
+
61
+ handleModalClose = () => {
62
+ const { actionCancelCallback } = this.props;
63
+ actionCancelCallback();
64
+ };
65
+
66
+ handleCompare = (srcRevision, targetRevision) => {
67
+ this.setState({ diff: { srcRevision, targetRevision } });
68
+ };
69
+
70
+ render() {
71
+ const { error, loading, allRevisions, srcRevision, targetRevision, diff } =
72
+ this.state;
73
+ const options = Object.values(allRevisions).map((rev) => ({
74
+ key: rev.updated,
75
+ text: `${rev.updated} (${rev.revision_id})`,
76
+ value: rev,
77
+ }));
78
+
79
+ return loading ? (
80
+ <p>Loading...</p>
81
+ ) : (
82
+ <>
83
+ <Modal.Content>
84
+ <CompareRevisionsDropdown
85
+ loading={loading}
86
+ options={options}
87
+ srcRevision={srcRevision}
88
+ targetRevision={targetRevision}
89
+ onCompare={this.handleCompare}
90
+ />
91
+ {error && (
92
+ <Modal.Content>
93
+ <ErrorMessage
94
+ header={i18next.t("Unable to fetch revisions.")}
95
+ content={error}
96
+ icon="exclamation"
97
+ className="text-align-left"
98
+ negative
99
+ />
100
+ </Modal.Content>
101
+ )}
102
+ <Modal.Content scrolling>
103
+ <RevisionsDiffViewer diff={this.state.diff} />
104
+ </Modal.Content>
105
+ </Modal.Content>
106
+ <Modal.Actions>
107
+ <Grid>
108
+ <Grid.Column floated="left" width={8} textAlign="left">
109
+ <Button
110
+ onClick={this.handleModalClose}
111
+ disabled={loading}
112
+ loading={loading}
113
+ aria-label={i18next.t("Cancel revision comparison")}
114
+ >
115
+ Close
116
+ </Button>
117
+ </Grid.Column>
118
+ </Grid>
119
+ </Modal.Actions>
120
+ </>
121
+ );
122
+ }
123
+ }
124
+
125
+ CompareRevisions.propTypes = {
126
+ resource: PropTypes.object.isRequired,
127
+ actionCancelCallback: PropTypes.func.isRequired,
128
+ };
@@ -7,6 +7,7 @@
7
7
  */
8
8
 
9
9
  import TombstoneForm from "./TombstoneForm";
10
+ import { CompareRevisions } from "./CompareRevisions";
10
11
  import React, { Component } from "react";
11
12
  import PropTypes from "prop-types";
12
13
  import { Button, Modal, Icon } from "semantic-ui-react";
@@ -22,16 +23,34 @@ export class RecordResourceActions extends Component {
22
23
  modalOpen: false,
23
24
  modalHeader: undefined,
24
25
  modalBody: undefined,
26
+ modalProps: undefined,
25
27
  };
26
28
  }
27
29
 
28
30
  onModalTriggerClick = (e, { payloadSchema, dataName, dataActionKey }) => {
29
31
  const { resource } = this.props;
30
32
 
33
+ if (dataActionKey === "compare") {
34
+ this.setState({
35
+ modalOpen: true,
36
+ modalHeader: i18next.t("Compare revisions"),
37
+ modalProps: {
38
+ size: "large",
39
+ },
40
+ modalBody: (
41
+ <CompareRevisions
42
+ actionSuccessCallback={this.handleSuccess}
43
+ actionCancelCallback={this.closeModal}
44
+ resource={resource}
45
+ />
46
+ ),
47
+ });
48
+ }
31
49
  if (dataActionKey === "delete") {
32
50
  this.setState({
33
51
  modalOpen: true,
34
52
  modalHeader: i18next.t("Delete record"),
53
+ modalProps: undefined, // default size
35
54
  modalBody: (
36
55
  <TombstoneForm
37
56
  actionSuccessCallback={this.handleSuccess}
@@ -45,6 +64,7 @@ export class RecordResourceActions extends Component {
45
64
  this.setState({
46
65
  modalOpen: true,
47
66
  modalHeader: i18next.t("Restore record"),
67
+ modalProps: undefined, // default size
48
68
  modalBody: (
49
69
  <RestoreConfirmation
50
70
  actionSuccessCallback={this.handleSuccess}
@@ -76,11 +96,30 @@ export class RecordResourceActions extends Component {
76
96
 
77
97
  render() {
78
98
  const { actions, Element, resource } = this.props;
79
- const { modalOpen, modalHeader, modalBody } = this.state;
99
+ const { modalOpen, modalHeader, modalBody, modalProps } = this.state;
80
100
  let icon;
81
101
  return (
82
102
  <>
83
103
  {Object.entries(actions).map(([actionKey, actionConfig]) => {
104
+ if (actionKey === "compare" && !resource.deletion_status.is_deleted) {
105
+ icon = "file code outline";
106
+ return (
107
+ <Element
108
+ key={actionKey}
109
+ onClick={this.onModalTriggerClick}
110
+ payloadSchema={actionConfig.payload_schema}
111
+ dataName={actionConfig.text}
112
+ dataActionKey={actionKey}
113
+ icon={icon}
114
+ fluid
115
+ basic
116
+ labelPosition="left"
117
+ >
118
+ {icon && <Icon name={icon} />}
119
+ {actionConfig.text}
120
+ </Element>
121
+ );
122
+ }
84
123
  if (actionKey === "delete" && !resource.deletion_status.is_deleted) {
85
124
  icon = "trash alternate";
86
125
  return (
@@ -120,7 +159,7 @@ export class RecordResourceActions extends Component {
120
159
  }
121
160
  return null;
122
161
  })}
123
- <ActionModal modalOpen={modalOpen} resource={resource}>
162
+ <ActionModal modalOpen={modalOpen} resource={resource} modalProps={modalProps}>
124
163
  {modalHeader && <Modal.Header>{modalHeader}</Modal.Header>}
125
164
  {!_isEmpty(modalBody) && modalBody}
126
165
  </ActionModal>
@@ -22,7 +22,12 @@ const restoreRecord = async (record) => {
22
22
  return await http.post(APIRoutes.restore(record));
23
23
  };
24
24
 
25
+ const getRevisions = async (record) => {
26
+ return await http.get(APIRoutes.compare(record));
27
+ };
28
+
25
29
  export const RecordModerationApi = {
26
30
  deleteRecord: deleteRecord,
27
31
  restoreRecord: restoreRecord,
32
+ getRevisions: getRevisions,
28
33
  };
@@ -12,6 +12,9 @@ const APIRoutesGenerators = {
12
12
  delete: (record, idKeyPath = "id") => {
13
13
  return `/api/records/${_get(record, idKeyPath)}/delete`;
14
14
  },
15
+ compare: (record, idKeyPath = "id") => {
16
+ return `/api/records/${_get(record, idKeyPath)}/revisions`;
17
+ },
15
18
 
16
19
  restore: (record, idKeyPath = "id") => {
17
20
  return `/api/records/${_get(record, idKeyPath)}/restore`;
@@ -552,3 +552,5 @@ dl.details-list {
552
552
  vertical-align: sub;
553
553
  }
554
554
  }
555
+
556
+
@@ -0,0 +1,15 @@
1
+ {# -*- coding: utf-8 -*-
2
+
3
+ This file is part of Invenio.
4
+ Copyright (C) 2015-2025 CERN.
5
+
6
+ Invenio is free software; you can redistribute it and/or modify it
7
+ under the terms of the MIT License; see LICENSE file for more details.
8
+ #}
9
+
10
+ {%- extends "invenio_theme/page.html" -%}
11
+
12
+ {%- block css %}
13
+ {{ super()}}
14
+ <link rel="stylesheet" href="/static/css/json-diff-kit.css">
15
+ {%- endblock css %}
@@ -58,6 +58,7 @@ theme = WebpackThemeBundle(
58
58
  "react-invenio-forms": "^4.0.0",
59
59
  "react-searchkit": "^3.0.0",
60
60
  "yup": "^0.32.0",
61
+ "json-diff-kit": "^1.0.30",
61
62
  },
62
63
  aliases={
63
64
  # Define Semantic-UI theme configuration needed by
@@ -87,6 +88,10 @@ theme = WebpackThemeBundle(
87
88
  "from": "../node_modules/tinymce/skins/ui/oxide/content.min.css",
88
89
  "to": "../../static/dist/js/skins/ui/oxide",
89
90
  },
91
+ {
92
+ "from": "../node_modules/json-diff-kit/dist/viewer.css",
93
+ "to": "../../static/css/json-diff-kit.css",
94
+ },
90
95
  ],
91
96
  ),
92
97
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: invenio-app-rdm
3
- Version: 13.0.0b1.dev29
3
+ Version: 13.0.0b1.dev30
4
4
  Summary: Invenio Research Data Management.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-rdm
6
6
  Author: CERN
@@ -97,6 +97,10 @@ https://inveniordm.docs.cern.ch
97
97
  Changes
98
98
  =======
99
99
 
100
+ Version v13.0.0b1.dev30 (released 2025-01-27)
101
+
102
+ - administration: add record revision comparison
103
+
100
104
  Version v13.0.0b1.dev29 (released 2025-01-23)
101
105
 
102
106
  - preview: do not mint parent doi if doi is not reserved and doi is optional
@@ -1,6 +1,6 @@
1
- invenio_app_rdm/__init__.py,sha256=PKiiXUchwHsmP64ActLU6bHi4qWIJxVdxx-OONLUtHc,700
1
+ invenio_app_rdm/__init__.py,sha256=u4q_SFxQYGGR04phk4HQNcPmPh5_YK-1RsLpWt6JFz0,700
2
2
  invenio_app_rdm/cli.py,sha256=G6QqNU2W6n6ICtTMnpeKFXIsdorncDmVXwwwsGH5F2k,2746
3
- invenio_app_rdm/config.py,sha256=huHWP7FzjvRb7r_VOL33A9LQWKdmkUVJyEJaibKp3d4,50265
3
+ invenio_app_rdm/config.py,sha256=eg8JHluXVF6qkcom-YsaFdQj7CniqN2kc3S7JxbRU0E,50382
4
4
  invenio_app_rdm/ext.py,sha256=PkZhATGJDgYqBJQh41NdvBZWR83mgI3Eej6rj10UVJE,5278
5
5
  invenio_app_rdm/tasks.py,sha256=XAbl8KeAWaJ5lC_4OUWUPstvCT7lYs5tRR1zSVBDfRk,1275
6
6
  invenio_app_rdm/urls.py,sha256=VRbpuN3kQ2fcmKvEIGQ5O1EnaSsEE2kyhLwUmONwZO8,2192
@@ -8,7 +8,7 @@ invenio_app_rdm/administration/__init__.py,sha256=8r9LeoE9fNHZSVS5QsCfVhRU7MAiEO
8
8
  invenio_app_rdm/administration/domains/__init__.py,sha256=Qob5kqjRPxpuSE5yDV2tesN6tmaKp5JcxCxGA8Mrcak,487
9
9
  invenio_app_rdm/administration/domains/domains.py,sha256=vafLa-mqkg_tQLjx328E64P_4mksB5kjBlsfunvdatg,5599
10
10
  invenio_app_rdm/administration/records/__init__.py,sha256=WpNHBm_Mk9FF8GzvrXWjL79URMSgBhpqgxvrLXNooqg,434
11
- invenio_app_rdm/administration/records/records.py,sha256=zgdxIh5Mfs9lLtpYkCGJUNeP4OnjNP2XoqcQL0dzVT8,5209
11
+ invenio_app_rdm/administration/records/records.py,sha256=ODMtYaeU2gO6wYQChqCz14fiiFOKknAGIAo4tzMchC8,5345
12
12
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/domains_search.html,sha256=NP8HPfOQPIR9psNDMFRXJH8fjok2AbXCentD_3Q1wWw,338
13
13
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation.html,sha256=koXd8lV_KBgAl1Wll7aM3xR0NgYcOl2PiFqD2Xkcp2w,348
14
14
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation_details.html,sha256=g6YZh9yWqDfzd5kMgIrO4c5k4iKa61y04RsuT_ZbMJI,350
@@ -102,11 +102,13 @@ invenio_app_rdm/requests_ui/views/requests.py,sha256=gREAyePWlE-E3LIebTuSkzZ6VGl
102
102
  invenio_app_rdm/requests_ui/views/ui.py,sha256=DBysYQa__gOCg-pikO6HmoVLmRmMAVWeTBiYhPa7PmA,2359
103
103
  invenio_app_rdm/theme/__init__.py,sha256=QbkxNjjOmGKRlie96HfTXgnFeVQjOX0GdiZnHP7pIhs,277
104
104
  invenio_app_rdm/theme/views.py,sha256=UJs2_C28BWsXY1JqbRK4_ML1JRtGo1yM2S0_W37JJo4,4545
105
- invenio_app_rdm/theme/webpack.py,sha256=9G0V-vj4Mr32x3Smr9OLWUKIs8zIxpMJogLvpJHjIPk,4868
105
+ invenio_app_rdm/theme/webpack.py,sha256=5ucwIJQgM1y9EFdRcsxv_ThPs7hXRzdmipVBxoU1McI,5090
106
106
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js,sha256=2-BWDEH3YQPwPt1ey3jUHnMrKTyb0JBPRlydk5_reH8,4151
107
107
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js,sha256=zKROcc3qE64-UhM8ha42K-EDDxAXMupxoocZZ9bjEHo,3452
108
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js,sha256=h7ilYSO4XYwdIqO75R1aREzCdp-EFeHbMbYvQ-Iq41A,2342
108
109
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUser.js,sha256=GmZGEPOylGXr6fyNJxS_0hPwCGdO98F2u6Pn8Qrt9ew,2291
109
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js,sha256=qWau-q5G9cw5zcZ0vV_YShzVLYDciLyNWtYbTVonOXM,6842
110
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js,sha256=qsjNiOsHWx9rrP3uA4nxthUEoY9b82n0IO8PfdObxHQ,6815
111
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js,sha256=N8dEcGupDr1_TG858E6uU64TDtGVR4zJ_mgKiASG90s,1823
110
112
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js,sha256=wwvYfTJ7pBEdoeqcEqmxFLaEwpJnnFW0oRQTyAdDSBw,3038
111
113
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaForm.js,sha256=Ltr03KlCogkg2NjqWc1GkxJlYPWB2LDLHL04w6eJiRU,5749
112
114
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/index.js,sha256=soELMxc1jf_rL62CJ9wtWGVG13yk1PRY7JqseqnKkqU,297
@@ -114,15 +116,16 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domai
114
116
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/SearchResultItemLayout.js,sha256=sWIHw6tSCmRa0dYCHTa-fbxnHr9MhyDhMUiGlGV-HWE,6097
115
117
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/index.js,sha256=uajCJbGiHGjRH_YapCGGXATKtAUlXTr0jirx1UfqjCQ,283
116
118
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/drafts/index.js,sha256=DuPY4wnnwyWF61Oyef1S4SvQrg-DrkZZjjQKlA0DeJo,1159
119
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js,sha256=wqJrxHi5kW83PJhJMinpuX-He1NPBVjRVHyyhBoHoQ4,3723
117
120
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordActions.js,sha256=FAjkK7TZ4ebjsQh1ZcFFHkVePP2T8msa1OAIjxktKJo,1935
118
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js,sha256=zfsJh-_UHSXcFdfl0cZttyohvJlHs2NhOkK0DsmgvN4,4226
121
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js,sha256=l3Ed1_cgUlLC6zjRkwA7v48sPfXqQKsNZGdGWBHGDfY,5519
119
122
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RemovalReasonsSelect.js,sha256=8y1YRo1ZyqDfeQL4aNbO9ig3689YpzEBse8kLf_qI8o,2192
120
123
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RestoreConfirmation.js,sha256=Bo2_psfPKys0Xn6jzozxePzW3x9VbyvNYI64Qlqmh7w,3085
121
124
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/TombstoneForm.js,sha256=maPIZMR6QQsLUlr3S7G203muRbZ9wTRoZR2DCy0aAXg,6943
122
125
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/index.js,sha256=kWIIp7kzH3oe4xbByiUC3SpgEjAt4R3mWH8vneGWhiU,1460
123
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js,sha256=N2Xvve7SicOPD4DRPozAi_e-pF58P4t_84joLQHALrM,855
126
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js,sha256=aVg7q92xn-wRx7Uff0EXBA04qYrvhYNu7IbbzfDT_LY,982
124
127
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/index.js,sha256=8D199izj4qOxNVS1XrS3JutmuBYIjHkvshUdv1aU92U,261
125
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js,sha256=lxEaU0S-1ngOR-Cd6HLjmv7TO2ODR-0l5MZ3ApdNcGc,556
128
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js,sha256=scsibLhOtl8m6rI1w2IZEgW5eP_z8nRPkBSSFJXoOKQ,668
126
129
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/AdministrationSearchLayout.js,sha256=3pRQVkFOnyqRFWmbE3vXMB75Vnrvf-Y5pzZF79iT9q0,1854
127
130
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/RecordSearchLayout.js,sha256=F3Ht0kMf6-cSmbTSRo-PnJLneCqoqh7d0ea1A2Lj2i8,2544
128
131
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/SearchResultItemLayout.js,sha256=CsbdG5fVx2hw1SenJ5wHVd468-n5qp2yhB5x3ceGCuE,5611
@@ -248,7 +251,7 @@ invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/seg
248
251
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/segment.variables,sha256=HwtfX97PrCMjVYBHj323pUmrjBuUl41yVthXQL_8YHs,141
249
252
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/reset.overrides,sha256=ms-coZLC-kFoWoZ4UNyJq0FRQ0bSLRziXzbyP7tnmNA,139
250
253
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/reset.variables,sha256=Luyh-V1w5wDFv2j77bYmTxfn22Cp7h1vLjRsqhf207Y,139
251
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides,sha256=MdrtvnaxaehWWhitoz_ZVjWPpVP6_XiPpMERM7mbuTc,9009
254
+ invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides,sha256=8LBnXXf0lYLQEhw-1BBhKj9tGYCS1Gpw0qVxKG_Vomo,9011
252
255
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.variables,sha256=j59x9AQ5p4omynVitye2tIM3h0GCXSqcajNYJElKxjI,3043
253
256
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.overrides,sha256=7SK2kGZU-KMda2SVbuLfP-6hk0vTe_4gFk6O_RvU_hs,3306
254
257
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.variables,sha256=JFUnfiL_Xve48EwxRjYq0T-QJA8jboC606L08IjrBXg,322
@@ -378,6 +381,7 @@ invenio_app_rdm/theme/static/images/icons8-web-design-80.png,sha256=lRi5Dfc01unG
378
381
  invenio_app_rdm/theme/static/images/invenio-rdm.svg,sha256=UPCbTYMkSmnFj0SqQ2o_oJdybZtH_Q4HguqS0x-FS2U,6831
379
382
  invenio_app_rdm/theme/static/images/orcid.svg,sha256=D79IRA7Ul2mfO9deW-Xocz_FTR-Ol5q3Nepya34pjWY,1117
380
383
  invenio_app_rdm/theme/static/images/ror-icon.svg,sha256=aIth5_-aYB7yx1nswjM6XgHAFW6dvJc5khkR9khWCZM,3712
384
+ invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html,sha256=KkfcHLi4vx-Pd4K0ZZvgPBx6lGK5l9xCLV3hkklvYVw,394
381
385
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/default_static_page.html,sha256=Un6KtaKmNlM-R7Qu1eeh0FFckgym3mq1zHV-AOew5pY,1178
382
386
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/footer.html,sha256=rZ5XGaoYNIOCii6W7ClPv6sgjeU5HPLR6TeEqTWzDZ0,2975
383
387
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/frontpage.html,sha256=l-u25QOE2OkkPt-f7Cce469u4W2TnBdB_HVXpSZx3DE,1605
@@ -519,9 +523,9 @@ invenio_app_rdm/users_ui/views/__init__.py,sha256=SMdY2NJj9GICfr3Xuok7qdNYVtA2bJ
519
523
  invenio_app_rdm/users_ui/views/dashboard.py,sha256=iUn2PrODAwb8ugmMosJKAjPhUzjCiWiAWoXQr9RUFuc,1793
520
524
  invenio_app_rdm/users_ui/views/ui.py,sha256=W_eXM8dLVIrNHQB2UEh37C9BYoHauft6RyvcDNFHovA,1742
521
525
  invenio_app_rdm/utils/files.py,sha256=CruDyO2gDVadSlWEJD-WHpWHeOQ0juh-Ei9jz3D9yjc,3923
522
- invenio_app_rdm-13.0.0b1.dev29.dist-info/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
523
- invenio_app_rdm-13.0.0b1.dev29.dist-info/METADATA,sha256=5TDHA565wd33k9XBmNgNjxJP5EDZd5KBLe_DTLfD1rM,9554
524
- invenio_app_rdm-13.0.0b1.dev29.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
525
- invenio_app_rdm-13.0.0b1.dev29.dist-info/entry_points.txt,sha256=r1vTqYNABeWqRMWitzyR9FnBsAy-KYZKZCp95IziyLY,2070
526
- invenio_app_rdm-13.0.0b1.dev29.dist-info/top_level.txt,sha256=quZejDUw2vLfKQboNIuVLJ9fxZifdnCT_s2PNf1dfmk,16
527
- invenio_app_rdm-13.0.0b1.dev29.dist-info/RECORD,,
526
+ invenio_app_rdm-13.0.0b1.dev30.dist-info/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
527
+ invenio_app_rdm-13.0.0b1.dev30.dist-info/METADATA,sha256=3_x0mc0UjZZiexx0iri9AuiPfUlBQVnWzZClrRHqeYQ,9651
528
+ invenio_app_rdm-13.0.0b1.dev30.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
529
+ invenio_app_rdm-13.0.0b1.dev30.dist-info/entry_points.txt,sha256=r1vTqYNABeWqRMWitzyR9FnBsAy-KYZKZCp95IziyLY,2070
530
+ invenio_app_rdm-13.0.0b1.dev30.dist-info/top_level.txt,sha256=quZejDUw2vLfKQboNIuVLJ9fxZifdnCT_s2PNf1dfmk,16
531
+ invenio_app_rdm-13.0.0b1.dev30.dist-info/RECORD,,