jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/376427 )

Change subject: Add support for Schema:Print
......................................................................


Add support for Schema:Print

Bug: T169730
Change-Id: Id506d44f572687ff9c26118ceaa69c6146fedf86
---
M WikimediaEventsHooks.php
M extension.json
A modules/ext.wikimediaEvents.print.js
3 files changed, 117 insertions(+), 1 deletion(-)

Approvals:
  Pmiazga: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/WikimediaEventsHooks.php b/WikimediaEventsHooks.php
index 709eb12..ff1836c 100644
--- a/WikimediaEventsHooks.php
+++ b/WikimediaEventsHooks.php
@@ -413,10 +413,15 @@
        }
 
        public static function onResourceLoaderGetConfigVars( &$vars ) {
-               global $wgWMEStatsdBaseUri, $wgWMEReadingDepthSamplingRate, 
$wgWMEReadingDepthEnabled;
+               global $wgWMEStatsdBaseUri, $wgWMEReadingDepthSamplingRate,
+                       $wgWMEReadingDepthEnabled, $wgWMEPrintSamplingRate,
+                       $wgWMEPrintEnabled;
+
                $vars['wgWMEStatsdBaseUri'] = $wgWMEStatsdBaseUri;
                $vars['wgWMEReadingDepthSamplingRate'] = 
$wgWMEReadingDepthSamplingRate;
                $vars['wgWMEReadingDepthEnabled'] = $wgWMEReadingDepthEnabled;
+               $vars['wgWMEPrintSamplingRate'] = $wgWMEPrintSamplingRate;
+               $vars['wgWMEPrintEnabled'] = $wgWMEPrintEnabled;
        }
 
        /**
diff --git a/extension.json b/extension.json
index db369ac..ed8b003 100644
--- a/extension.json
+++ b/extension.json
@@ -94,6 +94,11 @@
                        "schema": "DeprecatedUsage",
                        "revision": 7906187
                },
+               "schema.Print": {
+                       "class": "ResourceLoaderSchemaModule",
+                       "schema": "Print",
+                       "revision": 17199246
+               },
                "schema.ReadingDepth": {
                        "class": "ResourceLoaderSchemaModule",
                        "schema": "ReadingDepth",
@@ -164,6 +169,7 @@
                                "ext.wikimediaEvents.events.js",
                                "ext.wikimediaEvents.statsd.js",
                                "ext.wikimediaEvents.kartographer.js",
+                               "ext.wikimediaEvents.print.js",
                                "ext.wikimediaEvents.readingDepth.js",
                                "ext.wikimediaEvents.geoFeatures.js",
                                "ext.wikimediaEvents.recentChangesClicks.js"
@@ -221,6 +227,8 @@
                "remoteExtPath": "WikimediaEvents/modules"
        },
        "config": {
+               "WMEPrintSamplingRate": 0.1,
+               "WMEPrintEnabled": false,
                "WMEReadingDepthSamplingRate": 0.005,
                "WMEReadingDepthEnabled": false,
                "WMEStatsdBaseUri": false,
diff --git a/modules/ext.wikimediaEvents.print.js 
b/modules/ext.wikimediaEvents.print.js
new file mode 100644
index 0000000..b9c1ddf
--- /dev/null
+++ b/modules/ext.wikimediaEvents.print.js
@@ -0,0 +1,103 @@
+/*
+ * Track browser print events
+ *
+ * Each action is only logged once per page view. That is, no matter how many
+ * times the user clicks on 'Printable Version', only one
+ * 'clickPrintableVersion' action is logged for that page until the page is
+ * refreshed. Ditto the `onBeforePrint` action.
+ *
+ * @see https://phabricator.wikimedia.org/T169730
+ * @see https://meta.wikimedia.org/wiki/Schema:Print
+ */
+( function ( $, track, config, user, mwExperiments ) {
+       /**
+       * Log an event to the Schema:Print
+       *
+       * @param {string} action a valid value for the action property inside 
the
+       *   schema Schema:Print
+       */
+       function logEvent( action ) {
+               track( 'event.Print', {
+                       sessionToken: user.sessionId(),
+                       isAnon: user.isAnon(),
+                       pageTitle: config.get( 'wgPageName' ),
+                       namespaceId: config.get( 'wgNamespaceNumber' ),
+                       skin: config.get( 'skin' ),
+                       action: action
+               } );
+       }
+
+       /**
+        * Whether the user session is sampled
+        *
+        * @param {number} samplingRate - a float between 0 and 1 for which 
events
+        *   in the schema should be logged.
+        * @return {boolean}
+        */
+       function isInSample( samplingRate ) {
+               var bucket = mwExperiments.getBucket( {
+                       name: 'WMEPrint',
+                       enabled: true,
+                       buckets: {
+                               control: 1 - samplingRate,
+                               A: samplingRate
+                       }
+               }, user.sessionId() );
+               return bucket === 'A';
+       }
+
+       /**
+        * Log the click on the 'Printable Version' link.
+        * Do it only once.
+        */
+       function setupClickLogging() {
+               var EVENT_NAME = 'clickPrintableVersion',
+                       $link = $( 'a', '#t-print' );
+
+               function log() {
+                       $link.off( 'click', log );
+                       logEvent( EVENT_NAME );
+               }
+
+               $link.on( 'click', log );
+       }
+
+       /**
+        * Log the event of printing.
+        * Do it only once.
+        */
+       function setupPrintLogging() {
+               var mediaQueryList,
+                       EVENT_NAME = 'onBeforePrint';
+
+               function logMatchMedia( event ) {
+                       if ( event.matches ) {
+                               mediaQueryList.removeListener( logMatchMedia );
+                               logEvent( EVENT_NAME );
+                       }
+               }
+
+               function logBeforePrint() {
+                       $( window ).off( 'beforeprint', logBeforePrint );
+                       logEvent( EVENT_NAME );
+               }
+
+               // Chrome, Safari, and Opera
+               if ( 'matchMedia' in window && !( 'onbeforeprint' in window ) ) 
{
+                       mediaQueryList = window.matchMedia( 'print' );
+                       mediaQueryList.addListener( logMatchMedia );
+               } else {
+                       // IE, Edge, and Firefox
+                       $( window ).on( 'beforeprint', logBeforePrint );
+               }
+       }
+
+       if ( config.get( 'wgWMEPrintEnabled' ) &&
+               isInSample( config.get( 'wgWMEPrintSamplingRate', 0 ) )
+       ) {
+               $( function () {
+                       setupClickLogging();
+                       setupPrintLogging();
+               } );
+       }
+}( jQuery, mediaWiki.track, mediaWiki.config, mediaWiki.user, 
mediaWiki.experiments ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/376427
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id506d44f572687ff9c26118ceaa69c6146fedf86
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/WikimediaEvents
Gerrit-Branch: master
Gerrit-Owner: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: Pmiazga <pmia...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to