aboutsummaryrefslogtreecommitdiff
path: root/app/javascript
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascript')
-rw-r--r--app/javascript/packs/admin.js53
-rw-r--r--app/javascript/styles/mastodon/tables.scss49
2 files changed, 102 insertions, 0 deletions
diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js
index a3ed1ffed..b733d6b18 100644
--- a/app/javascript/packs/admin.js
+++ b/app/javascript/packs/admin.js
@@ -4,18 +4,71 @@ import ready from '../mastodon/ready';
const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]';
+const showSelectAll = () => {
+ const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
+ selectAllMatchingElement.classList.add('active');
+};
+
+const hideSelectAll = () => {
+ const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
+ const hiddenField = document.querySelector('#select_all_matching');
+ const selectedMsg = document.querySelector('.batch-table__select-all .selected');
+ const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected');
+
+ selectAllMatchingElement.classList.remove('active');
+ selectedMsg.classList.remove('active');
+ notSelectedMsg.classList.add('active');
+ hiddenField.value = '0';
+};
+
delegate(document, '#batch_checkbox_all', 'change', ({ target }) => {
+ const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
+
[].forEach.call(document.querySelectorAll(batchCheckboxClassName), (content) => {
content.checked = target.checked;
});
+
+ if (selectAllMatchingElement) {
+ if (target.checked) {
+ showSelectAll();
+ } else {
+ hideSelectAll();
+ }
+ }
+});
+
+delegate(document, '.batch-table__select-all button', 'click', () => {
+ const hiddenField = document.querySelector('#select_all_matching');
+ const active = hiddenField.value === '1';
+ const selectedMsg = document.querySelector('.batch-table__select-all .selected');
+ const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected');
+
+ if (active) {
+ hiddenField.value = '0';
+ selectedMsg.classList.remove('active');
+ notSelectedMsg.classList.add('active');
+ } else {
+ hiddenField.value = '1';
+ notSelectedMsg.classList.remove('active');
+ selectedMsg.classList.add('active');
+ }
});
delegate(document, batchCheckboxClassName, 'change', () => {
const checkAllElement = document.querySelector('#batch_checkbox_all');
+ const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
if (checkAllElement) {
checkAllElement.checked = [].every.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked);
checkAllElement.indeterminate = !checkAllElement.checked && [].some.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked);
+
+ if (selectAllMatchingElement) {
+ if (checkAllElement.checked) {
+ showSelectAll();
+ } else {
+ hideSelectAll();
+ }
+ }
}
});
diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss
index 431b8a73a..39211910f 100644
--- a/app/javascript/styles/mastodon/tables.scss
+++ b/app/javascript/styles/mastodon/tables.scss
@@ -190,6 +190,55 @@ a.table-action-link {
}
}
+ &__select-all {
+ background: $ui-base-color;
+ height: 47px;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid darken($ui-base-color, 8%);
+ border-top: 0;
+ color: $secondary-text-color;
+ display: none;
+
+ &.active {
+ display: flex;
+ }
+
+ .selected,
+ .not-selected {
+ display: none;
+
+ &.active {
+ display: block;
+ }
+ }
+
+ strong {
+ font-weight: 700;
+ }
+
+ span {
+ padding: 8px;
+ display: inline-block;
+ }
+
+ button {
+ background: transparent;
+ border: 0;
+ font: inherit;
+ color: $highlight-text-color;
+ border-radius: 4px;
+ font-weight: 700;
+ padding: 8px;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: lighten($ui-base-color, 8%);
+ }
+ }
+ }
+
&__form {
padding: 16px;
border: 1px solid darken($ui-base-color, 8%);