Jdlrobson has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/165096

Change subject: WIP: Use mw-ui-icon in beta
......................................................................

WIP: Use mw-ui-icon in beta

This changes Mobile to use the standard approach
for icons outlined in the living styleguide.

TODO:
* tiny notification icon
* Move icons into core / use svgs for all to fix bug 64101
* Work out what to do with page images
* this page has issues
* VE/EditorOverlay edit switcher and icons

Bug: 64101
Bug: 71071
Bug: 71181
Change-Id: Id155a3f2e6ac80d0a30d1d35902a871e85db9722
Dependency: I68a1b207d8a4af57879361921a5f8c3aeda3fd9a
Dependency: I5133d243ef98b17adada313f03cac48d8d3fc827
---
M includes/Resources.php
M includes/skins/SkinMinerva.php
M includes/skins/SkinMinervaAlpha.php
M includes/skins/SkinMinervaBeta.php
M includes/specials/MobileSpecialPageFeed.php
M includes/specials/SpecialMobileDiff.php
M includes/specials/SpecialMobileHistory.php
M includes/specials/SpecialUserProfile.php
M javascripts/CtaDrawer.js
M javascripts/Overlay.js
M javascripts/modules/editor/editor.js
M javascripts/modules/issues/issues.js
M javascripts/modules/references/references.js
M javascripts/modules/toc/toc.js
M javascripts/modules/toggling/toggle.js
M javascripts/modules/uploads/LeadPhotoUploaderButton.js
M javascripts/modules/uploads/PhotoUploaderButton.js
M javascripts/modules/uploads/UploadTutorial.js
M javascripts/modules/watchstar/Watchstar.js
M javascripts/modules/watchstar/init.js
M less/Overlay.less
M less/drawer.less
M less/icons.less
A less/iconsNew.less
M less/mainmenu.less
M less/minerva.less/minerva.mixins.less
M less/modules/issues.less
M less/modules/references.less
M less/modules/toc/toc.less
M less/modules/toggle.less
M less/modules/uploads/PhotoUploaderButton.less
M less/modules/uploads/UploadTutorial.less
M less/modules/watchstar.less
M less/pageactions.less
D less/specials/images/profile/talk.png
M less/specials/mobilediff.less
M less/specials/pagefeed.less
M less/specials/userprofile.less
M less/tablet/common.less
M less/ui.less
M templates/ReferencesDrawer.hogan
M templates/backButton.hogan
M templates/cancelButton.hogan
M templates/ctaDrawer.hogan
M templates/modules/search/SearchOverlay.hogan
M templates/modules/toc/toc.hogan
M templates/overlays/cleanup.hogan
M templates/page.hogan
M templates/section.hogan
M templates/uploads/UploadTutorial.hogan
M tests/qunit/modules/test_PageList.js
51 files changed, 533 insertions(+), 104 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/96/165096/1

diff --git a/includes/Resources.php b/includes/Resources.php
index 54f1a70..ca65476 100644
--- a/includes/Resources.php
+++ b/includes/Resources.php
@@ -115,6 +115,13 @@
                'position' => 'top',
        ),
 
