jenkins-bot has submitted this change and it was merged.

Change subject: Implement Schema:MobileWebBrowse logging
......................................................................


Implement Schema:MobileWebBrowse logging

Also:
* Create the mobile.browse module and move related files into the module
  folder
* Load mobile.browse only on those pages where the page belongs to a category
* Create modules for Special:TopicTag and moves resources into the
  module folder

Bug: T94744
Change-Id: I06662af55433bea358a8b2c3eba85f42a2f58d78
---
M includes/MobileFrontend.hooks.php
M includes/Resources.php
M includes/skins/MinervaTemplateBeta.php
M includes/skins/SkinMinervaBeta.php
M includes/specials/browse/SpecialTopicTag.php
A resources/mobile.browse/init.js
R resources/mobile.browse/special/gather_error.mustache
A resources/mobile.browse/special/topicTag.js
A resources/mobile.browse/special/topicTag.less
R resources/mobile.browse/tags.less
R resources/mobile.browse/tags.mustache
A resources/mobile.loggingSchemas/SchemaMobileWebBrowse.js
12 files changed, 163 insertions(+), 10 deletions(-)

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



diff --git a/includes/MobileFrontend.hooks.php 
b/includes/MobileFrontend.hooks.php
index ef89508..94d814a 100644
--- a/includes/MobileFrontend.hooks.php
+++ b/includes/MobileFrontend.hooks.php
@@ -928,6 +928,7 @@
                        'MobileWebMainMenuClickTracking' => 11568715,
                        'MobileWebUIClickTracking' => 10742159,
                        'MobileWebSearch' => 12054448,
+                       'MobileWebBrowse' => 12119641,
                );
 
                $schemas += $mobileEventLoggingSchemas;
@@ -969,6 +970,7 @@
                        
'resources/mobile.loggingSchemas/SchemaMobileWebEditing.js',
                        
'resources/mobile.loggingSchemas/SchemaMobileWebWatching.js',
                        
'resources/mobile.loggingSchemas/SchemaMobileWebSearch.js',
+                       
'resources/mobile.loggingSchemas/SchemaMobileWebBrowse.js',
                );
 
                $wgResourceModules['mobile.loggingSchemas'] = 
$wgMFResourceFileModuleBoilerplate + array(
diff --git a/includes/Resources.php b/includes/Resources.php
index 228968a..5a91952 100644
--- a/includes/Resources.php
+++ b/includes/Resources.php
@@ -136,7 +136,6 @@
                        'less/pageactions.beta.less',
                        'less/footer.beta.less',
                        'less/content/main.beta.less',
-                       'less/browse/tags.less',
                ),
        ),
        'skins.minerva.beta.images' => $wgMFResourceFileModuleBoilerplate + 
array(
@@ -210,6 +209,17 @@
                'scripts' => array(
                        'resources/mobile.context/context.js',
                ),
+       ),
+       'mobile.browse' => $wgMFResourceFileModuleBoilerplate + array(
+               'dependencies' => array(
+                       'mobile.loggingSchemas'
+               ),
+               'scripts' => array(
+                       'resources/mobile.browse/init.js',
+               ),
+               'styles' => array(
+                       'resources/mobile.browse/tags.less',
+               )
        ),
        'mobile.browser' => $wgMFResourceFileModuleBoilerplate + array(
                'dependencies' => array(
@@ -1679,6 +1689,21 @@
                        'javascripts/specials/mobilediff.js',
                ),
        ),
