Jdlrobson has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/386913 )

Change subject: Hygiene: Minera owns PointerOverlay
......................................................................

Hygiene: Minera owns PointerOverlay

The only usage is inside Minerva so we will move this module here.

Change-Id: If6859f0c8f855c6b116b254c58a6814f54b7c36d
---
M i18n/en.json
M i18n/qqq.json
A resources/skins.minerva.newusers/PointerOverlay.hogan
A resources/skins.minerva.newusers/PointerOverlay.js
R resources/skins.minerva.newusers/PointerOverlay.less
M resources/skins.minerva.newusers/init.js
M skin.json
7 files changed, 168 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/skins/MinervaNeue 
refs/changes/13/386913/1

diff --git a/i18n/en.json b/i18n/en.json
index d7f8a87..e40793f 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -8,6 +8,7 @@
        "mobile-frontend-cookies-required": "Cookies are required to switch 
view modes. Please enable them and try again.",
        "mobile-frontend-editor-blocked-info-loggedin": "Your account is 
blocked from editing. The block was made by {{GENDER:$2|$2}} for the following 
reason: $1",
        "mobile-frontend-editor-cta": "Help improve this page!",
+       "minerva-pointer-dismiss": "Dismiss",
        "mobile-frontend-editor-disabled": "This page is protected to prevent 
vandalism.",
        "mobile-frontend-editor-edit": "Edit",
        "mobile-frontend-editor-redlink-create": "Create page",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index caf550a..19cb5a0 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -11,6 +11,7 @@
                        "Umherirrender"
                ]
        },
+       "minerva-pointer-dismiss": "Label of button that dismisses overlay 
pointing at a particular new feature.",
        "minerva-last-modified-date": "Text that displays the date the page was 
last modified. Parameters:\n* $1 - date\n* $2 - 
time\n{{Related|Mobile-frontend-last-modified}}",
        "minerva-talk-add-topic": "Label for button which shows at bottom of 
talk pages in mobile view prompting addition of topic",
        "mobile-frontend-console-recruit": "Message that is displayed in the 
