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