Milimetric has submitted this change and it was merged. Change subject: Clean up syntax errors and bad names ......................................................................
Clean up syntax errors and bad names Change-Id: Icd4577a91201c7f00d74e2f53ba89ce52820c24a --- M src/app/config.js M src/app/require.config.js M src/app/startup.js M src/components/a-b-compare/a-b-compare.js M src/components/a-b-compare/compare-stacked-bars.js M src/components/a-b-compare/compare-sunburst.js M src/components/a-b-compare/compare-timeseries.js M src/components/annotation-list/annotation-list.js M src/components/annotation-list/bindings.js M src/components/breakdown-toggle/breakdown-toggle.js M src/components/button-group/button-group.js M src/components/compare-layout/compare-layout.js M src/components/dropdown/dropdown.js M src/components/metric-selector/bindings.js M src/components/metric-selector/metric-selector.js R src/components/metrics-by-project-layout/metrics-by-project-layout.html R src/components/metrics-by-project-layout/metrics-by-project-layout.js M src/components/project-selector/bindings.js M src/components/project-selector/project-selector.js M src/components/tabs-layout/tabs-layout.js D src/components/time-selector/time-selector.html D src/components/time-selector/time-selector.js R src/components/visualizers/wikimetrics/wikimetrics.html R src/components/visualizers/wikimetrics/wikimetrics.js M src/layouts/metrics-by-project/index.html M src/layouts/metrics-by-project/index.js M src/lib/ajax-wrapper.js M src/lib/logger.js M src/lib/polyfills.js M src/lib/state-manager.js M src/lib/utils.js M src/lib/window.js M test/SpecRunner.browser.js M test/components/wikimetrics-layout.js M test/components/wikimetrics-visualizer.js 35 files changed, 79 insertions(+), 92 deletions(-) Approvals: Milimetric: Verified; Looks good to me, approved diff --git a/src/app/config.js b/src/app/config.js index c3ba165..87542de 100644 --- a/src/app/config.js +++ b/src/app/config.js @@ -1,8 +1,8 @@ +'use strict'; /** * Static configuration object */ define(function (require) { - 'use strict'; // load any config files written by the build system var buildConfig = require('./config-from-build'); @@ -40,10 +40,5 @@ endpoint: '//datasets.wikimedia.org/limn-public-data/metrics', format: 'tsv' }, - - - //urlProjectLanguageChoices: '/stubs/fake-wikimetrics/projectLanguageChoices.json', - //urlCategorizedMetrics: '/stubs/fake-wikimetrics/categorizedMetrics.json', - //urlDefaultDashboard: '/stubs/fake-wikimetrics/defaultDashboard.json', }; }); diff --git a/src/app/require.config.js b/src/app/require.config.js index 5e94fe2..16ab609 100644 --- a/src/app/require.config.js +++ b/src/app/require.config.js @@ -1,5 +1,3 @@ -/* jshint -W098 */ -/* jshint -W079 */ 'use strict'; // require.js looks for the following global when initializing var require = { diff --git a/src/app/startup.js b/src/app/startup.js index 5d6965e..7a2b020 100644 --- a/src/app/startup.js +++ b/src/app/startup.js @@ -1,9 +1,9 @@ +'use strict'; /** All requires below live on global scope. There is no need to specify them as such **/ define(function(require) { - 'use strict'; var ko = require('knockout'); @@ -14,11 +14,10 @@ // separate layouts, TODO: make each layout register its own components // *********** BEGIN Metrics By Project Layout Components ********** // - ko.components.register('wikimetrics-layout', { require: 'components/wikimetrics-layout/wikimetrics-layout' }); - ko.components.register('wikimetrics-visualizer', { require: 'components/wikimetrics-visualizer/wikimetrics-visualizer' }); + ko.components.register('metrics-by-project-layout', { require: 'components/metrics-by-project-layout/metrics-by-project-layout' }); + ko.components.register('wikimetrics', { require: 'components/visualizers/wikimetrics/wikimetrics' }); ko.components.register('project-selector', { require: 'components/project-selector/project-selector' }); ko.components.register('metric-selector', { require: 'components/metric-selector/metric-selector' }); - ko.components.register('time-selector', { require: 'components/time-selector/time-selector' }); ko.components.register('breakdown-toggle', { require: 'components/breakdown-toggle/breakdown-toggle' }); ko.components.register('vega-timeseries', { require: 'components/visualizers/vega-timeseries/vega-timeseries' }); ko.components.register('annotation-list', { require: 'components/annotation-list/annotation-list' }); diff --git a/src/components/a-b-compare/a-b-compare.js b/src/components/a-b-compare/a-b-compare.js index 7294082..6319f6f 100644 --- a/src/components/a-b-compare/a-b-compare.js +++ b/src/components/a-b-compare/a-b-compare.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var templateMarkup = require('text!./a-b-compare.html'), CopyParams = require('viewmodels.copy-params'); diff --git a/src/components/a-b-compare/compare-stacked-bars.js b/src/components/a-b-compare/compare-stacked-bars.js index 34f0f88..a7ed4ee 100644 --- a/src/components/a-b-compare/compare-stacked-bars.js +++ b/src/components/a-b-compare/compare-stacked-bars.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var templateMarkup = require('text!./compare-stacked-bars.html'), CopyParams = require('viewmodels.copy-params'); diff --git a/src/components/a-b-compare/compare-sunburst.js b/src/components/a-b-compare/compare-sunburst.js index 1e6a0b4..a6533a6 100644 --- a/src/components/a-b-compare/compare-sunburst.js +++ b/src/components/a-b-compare/compare-sunburst.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var templateMarkup = require('text!./compare-sunburst.html'), CopyParams = require('viewmodels.copy-params'); diff --git a/src/components/a-b-compare/compare-timeseries.js b/src/components/a-b-compare/compare-timeseries.js index e4f3698..2c8eec9 100644 --- a/src/components/a-b-compare/compare-timeseries.js +++ b/src/components/a-b-compare/compare-timeseries.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var d3 = require('d3'), templateMarkup = require('text!./compare-timeseries.html'); diff --git a/src/components/annotation-list/annotation-list.js b/src/components/annotation-list/annotation-list.js index 3ae2b3a..81a5950 100644 --- a/src/components/annotation-list/annotation-list.js +++ b/src/components/annotation-list/annotation-list.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var ko = require('knockout'), templateMarkup = require('text!./annotation-list.html'), diff --git a/src/components/annotation-list/bindings.js b/src/components/annotation-list/bindings.js index 45dc10c..90bf2db 100644 --- a/src/components/annotation-list/bindings.js +++ b/src/components/annotation-list/bindings.js @@ -1,5 +1,5 @@ +'use strict'; define(function(require) { - 'use strict'; var ko = require('knockout'); diff --git a/src/components/breakdown-toggle/breakdown-toggle.js b/src/components/breakdown-toggle/breakdown-toggle.js index 933336f..45ab1b2 100644 --- a/src/components/breakdown-toggle/breakdown-toggle.js +++ b/src/components/breakdown-toggle/breakdown-toggle.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var templateMarkup = require('text!./breakdown-toggle.html'); diff --git a/src/components/button-group/button-group.js b/src/components/button-group/button-group.js index b01f0b9..040b7b0 100644 --- a/src/components/button-group/button-group.js +++ b/src/components/button-group/button-group.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var templateMarkup = require('text!./button-group.html'), SingleSelect = require('viewmodels.single-select'); diff --git a/src/components/compare-layout/compare-layout.js b/src/components/compare-layout/compare-layout.js index a73eb1e..9fed7b0 100644 --- a/src/components/compare-layout/compare-layout.js +++ b/src/components/compare-layout/compare-layout.js @@ -1,7 +1,7 @@ +'use strict'; // NOTE: a few oddities remain from when this was hardcoded to // compare only visual editor and wikitext, but it's much cleaner define(function (require) { - 'use strict'; var ko = require('knockout'), _ = require('lodash'), diff --git a/src/components/dropdown/dropdown.js b/src/components/dropdown/dropdown.js index 56e6871..6713c67 100644 --- a/src/components/dropdown/dropdown.js +++ b/src/components/dropdown/dropdown.js @@ -1,5 +1,5 @@ +'use strict'; define(function (require) { - 'use strict'; var templateMarkup = require('text!./dropdown.html'), SingleSelect = require('viewmodels.single-select'); diff --git a/src/components/metric-selector/bindings.js b/src/components/metric-selector/bindings.js index 6ea0bfb..290c32f 100644 --- a/src/components/metric-selector/bindings.js +++ b/src/components/metric-selector/bindings.js @@ -1,5 +1,5 @@ +'use strict'; define(function(require) { - 'use strict'; var ko = require('knockout'); diff --git a/src/components/metric-selector/metric-selector.js b/src/components/metric-selector/metric-selector.js index f738492..f27f0d6 100644 --- a/src/components/metric-selector/metric-selector.js +++ b/src/components/metric-selector/metric-selector.js @@ -1,3 +1,4 @@ +'use strict'; /** * This component allows the user to select a metric. * @@ -19,7 +20,6 @@ "/> */ define(function (require) { - 'use strict'; var ko = require('knockout'), templateMarkup = require('text!./metric-selector.html'), diff --git a/src/components/wikimetrics-layout/wikimetrics-layout.html b/src/components/metrics-by-project-layout/metrics-by-project-layout.html similarity index 90% rename from src/components/wikimetrics-layout/wikimetrics-layout.html rename to src/components/metrics-by-project-layout/metrics-by-project-layout.html index 575fb1e..6641f9d 100644 --- a/src/components/wikimetrics-layout/wikimetrics-layout.html +++ b/src/components/metrics-by-project-layout/metrics-by-project-layout.html @@ -20,9 +20,9 @@ </metric-selector> </div> <div class="ui segment"> - <wikimetrics-visualizer params="projects: selectedProjects, + <wikimetrics params="projects: selectedProjects, metric: selectedMetric"> - </wikimetrics-visualizer> + </wikimetrics> </div> </section> </div> diff --git a/src/components/wikimetrics-layout/wikimetrics-layout.js b/src/components/metrics-by-project-layout/metrics-by-project-layout.js similarity index 96% rename from src/components/wikimetrics-layout/wikimetrics-layout.js rename to src/components/metrics-by-project-layout/metrics-by-project-layout.js index 51efa6c..2290d4f 100644 --- a/src/components/wikimetrics-layout/wikimetrics-layout.js +++ b/src/components/metrics-by-project-layout/metrics-by-project-layout.js @@ -1,12 +1,12 @@ +'use strict'; define(function (require) { - 'use strict'; var ko = require('knockout'), _ = require('lodash'), wikimetricsApi = require('apis.wikimetrics'), configApi = require('apis.config'), stateManagerFactory = require('stateManager'), - templateMarkup = require('text!./wikimetrics-layout.html'); + templateMarkup = require('text!./metrics-by-project-layout.html'); function WikimetricsLayout() { var self = this; diff --git a/src/components/project-selector/bindings.js b/src/components/project-selector/bindings.js index 4243481..6adce64 100644 --- a/src/components/project-selector/bindings.js +++ b/src/components/project-selector/bindings.js @@ -1,5 +1,10 @@ -define(['knockout', 'utils', 'typeahead'], function (ko, utils) { - 'use strict'; +'use strict'; +define(function (require) { + + var ko = require('knockout'), + utils = require('utils'); + + require('typeahead'); // Data is an array of option objects function substringMatcher(data, minLength) { diff --git a/src/components/project-selector/project-selector.js b/src/components/project-selector/project-selector.js index 2a0cf78..a8f4f1b 100644 --- a/src/components/project-selector/project-selector.js +++ b/src/components/project-selector/project-selector.js @@ -1,6 +1,5 @@ -/* jshint -W098 */ +'use strict'; define(function (require) { - 'use strict'; var ko = require('knockout'), templateMarkup = require('text!./project-selector.html'), @@ -95,7 +94,6 @@ }); } - /*jslint unparam: true */ ProjectSelector.prototype.displaySecondLevel = function (event, element, selection, datasetName) { var options = [], reverse = ko.unwrap(this.reverseLookup) || {}; @@ -122,7 +120,6 @@ options.sort(utils.sortByNameIgnoreCase); this.suboptions(options); }; - /*jslint unparam: false */ ProjectSelector.prototype.hideSecondLevel = function () { @@ -166,7 +163,7 @@ ProjectSelector.prototype.removeCategory = function (removeOthers, data) { // change the whole selectedProjects array at once // so as to send updates only once - var _selectedProjects = ko.utils.arrayFilter(this.selectedProjects(), function (item) { + var selectedProjects = ko.utils.arrayFilter(this.selectedProjects(), function (item) { var languages = data.languages, i, keep; @@ -185,7 +182,7 @@ } return keep; }); - this.selectedProjects(_selectedProjects); + this.selectedProjects(selectedProjects); }; return { diff --git a/src/components/tabs-layout/tabs-layout.js b/src/components/tabs-layout/tabs-layout.js index cd95b03..97d7408 100644 --- a/src/components/tabs-layout/tabs-layout.js +++ b/src/components/tabs-layout/tabs-layout.js @@ -1,5 +1,8 @@ +'use strict'; +/** + * Defines a generic tabular layout dashboard + */ define(function (require) { - 'use strict'; var ko = require('knockout'), _ = require('lodash'), diff --git a/src/components/time-selector/time-selector.html b/src/components/time-selector/time-selector.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/src/components/time-selector/time-selector.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/time-selector/time-selector.js b/src/components/time-selector/time-selector.js deleted file mode 100644 index c4b7e85..0000000 --- a/src/components/time-selector/time-selector.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['knockout', 'text!./time-selector.html'], function(ko, templateMarkup) { - - 'use strict'; - - function TimeSelector() { - var self = this; - self.loading = ko.observable(); - } - - return { - viewModel: TimeSelector, - template: templateMarkup - }; -}); diff --git a/src/components/wikimetrics-visualizer/wikimetrics-visualizer.html b/src/components/visualizers/wikimetrics/wikimetrics.html similarity index 100% rename from src/components/wikimetrics-visualizer/wikimetrics-visualizer.html rename to src/components/visualizers/wikimetrics/wikimetrics.html diff --git a/src/components/wikimetrics-visualizer/wikimetrics-visualizer.js b/src/components/visualizers/wikimetrics/wikimetrics.js similarity index 95% rename from src/components/wikimetrics-visualizer/wikimetrics-visualizer.js rename to src/components/visualizers/wikimetrics/wikimetrics.js index a633cbe..3e986f9 100644 --- a/src/components/wikimetrics-visualizer/wikimetrics-visualizer.js +++ b/src/components/visualizers/wikimetrics/wikimetrics.js @@ -1,3 +1,4 @@ +'use strict'; /** * This component coordinates between the project, metric, and time selectors * and visualizations. Currently, it will render a single timeseries graph @@ -5,18 +6,17 @@ * * Example usage: - <wikimetrics-visualizer params=" + <wikimetrics params=" metric : -- on observable of your selected metric -- projects : -- an observable of your selected projects -- "/> */ define(function (require) { - 'use strict'; var ko = require('knockout'), _ = require('lodash'), TimeseriesData = require('converters.timeseries'), - templateMarkup = require('text!./wikimetrics-visualizer.html'), + templateMarkup = require('text!./wikimetrics.html'), annotationsApi = require('apis.annotations'), apiFinder = require('app/apis/api-finder'); diff --git a/src/layouts/metrics-by-project/index.html b/src/layouts/metrics-by-project/index.html index 9e1c870..6a0d7ce 100644 --- a/src/layouts/metrics-by-project/index.html +++ b/src/layouts/metrics-by-project/index.html @@ -50,6 +50,6 @@ <!-- endbuild --> </head> <body> - <wikimetrics-layout/> + <metrics-by-project-layout/> </body> </html> diff --git a/src/layouts/metrics-by-project/index.js b/src/layouts/metrics-by-project/index.js index 1e07a5e..8549bc8 100644 --- a/src/layouts/metrics-by-project/index.js +++ b/src/layouts/metrics-by-project/index.js @@ -5,8 +5,8 @@ optimizerConfig: { include: [ 'requireLib', - 'components/wikimetrics-visualizer/wikimetrics-visualizer', - 'components/wikimetrics-layout/wikimetrics-layout', + 'components/visualizers/wikimetrics/wikimetrics', + 'components/metrics-by-project-layout/metrics-by-project-layout', 'components/metric-selector/metric-selector' ], bundles: { diff --git a/src/lib/ajax-wrapper.js b/src/lib/ajax-wrapper.js index 5c555c3..6a123f6 100644 --- a/src/lib/ajax-wrapper.js +++ b/src/lib/ajax-wrapper.js @@ -1,6 +1,5 @@ -/* jshint -W098 */ -define([], function() { - 'use strict'; +'use strict'; +define(function(require) { /** * Enhance ajax requests to have: * @@ -9,17 +8,18 @@ * * See: http://api.jquery.com/category/ajax/ **/ + var logger = require('logger'); /** * Not called for cross-domain requests, see ajaxComplete handler below **/ - $(document).ajaxError(function(e, xhr, settings, thrownError) { + $(document).ajaxError(function(e, xhr, settings) { logger.error(settings.url + ':' + xhr.status + '\n\n' + xhr.responseText); }); $(document).ajaxComplete(function(event, xhr, settings) { if (xhr.statusCode() >= 400) { - logger.error(settings.url + ':' + xhr.status + '\n\n' + xhr.responseText); + logger.error(settings.url + ':' + xhr.status + '\n\n' + xhr.responseText); } }); }); diff --git a/src/lib/logger.js b/src/lib/logger.js index df5bd99..d11e00a 100644 --- a/src/lib/logger.js +++ b/src/lib/logger.js @@ -1,5 +1,5 @@ +'use strict'; define([], function () { - 'use strict'; /** * Logger for client side errors. * diff --git a/src/lib/polyfills.js b/src/lib/polyfills.js index 7881199..3b88d83 100644 --- a/src/lib/polyfills.js +++ b/src/lib/polyfills.js @@ -1,6 +1,6 @@ +'use strict'; // Really basic polyfill, consider using modernizr define(function() { - 'use strict'; if (!Array.prototype.find) { Array.prototype.find = function(predicate) { diff --git a/src/lib/state-manager.js b/src/lib/state-manager.js index 88b9790..c51f82a 100644 --- a/src/lib/state-manager.js +++ b/src/lib/state-manager.js @@ -1,3 +1,4 @@ +'use strict'; /** * Knows how to translate from the URL to an application state * and (in the future) will mutate the url reading the application state @@ -13,7 +14,6 @@ * http: //dashiki.com/something#projects=enwiki,dewiki/metrics=newlyregister,rollingactive **/ define(function (require) { - 'use strict'; var ko = require('knockout'), configApi = require('apis.config'), URI = require('uri/URI'), @@ -98,7 +98,7 @@ var metrics = []; var defaults = hash.split('/'); defaults.forEach(function (item) { - var choice = item.split("="); + var choice = item.split('='); //some translation needed from 'projects' to 'defaultProjects' if (choice[0] === 'projects' && choice.length > 1) { projects = choice[1].split(','); @@ -128,7 +128,7 @@ this.state = null; - this._init(); + this.init(); } @@ -137,26 +137,26 @@ * if not it bootstraps the state of the application * from the config. **/ - StateManager.prototype._init = function () { + StateManager.prototype.init = function () { var self = this; //gives you a nice object from window.location var uri = new URI().normalizeHash(); // hash without '#' var hash = uri.fragment(); - var _state; + var state; if (!hash) { configApi.getDefaultDashboard(function (config) { - _state = new State(config.defaultProjects, config.defaultMetrics); + state = new State(config.defaultProjects, config.defaultMetrics); this.defaultProjects(config.defaultProjects); this.defaultMetrics(config.defaultMetrics); }.bind(this)); } else { - _state = State.splitStateURL(hash); - this.defaultProjects(_state.projects); - this.defaultMetrics(_state.metrics); + state = State.splitStateURL(hash); + this.defaultProjects(state.projects); + this.defaultMetrics(state.metrics); } // now define the computation for the state @@ -176,16 +176,16 @@ }); } - _state = new State(projectNames, metricName); + state = new State(projectNames, metricName); } else { // user must have cleared up the dashboard // but has a prior state, clean it up - _state = new EmptyState(); + state = new EmptyState(); } - StateManager._publish(_state); - return _state; + StateManager.publish(state); + return state; }); }; @@ -199,7 +199,7 @@ * Publishes state changes to the url * @param State object **/ - StateManager._publish = function (state) { + StateManager.publish = function (state) { var fragment = state.toString(); var uri = new URI().normalizeHash(); //reset fragment diff --git a/src/lib/utils.js b/src/lib/utils.js index 7ff36b9..8122583 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -1,8 +1,8 @@ +'use strict'; /** * Look into doing this with Lodash if we can make a slim enough build **/ define(function (require) { - 'use strict'; var moment = require('moment'); diff --git a/src/lib/window.js b/src/lib/window.js index d84713e..a5b0a87 100644 --- a/src/lib/window.js +++ b/src/lib/window.js @@ -1,10 +1,10 @@ +'use strict'; /** * It is quite useful to have window as stand alone module to be able to mock it in testing * Methods in window are not easy to mock as they are mostly read-only * only * **/ define(function () { - 'use strict'; return window; }); diff --git a/test/SpecRunner.browser.js b/test/SpecRunner.browser.js index 524f8ec..6837480 100644 --- a/test/SpecRunner.browser.js +++ b/test/SpecRunner.browser.js @@ -1,8 +1,9 @@ +'use strict'; (function () { // Reference your test modules here var testModules = [ - 'components/wikimetrics-layout', - 'components/wikimetrics-visualizer', + 'components/metrics-by-project-layout', + 'components/visualizers/wikimetrics', 'components/vega-timeseries', 'components/project-selector', 'app/data-converters', diff --git a/test/components/wikimetrics-layout.js b/test/components/wikimetrics-layout.js index 4b46f6c..2f3a52e 100644 --- a/test/components/wikimetrics-layout.js +++ b/test/components/wikimetrics-layout.js @@ -1,8 +1,12 @@ -define(['components/wikimetrics-layout/wikimetrics-layout'], function(component) { - var WikimetricsLayout = component.viewModel, +'use strict'; +define(function(require) { + + var component = require('components/metrics-by-project-layout/metrics-by-project-layout'), wikimetricsApi = require('apis.wikimetrics'); - describe('WikimetricsLayout view model', function() { + var MetricsByProjectLayout = component.viewModel; + + describe('MetricsByProjectLayout view model', function() { beforeEach(function() { var deferred = new $.Deferred(); @@ -16,13 +20,13 @@ }); it('should create observables needed by others', function() { - var layout = new WikimetricsLayout(); + var layout = new MetricsByProjectLayout(); - expect(typeof(layout.selectedMetric)).toEqual('function'); - expect(typeof(layout.selectedProjects)).toEqual('function'); + expect(typeof layout.selectedMetric).toEqual('function'); + expect(typeof layout.selectedProjects).toEqual('function'); - expect(typeof(layout.metrics)).toEqual('function'); - expect(typeof(layout.defaultMetrics)).toEqual('function'); + expect(typeof layout.metrics).toEqual('function'); + expect(typeof layout.defaultMetrics).toEqual('function'); }); }); }); diff --git a/test/components/wikimetrics-visualizer.js b/test/components/wikimetrics-visualizer.js index 46b94ac..9031854 100644 --- a/test/components/wikimetrics-visualizer.js +++ b/test/components/wikimetrics-visualizer.js @@ -1,7 +1,7 @@ define(function (require) { 'use strict'; - var component = require('components/wikimetrics-visualizer/wikimetrics-visualizer'), + var component = require('components/visualizers/wikimetrics/wikimetrics'), $ = require('jquery'), api = require('apis.wikimetrics'), ko = require('knockout'), -- To view, visit https://gerrit.wikimedia.org/r/267389 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Icd4577a91201c7f00d74e2f53ba89ce52820c24a Gerrit-PatchSet: 3 Gerrit-Project: analytics/dashiki Gerrit-Branch: master Gerrit-Owner: Milimetric <dandree...@wikimedia.org> Gerrit-Reviewer: Milimetric <dandree...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits