@@ -709,104 +709,78 @@ if (typeof Sfjs === 'undefined' || typeof Sfjs.loadToolbar === 'undefined') {
709
709
}
710
710
},
711
711
712
- createFilters : function () {
713
- document .querySelectorAll (' [data-filters] [data-filter]' ).forEach (function (filter ) {
714
- var filters = filter .closest (' [data-filters]' ),
715
- type = ' choice' ,
716
- name = filter .dataset .filter ,
717
- ucName = name .charAt (0 ).toUpperCase ()+ name .slice (1 ),
718
- list = document .createElement (' ul' ),
719
- values = filters .dataset [' filter' + ucName] || filters .querySelectorAll (' [data-filter-' + name+ ' ]' ),
720
- labels = {},
721
- defaults = null ,
722
- indexed = {},
723
- processed = {};
724
- if (typeof values === ' string' ) {
725
- type = ' level' ;
726
- labels = values .split (' ,' );
727
- values = values .toLowerCase ().split (' ,' );
728
- defaults = values .length - 1 ;
729
- }
730
- addClass (list, ' filter-list' );
731
- addClass (list, ' filter-list-' + type);
732
- values .forEach (function (value , i ) {
733
- if (value instanceof HTMLElement ) {
734
- value = value .dataset [' filter' + ucName];
735
- }
736
- if (value in processed) {
737
- return ;
738
- }
739
- var option = document .createElement (' li' ),
740
- label = i in labels ? labels[i] : value,
741
- active = false ,
742
- matches;
743
- if (' ' === label) {
744
- option .innerHTML = ' <em>(none)</em>' ;
745
- } else {
746
- option .innerText = label;
747
- }
748
- option .dataset .filter = value;
749
- option .setAttribute (' title' , 1 === (matches = filters .querySelectorAll (' [data-filter-' + name+ ' ="' + value+ ' "]' ).length ) ? ' Matches 1 row' : ' Matches ' + matches+ ' rows' );
750
- indexed[value] = i;
751
- list .appendChild (option);
752
- addEventListener (option, ' click' , function () {
753
- if (' choice' === type) {
754
- filters .querySelectorAll (' [data-filter-' + name+ ' ]' ).forEach (function (row ) {
755
- if (option .dataset .filter === row .dataset [' filter' + ucName]) {
756
- toggleClass (row, ' filter-hidden-' + name);
757
- }
758
- });
759
- toggleClass (option, ' active' );
760
- } else if (' level' === type) {
761
- if (i === this .parentNode .querySelectorAll (' .active' ).length - 1 ) {
762
- return ;
763
- }
764
- this .parentNode .querySelectorAll (' li' ).forEach (function (currentOption , j ) {
765
- if (j <= i) {
766
- addClass (currentOption, ' active' );
767
- if (i === j) {
768
- addClass (currentOption, ' last-active' );
769
- } else {
770
- removeClass (currentOption, ' last-active' );
771
- }
772
- } else {
773
- removeClass (currentOption, ' active' );
774
- removeClass (currentOption, ' last-active' );
775
- }
776
- });
777
- filters .querySelectorAll (' [data-filter-' + name+ ' ]' ).forEach (function (row ) {
778
- if (i < indexed[row .dataset [' filter' + ucName]]) {
779
- addClass (row, ' filter-hidden-' + name);
780
- } else {
781
- removeClass (row, ' filter-hidden-' + name);
782
- }
783
- });
784
- }
712
+ initializeLogsTable : function () {
713
+ Sfjs .updateLogsTable ();
714
+
715
+ document .querySelectorAll (' .log-filter input' ).forEach ((input ) => {
716
+ input .addEventListener (' change' , () => { Sfjs .updateLogsTable (); });
717
+ });
718
+
719
+ document .querySelectorAll (' .filter-select-all-or-none a' ).forEach ((link ) => {
720
+ link .addEventListener (' click' , () => {
721
+ const selectAll = link .classList .contains (' select-all' );
722
+ link .closest (' .log-filter-content' ).querySelectorAll (' input' ).forEach ((input ) => {
723
+ input .checked = selectAll;
785
724
});
786
- if (' choice' === type) {
787
- active = null === defaults || 0 <= defaults .indexOf (value);
788
- } else if (' level' === type) {
789
- active = i <= defaults;
790
- if (active && i === defaults) {
791
- addClass (option, ' last-active' );
792
- }
793
- }
794
- if (active) {
795
- addClass (option, ' active' );
796
- } else {
797
- filters .querySelectorAll (' [data-filter-' + name+ ' ="' + value+ ' "]' ).forEach (function (row ) {
798
- toggleClass (row, ' filter-hidden-' + name);
799
- });
725
+
726
+ Sfjs .updateLogsTable ();
727
+ });
728
+ });
729
+
730
+ document .body .addEventListener (' click' , (event ) => {
731
+ document .querySelectorAll (' details.log-filter' ).forEach ((filterElement ) => {
732
+ if (! filterElement .contains (event .target ) && filterElement .open ) {
733
+ filterElement .open = false ;
800
734
}
801
- processed[value] = true ;
802
735
});
736
+ });
737
+ },
738
+
739
+ updateLogsTable : function () {
740
+ const selectedType = document .querySelector (' #log-filter-type input:checked' ).value ;
741
+ const priorities = document .querySelectorAll (' #log-filter-priority input' );
742
+ const selectedPriorities = Array .from (priorities).filter ((input ) => input .checked ).map ((input ) => input .value );
743
+ const channels = document .querySelectorAll (' #log-filter-channel input' );
744
+ const selectedChannels = Array .from (channels).filter ((input ) => input .checked ).map ((input ) => input .value );
745
+
746
+ const logs = document .querySelector (' table.logs' );
747
+ if (null === logs) {
748
+ return ;
749
+ }
750
+
751
+ // hide rows that don't match the current filters
752
+ let numVisibleRows = 0 ;
753
+ logs .querySelectorAll (' tbody tr' ).forEach ((row ) => {
754
+ if (' all' !== selectedType && selectedType !== row .getAttribute (' data-type' )) {
755
+ row .style .display = ' none' ;
756
+ return ;
757
+ }
803
758
804
- if (1 < list . childNodes . length ) {
805
- filter . appendChild (list) ;
806
- filter . dataset . filtered = ' ' ;
759
+ if (false === selectedPriorities . includes ( row . getAttribute ( ' data-priority ' )) ) {
760
+ row . style . display = ' none ' ;
761
+ return ;
807
762
}
763
+
764
+ if (' ' !== row .getAttribute (' data-channel' ) && false === selectedChannels .includes (row .getAttribute (' data-channel' ))) {
765
+ row .style .display = ' none' ;
766
+ return ;
767
+ }
768
+
769
+ row .style .display = ' table-row' ;
770
+ numVisibleRows++ ;
808
771
});
809
- }
772
+
773
+ document .querySelector (' table.logs' ).style .display = 0 === numVisibleRows ? ' none' : ' table' ;
774
+ document .querySelector (' .no-logs-message' ).style .display = 0 === numVisibleRows ? ' block' : ' none' ;
775
+
776
+ // update the selected totals of all filters
777
+ document .querySelector (' #log-filter-priority .filter-active-num' ).innerText = (priorities .length === selectedPriorities .length ) ? ' All' : selectedPriorities .length ;
778
+ document .querySelector (' #log-filter-channel .filter-active-num' ).innerText = (channels .length === selectedChannels .length ) ? ' All' : selectedChannels .length ;
779
+
780
+ // update the currently selected "log type" tab
781
+ document .querySelectorAll (' #log-filter-type li' ).forEach ((tab ) => tab .classList .remove (' active' ));
782
+ document .querySelector (` #log-filter-type input[value="${ selectedType} "]` ).parentElement .classList .add (' active' );
783
+ },
810
784
};
811
785
})();
812
786
0 commit comments