JavaScript console aimed at developers in an attempt to recruit volunteers. The 
\\o/ emoticon is a man with his arms in the air with the purpose of drawing 
attention to the message. If this doesn't translate into the destination 
language feel free to omit it or use something more applicable.",
diff --git a/resources/skins.minerva.newusers/PointerOverlay.hogan 
b/resources/skins.minerva.newusers/PointerOverlay.hogan
new file mode 100644
index 0000000..3c98b30
--- /dev/null
+++ b/resources/skins.minerva.newusers/PointerOverlay.hogan
@@ -0,0 +1,5 @@
+<p>{{{summary}}}</p>
+<div class="button-bar">
+       {{#cancelMsg}}<button class="button cancel 
inline">{{cancelMsg}}</button>{{/cancelMsg}}
+       {{#confirmMsg}}<button class="button 
actionable">{{confirmMsg}}</button>{{/confirmMsg}}
+</div>
diff --git a/resources/skins.minerva.newusers/PointerOverlay.js 
b/resources/skins.minerva.newusers/PointerOverlay.js
new file mode 100644
index 0000000..de876db
--- /dev/null
+++ b/resources/skins.minerva.newusers/PointerOverlay.js
@@ -0,0 +1,150 @@
+( function ( M, $ ) {
+       var msg = mw.msg,
+               template = mw.template,
+               Overlay = M.require( 'mobile.startup/Overlay' );
+
+       /**
+        * Page overlay prompting a user for given action
+        * @class PointerOverlay
+        * @extends Overlay
+        */
+       function PointerOverlay() {
+               Overlay.apply( this, arguments );
+       }
+
+       OO.mfExtend( PointerOverlay, Overlay, {
+               className: 'overlay pointer-overlay tutorial-overlay',
+               /**
+                * @inheritdoc
+                */
+               isBorderBox: false,
+               /**
+                * @inheritdoc
+                */
+               fullScreen: false,
+               /**
+                * @inheritdoc
+                */
+               closeOnContentTap: true,
+               template: template.get( 'skins.minerva.newusers', 
'PointerOverlay.hogan' ),
+               /**
+                * @inheritdoc
+                * @cfg {Object} defaults Default options hash.
+                * @cfg {string} defaults.isCompact whether the pointer overlay 
should be compact
+                * @cfg {number} defaults.timeout in milliseconds. If not zero 
the pointer overlay will
+                *  hide after this duration of time.
+                * @cfg {string} defaults.isTutorial whether the pointer 
overlay contains tutorial like instructions
+                * @cfg {string} defaults.summary Message describing thing 
being pointed to.
+                * @cfg {string} defaults.cancelMsg Cancel message.
+                * @cfg {string} defaults.appendToElement Where pointer overlay 
should be appended to.
+                * @cfg {string} defaults.target jQuery selector to point 
tutorial at
+                * @cfg {string} [defaults.alignment] Determines where the 
pointer should point to. Valid values 'left' or 'center'
+                * @cfg {string} [defaults.confirmMsg] Label for a confirm 
message.
+                */
+               defaults: $.extend( {}, Overlay.prototype.defaults, {
+                       summary: undefined,
+                       isCompact: false,
+                       isTutorial: false,
+                       timeout: 0,
+                       cancelMsg: msg( 'minerva-pointer-dismiss' ),
+                       appendToElement: undefined,
+                       target: undefined,
+                       alignment: 'center',
+                       confirmMsg: undefined
+               } ),
+               /**
+                * @inheritdoc
+                */
+               events: {
+                       'click .cancel': 'hide'
+               },
+               /** @inheritdoc */
+               postRender: function () {
+                       var $target,
+                               self = this;
+
+                       Overlay.prototype.postRender.apply( this );
+
+                       if ( this.options.isCompact ) {
+                               this.$el.addClass( 'pointer-overlay-compact' );
+                       }
+                       if ( this.options.isTutorial ) {
+                               this.$el.addClass( 'pointer-overlay-tutorial' );
+                       }
+                       if ( this.options.timeout ) {
+                               setTimeout( function () {
+                                       self.hide();
+                               }, this.options.timeout );
+                       }
+                       if ( self.options.target ) {
+                               // FIXME: this option should be a jQuery object 
already. Avoid use of global $.
+                               $target = $( self.options.target );
+                               // Ensure we position the overlay correctly but 
do not show the arrow
+                               self._position( $target );
+                               this.addPointerArrow( $target );
+                       }
+               },
+               /**
+                * Refreshes the pointer arrow.
+                * @method
+                * @param {string} target jQuery selector
+                */
+               refreshPointerArrow: function ( target ) {
+                       this.$pointer.remove();
+                       this.addPointerArrow( $( target ) );
+               },
+               /**
+                * Position the overlay under a specified element
+                * @private
+                * @param {jQuery.Object} $pa An element that should be pointed 
at by the overlay
+                */
+               _position: function ( $pa ) {
+                       var left,
+                               paOffset = $pa.offset(),
+                               h = $pa.outerHeight( true ),
+                               y = paOffset.top + h;
+
+                       this.$el.css( 'top', y );
+                       if ( this.options.autoHide ) {
+                               left = paOffset.left;
+                               this.$el.css( 'left', left );
+                       }
+               },
+               /**
+                * Position overlay and add pointer arrow that points at 
specified element
+                * @method
+                * @param {jQuery.Object} $pa An element that should be pointed 
at by the overlay
+                */
+               addPointerArrow: function ( $pa ) {
+                       var left,
+                               paOffset = $pa.offset(),
+                               overlayOffset = this.$el.offset(),
+                               center = $pa.width() / 2;
+
+                       this._position( $pa );
+                       // add the entire width of the pointer
+                       left = 24;
+                       if ( !this.options.autoHide ) {
+                               left += paOffset.left - overlayOffset.left;
+                       }
+                       if ( this.alignment === 'center' ) {
+                               left -= center;
+                       }
+
+                       this.$pointer = $( '<div 
class="tutorial-pointer"></div>' ).css( {
+                               top: -6,
+                               left: left
+                       } ).appendTo( this.$el );
+
+                       // Since the positioning of this overlay is dependent 
on the current viewport it makes sense to
+                       // use a global window event so that on resizes it is 
correctly positioned.
+                       M.on(
+                               'resize',
+                               $.proxy( this, 'refreshPointerArrow', 
this.options.target )
+                       );
+               }
+       } );
+
+       M.define( 'skins.minerva.newusers/PointerOverlay', PointerOverlay );
+
+}( mw.mobileFrontend, jQuery ) );
diff --git a/skinStyles/mobile.pointerOverlay/minerva.less 
b/resources/skins.minerva.newusers/PointerOverlay.less
similarity index 100%
rename from skinStyles/mobile.pointerOverlay/minerva.less
rename to resources/skins.minerva.newusers/PointerOverlay.less
diff --git a/resources/skins.minerva.newusers/init.js 
b/resources/skins.minerva.newusers/init.js
index 3ad08e5..5d72e5c 100644
--- a/resources/skins.minerva.newusers/init.js
+++ b/resources/skins.minerva.newusers/init.js
@@ -10,7 +10,7 @@
 editable page whilst logged in, although you must be in test group A to see 
the CTA.
 */
 ( function ( M, $ ) {
-       var PageActionOverlay = require( 'mobile.pointerOverlay' ),
+       var PointerOverlay = M.require( 'skins.minerva.newusers/PointerOverlay' 
),
                skin = M.require( 'skins.minerva.scripts/skin' ),
                mainMenu = M.require( 'skins.minerva.scripts.top/mainMenu' ),
                util = M.require( 'mobile.startup/util' ),
@@ -55,7 +55,7 @@
                        $target.attr( 'href', href + '/leftNavSignup' );
                }
 
-               editOverlay = new PageActionOverlay( {
+               editOverlay = new PointerOverlay( {
                        target: target,
                        skin: skin,
                        isTutorial: true,
diff --git a/skin.json b/skin.json
index 6db3580..e368201 100644
--- a/skin.json
+++ b/skin.json
@@ -76,9 +76,6 @@
                        "mediawiki.special.preferences.styles": [
                                
"skinStyles/mediawiki.special.preferences.styles/styles.less"
                        ],
-                       "mobile.pointerOverlay": [
-                               "skinStyles/mobile.pointerOverlay/minerva.less"
-                       ],
                        "mobile.search": [
                                "skinStyles/mobile.search/SearchOverlay.less"
                        ],
@@ -306,15 +303,23 @@
                                "mobile",
                                "desktop"
                        ],
+                       "styles": [
+                               
"resources/skins.minerva.newusers/PointerOverlay.less"
+                       ],
+                       "templates": {
+                               "PointerOverlay.hogan": 
"resources/skins.minerva.newusers/PointerOverlay.hogan"
+                       },
                        "dependencies": [
                                "skins.minerva.editor",
                                "mediawiki.util",
-                               "mobile.pointerOverlay"
+                               "mobile.startup"
                        ],
                        "scripts": [
+                               
"resources/skins.minerva.newusers/PointerOverlay.js",
                                "resources/skins.minerva.newusers/init.js"
                        ],
                        "messages": [
+                               "minerva-pointer-dismiss",
                                "mobile-frontend-editor-tutorial-summary",
                                "mobile-frontend-editor-tutorial-confirm",
                                "mobile-frontend-editor-tutorial-cancel"

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If6859f0c8f855c6b116b254c58a6814f54b7c36d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/skins/MinervaNeue
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>

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

Reply via email to