Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 1x 1x 1x 1x 103x 103x 1x | /*! * VisualEditor tracking methods. * * @copyright See AUTHORS.txt */ ( function () { const callbacks = $.Callbacks( 'memory' ), queue = []; /** * Track an analytic event. * * VisualEditor uses this method internally to track internal changes of state that are of analytic * interest, either because they provide data about how users interact with the editor, or because * they contain exception info, latency measurements, or other metrics that help gauge performance * and reliability. VisualEditor does not transmit these events by default, but it provides a * generic interface for routing these events to an analytics framework. * * @memberof ve * @param {string} topic Event name * @param {Object} [data] Additional data describing the event, encoded as an object */ ve.track = function ( topic, data ) { queue.push( { topic: topic, timeStamp: ve.now(), data: data } ); callbacks.fire( queue ); }; /** * Register a handler for subset of analytic events, specified by topic * * Handlers will be called once for each tracked event, including any events that fired before the * handler was registered, with the topic, event data payload, and event timestamp as the first, * second, and third arguments, respectively. * * @memberof ve * @param {string} topic Handle events whose name starts with this string prefix * @param {Function} callback Handler to call for each matching tracked event */ ve.trackSubscribe = function ( topic, callback ) { let seen = 0; callbacks.add( ( q ) => { let event; for ( ; seen < q.length; seen++ ) { event = q[ seen ]; if ( event.topic.indexOf( topic ) === 0 ) { callback( event.topic, event.data, event.timeStamp ); } } } ); }; }() ); |