+       'skins.minerva.icons.styles' => $wgMFMobileResourceBoilerplate + array(
+               'styles' => array(
+                       'less/iconsNew.less',
+               ),
+               'position' => 'top',
+       ),
+
        // Important: This module is loaded on both mobile and desktop skin
        'mobile.head' => $wgMFMobileResourceBoilerplate + array(
                'dependencies' => array(
diff --git a/includes/skins/SkinMinerva.php b/includes/skins/SkinMinerva.php
index 2329bad..791034d 100644
--- a/includes/skins/SkinMinerva.php
+++ b/includes/skins/SkinMinerva.php
@@ -768,7 +768,7 @@
                                $menu['watch'] = array_merge( 
$actions['watch'], $watchTemplate );
                        } elseif ( isset( $actions['unwatch'] ) ) {
                                $menu['watch'] = array_merge( 
$actions['unwatch'], $watchTemplate );
-                               $menu['watch']['class'] .= ' watched';
+                               $menu['watch']['class'] .= ' 
mw-ui-icon-watched';
                        } else {
                                // placeholder for not logged in
                                $menu['watch'] = $watchTemplate;
diff --git a/includes/skins/SkinMinervaAlpha.php 
b/includes/skins/SkinMinervaAlpha.php
index ac34c70..2ccdc0e 100644
--- a/includes/skins/SkinMinervaAlpha.php
+++ b/includes/skins/SkinMinervaAlpha.php
@@ -68,12 +68,12 @@
                        }
                        if ( $numTopics ) {
                                $talkLabel = $this->getLanguage()->formatNum( 
$numTopics );
-                               $class = static::iconClass( 'talk', 'element', 
'count icon-32px' );
+                               $class = static::iconClass( 'talk', 'element', 
'count' );
                        } else {
                                $talkLabel = wfMessage( 
'mobile-frontend-talk-overlay-header' );
                                // add hidden css class to hide talk button, 
when no content there. Adding content
                                // isn't possible without JS, so remove the 
class in talk.js
-                               $class = static::iconClass( 'talk', 'element', 
'hidden icon-32px' );
+                               $class = static::iconClass( 'talk', 'element', 
'hidden' );
                        }
                        $menu = $tpl->data['page_actions'];
                        if ( isset( $menu['talk'] ) ) {
diff --git a/includes/skins/SkinMinervaBeta.php 
b/includes/skins/SkinMinervaBeta.php
index bef76cf..2f5fe75 100644
--- a/includes/skins/SkinMinervaBeta.php
+++ b/includes/skins/SkinMinervaBeta.php
@@ -14,6 +14,20 @@
 
        /**
         * initialize various variables and generate the template
+        * @param string iconName
+        * @param string iconType element or before
+        * @param string additionalClassNames additional class names you want 
to associate with the iconed element
+        * @return string class name for use with HTML element
+        */
+       public static function iconClass( $iconName, $iconType = 'element', 
$additionalClassNames = '' ) {
+               $modifiers = 'mw-ui-icon-' . $iconType;
+               $modifiers .= ' mw-ui-icon-' . $iconName;
+
+               return 'mw-ui-icon ' . $modifiers . ' ' . $additionalClassNames;
+       }
+
+       /**
+        * initialize various variables and generate the template
         * @param OutputPage $out optional parameter: The OutputPage Obj.
         */
        public function outputPage( OutputPage $out = null ) {
@@ -38,6 +52,13 @@
                return $tpl;
        }
 
+       protected function getSkinStyles() {
+               $styles = parent::getSkinStyles();
+               $styles[] = 'mediawiki.ui.icon';
+               $styles[] = 'skins.minerva.icons.styles';
+               return $styles;
+       }
+
        /**
         * Get various skin specific configuration.
         * @return array
diff --git a/includes/specials/MobileSpecialPageFeed.php 
b/includes/specials/MobileSpecialPageFeed.php
index 44adb0a..6c72622 100644
--- a/includes/specials/MobileSpecialPageFeed.php
+++ b/includes/specials/MobileSpecialPageFeed.php
@@ -86,9 +86,9 @@
                $lang = $this->getLanguage();
 
                if ( $isAnon ) {
-                       $usernameClass = SkinMinerva::iconClass( 'anonymous', 
'before', 'icon-16px mw-mf-user mw-mf-anon' );
+                       $usernameClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'anonymous', 'before', 'icon-16px 
mw-mf-user mw-mf-anon' );
                } else {
-                       $usernameClass = SkinMinerva::iconClass( 'user', 
'before', 'icon-16px mw-mf-user' );
+                       $usernameClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'user', 'before', 'icon-16px mw-mf-user' );
                }
 
                $html = Html::openElement( 'li', array( 'class' => 
'page-summary' ) );
@@ -122,9 +122,9 @@
                        $formattedBytes = $lang->formatNum( $bytes );
                        if ( $bytes > 0 ) {
                                $formattedBytes = '+' . $formattedBytes;
-                               $bytesClass = SkinMinerva::iconClass( 
'bytesadded', 'before', 'icon-12px mw-mf-bytesadded' );
+                               $bytesClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'bytesadded', 'before', 'icon-12px 
mw-mf-bytesadded' );
                        } else {
-                               $bytesClass = SkinMinerva::iconClass( 
'bytesremoved', 'before', 'icon-12px mw-mf-bytesremoved' );
+                               $bytesClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'bytesremoved', 'before', 'icon-12px 
mw-mf-bytesremoved' );
                        }
                        $html .= Html::element(
                                'p',
diff --git a/includes/specials/SpecialMobileDiff.php 
b/includes/specials/SpecialMobileDiff.php
index 361290a..82a19ea 100644
--- a/includes/specials/SpecialMobileDiff.php
+++ b/includes/specials/SpecialMobileDiff.php
@@ -151,13 +151,13 @@
                }
                if ( $bytesChanged > 0 ) {
                        $changeMsg = 'mobile-frontend-diffview-bytesadded';
-                       $sizeClass = SkinMinerva::iconClass( 'bytesadded', 
'before', 'icon-12px meta mw-mf-bytesadded' );
+                       $sizeClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'bytesadded', 'before', 'icon-12px meta 
mw-mf-bytesadded' );
                } elseif ( $bytesChanged === 0 ) {
                        $changeMsg = 'mobile-frontend-diffview-bytesnochange';
-                       $sizeClass = SkinMinerva::iconClass( 'bytesneutral', 
'before', 'icon-12px meta mw-mf-bytesneutral' );
+                       $sizeClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'bytesneutral', 'before', 'icon-12px meta 
mw-mf-bytesneutral' );
                } else {
                        $changeMsg = 'mobile-frontend-diffview-bytesremoved';
-                       $sizeClass = SkinMinerva::iconClass( 'bytesremoved', 
'before', 'icon-12px meta mw-mf-bytesremoved' );
+                       $sizeClass = call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'bytesremoved', 'before', 'icon-12px meta 
mw-mf-bytesremoved' );
                        $bytesChanged = abs( $bytesChanged );
                }
 
@@ -271,7 +271,7 @@
                        $user = User::newFromId( $userId );
                        $edits = $user->getEditCount();
                        $attrs = array(
-                               'class' => SkinMinerva::iconClass( 'user', 
'before', 'mw-mf-user icon-16px' ),
+                               'class' => call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'user', 'before', 'mw-mf-user icon-16px' ),
                                'data-revision-id' => $this->revId,
                                'data-user-name' => $user->getName(),
                                'data-user-gender' => $user->getOption( 
'gender' ),
@@ -300,7 +300,7 @@
                        $userPage = SpecialPage::getTitleFor( 'Contributions', 
$ipAddr );
                        $output->addHtml(
                                Html::element( 'div', array(
-                                       'class' =>  SkinMinerva::iconClass( 
'anonymous', 'before', 'mw-mf-user icon-16px mw-mf-anon' ),
+                                       'class' =>  call_user_func( array( 
get_class( $this->getSkin() ), 'iconClass' ),  'anonymous', 'before', 
'mw-mf-user icon-16px mw-mf-anon' ),
                                ), $this->msg( 
'mobile-frontend-diffview-anonymous' ) ) .
                                '<div>' .
                                        Linker::link( $userPage, 
htmlspecialchars( $ipAddr ) ) .
diff --git a/includes/specials/SpecialMobileHistory.php 
b/includes/specials/SpecialMobileHistory.php
index 0fb3c16..e5f9a6f 100644
--- a/includes/specials/SpecialMobileHistory.php
+++ b/includes/specials/SpecialMobileHistory.php
@@ -64,7 +64,7 @@
                        // manually style it as a userlink
                        $headerTitle = Html::element(
                                'span',
-                               array( 'class' => SkinMinerva::iconClass( 
'user', 'before', 'mw-mf-user icon-16px' ) ),
+                               array( 'class' => call_user_func( array( 
get_class( $this->getSkin() ), 'iconClass' ),  'user', 'before', 'mw-mf-user 
icon-16px' ) ),
                                $title
                        );
                }
diff --git a/includes/specials/SpecialUserProfile.php 
b/includes/specials/SpecialUserProfile.php
index 1fd91ff..098514c 100644
--- a/includes/specials/SpecialUserProfile.php
+++ b/includes/specials/SpecialUserProfile.php
@@ -144,7 +144,7 @@
        protected function getTalkLink() {
                // replace secondary icon
                $attrs = array(
-                       'class' => SkinMinerva::iconClass( 'talk', 'before', 
'mw-ui-button' ),
+                       'class' => call_user_func( array( get_class( 
$this->getSkin() ), 'iconClass' ),  'talk', 'before', 'mw-ui-button' ),
                        'href' => 
$this->targetUser->getTalkPage()->getLocalUrl(),
                );
                // FIXME: What if this is the user's own profile? Should we 
change the message?
diff --git a/javascripts/CtaDrawer.js b/javascripts/CtaDrawer.js
index ce1c37f..7f9ea1f 100644
--- a/javascripts/CtaDrawer.js
+++ b/javascripts/CtaDrawer.js
@@ -10,6 +10,7 @@
         * @extends Drawer
         */
        CtaDrawer = Drawer.extend( {
+               className: 'drawer position-fixed drawer-cta',
                defaults: {
                        loginCaption: mw.msg( 
'mobile-frontend-watchlist-cta-button-login' ),
                        signupCaption: mw.msg( 
'mobile-frontend-watchlist-cta-button-signup' )
diff --git a/javascripts/Overlay.js b/javascripts/Overlay.js
index b386948..82e2dcb 100644
--- a/javascripts/Overlay.js
+++ b/javascripts/Overlay.js
@@ -44,6 +44,8 @@
                },
                template: M.template.get( 'Overlay.hogan' ),
                defaults: {
+                       // FIXME: Remove when mw-ui-icon used in stable
+                       inBeta: M.isBetaGroupMember(),
                        headerButtonsListClassName: '',
                        closeMsg: mw.msg( 'mobile-frontend-overlay-close' ),
                        fixedHeader: true
diff --git a/javascripts/modules/editor/editor.js 
b/javascripts/modules/editor/editor.js
index 3692ed2..c60b99c 100644
--- a/javascripts/modules/editor/editor.js
+++ b/javascripts/modules/editor/editor.js
@@ -1,6 +1,8 @@
 ( function( M, $ ) {
 
        var
+               enabledClass = M.isBetaGroupMember() ? 
'mw-ui-icon-edit-enabled' : 'enabled',
+               disabledClass = M.isBetaGroupMember() ? 'mw-ui-icon-edit' : '',
                user = M.require( 'user' ),
                popup = M.require( 'toast' ),
                // FIXME: Disable on IE < 10 for time being
@@ -147,7 +149,7 @@
 
                        return result;
                } );
-               $( '#ca-edit' ).addClass( 'enabled' );
+               $( '#ca-edit' ).addClass( enabledClass ).removeClass( 
disabledClass );
 
                // Make sure we never create two edit links by accident
                if ( $( '#ca-edit .edit-page' ).length === 0 ) {
@@ -190,9 +192,10 @@
                        M.getCurrentPage().isEditable( user ).done( function( 
isEditable ) {
                                if ( isEditable ) {
                                        // FIXME: change when micro.tap.js in 
stable
-                                       $( '#ca-edit' ).addClass( 'enabled' 
).on( M.tapEvent( 'click' ), function() {
-                                               drawer.render().show();
-                                       });
+                                       $( '#ca-edit' ).addClass( enabledClass 
).removeClass( disabledClass ).
+                                               on( M.tapEvent( 'click' ), 
function() {
+                                                       drawer.render().show();
+                                               } );
                                } else {
                                        showSorryToast( 
'mobile-frontend-editor-disabled' );
                                }
diff --git a/javascripts/modules/issues/issues.js 
b/javascripts/modules/issues/issues.js
index 93585a1..0e1de70 100644
--- a/javascripts/modules/issues/issues.js
+++ b/javascripts/modules/issues/issues.js
@@ -51,7 +51,13 @@
                        }
                } );
 
-               $link = $( '<a class="mw-mf-cleanup icon icon-text">' ).attr( 
'href', '#/issues' );
+               // FIXME: Remove when mw-ui-icon in stable
+               if ( M.isBetaGroupMember() ) {
+                       $link = $( '<a class="mw-ui-icon mw-ui-icon-before 
mw-ui-icon-cleanup">' ).attr( 'href', '#/issues' );
+               } else {
+                       $link = $( '<a class="mw-mf-cleanup icon icon-text">' 
).attr( 'href', '#/issues' );
+               }
+
                M.overlayManager.add( /^\/issues$/, function() {
                        return new CleanupOverlay( { issues: issues, 
headingText: headingText } );
                } );
diff --git a/javascripts/modules/references/references.js 
b/javascripts/modules/references/references.js
index 33cac11..23c16c2 100644
--- a/javascripts/modules/references/references.js
+++ b/javascripts/modules/references/references.js
@@ -1,7 +1,19 @@
 ( function( M, $ ) {
        var Drawer = M.require( 'Drawer' ), ReferencesDrawer, drawer;
 
+       /**
+        * @class ReferencesDrawer
+        * @extends Drawer
+        */
        ReferencesDrawer = Drawer.extend( {
+               templatePartials: {
+                       cancelButton: M.template.get( 'cancelButton.hogan' )
+               },
+               defaults: {
+                       // FIXME: Remove when mw-ui-icon used in stable
+                       inBeta: M.isBetaGroupMember(),
+                       closeMsg: mw.msg( 'mobile-frontend-overlay-close' )
+               },
                className: 'drawer position-fixed text references',
                template: M.template.get( 'ReferencesDrawer.hogan' )
        } );
diff --git a/javascripts/modules/toc/toc.js b/javascripts/modules/toc/toc.js
index fda92bb..cbf3c99 100644
--- a/javascripts/modules/toc/toc.js
+++ b/javascripts/modules/toc/toc.js
@@ -8,6 +8,7 @@
                        tocHeading: M.template.get( 
'modules/toc/tocHeading.hogan' )
                },
                defaults: {
+                       inBeta: M.isBetaGroupMember(),
                        contentsMsg: mw.msg( 'toc' )
                },
                tagName: 'div',
@@ -46,7 +47,7 @@
                                // prevent to float text right of toc
                                this.$( '.toc-mobile' ).after( '<div 
style="clear:both;"></div>' );
                        }
-                       toggle.enable( toc.$el );
+                       toggle.enable( toc.$el, true );
                }
        }
 
diff --git a/javascripts/modules/toggling/toggle.js 
b/javascripts/modules/toggling/toggle.js
index a3e203b..ea3f27b 100644
--- a/javascripts/modules/toggling/toggle.js
+++ b/javascripts/modules/toggling/toggle.js
@@ -1,5 +1,7 @@
 ( function( M, $ ) {
-       var eventName = M.tapEvent( 'mouseup' );
+       var eventName = M.tapEvent( 'mouseup' ),
+               classOpen = M.isBetaGroupMember() ? 'mw-ui-icon-arrow-up' : 
'icon-arrow-up',
+               classClosed =  M.isBetaGroupMember() ? 'mw-ui-icon-arrow-down' 
: 'icon-arrow-down';
 
        /**
         * Given a heading, toggle it and any of its children
@@ -11,9 +13,9 @@
 
                $heading.toggleClass( 'open-block' );
                if ( $heading.hasClass( 'open-block' ) ) {
-                       $heading.addClass( 'icon-arrow-up' ).removeClass( 
'icon-arrow-down' );
+                       $heading.addClass( classOpen ).removeClass( classClosed 
);
                } else {
-                       $heading.removeClass( 'icon-arrow-up' ).addClass( 
'icon-arrow-down' );
+                       $heading.removeClass( classOpen ).addClass( classClosed 
);
                }
                $heading.next()
                        .toggleClass( 'open-block' )
@@ -65,16 +67,22 @@
                } catch ( e ) {}
        }
 
-       function enable( $page ) {
+       function enable( $page, useRightIcon ) {
                var tagName, $headings, expandSections,
                        $firstHeading,
+                       iconModifierClass = M.isBetaGroupMember() ? 
'mw-ui-icon-before' : 'icon-text',
+                       iconClass = M.isBetaGroupMember() ? 'mw-ui-icon 
mw-ui-icon-arrow-down' : 'icon icon-15px icon-arrow-down',
                        collapseSectionsByDefault = mw.config.get( 
'wgMFCollapseSectionsByDefault' );
                $page = $page || $( '#content' );
+
+               if ( M.isBetaGroupMember() && useRightIcon ) {
+                       iconModifierClass = 'mw-ui-icon-after';
+               }
 
                $( 'html' ).removeClass( 'stub' );
                $firstHeading = $page.find( 'h1,h2,h3,h4,h5,h6' ).eq(0);
                tagName = $firstHeading.prop( 'tagName' ) || 'H1';
-               $page.find( tagName ).addClass( 'collapsible-heading icon 
icon-text icon-15px icon-arrow-down' );
+               $page.find( tagName ).addClass( 'collapsible-heading ' + 
iconClass + ' ' + iconModifierClass );
 
                $headings = $page.find( '.collapsible-heading' );
                $headings.next( 'div' ).addClass( 'collapsible-block' );
diff --git a/javascripts/modules/uploads/LeadPhotoUploaderButton.js 
b/javascripts/modules/uploads/LeadPhotoUploaderButton.js
index 7e4a498..b185299 100644
--- a/javascripts/modules/uploads/LeadPhotoUploaderButton.js
+++ b/javascripts/modules/uploads/LeadPhotoUploaderButton.js
@@ -5,7 +5,7 @@
 
        LeadPhotoUploaderButton = PhotoUploaderButton.extend( {
                template: M.template.get( 
'uploads/LeadPhotoUploaderButton.hogan' ),
-               className: 'enabled',
+               className: M.isBetaGroupMember() ? 
'mw-ui-icon-addimage-enabled' : 'enabled',
 
                defaults: {
                        buttonCaption: mw.msg( 'mobile-frontend-photo-upload' ),
diff --git a/javascripts/modules/uploads/PhotoUploaderButton.js 
b/javascripts/modules/uploads/PhotoUploaderButton.js
index e8f3651..3b8e303 100644
--- a/javascripts/modules/uploads/PhotoUploaderButton.js
+++ b/javascripts/modules/uploads/PhotoUploaderButton.js
@@ -45,7 +45,9 @@
         */
        PhotoUploaderButton = View.extend( {
                template: M.template.get( 'uploads/PhotoUploaderButton.hogan' ),
-               className: 'mw-ui-progressive mw-ui-button button icon-photo 
icon icon-text',
+               className: M.isBetaGroupMember() ?
+                       'mw-ui-progressive mw-ui-button button mw-ui-icon-photo 
mw-ui-icon mw-ui-icon-before' :
+                       'mw-ui-progressive mw-ui-button button icon-photo icon 
icon-text',
 
                postRender: function() {
                        var self = this, $input = this.$( 'input' );
diff --git a/javascripts/modules/uploads/UploadTutorial.js 
b/javascripts/modules/uploads/UploadTutorial.js
index ab0b60b..0bec17d 100644
--- a/javascripts/modules/uploads/UploadTutorial.js
+++ b/javascripts/modules/uploads/UploadTutorial.js
@@ -11,6 +11,7 @@
                className: 'overlay carousel tutorial',
 
                defaults: {
+                       inBeta: M.isBetaGroupMember(),
                        pages: [
                                {
                                        caption: mw.msg( 
'mobile-frontend-first-upload-wizard-new-page-1-header' ),
diff --git a/javascripts/modules/watchstar/Watchstar.js 
b/javascripts/modules/watchstar/Watchstar.js
index b3490e4..ab7bfd2 100644
--- a/javascripts/modules/watchstar/Watchstar.js
+++ b/javascripts/modules/watchstar/Watchstar.js
@@ -17,7 +17,8 @@
                        page: M.getCurrentPage()
                },
                tagName: 'div',
-               className: 'icon icon-32px watch-this-article',
+               className: M.isBetaGroupMember() ?
+                       'mw-ui-icon mw-ui-icon-element mw-ui-icon-watch' : 
'icon icon-32px watch-this-article',
                template: M.template.compile( '<a 
title="{{tooltip}}">{{tooltip}}</a>', 'hogan' ),
                initialize: function( options ) {
                        var self = this, _super = View.prototype.initialize,
@@ -48,6 +49,8 @@
                },
                postRender: function( options ) {
                        var self = this, callback,
+                               unwatchedClass = M.isBetaGroupMember() ? 
'mw-ui-icon-watch' : '',
+                               watchedClass = M.isBetaGroupMember() ? 
'mw-ui-icon-watched' : 'watched',
                                checker,
                                page = options.page,
                                $el = self.$el;
@@ -63,10 +66,12 @@
                                                clearInterval( checker );
                                        } ).done( function() {
                                                if ( api.isWatchedPage( page ) 
) {
-                                                       $el.addClass( 'watched' 
).find( 'a' ).attr( 'title', mw.msg( 'unwatchthispage' ) );
+                                                       $el.addClass( 
watchedClass ).removeClass( unwatchedClass ).
+                                                               find( 'a' 
).attr( 'title', mw.msg( 'unwatchthispage' ) );
                                                        toast.show( mw.msg( 
'mobile-frontend-watchlist-add', page.title ) );
                                                } else {
-                                                       $el.removeClass( 
'watched' ).find( 'a' ).attr( 'title', mw.msg( 'watchthispage' ) );
+                                                       $el.removeClass( 
watchedClass ).addClass( unwatchedClass ).
+                                                               find( 'a' 
).attr( 'title', mw.msg( 'watchthispage' ) );
                                                        toast.show( mw.msg( 
'mobile-frontend-watchlist-removed', page.title ) );
                                                }
                                        } ).fail( function() {
@@ -82,7 +87,7 @@
 
                        // Add watched class if necessary
                        if ( !user.isAnon() && api.isWatchedPage( page ) ) {
-                               $el.addClass( 'watched' );
+                               $el.addClass( watchedClass ).removeClass( 
unwatchedClass );
                        }
                }
        } );
diff --git a/javascripts/modules/watchstar/init.js 
b/javascripts/modules/watchstar/init.js
index afd6e74..415fede 100644
--- a/javascripts/modules/watchstar/init.js
+++ b/javascripts/modules/watchstar/init.js
@@ -19,7 +19,7 @@
                } );
        }
        $( function() {
-               var isWatched = $( '#ca-watch' ).hasClass( 'watched' );
+               var isWatched = $( '#ca-watch' ).hasClass( 
M.isBetaGroupMember() ? 'mw-ui-icon-watched' : 'watched' );
                if ( !M.inNamespace( 'special' ) ) {
                        // FIXME: isWatched property should be part of the page 
object and returned by api mobileview
                        init( M.getCurrentPage(), isWatched );
diff --git a/less/Overlay.less b/less/Overlay.less
index f895471..d28738e 100644
--- a/less/Overlay.less
+++ b/less/Overlay.less
@@ -239,6 +239,10 @@
                min-height: @headerHeight;
                display: block;
                cursor: pointer;
+               position: relative;
+               &:before {
+                       top: 0;
+               }
        }
 }
 
diff --git a/less/drawer.less b/less/drawer.less
index 3ce36df..6fb2b2c 100644
--- a/less/drawer.less
+++ b/less/drawer.less
@@ -38,11 +38,21 @@
                margin-bottom: 1em;
        }
 
-       a.cancel {
-               display: block;
-               width: 100%;
-               height: 32px;
-               background-position: 50% 8px;
+       &.drawer-cta {
+               .cancel {
+                       display: block;
+                       margin: auto;
+
+                       // FIXME: Remove when mw-ui-icon in stable
+                       &.icon {
+                               height: 32px;
+                               background-position: 50% 8px;
+                       }
+
+                       &:before {
+                               background-position: 50% 8px;
+                       }
+               }
        }
 
        .progress-bar {
diff --git a/less/icons.less b/less/icons.less
index 785944e..14c1bd1 100644
--- a/less/icons.less
+++ b/less/icons.less
@@ -186,8 +186,8 @@
 // <div class="icon watch-this-article">watch</div>
 //
 // Styleguide 8.3.4.
-// FIXME: Rename to watch-icon for consistency
-.watch-this-article {
+// FIXME: Remove when mw-ui-icon in stable
+.icon.watch-this-article {
        .background-image('images/watch.png');
 
        // Icon (watched)
diff --git a/less/iconsNew.less b/less/iconsNew.less
new file mode 100644
index 0000000..c7cbc0d
--- /dev/null
+++ b/less/iconsNew.less
@@ -0,0 +1,171 @@
+// FIXME: Standardise on all our icon sizes
+@import "minerva.variables";
+@import "minerva.mixins";
+@import "mediawiki.mixins";
+
+// Icon (talk)
+//
+// Renders a talk icon
+//
+// Markup:
+// <div class="icon icon-talk">talk</div>
+//
+// Styleguide 8.3.3.
+.mw-ui-icon-talk {
+       .m-background-image('images/pagemenu/talk.png');
+}
+
+// Icon (watch)
+//
+// Renders a watch icon where the page is not watched.
+//
+// Markup:
+// <div class="icon watch-this-article">watch</div>
+//
+// Styleguide 8.3.4.
+.mw-ui-icon-watch {
+       .m-background-image('images/watch.png');
+}
+
+.mw-ui-icon-edit {
+       .m-background-image('images/pagemenu/edit-locked.png');
+}
+
+.mw-ui-icon-edit-enabled {
+       .m-background-image('images/pagemenu/edit.png');
+}
+
+
+.mw-ui-icon-watched {
+       .m-background-image('images/watched.png');
+}
+
+.mw-ui-icon-home {
+       .m-background-image('images/menu/home.png');
+}
+
+.mw-ui-icon-random {
+       .m-background-image('images/menu/random.png');
+}
+
+.mw-ui-icon-watchlist {
+       .m-background-image('images/menu/watchlist.png');
+}
+
+.mw-ui-icon-uploads {
+       .m-background-image('images/menu/uploads.png');
+}
+
+.mw-ui-icon-nearby {
+       .m-background-image('images/menu/nearby.png');
+}
+
+.mw-ui-icon-settings {
+       .m-background-image('images/menu/settings.png');
+}
+
+.mw-ui-icon-secondary-logout {
+       .m-background-image('images/menu/loginout.png');
+}
+
+.mw-ui-icon-profile {
+       .m-background-image('images/menu/user.png');
+}
+
+.mw-ui-icon-anon {
+       .m-background-image('images/menu/anon.png');
+}
+
+.mw-ui-icon-cancel {
+       .m-background-image('images/cancel.png');
+}
+
+.mw-ui-icon-addimage {
+       .m-background-image('images/pagemenu/upload-locked.png');
+}
+
+.mw-ui-icon-addimage-enabled {
+       .m-background-image('images/pagemenu/upload.png');
+}
+
+.mw-ui-icon-clear {
+       .m-background-image('images/clear.png');
+}
+
+.mw-ui-icon-photo {
+       .m-background-image('images/camera.png');
+}
+
+.mw-ui-icon-arrow-down {
+       .m-background-image('images/show.png');
+}
+
+.mw-ui-icon-arrow-up {
+       .m-background-image('images/hide.png');
+}
+
+.mw-ui-icon-previous {
+       .m-background-image('modules/images/uploads/chevronLeft.png');
+}
+
+.mw-ui-icon-next {
+       .m-background-image('modules/images/uploads/chevronRight.png');
+}
+
+.mw-ui-icon-bytesadded {
+       .m-background-image('images/positive.png');
+}
+
+.mw-ui-icon-bytesremoved {
+       .m-background-image('images/negative.png');
+}
+
+.mw-ui-icon-bytesneutral {
+       .m-background-image('images/neutral.png');
+}
+
+.mw-ui-icon-back {
+       .m-background-image('images/back-ltr.png');
+}
+
+.mw-ui-icon-toc {
+       .m-background-image-svg-quick('modules/toc/images/contents-ltr');
+}
+
+.mw-ui-icon-cleanup {
+       .m-background-image-svg-quick( 'modules/images/issues/blue-triangle' );
+}
+
+.mw-ui-icon-cleanup-gray {
+       .m-background-image-svg-quick( 'modules/images/issues/gray-triangle' );
+}
+
+.mw-ui-icon-mainmenu {
+       .m-background-image-svg-quick( 'images/menu/hamburger' );
+}
+
+.mw-ui-icon-notifications {
+       .m-background-image-svg-quick( 'images/bell' );
+}
+
+.mw-ui-icon-user {
+       .m-background-image-svg-quick('specials/images/userNormal');
+}
+
+.mw-ui-icon-anonymous {
+       .m-background-image-svg-quick('specials/images/userAnonymous');
+}
+
+// FIXME: Find better workaround for this
+span.mw-ui-icon {
+       // a block inside an inline element is never a good idea - effects line 
height of mobile diff bytesadded class
+       display: inline-block;
+}
+
+// FIXME: Upstream to mediawiki ui
+.mw-ui-icon {
+       &:before {
+               background-position: 50% 50%;
+               height: 100%;
+       }
+}
diff --git a/less/mainmenu.less b/less/mainmenu.less
index af27823..0ae2ba2 100644
--- a/less/mainmenu.less
+++ b/less/mainmenu.less
@@ -111,8 +111,16 @@
                        top: 0;
                        bottom: 0;
                        padding-right: 0;
-                       width: 0; // rely on padding
+                       // FIXME: Remove when cache cleared and using mw-ui-icon
+                       &.icon {
+                               width: 0;
+                       }
                        border-left: 1px solid #717171;
+
+                       &.mw-ui-icon {
+                               padding: 0;
+                               margin: 0;
+                       }
                }
 
                .icon-profile {
@@ -122,8 +130,14 @@
                a {
                        color: white;
                        display: block;
-                       padding: 13px 10px 11px 34px;
-                       line-height: 22px;
+                       padding: 13px 10px 11px 0;
+
+                       // FIXME: Remove when cache cleared
+                       &.icon {
+                               padding: 13px 10px 11px 34px;
+                               line-height: 22px;
+                       }
+
                        margin-left: 9px;
                        &:hover {
                                text-decoration: none;
diff --git a/less/minerva.less/minerva.mixins.less 
b/less/minerva.less/minerva.mixins.less
index 1ee537b..097913e 100644
--- a/less/minerva.less/minerva.mixins.less
+++ b/less/minerva.less/minerva.mixins.less
@@ -5,6 +5,24 @@
        .background-image-svg( ~"@{url}.svg", ~"@{url}.png" );
 }
 
+.m-background-image( @url ) {
+       &:after,
+       &:before {
+               .background-image(@url)
+       }
+}
+
+.m-background-image-svg( @svg, @fallback ) {
+       &:after,
+       &:before {
+               .background-image-svg( @svg, @fallback );
+       }
+}
+
+.m-background-image-svg-quick( @url ) {
+       .m-background-image-svg( ~"@{url}.svg", ~"@{url}.png" );
+}
+
 .box-sizing( @value ) {
        -moz-box-sizing: @value;
        -webkit-box-sizing: @value;
diff --git a/less/modules/issues.less b/less/modules/issues.less
index 32b055f..9cfb683 100644
--- a/less/modules/issues.less
+++ b/less/modules/issues.less
@@ -8,16 +8,25 @@
 .mw-mf-cleanup {
        display: inline-block;
        padding: 10px 15px 10px (@smallIconSize + 20px);
-       .background-image('images/issues/blue.png');
        margin-bottom: 4px;
-       background-position: 10px center;
 }
 
-.app,
-.alpha,
-.beta {
+// FIXME: remove when mw-ui-icon in stable
+.stable {
        .mw-mf-cleanup {
-               .background-image-svg( 'images/issues/blue-triangle.svg', 
'images/issues/blue-triangle.png' );
+               .background-image('images/issues/blue.png');
+               background-position: 10px center;
+       }
+
+       .overlay {
+               .cleanup {
+                       li {
+                               .issue-notice {
+                                       .background-image-svg( 
'images/issues/gray-triangle.svg', 'images/issues/gray-triangle.png' );
+                                       background-position: center 
@smallIconSize;
+                               }
+                       }
+               }
        }
 }
 
@@ -28,25 +37,25 @@
                        border-bottom: solid 1px @grayLight;
                        .issue-notice {
                                padding: (@smallIconSize * 2.5) @contentMargin 
@smallIconSize @contentMargin;
-                               .background-image-svg( 
'images/issues/gray-triangle.svg', 'images/issues/gray-triangle.png' );
-                               background-position: center @smallIconSize;
                        }
                }
        }
 }
 
 @media all and (min-width: @wgMFDeviceWidthTablet) {
-       .alpha,
-       .beta {
-               .overlay {
-                       .cleanup {
-                               li {
-                                       .issue-notice {
-                                               padding: 2em 1em 2em 
(@largeIconSize + 10px);
-                                               margin: 0 1em 0 @headerHeight;
-                                               // FIXME: move to generic 
icon.less class e.g. icon-responsive
+       .overlay {
+               .cleanup {
+                       li {
+                               .issue-notice {
+                                       &:before {
+                                               top: -1.5em;
+                                               left: 50%;
+                                       }
+                                       padding: 2em 1em 2em (@largeIconSize + 
10px);
+                                       margin: 0 1em 0 @headerHeight;
+                                       &.icon {
                                                .background-size( 
@largeIconSize, @largeIconSize );
-                                               background-position: left 
center;
+                                                background-position: left 
center;
                                        }
                                }
                        }
diff --git a/less/modules/references.less b/less/modules/references.less
index 2345e79..1e71060 100644
--- a/less/modules/references.less
+++ b/less/modules/references.less
@@ -12,8 +12,14 @@
                display: none;
        }
 
+       // FIXME: Remove when mw-ui-icon in stable
        .icon {
                float: right;
                margin-top: .7em;
        }
+
+       .mw-ui-icon {
+               float: right;
+               line-height: normal;
+       }
 }
diff --git a/less/modules/toc/toc.less b/less/modules/toc/toc.less
index b4346b5..98baac2 100644
--- a/less/modules/toc/toc.less
+++ b/less/modules/toc/toc.less
@@ -27,6 +27,7 @@
                // add right padding to the chevron without reducing tapable 
area
                border-right: @paddingHorizontal solid transparent;
 
+               // FIXME:  Remove when new icons used in stable
                .icon {
                        // @todo: switch to .background-image-svg() when bug 
66091 is fixed
                        background-image: url('images/contents-ltr.png');
@@ -39,6 +40,12 @@
                        left: @paddingVertical;
                        top: @paddingVertical;
                }
+
+               .mw-ui-icon {
+                       position: absolute;
+                       left: 0;
+                       top: .7em;
+               }
        }
 
        .collapsible-block {
diff --git a/less/modules/toggle.less b/less/modules/toggle.less
index e5220af..9c1d2e9 100644
--- a/less/modules/toggle.less
+++ b/less/modules/toggle.less
@@ -15,8 +15,16 @@
 
        .collapsible-heading {
                position: relative;
-               padding-left: 24px;
+               // FIXME: Remove when cache clears
+               &.icon {
+                       padding-left: 24px;
+               }
                border-bottom: solid 1px @sectionBorderColor;
+
+               &:before {
+                       font-size: .4em;
+                       height: 3em;
+               }
        }
 
        .section-heading {
diff --git a/less/modules/uploads/PhotoUploaderButton.less 
b/less/modules/uploads/PhotoUploaderButton.less
index ae9bef7..4f711eb 100644
--- a/less/modules/uploads/PhotoUploaderButton.less
+++ b/less/modules/uploads/PhotoUploaderButton.less
@@ -3,14 +3,16 @@
 @import "minerva.mixins";
 
 .ctaUploadPhoto {
+       // FIXME: Remove when mw-ui-icon in stable
        .icon-photo {
-               // Note: Use left to ensure it flips in RTL mode
-               // FIXME: !important needed to override icon-text rule in 
icons.less
                background-position: left 10px center !important;
+               padding-left: 44px;
+       }
+
+       .mw-ui-icon-photo {
                display: table;
                position: relative;
                margin: 0 auto;
-               padding-left: 44px;
 
                input {
                        opacity: 0;
diff --git a/less/modules/uploads/UploadTutorial.less 
b/less/modules/uploads/UploadTutorial.less
index 26b175b..d03786a 100644
--- a/less/modules/uploads/UploadTutorial.less
+++ b/less/modules/uploads/UploadTutorial.less
@@ -12,14 +12,24 @@
                bottom: 0;
                z-index: @z-indexOverlay;
 
+               &:before {
+                       top: 0;
+               }
+
                &.prev {
                        left: 0;
-                       background-image: 
url(../images/uploads/chevronLeft.png);
+                       // FIXME: Remove when mw-ui-icon in stable
+                       &.icon {
+                               background-image: 
url(../images/uploads/chevronLeft.png);
+                       }
                }
 
                &.next {
                        right: 0;
-                       background-image: 
url(../images/uploads/chevronRight.png);
+                       // FIXME: Remove when mw-ui-icon in stable
+                       &.icon {
+                               background-image: 
url(../images/uploads/chevronRight.png);
+                       }
                }
        }
 
diff --git a/less/modules/watchstar.less b/less/modules/watchstar.less
index 19179d6..cb19f0e 100644
--- a/less/modules/watchstar.less
+++ b/less/modules/watchstar.less
@@ -5,7 +5,9 @@
 @watchThisArticleSize: 48px;
 
 // watchlist and search results
-.page-list .watch-this-article {
+.page-list .icon.watch-this-article,
+// FIXME: Remove above selector when mw-ui-icon in stable
+.page-list .mw-ui-icon-watch {
        position: absolute;
        right: 0;
        top: 50%;
@@ -15,7 +17,9 @@
 }
 
 .animations {
-       .watch-this-article {
+       .icon.watch-this-article,
+       // FIXME: Remove above selector when mw-ui-icon in stable
+       .mw-ui-icon-watch {
                .transition-transform( .5s );
 
                &.watched {
diff --git a/less/pageactions.less b/less/pageactions.less
index 88276b5..6d927ac 100644
--- a/less/pageactions.less
+++ b/less/pageactions.less
@@ -28,12 +28,6 @@
                // Needed for non-JavaScript users
                position: relative;
                cursor: pointer;
-               // FIXME: why is this necessary?
-               vertical-align: top;
-               height: 30px;
-               width: 40px;
-               background-position: 50% 0;
-               margin: 0 16px 0 0;
 
                // FIXME: use .cloaked class
                // file inputs are notoriously difficult to style
@@ -50,6 +44,20 @@
                        height: 100%;
                        // needed for ContentOverlay pointer arrow
                        margin: 0 0 @verticalMargin;
+               }
+
+               // FIXME: Remove when mw-ui-icon moved to stable
+               &.icon {
+                       vertical-align: top;
+                       height: 30px;
+                       width: 40px;
+                       background-position: 50% 0;
+                       margin: 0 16px 0 0;
+               }
+
+               &.mw-ui-icon {
+                       font-size: 1.3em;
+                       margin-right: 0;
                }
        }
 }
@@ -68,12 +76,19 @@
 }
 
 #ca-upload {
-       .background-image('images/pagemenu/upload-locked.png');
+       // FIXME: Remove when cache clears
+       &.icon {
+               .background-image('images/pagemenu/upload-locked.png');
+       }
+
        input {
                display: none;
        }
        &.enabled {
-               .background-image('images/pagemenu/upload.png');
+               // FIXME: Remove when cache clears
+               &.icon {
+                       .background-image('images/pagemenu/upload.png');
+               }
                input {
                        display: block;
                }
diff --git a/less/specials/images/profile/talk.png 
b/less/specials/images/profile/talk.png
deleted file mode 100644
index dbaa6cb..0000000
--- a/less/specials/images/profile/talk.png
+++ /dev/null
Binary files differ
diff --git a/less/specials/mobilediff.less b/less/specials/mobilediff.less
index 66667df..d30d94b 100644
--- a/less/specials/mobilediff.less
+++ b/less/specials/mobilediff.less
@@ -9,20 +9,24 @@
 #mw-mf-diffview {
        @userInfoHeight: 5em;
 
+       // FIXME: Remove when mw-ui-icon in stable
        .icon {
                padding-left: 18px;
        }
 
+       // FIXME: Remove when mw-ui-icon in stable
        .mw-mf-bytesadded {
-               background-image: url(images/positive.png);
+               .background-image('images/positive.png');
        }
 
+       // FIXME: Remove when mw-ui-icon in stable
        .mw-mf-bytesremoved {
-               background-image: url(images/negative.png);
+               .m-background-image('images/negative.png');
        }
 
+       // FIXME: Remove when mw-ui-icon in stable
        .mw-mf-bytesneutral {
-               background-image: url(images/neutral.png);
+               .m-background-image('images/neutral.png');
        }
 
        .meta {
diff --git a/less/specials/pagefeed.less b/less/specials/pagefeed.less
index 7ff3976..10a60f8 100644
--- a/less/specials/pagefeed.less
+++ b/less/specials/pagefeed.less
@@ -74,14 +74,22 @@
 }
 
 .mw-mf-user {
-       padding: 1px 0 0 20px;
        color: @grayMediumDark;
-       .background-image-svg-quick("images/userNormal");
+
+       // FIXME: Remove when mw-ui-icon in stable
+       &.icon {
+               padding: 1px 0 0 20px;
+               .background-image-svg-quick("images/userNormal");
+       }
 }
 
 .mw-mf-anon {
        color: inherit;
-       .background-image-svg-quick("images/userAnonymous");
+
+       // FIXME: Remove when mw-ui-icon in stable
+       &.icon {
+               .background-image-svg-quick("images/userAnonymous");
+       }
 }
 
 a.more {
diff --git a/less/specials/userprofile.less b/less/specials/userprofile.less
index 2162f71..828e64f 100644
--- a/less/specials/userprofile.less
+++ b/less/specials/userprofile.less
@@ -82,8 +82,14 @@
                clear: both;
                padding: 2em 0 0;
 
-               .icon-talk {
+               .icon-talk,
+               // FIXME: Remove above selector when mw-ui-icon in stable
+               .mw-ui-icon {
                        margin-top: 1.5em;
+               }
+
+               // FIXME: Remove when mw-ui-icon in stable
+               .icon-talk {
                        padding-left: 40px;
                        background-position: left 10px center;
                }
diff --git a/less/tablet/common.less b/less/tablet/common.less
index d31e3af..2b40ce2 100644
--- a/less/tablet/common.less
+++ b/less/tablet/common.less
@@ -34,7 +34,8 @@
                        position: absolute;
                        right: 0;
                        top: 0;
-                       li {
+                       // FIXME: Remove when mw-ui-icon in stable
+                       li.icon {
                                margin: 0 0 0 16px;
                        }
                }
diff --git a/less/ui.less b/less/ui.less
index 764e885..824e942 100644
--- a/less/ui.less
+++ b/less/ui.less
@@ -37,8 +37,20 @@
 
 // FIXME: Id's for styling are bad m'kay?
 #mw-mf-main-menu-button {
-       background-position: 50% 50%;
-       .background-image-svg( 'images/menu/hamburger.svg', 
'images/menu/hamburger.png' );
+       // FIXME: Remove when cache clears.
+       &.icon {
+               background-position: 50% 50%;
+               .background-image-svg( 'images/menu/hamburger.svg', 
'images/menu/hamburger.png' );
+       }
+}
+
+// FIXME: remove when mw-ui-icon in stable
+.stable {
+       .header {
+               > a {
+                       vertical-align: middle;
+               }
+       }
 }
 
 .header {
@@ -57,13 +69,13 @@
        // Search field
        > form {
                display: table-cell;
-               vertical-align: middle;
        }
 
        // Search
        > form {
                padding: .15em @headerTitlePaddingH 0;
                width: auto;
+               vertical-align: middle;
        }
 
        // FIXME: Overrides rules in common.less for input area that are 
present in reset.less - should be unnecessary
@@ -137,11 +149,15 @@
        .edit-page {
                display: none;
                position: absolute;
-               background-position: 100% @headingMargin;
-               width: @sectionIconWidth + 5px;
                top: 0;
                bottom: 0;
                right: 0;
+
+               // FIXME: remove when cache clears
+               &.icon {
+                       background-position: 100% @headingMargin;
+                       width: @sectionIconWidth + 5px;
+               }
        }
 
        .open-block {
@@ -189,22 +205,29 @@
 .header {
 
        .user-button {
-               height: @headerHeight;
-               background-position: 50% 50%;
+               // FIXME: Remove when cache clears
+               &.icon {
+                       height: @headerHeight;
+                       background-position: 50% 50%;
+               }
        }
 
        // need to specify id or else other rules are more important
        // FIXME: simplify when .icon class from Overlay used instead
        #secondary-button.user-button,
        .user-button {
-               width: @headerHeight;
-               text-align: right;
                // Make sure count is positioned correctly in relation to bell 
icon
                position: relative;
-               .background-image-svg-quick( 'images/bell' );
-               // Fixes positioning in Firefox
-               display: inline-block;
-               float: right;
+
+               // FIXME: Remove when cache is cleared.
+               &.icon {
+                       width: @headerHeight;
+                       text-align: right;
+                       .background-image-svg-quick( 'images/bell' );
+                       // Fixes positioning in Firefox
+                       display: inline-block;
+                       float: right;
+               }
 
                &.loading span {
                        display: none;
diff --git a/templates/ReferencesDrawer.hogan b/templates/ReferencesDrawer.hogan
index ea30d12..eb07928 100644
--- a/templates/ReferencesDrawer.hogan
+++ b/templates/ReferencesDrawer.hogan
@@ -1,3 +1,3 @@
-<button class="cancel icon icon-cancel icon-12px"></button>
+{{>cancelButton}}
 <h3>{{title}}</h3>
 {{{text}}}
diff --git a/templates/backButton.hogan b/templates/backButton.hogan
index c92b4ad..403c3d1 100644
--- a/templates/backButton.hogan
+++ b/templates/backButton.hogan
@@ -1 +1,6 @@
+{{^inBeta}}
 <button class="back icon icon-back">{{closeMsg}}</button>
+{{/inBeta}}
+{{#inBeta}}
+<button class="back mw-ui-icon mw-ui-icon-element 
mw-ui-icon-back">{{closeMsg}}</button>
+{{/inBeta}}
diff --git a/templates/cancelButton.hogan b/templates/cancelButton.hogan
index abd75e6..d196edc 100644
--- a/templates/cancelButton.hogan
+++ b/templates/cancelButton.hogan
@@ -1 +1,6 @@
+{{^inBeta}}
 <button class="cancel icon icon-cancel">{{closeMsg}}</button>
+{{/inBeta}}
+{{#inBeta}}
+<button class="cancel mw-ui-icon mw-ui-icon-element 
mw-ui-icon-cancel">{{closeMsg}}</button>
+{{/inBeta}}
diff --git a/templates/ctaDrawer.hogan b/templates/ctaDrawer.hogan
index 550088a..66874c8 100644
--- a/templates/ctaDrawer.hogan
+++ b/templates/ctaDrawer.hogan
@@ -1,4 +1,9 @@
+{{^inBeta}}
 <a class="cancel icon icon-arrow-down" href="#">{{cancelMessage}}</a>
+{{/inBeta}}
+{{#inBeta}}
+<a class="cancel mw-ui-icon mw-ui-icon-element mw-ui-icon-arrow-down" 
href="#">{{cancelMessage}}</a>
+{{/inBeta}}
 <p>{{content}}</p>
 <div class="mw-ui-button-group">
        <a class="mw-ui-button mw-ui-block mw-ui-progressive" 
href="{{loginUrl}}">{{loginCaption}}</a>
diff --git a/templates/modules/search/SearchOverlay.hogan 
b/templates/modules/search/SearchOverlay.hogan
index 3393d28..2ebc07d 100644
--- a/templates/modules/search/SearchOverlay.hogan
+++ b/templates/modules/search/SearchOverlay.hogan
@@ -9,7 +9,12 @@
                        </form>
                </div>
                <ul>
+                       {{^inBeta}}
                        <li><button class="clear icon 
icon-clear">{{clearMsg}}</button></li>
+                       {{/inBeta}}
+                       {{#inBeta}}
+                       <li><button class="clear mw-ui-icon mw-ui-icon-element 
mw-ui-icon-clear">{{clearMsg}}</button></li>
+                       {{/inBeta}}
                </ul>
        </div>
 </div>
diff --git a/templates/modules/toc/toc.hogan b/templates/modules/toc/toc.hogan
index 5ef2977..68c05f2 100644
--- a/templates/modules/toc/toc.hogan
+++ b/templates/modules/toc/toc.hogan
@@ -1,4 +1,9 @@
+{{^inBeta}}
 <h2>{{contentsMsg}} <span class="icon icon-16px"></span></h2>
+{{/inBeta}}
+{{#inBeta}}
+<h2>{{contentsMsg}} <span class="mw-ui-icon mw-ui-icon-element mw-ui-icon-toc 
icon-16px"></span></h2>
+{{/inBeta}}
 <div>
        <ul>
        {{#sections}}
diff --git a/templates/overlays/cleanup.hogan b/templates/overlays/cleanup.hogan
index 95a60c3..2e2b862 100644
--- a/templates/overlays/cleanup.hogan
+++ b/templates/overlays/cleanup.hogan
@@ -1,7 +1,12 @@
 <ul class="cleanup">
        {{#issues}}
        <li>
+               {{^inBeta}}
                <div class="issue-notice icon icon-text">
+               {{/inBeta}}
+               {{#inBeta}}
+               <div class="issue-notice mw-ui-icon mw-ui-icon-before 
mw-ui-icon-cleanup-gray">
+               {{/inBeta}}
                        {{#icon}}<img src="{{icon}}"> {{/icon}}
                        {{{text}}}
                </div>
diff --git a/templates/page.hogan b/templates/page.hogan
index 090fa33..581f779 100644
--- a/templates/page.hogan
+++ b/templates/page.hogan
@@ -5,9 +5,9 @@
 <div class="pre-content">
        <h1 id="section_0">{{displayTitle}}</h1>
        <ul id="page-actions" class="hlist">
-               <li id="ca-edit" class="icon icon-edit 
icon-32px"></li>{{#userCanUpload}}<li id="ca-upload" class="icon icon-32px">
+               <li id="ca-edit" class="mw-ui-icon mw-ui-icon-element 
mw-ui-icon-icon-edit icon-32px"></li>{{#userCanUpload}}<li id="ca-upload" 
class="icon icon-32px">
                </li>{{/userCanUpload}}<li id="ca-talk"
-                       class="{{#isTalkPage}}selected{{/isTalkPage}} icon 
icon-32px icon-talk"><a href="{{talkLink}}" id="talk">{{talkLabel}}</a>
+                       class="{{#isTalkPage}}selected{{/isTalkPage}} 
mw-ui-icon mw-ui-icon-element mw-ui-icon-talk icon-32px"><a href="{{talkLink}}" 
id="talk">{{talkLabel}}</a>
                </li><li id="ca-watch"></li>
        </ul>
 </div>
@@ -16,7 +16,7 @@
        {{#sections}}
        <{{tag}} data-id="{{id}}">
                <span id="{{anchor}}">{{{line}}}</span>
-               <a href="#/editor/{{id}}" data-section="{{id}}" 
class="edit-page icon icon-edit enabled icon-32px">{{editLabel}}</a>
+               <a href="#/editor/{{id}}" data-section="{{id}}" 
class="edit-page mw-ui-icon mw-ui-icon-element mw-ui-icon-edit enabled 
icon-32px">{{editLabel}}</a>
        </{{tag}}>
        <div>{{{text}}}</div>
        {{/sections}}
diff --git a/templates/section.hogan b/templates/section.hogan
index 41d31ba..249323f 100644
--- a/templates/section.hogan
+++ b/templates/section.hogan
@@ -1,7 +1,7 @@
 {{#heading}}
 <h2>
        <span id="{{anchor}}">{{{heading}}}</span>
-       <a href="#/editor/{{id}}" data-section="{{id}}" class="edit-page 
icon-edit icon icon-32px enabled">{{editLabel}}</a>
+       <a href="#/editor/{{id}}" data-section="{{id}}" class="edit-page 
mw-ui-icon mw-ui-icon-element mw-ui-icon-edit icon-32px 
enabled">{{editLabel}}</a>
 </h2>
 {{/heading}}
 <div>
diff --git a/templates/uploads/UploadTutorial.hogan 
b/templates/uploads/UploadTutorial.hogan
index d3ea9b5..8eb4206 100644
--- a/templates/uploads/UploadTutorial.hogan
+++ b/templates/uploads/UploadTutorial.hogan
@@ -1,4 +1,9 @@
+{{^inBeta}}
 <button class="slider-button icon icon-20px prev"></button>
+{{/inBeta}}
+{{#inBeta}}
+<button class="slider-button mw-ui-icon mw-ui-icon-element mw-ui-icon-previous 
prev"></button>
+{{/inBeta}}
 <ul>
        {{#pages}}
        <li class="slide slide-image">
@@ -15,4 +20,9 @@
        </li>
        {{/pages}}
 </ul>
+{{^inBeta}}
 <button class="slider-button icon icon-20px next"></button>
+{{/inBeta}}
+{{#inBeta}}
+<button class="slider-button mw-ui-icon mw-ui-icon-element mw-ui-icon-next 
next"></button>
+{{/inBeta}}
diff --git a/tests/qunit/modules/test_PageList.js 
b/tests/qunit/modules/test_PageList.js
index 7247d25..626ee5d 100644
--- a/tests/qunit/modules/test_PageList.js
+++ b/tests/qunit/modules/test_PageList.js
@@ -23,8 +23,8 @@
                        inprop: 'watched',
                        pageids: [ 30, 50 ]
                } ), 'A request to API was made to retrieve the statuses' );
-               assert.strictEqual( pl.$el.find( '.watch-this-article' 
).length, 2, "2 articles have watch stars" );
-               assert.strictEqual( pl.$el.find( '.watched' ).length, 1, "1 of 
articles is marked as watched" );
+               assert.strictEqual( pl.$el.find( '.mw-ui-icon-watch' ).length, 
1, "1 articles is marked as not watched" );
+               assert.strictEqual( pl.$el.find( '.mw-ui-icon-watched' 
).length, 1, "1 of articles is marked as watched" );
        } );
 
 }( jQuery, mw.mobileFrontend ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id155a3f2e6ac80d0a30d1d35902a871e85db9722
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to