+
+       'mobile.special.browse.topicTag.styles' => 
$wgMFMobileSpecialPageResourceBoilerplate + array(
+               'styles' => array(
+                       'resources/mobile.browse/special/topicTag.less',
+               ),
+       ),
+
+       'mobile.special.browse.topicTag.scripts' => 
$wgMFMobileSpecialPageResourceBoilerplate + array(
+               'dependencies' => array(
+                       'mobile.loggingSchemas'
+               ),
+               'scripts' => array(
+                       'resources/mobile.browse/special/topicTag.js',
+               ),
+       ),
 );
 
 /**
diff --git a/includes/skins/MinervaTemplateBeta.php 
b/includes/skins/MinervaTemplateBeta.php
index a26626c..1ec9463 100644
--- a/includes/skins/MinervaTemplateBeta.php
+++ b/includes/skins/MinervaTemplateBeta.php
@@ -104,9 +104,9 @@
                }, $data['browse_tags'] );
 
                // FIXME: This should be in MinervaTemplate#getTemplateParser.
-               $templateParser = new TemplateParser( __DIR__ . 
'/../../templates' );
+               $templateParser = new TemplateParser( __DIR__ . 
'/../../resources' );
 
-               return $templateParser->processTemplate( 'browse/tags', array(
+               return $templateParser->processTemplate( 'mobile.browse/tags', 
array(
                        'headerMsg' => wfMessage( 
'mobile-frontend-browse-tags-header' )->text(),
                        'tags' => $tags,
                ) );
diff --git a/includes/skins/SkinMinervaBeta.php 
b/includes/skins/SkinMinervaBeta.php
index 0471f39..52732bf 100644
--- a/includes/skins/SkinMinervaBeta.php
+++ b/includes/skins/SkinMinervaBeta.php
@@ -100,6 +100,11 @@
                        unset( $modules['centralnotice'] );
                }
 
+               // add the browse module if the page has a tag assigned to it
+               if ( $this->getBrowseTags( $this->getTitle() ) ) {
+                       $modules['browse'] = array( 'mobile.browse' );
+               }
+
                return $modules;
        }
 
diff --git a/includes/specials/browse/SpecialTopicTag.php 
b/includes/specials/browse/SpecialTopicTag.php
index 444980e..a6e1382 100644
--- a/includes/specials/browse/SpecialTopicTag.php
+++ b/includes/specials/browse/SpecialTopicTag.php
@@ -51,6 +51,8 @@
                $out = $this->getOutput();
                $out->addModules( array(
                        'ext.gather.special',
+                       'mobile.special.browse.topicTag.styles',
+                       'mobile.special.browse.topicTag.scripts',
                ) );
                $out->addModuleStyles( array(
                        'mediawiki.ui.anchor',
@@ -58,11 +60,6 @@
                        'ext.gather.icons',
                        'ext.gather.styles',
                ) );
-               $out->addInlineStyle(
-                       // hide the user info, meta, and moderation controls
-                       '.collection-header, .collection-moderation { display: 
none !important; }' .
-                       ' .collection-cards { padding-top: 1em; }'
-               );
 
                $collectionItems = array();
                $pageIds = array_map( function ( Title $title ) {
@@ -108,8 +105,8 @@
 
 
        public function renderError( $args ) {
-               $templateParser = new TemplateParser( __DIR__ . 
'/../../../templates' );
-               $message = $templateParser->processTemplate( 
'browse/gather_error', $args );
+               $templateParser = new TemplateParser( __DIR__ . 
'/../../../resources' );
+               $message = $templateParser->processTemplate( 
'mobile.browse/special/gather_error', $args );
                $this->renderUnavailableBanner( $message );
        }
 
diff --git a/resources/mobile.browse/init.js b/resources/mobile.browse/init.js
new file mode 100644
index 0000000..0ea0ae9
--- /dev/null
+++ b/resources/mobile.browse/init.js
@@ -0,0 +1,66 @@
+( function ( M, $ ) {
+       var SchemaMobileWebBrowse = M.require( 
'loggingSchemas/SchemaMobileWebBrowse' ),
+               schema = new SchemaMobileWebBrowse(),
+               $window = $( window ),
+               $browseTags = $( '.browse-tags' ),
+               timeoutID;
+
+       /**
+        * Whether an element is visible to the user
+        * @param {jQuery.Object} $el
+        * @returns {Boolean}
+        */
+       function isElementInViewport( $el ) {
+               var windowHeight = $window.height(),
+                       windowWidth = $window.width(),
+                       windowScrollLeft = $window.scrollLeft(),
+                       windowScrollTop = $window.scrollTop(),
+                       elHeight = $el.height(),
+                       elWidth = $el.width(),
+                       elOffset = $el.offset();
+               return (
+                       ( elHeight > 0 && elWidth > 0 ) &&
+                       ( windowScrollTop + windowHeight >= elOffset.top + 
elHeight / 2 ) &&
+                       ( windowScrollLeft + windowWidth >= elOffset.left + 
elWidth / 2 ) &&
+                       ( windowScrollTop <= elOffset.top + elHeight / 2 )
+               );
+       }
+
+       /**
+        * Log tag_impression
+        */
+       function logTagImpression() {
+               if ( isElementInViewport( $browseTags ) ) {
+                       $window.off( 'resize.browse-tags scroll.browse-tags' );
+                       schema.log( {
+                               action: 'tags_impression'
+                       } );
+               }
+       }
+
+       $( function () {
+               if ( $browseTags.length ) {
+                       // track tags_impression
+                       $window.on(
+                               'resize.browse-tags scroll.browse-tags',
+                               function () {
+                                       clearTimeout( timeoutID );
+                                       timeoutID = setTimeout( 
logTagImpression, 250 );
+                               }
+                       );
+                       // try logging tags_impression on page load
+                       logTagImpression();
+
+                       // log tag_click
+                       $browseTags.find( 'a' ).one( 'click', function () {
+                               var $tag = $( this );
+
+                               schema.logBeacon( {
+                                       action: 'tag_click',
+                                       tag: $tag.text()
+                               } );
+                       } );
+               }
+       } );
+
+}( mw.mobileFrontend, jQuery ) );
diff --git a/templates/browse/gather_error.mustache 
b/resources/mobile.browse/special/gather_error.mustache
similarity index 100%
rename from templates/browse/gather_error.mustache
rename to resources/mobile.browse/special/gather_error.mustache
diff --git a/resources/mobile.browse/special/topicTag.js 
b/resources/mobile.browse/special/topicTag.js
new file mode 100644
index 0000000..a3bea21
--- /dev/null
+++ b/resources/mobile.browse/special/topicTag.js
@@ -0,0 +1,23 @@
+( function ( M, $ ) {
+       var SchemaMobileWebBrowse = M.require( 
'loggingSchemas/SchemaMobileWebBrowse' ),
+               schema = new SchemaMobileWebBrowse(),
+               $collectionCard = $( '.collection-card' );
+
+       // log article_click
+       $( function () {
+               $collectionCard.find( 'a' ).one( 'click', function () {
+                       var $link = $( this ),
+                               articleLink = $link.attr( 'href' ) || '',
+                               $card = $link.parents( '.collection-card' );
+
+                       schema.logBeacon( {
+                               action: 'article_click',
+                               tag: mw.config.get( 'wgTitle' ).split( '/' 
).pop(),
+                               article: articleLink.replace( '/wiki/', '' ),
+                               articleIndex: $card.index() + 1
+                       } );
+               } );
+       } );
+
+}( mw.mobileFrontend, jQuery ) );
+
diff --git a/resources/mobile.browse/special/topicTag.less 
b/resources/mobile.browse/special/topicTag.less
new file mode 100644
index 0000000..ecbd59c
--- /dev/null
+++ b/resources/mobile.browse/special/topicTag.less
@@ -0,0 +1,7 @@
+// hide the user info, meta, and moderation controls
+.collection-header, .collection-moderation {
+       display: none !important;
+}
+.collection-cards {
+       padding-top: 1em;
+}
diff --git a/less/browse/tags.less b/resources/mobile.browse/tags.less
similarity index 100%
rename from less/browse/tags.less
rename to resources/mobile.browse/tags.less
diff --git a/templates/browse/tags.mustache 
b/resources/mobile.browse/tags.mustache
similarity index 100%
rename from templates/browse/tags.mustache
rename to resources/mobile.browse/tags.mustache
diff --git a/resources/mobile.loggingSchemas/SchemaMobileWebBrowse.js 
b/resources/mobile.loggingSchemas/SchemaMobileWebBrowse.js
new file mode 100644
index 0000000..39081db
--- /dev/null
+++ b/resources/mobile.loggingSchemas/SchemaMobileWebBrowse.js
@@ -0,0 +1,28 @@
+( function ( M, $ ) {
+       var Schema = M.require( 'Schema' ),
+               context = M.require( 'context' ),
+               SchemaMobileWebBrowse;
+
+       /**
+        * @class SchemaMobileWebBrowse
+        * @extends Schema
+        * @see https://meta.wikimedia.org/wiki/Schema:MobileWebBrowse
+        */
+       SchemaMobileWebBrowse = Schema.extend( {
+               /** @inheritdoc **/
+               name: 'MobileWebBrowse',
+               /**
+                * @inheritdoc
+                *
+                * @cfg {Object} defaults The options hash.
+                * @cfg {String} defaults.mobileMode The version of 
MobileFrontend
+                *  that the user is using. One of "stable", "beta", or "alpha"
+                */
+               defaults: $.extend( {}, Schema.prototype.defaults, {
+                       mobileMode: context.getMode()
+               } )
+       } );
+
+       M.define( 'loggingSchemas/SchemaMobileWebBrowse', SchemaMobileWebBrowse 
);
+
+}( mw.mobileFrontend, jQuery ) );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I06662af55433bea358a8b2c3eba85f42a2f58d78
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: Kaldari <rkald...@wikimedia.org>
Gerrit-Reviewer: Phuedx <g...@samsmith.io>
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