mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/Vector.git
synced 2024-12-18 19:00:50 +00:00
8b197f417d
* Removes lines from instrumentation.js Bug: T379861 Change-Id: I2943917db477cd33fab481eaf24e50f6f01ca412
106 lines
3.4 KiB
JavaScript
106 lines
3.4 KiB
JavaScript
/**
|
|
* The value of the `inputLocation` property of any and all SearchSatisfaction events sent by the
|
|
* corresponding instrumentation.
|
|
*
|
|
* @see https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/skins/Vector/+/refs/heads/master/includes/Constants.php
|
|
*/
|
|
/**
|
|
* @param {FetchEndEvent} event
|
|
*/
|
|
function onFetchEnd( event ) {
|
|
mw.track( 'mediawiki.searchSuggest', {
|
|
action: 'impression-results',
|
|
numberOfResults: event.numberOfResults,
|
|
// resultSetType: '',
|
|
// searchId: '',
|
|
query: event.query,
|
|
inputLocation: 'header-moved'
|
|
} );
|
|
}
|
|
|
|
/**
|
|
* @param {SuggestionClickEvent|SearchSubmitEvent} event
|
|
*/
|
|
function onSuggestionClick( event ) {
|
|
mw.track( 'mediawiki.searchSuggest', {
|
|
action: 'click-result',
|
|
numberOfResults: event.numberOfResults,
|
|
index: event.index
|
|
} );
|
|
}
|
|
|
|
/**
|
|
* Generates the value of the `wprov` parameter to be used in the URL of a search result and the
|
|
* `wprov` hidden input.
|
|
*
|
|
* See https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/WikimediaEvents/+/refs/heads/master/modules/ext.wikimediaEvents/searchSatisfaction.js
|
|
* and also the top of that file for additional detail about the shape of the parameter.
|
|
*
|
|
* @param {number} index
|
|
* @return {string}
|
|
*/
|
|
function getWprovFromResultIndex( index ) {
|
|
// result looks like: acrw1_0, acrw1_1, acrw1_2, etc.;
|
|
// or acrw1_-1 for index -1 (user did not highlight an autocomplete result)
|
|
return 'acrw1_' + index;
|
|
}
|
|
|
|
/**
|
|
* @typedef {Object} SearchResultPartial
|
|
* @property {string} title
|
|
* @property {string} [url]
|
|
*/
|
|
|
|
/**
|
|
* Return a new list of search results,
|
|
* with the `wprov` parameter added to each result's url (if any).
|
|
*
|
|
* @param {SearchResultPartial[]} results Not modified.
|
|
* @param {number} offset Offset to add to the index of each result.
|
|
* @return {SearchResultPartial[]}
|
|
*/
|
|
function addWprovToSearchResultUrls( results, offset ) {
|
|
return results.map( ( result, index ) => {
|
|
if ( result.url ) {
|
|
const url = new URL( result.url, location.href );
|
|
url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) );
|
|
result = Object.assign( {}, result, { url: url.toString() } );
|
|
}
|
|
return result;
|
|
} );
|
|
}
|
|
|
|
/**
|
|
* @typedef {Object} Instrumentation
|
|
* @property {Object} listeners
|
|
* @property {Function} getWprovFromResultIndex
|
|
* @property {Function} addWprovToSearchResultUrls
|
|
*/
|
|
|
|
/**
|
|
* @type {Instrumentation}
|
|
*/
|
|
module.exports = {
|
|
listeners: {
|
|
onFetchEnd,
|
|
onSuggestionClick,
|
|
|
|
// As of writing (2020/12/08), both the "click-result" and "submit-form" kind of
|
|
// mediawiki.searchSuggestion events result in a "click" SearchSatisfaction event being
|
|
// logged [0]. However, when processing the "submit-form" kind of mediawiki.searchSuggestion
|
|
// event, the SearchSatisfaction instrument will modify the DOM, adding a hidden input
|
|
// element, in order to set the appropriate provenance parameter (see [1] for additional
|
|
// detail).
|
|
//
|
|
// In this implementation of the mediawiki.searchSuggestion protocol, we don't want to
|
|
// trigger the above behavior as we're using Vue.js, which doesn't expect the DOM to be
|
|
// modified underneath it.
|
|
//
|
|
// [0] https://gerrit.wikimedia.org/g/mediawiki/extensions/WikimediaEvents/+/df97aa9c9407507e8c48827666beeab492fd56a8/modules/ext.wikimediaEvents/searchSatisfaction.js#735
|
|
// [1] https://phabricator.wikimedia.org/T257698#6416826
|
|
onSubmit: onSuggestionClick
|
|
},
|
|
getWprovFromResultIndex,
|
|
addWprovToSearchResultUrls
|
|
};
|