diff --git a/capsule-prototype/js/MosaicPanelWidget.js b/capsule-prototype/js/MosaicPanelWidget.js index 7655b8b9d7e71ddb2fb48d5557f25ffdead43e0a..4aad30181d852b11329625443d9bbb6da54340d4 100644 --- a/capsule-prototype/js/MosaicPanelWidget.js +++ b/capsule-prototype/js/MosaicPanelWidget.js @@ -34,7 +34,8 @@ }, filters_type_to_hide: [], filter_label_to_show: [], - _followedItems: [] + _followedItems: [], + _filter_type: 0, }; const localOptions = $.extend({}, defaultOptions); @@ -73,6 +74,11 @@ } } + const refreshView = function () { + emptyPanel(); + fillPanel(); + }; + const getUrl = function (tagOrDoc, path) { if ('undefined' === typeof path) { let [reg, type] = tagOrDoc.getMetadata("Rekall->Type").split('/'); @@ -85,6 +91,37 @@ } } + const createFilterTypeSelector = function() { + let selectDiv = $('<div class="filter-type-selector">'); + selectDiv.addClass("mosaic_filter"); + + let outerDiv = $('<div class="mosaic_filter_item mosaic_filter_item_select" style="display: flex; flex-direction: row; justify-content:center; align-items: center; align-content: center; ">'); + + let selectElement = $('<select>'); + + let createOptionElement = function (value, text, isSelected){ + let option = $('<option>'); + option.attr('value', value); + option.text(text); + if (isSelected) { + option.attr('selected', 'selected'); + } + return option; + } + + selectElement.append(createOptionElement(0, "Filter by type of annotation document", 0 === localOptions._filter_type)); + selectElement.append(createOptionElement(1, "Filter by tag", 1 === localOptions._filter_type)); + selectElement.change(function(event) { + localOptions._filter_type = parseInt(selectElement.val()); + refreshView(); + }) + + outerDiv.append(selectElement) + selectDiv.append(outerDiv); + + return selectDiv; + } + const setDivVisibilityForTag = function (div, tag) { if (!localOptions.filter_label_to_show.length) { div.show() @@ -170,9 +207,15 @@ 'mosaic_filter_item_all', false )); + localOptions.htmlElement().append(createFilterTypeSelector()); localOptions.htmlElement().append(resetfilterdiv); - localOptions.htmlElement().append(typefilterdiv); - localOptions.htmlElement().append(labelsfilterdiv); + + if (localOptions._filter_type === 0) { + localOptions.htmlElement().append(typefilterdiv); + } + if (localOptions._filter_type === 1){ + localOptions.htmlElement().append(labelsfilterdiv); + } // eslint-disable-next-line no-undef let labels = new Set(); for (let [k, v] of Object.entries(localOptions.rekall().sortings.colors.categories)) { @@ -252,10 +295,7 @@ localOptions._destroyFollowedElements(); localOptions.filters_type_to_hide = []; }, - refresh: function () { - emptyPanel(); - fillPanel(); - } + refresh: refreshView }; }