diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 605505f2b..8f17816c2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -275,11 +275,11 @@ To update the icons using the [IcoMoon website](https://icomoon.io/app/):
By following the steps above, you should minimize the diff. However, in the JSON file, you may still see changes for properties like `id`, `iconIdx`, `setId`, and `setIdx`. (I think these properties may change for the icons that were previously most recently added.)
-Here are a few screenshots the IcoMoon interface from March 2021:
+Here are a few screenshots of the IcoMoon interface from March 2021:
+
![Using IcoMoon Interface](docs/img/icomoon-choose-new-icons.png)
![Choosing Font Awesome Icon Set](docs/img/icomoon-font-awesome.png)
-
### Standard Actions
Certain actions are standardized across ODK Central Frontend.
diff --git a/icomoon.json b/icomoon.json
index a3e42208d..53aec870d 100644
--- a/icomoon.json
+++ b/icomoon.json
@@ -1161,14 +1161,41 @@
"attrs": [],
"properties": {
"name": "ban",
- "id": 93,
+ "id": 42,
"order": 2,
"prevSize": 28,
"code": 61534
},
+ "setIdx": 0,
+ "setId": 2,
+ "iconIdx": 42
+ },
+ {
+ "icon": {
+ "paths": [
+ "M1024 512c0 202.286-229.143 365.714-512 365.714-28 0-56-1.714-82.857-4.571-74.857 66.286-164 113.143-262.857 138.286-20.571 5.714-42.857 9.714-65.143 12.571-12.571 1.143-24.571-8-27.429-21.714v-0.571c-2.857-14.286 6.857-22.857 15.429-33.143 36-40.571 77.143-74.857 104-170.286-117.714-66.857-193.143-170.286-193.143-286.286 0-201.714 229.143-365.714 512-365.714s512 163.429 512 365.714z"
+ ],
+ "width": 1024,
+ "attrs": [],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "tags": [
+ "comment"
+ ],
+ "defaultCode": 61557,
+ "grid": 14
+ },
+ "attrs": [],
+ "properties": {
+ "name": "comment",
+ "id": 111,
+ "order": 2,
+ "prevSize": 28,
+ "code": 61557
+ },
"setIdx": 1,
"setId": 3,
- "iconIdx": 14
+ "iconIdx": 111
}
],
"height": 1024,
diff --git a/public/fonts/icomoon.svg b/public/fonts/icomoon.svg
index 1d5224d42..43e99b7f2 100755
--- a/public/fonts/icomoon.svg
+++ b/public/fonts/icomoon.svg
@@ -27,6 +27,7 @@
+
diff --git a/public/fonts/icomoon.ttf b/public/fonts/icomoon.ttf
index 9fda2d811..a8111167a 100755
Binary files a/public/fonts/icomoon.ttf and b/public/fonts/icomoon.ttf differ
diff --git a/public/fonts/icomoon.woff b/public/fonts/icomoon.woff
index 2a4525462..8db652234 100755
Binary files a/public/fonts/icomoon.woff and b/public/fonts/icomoon.woff differ
diff --git a/src/assets/css/bootstrap.css b/src/assets/css/bootstrap.css
index dee9999c6..55f4b7e55 100644
--- a/src/assets/css/bootstrap.css
+++ b/src/assets/css/bootstrap.css
@@ -64,7 +64,6 @@ dfn {
font-style: italic;
}
h1 {
- font-size: 2em;
margin: 0.67em 0;
}
mark {
@@ -385,34 +384,6 @@ h6,
line-height: 1.1;
color: inherit;
}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: 400;
- line-height: 1;
- color: #777777;
-}
h1,
.h1,
h2,
@@ -422,20 +393,6 @@ h3,
margin-top: 20px;
margin-bottom: 10px;
}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
h4,
.h4,
h5,
@@ -445,20 +402,6 @@ h6,
margin-top: 10px;
margin-bottom: 10px;
}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
h1,
.h1 {
font-size: 36px;
@@ -4228,49 +4171,6 @@ a.badge:focus {
.nav-pills > li > a > .badge {
margin-left: 3px;
}
-.jumbotron {
- padding-top: 30px;
- padding-bottom: 30px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eeeeee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron,
-.container-fluid .jumbotron {
- padding-right: 15px;
- padding-left: 15px;
- border-radius: 6px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding-top: 48px;
- padding-bottom: 48px;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-right: 60px;
- padding-left: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}
.thumbnail {
display: block;
padding: 4px;
diff --git a/src/assets/css/icomoon.css b/src/assets/css/icomoon.css
index 06b52fcf7..c531e1710 100755
--- a/src/assets/css/icomoon.css
+++ b/src/assets/css/icomoon.css
@@ -1,9 +1,9 @@
@font-face {
font-family: 'icomoon';
src:
- url('/fonts/icomoon.ttf?kps16g') format('truetype'),
- url('/fonts/icomoon.woff?kps16g') format('woff'),
- url('/fonts/icomoon.svg?kps16g#icomoon') format('svg');
+ url('/fonts/icomoon.ttf?6bbdpm') format('truetype'),
+ url('/fonts/icomoon.woff?6bbdpm') format('woff'),
+ url('/fonts/icomoon.svg?6bbdpm#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
@@ -177,3 +177,6 @@
.icon-ban:before {
content: "\f05e";
}
+.icon-comment:before {
+ content: "\f075";
+}
diff --git a/src/assets/scss/_mixins.scss b/src/assets/scss/_mixins.scss
index 1bef04e57..31a17f9eb 100644
--- a/src/assets/scss/_mixins.scss
+++ b/src/assets/scss/_mixins.scss
@@ -19,3 +19,11 @@
li { margin-bottom: 5px; }
}
+
+@mixin clearfix {
+ &::after {
+ clear: both;
+ content: " ";
+ display: table;
+ }
+}
diff --git a/src/assets/scss/_variables.scss b/src/assets/scss/_variables.scss
index 379090200..4aa8d12a2 100644
--- a/src/assets/scss/_variables.scss
+++ b/src/assets/scss/_variables.scss
@@ -66,6 +66,9 @@ $padding-left-table-data: 8px;
$padding-right-table-data: 8px;
$padding-top-table-data: 8px;
+// Panels
+$box-shadow-panel-main: 0 0 24px rgba(0, 0, 0, 0.25), 0 35px 115px rgba(0, 0, 0, 0.28);
+
$color-subpanel-background: #eee;
$color-subpanel-active: #ddd;
$color-subpanel-border: #e6e6e6;
diff --git a/src/assets/scss/app.scss b/src/assets/scss/app.scss
index 0fc2906f7..c11df5a06 100644
--- a/src/assets/scss/app.scss
+++ b/src/assets/scss/app.scss
@@ -23,7 +23,10 @@ body {
color: $color-text;
min-height: 100vh;
- &.scroll { overflow-y: scroll; }
+ &.scroll {
+ overflow-y: scroll;
+ &.modal-open { overflow-y: hidden; }
+ }
}
h1, .h1 {
@@ -36,6 +39,9 @@ h1, .h1 {
p { max-width: $max-width-p; }
dl div {
+ display: flex;
+ flex-direction: column-reverse;
+
border-bottom: 1px solid #ddd;
padding-bottom: 10px;
padding-top: 10px;
@@ -48,6 +54,13 @@ dl div {
}
}
+dt {
+ color: #666;
+ font-weight: normal;
+}
+
+dd { font-size: 16px; }
+
pre {
background-color: $color-subpanel-background;
border-color: $color-subpanel-border;
@@ -514,7 +527,7 @@ becomes more complicated.
}
.panel-main {
- box-shadow: 0 0 24px rgba(0, 0, 0, 0.25), 0 35px 115px rgba(0, 0, 0, 0.28);
+ box-shadow: $box-shadow-panel-main;
margin-top: 70px;
.panel-body {
diff --git a/src/components/actor-link.vue b/src/components/actor-link.vue
new file mode 100644
index 000000000..8ca40bfb3
--- /dev/null
+++ b/src/components/actor-link.vue
@@ -0,0 +1,38 @@
+
+
+ {{ actor.displayName }}
+ {{ actor.displayName }}
+
+
+
diff --git a/src/components/audit/row.vue b/src/components/audit/row.vue
index 76e0b5aed..a03aaa60b 100644
--- a/src/components/audit/row.vue
+++ b/src/components/audit/row.vue
@@ -19,13 +19,7 @@ except according to the terms contained in the LICENSE file.
-
-
- {{ audit.actor.displayName }}
-
- {{ audit.actor.displayName }}
-
+
|
@@ -41,6 +35,7 @@ except according to the terms contained in the LICENSE file.
+@import '../../assets/scss/mixins';
-
-{
- "en": {
- // This is a title shown above a section of the page.
- "title": "Actions",
- "action": {
- "updateReviewState": "Update State"
- }
- }
-}
-
+#submission-activity { margin-bottom: $margin-bottom-page-section; }
+#submission-activity-update-review-state-button { margin-right: 5px; }
+
diff --git a/src/components/submission/audit/row.vue b/src/components/submission/audit/row.vue
deleted file mode 100644
index b9227e7de..000000000
--- a/src/components/submission/audit/row.vue
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
- |
-
- {{ audit.actor.displayName }}
- |
-
-
- {{ $t('created') }}
-
-
- {{ reviewStateText }}
-
-
- {{ $t('edited') }}
-
- |
- {{ audit.notes }} |
-
-
-
-
-
-
-
-
-{
- "en": {
- // This text indicates that a Submission was submitted.
- "created": "Submitted",
- // This text is shown for a Submission that was edited.
- "edited": "Edited"
- }
-}
-
diff --git a/src/components/submission/audit/table.vue b/src/components/submission/audit/table.vue
deleted file mode 100644
index aa395e4d2..000000000
--- a/src/components/submission/audit/table.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
- {{ $t('header.time') }} |
- {{ $t('header.takenBy') }} |
- {{ $t('header.action') }} |
- {{ $t('header.note') }} |
-
-
-
-
-
-
-
-
-
-
-
-
-
-{
- "en": {
- "header": {
- "takenBy": "Taken by",
- "action": "Action",
- "note": "Note"
- }
- }
-}
-
diff --git a/src/components/submission/basic-details.vue b/src/components/submission/basic-details.vue
index a18a82912..ed52ed9bc 100644
--- a/src/components/submission/basic-details.vue
+++ b/src/components/submission/basic-details.vue
@@ -13,7 +13,7 @@ except according to the terms contained in the LICENSE file.
{{ $t('common.basicInfo') }}
-
+
- {{ $t('header.instanceId') }}
- {{ submission.__id }}
@@ -21,16 +21,20 @@ except according to the terms contained in the LICENSE file.
- {{ $t('header.submitterName') }}
-
-
- {{ submission.__system.submitterName }}
-
+ {{ submission.__system.submitterName }}
- {{ $t('header.submissionDate') }}
+
+ - {{ $t('reviewState') }}
+ -
+
+ {{ $t(`reviewState.${submission.__system.reviewState}`) }}
+
+
- {{ $t('deviceId') }}
-
@@ -54,16 +58,15 @@ except according to the terms contained in the LICENSE file.
+
+
+
+
+{
+ "en": {
+ "editWithoutComment": "You have made edits to this data. Please describe the changes you made."
+ }
+}
+
diff --git a/src/components/submission/feed-entry.vue b/src/components/submission/feed-entry.vue
new file mode 100644
index 000000000..b092eb393
--- /dev/null
+++ b/src/components/submission/feed-entry.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t(`title.updateReviewState.${reviewState}.reviewState`) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ comment }}
+
+
+
+
+
+
+
+
+{
+ "en": {
+ "title": {
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the word "Submitted", so it is essential for "Submitted" to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+Submitted by {name}
+
+you could split it into:
+
+Submitted • {name} */
+ "create": "Submitted by {name}",
+ "updateReviewState": {
+ "null": {
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the Review State, so it is essential for the Review State to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+{reviewState} per {name}
+
+you could split it into:
+
+{reviewState} • {name} */
+ "full": "{reviewState} per {name}",
+ "reviewState": "Received"
+ },
+ "hasIssues": {
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the Review State, so it is essential for the Review State to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+{reviewState} per {name}
+
+you could split it into:
+
+{reviewState} • {name} */
+ "full": "{reviewState} per {name}",
+ "reviewState": "Has Issues"
+ },
+ "edited": {
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the Review State, so it is essential for the Review State to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+{reviewState} by {name}
+
+you could split it into:
+
+{reviewState} • {name} */
+ "full": "{reviewState} by {name}",
+ "reviewState": "Edited"
+ },
+ "approved": {
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the Review State, so it is essential for the Review State to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+{reviewState} by {name}
+
+you could split it into:
+
+{reviewState} • {name} */
+ "full": "{reviewState} by {name}",
+ "reviewState": "Approved"
+ },
+ "rejected": {
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the Review State, so it is essential for the Review State to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+{reviewState} by {name}
+
+you could split it into:
+
+{reviewState} • {name} */
+ "full": "{reviewState} by {name}",
+ "reviewState": "Rejected"
+ }
+ },
+ /* This text is shown in the list of actions performed on a Submission. There is an icon before the text that corresponds to the word "Comment", so it is essential for "Comment" to also come first in the translation. If that is unnatural in your language, you can also split the text into two parts. For example, instead of:
+
+Comment by {name}
+
+you could split it into:
+
+Comment • {name} */
+ "comment": "Comment by {name}"
+ }
+ }
+}
+
diff --git a/src/components/submission/metadata-row.vue b/src/components/submission/metadata-row.vue
index c961eba5a..90895ca2f 100644
--- a/src/components/submission/metadata-row.vue
+++ b/src/components/submission/metadata-row.vue
@@ -21,7 +21,7 @@ except according to the terms contained in the LICENSE file.
|
{{ stateText }}
-
+
{{ $n(submission.__system.edits, 'default') }}
@@ -51,18 +51,13 @@ except according to the terms contained in the LICENSE file.
| |