diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css index 6a0e7c8343..926eeaeeb3 100644 --- a/scripts/system/html/css/edit-style.css +++ b/scripts/system/html/css/edit-style.css @@ -1210,6 +1210,26 @@ div#grid-section, body#entity-list-body { width: 200px; padding-top: 1px; } +#filter-type-options-buttons { + top: -22px; + width: 224px; + z-index: 2; + background-color: #afafaf; + padding-bottom: 6px; +} +#filter-type-options input[type=button] { + position: relative; + left: 16px; + z-index: 3; + height: 23px; + min-width: 60px; + font-size: 10px; + color: #000; + background: linear-gradient(#afafaf 20%, #808080 100%); +} +#filter-type-options input[type=button]:enabled:hover { + background: linear-gradient(#afafaf 20%, #575757 100%); +} #filter-search-and-icon { position: relative; diff --git a/scripts/system/html/entityList.html b/scripts/system/html/entityList.html index f525c84cbc..986e5c09b0 100644 --- a/scripts/system/html/entityList.html +++ b/scripts/system/html/entityList.html @@ -44,6 +44,10 @@
+
+ + +
diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index b19873a049..8482591771 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -188,6 +188,7 @@ let renameTimeout = null; let renameLastBlur = null; let renameLastEntityID = null; let isRenameFieldBeingMoved = false; +let elFilterTypeInputs = {}; let elEntityTable, elEntityTableHeader, @@ -201,6 +202,9 @@ let elEntityTable, elFilterTypeMultiselectBox, elFilterTypeText, elFilterTypeOptions, + elFilterTypeOptionsButtons, + elFilterTypeSelectAll, + elFilterTypeClearAll, elFilterSearch, elFilterInView, elFilterRadius, @@ -243,6 +247,9 @@ function loaded() { elFilterTypeMultiselectBox = document.getElementById("filter-type-multiselect-box"); elFilterTypeText = document.getElementById("filter-type-text"); elFilterTypeOptions = document.getElementById("filter-type-options"); + elFilterTypeOptionsButtons = document.getElementById("filter-type-options-buttons"); + elFilterTypeSelectAll = document.getElementById('filter-type-select-all'); + elFilterTypeClearAll = document.getElementById('filter-type-clear-all'); elFilterSearch = document.getElementById("filter-search"); elFilterInView = document.getElementById("filter-in-view"); elFilterRadius = document.getElementById("filter-radius"); @@ -276,6 +283,8 @@ function loaded() { }; elRefresh.onclick = refreshEntities; elFilterTypeMultiselectBox.onclick = onToggleTypeDropdown; + elFilterTypeSelectAll.onclick = onSelectAllTypes; + elFilterTypeClearAll.onclick = onClearAllTypes; elFilterSearch.onkeyup = refreshEntityList; elFilterSearch.onsearch = refreshEntityList; elFilterInView.onclick = onToggleFilterInView; @@ -290,13 +299,14 @@ function loaded() { let elDiv = document.createElement('div'); elDiv.onclick = onToggleTypeFilter; - elFilterTypeOptions.appendChild(elDiv); + elFilterTypeOptions.insertBefore(elDiv, elFilterTypeOptionsButtons); let elInput = document.createElement('input'); elInput.setAttribute("type", "checkbox"); elInput.setAttribute("id", typeFilterID); elInput.setAttribute("filterType", type); elInput.checked = true; // all types are checked initially + elFilterTypeInputs[type] = elInput; elDiv.appendChild(elInput); let elLabel = document.createElement('label'); @@ -1065,7 +1075,21 @@ function loaded() { event.stopPropagation(); } - function toggleTypeFilter(elInput, refresh) { + function refreshTypeFilter(refreshList) { + if (typeFilters.length === 0) { + elFilterTypeText.innerText = "No Types"; + } else if (typeFilters.length === FILTER_TYPES.length) { + elFilterTypeText.innerText = "All Types"; + } else { + elFilterTypeText.innerText = "Types..."; + } + + if (refreshList) { + refreshEntityList(); + } + } + + function toggleTypeFilter(elInput, refreshList) { let type = elInput.getAttribute("filterType"); let typeChecked = elInput.checked; @@ -1076,17 +1100,7 @@ function loaded() { typeFilters.push(type); } - if (typeFilters.length === 0) { - elFilterTypeText.innerText = "No Types"; - } else if (typeFilters.length === FILTER_TYPES.length) { - elFilterTypeText.innerText = "All Types"; - } else { - elFilterTypeText.innerText = "Types..."; - } - - if (refresh) { - refreshEntityList(); - } + refreshTypeFilter(refreshList); } function onToggleTypeFilter(event) { @@ -1097,6 +1111,24 @@ function loaded() { event.stopPropagation(); } + function onSelectAllTypes(event) { + for (let type in elFilterTypeInputs) { + elFilterTypeInputs[type].checked = true; + } + typeFilters = FILTER_TYPES; + refreshTypeFilter(true); + event.stopPropagation(); + } + + function onClearAllTypes(event) { + for (let type in elFilterTypeInputs) { + elFilterTypeInputs[type].checked = false; + } + typeFilters = []; + refreshTypeFilter(true); + event.stopPropagation(); + } + function onBodyClick(event) { // if clicking anywhere outside of the multiselect dropdowns (since click event bubbled up to onBodyClick and // propagation wasn't stopped in the toggle type/column callbacks) and the dropdown is open then close it