From 4b631fe5feaffe4ecae64d94a7a318545339250f Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Wed, 12 Jul 2017 18:30:12 -0500 Subject: [PATCH] RCFilters: Log filter groupings Depends-On: Ib9df52d708993f2ed29633251365d4af2b6a4761 Change-Id: I09b2d45cdca323d43cf91d0b21bed06f2db8183c --- .../dm/mw.rcfilters.dm.FiltersViewModel.js | 14 +++++ .../mw.rcfilters.Controller.js | 55 +++++++++++++++++++ ...rcfilters.ui.FilterTagMultiselectWidget.js | 3 + 3 files changed, 72 insertions(+) diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js index 75431d95d1..06fa0aa946 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js @@ -887,6 +887,20 @@ } ); }; + /** + * Get all selected items + * + * @return {mw.rcfilters.dm.FilterItem[]} Selected items + */ + mw.rcfilters.dm.FiltersViewModel.prototype.getSelectedItems = function () { + var allSelected = []; + + $.each( this.getFilterGroups(), function ( groupName, groupModel ) { + allSelected = allSelected.concat( groupModel.getSelectedItems() ); + } ); + + return allSelected; + }; /** * Switch the current view * diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js index 58585668df..a9283b9166 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js @@ -15,6 +15,8 @@ this.baseFilterState = {}; this.uriProcessor = null; this.initializing = false; + + this.prevLoggedItems = []; }; /* Initialization */ @@ -221,6 +223,9 @@ this.filtersModel.toggleFilterSelected( filterName, false ); this.updateChangesList(); this.filtersModel.reassessFilterInteractions( filterItem ); + + // Log filter grouping + this.trackFilterGroupings( 'removefilter' ); } if ( isHighlighted ) { @@ -412,6 +417,9 @@ this.filtersModel.reassessFilterInteractions(); this.updateChangesList(); + + // Log filter grouping + this.trackFilterGroupings( 'savedfilters' ); } }; @@ -802,4 +810,51 @@ ); }; + /** + * Track filter grouping usage + * + * @param {string} action Action taken + */ + mw.rcfilters.Controller.prototype.trackFilterGroupings = function ( action ) { + var controller = this, + rightNow = new Date().getTime(), + randomIdentifier = String( mw.user.sessionId() ) + String( rightNow ) + String( Math.random() ), + // Get all current filters + filters = this.filtersModel.getSelectedItems().map( function ( item ) { + return item.getName(); + } ); + + action = action || 'filtermenu'; + + // Check if these filters were the ones we just logged previously + // (Don't log the same grouping twice, in case the user opens/closes) + // the menu without action, or with the same result + if ( + // Only log if the two arrays are different in size + filters.length !== this.prevLoggedItems.length || + // Or if any filters are not the same as the cached filters + filters.some( function ( filterName ) { + return controller.prevLoggedItems.indexOf( filterName ) === -1; + } ) || + // Or if any cached filters are not the same as given filters + this.prevLoggedItems.some( function ( filterName ) { + return filters.indexOf( filterName ) === -1; + } ) + ) { + filters.forEach( function ( filterName ) { + mw.track( + 'event.ChangesListFilterGrouping', + { + action: action, + groupIdentifier: randomIdentifier, + filter: filterName, + userId: mw.user.getId() + } + ); + } ); + + // Cache the filter names + this.prevLoggedItems = filters; + } + }; }( mediaWiki, jQuery ) ); diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js index dcada85d7d..305456ac7c 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js @@ -290,6 +290,9 @@ // Clear the input this.input.setValue( '' ); } + + // Log filter grouping + this.controller.trackFilterGroupings( 'filtermenu' ); } this.input.setIcon( isVisible ? 'search' : 'menu' ); -- 2.20.1