Robmoen has uploaded a new change for review.

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


Change subject: Create base mobile init modules and set targets
......................................................................

Create base mobile init modules and set targets

Target mobile for ve dependencies
Create mobile view init modules

Change-Id: I786b63ab57518fc6af7761501259ed66592f70e3
---
M VisualEditor.hooks.php
M VisualEditor.php
M VisualEditorDataModule.php
A modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.init.js
A modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
M modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
M modules/ve-mw/init/ve.init.mw.Target.js
7 files changed, 270 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/14/93914/1

diff --git a/VisualEditor.hooks.php b/VisualEditor.hooks.php
index 53c7908..b6b3ce2 100644
--- a/VisualEditor.hooks.php
+++ b/VisualEditor.hooks.php
@@ -382,6 +382,7 @@
                        ),
                        'localBasePath' => dirname( __FILE__ ) . '/modules',
                        'remoteExtPath' => 'VisualEditor/modules',
+                       'targets' => array( 'desktop', 'mobile' ),
                );
 
                return true;
diff --git a/VisualEditor.php b/VisualEditor.php
index ce60279..27129c2 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -79,18 +79,21 @@
                        'rangy/rangy-position-1.3.js',
                        'rangy/rangy-export.js',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'jquery.visibleText' => $wgVisualEditorResourceTemplate + array(
                'scripts' => array(
                        'jquery/jquery.visibleText.js',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'oojs' => $wgVisualEditorResourceTemplate + array(
                'scripts' => array(
                        'oojs/oo.js',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'unicodejs.wordbreak' => $wgVisualEditorResourceTemplate + array(
@@ -102,6 +105,7 @@
                        'unicodejs/unicodejs.wordbreakproperties.js',
                        'unicodejs/unicodejs.wordbreak.js',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        // Alias for backwards compat, safe to remove after
@@ -115,12 +119,14 @@
                'styles' => array(
                        
've-mw/init/styles/ve.init.mw.ViewPageTarget.Icons-raster.css',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'ext.visualEditor.viewPageTarget.icons-vector' => 
$wgVisualEditorResourceTemplate + array(
                'styles' => array(
                        
've-mw/init/styles/ve.init.mw.ViewPageTarget.Icons-vector.css',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'ext.visualEditor.viewPageTarget.init' => 
$wgVisualEditorResourceTemplate + array(
@@ -143,6 +149,18 @@
                        'visualeditor-ca-editsource-section',
                ),
                'position' => 'top',
+       ),
+
+       'ext.visualEditor.mobileViewTarget.init' => 
$wgVisualEditorResourceTemplate + array(
+               'scripts' => 
've-mw/init/targets/ve.init.mw.MobileViewTarget.init.js',
+               'styles' => 
've-mw/init/styles/ve.init.mw.ViewPageTarget.init.css',
+               'dependencies' => array(
+                       'mediawiki.Uri',
+                       'mediawiki.util',
+                       'user.options',
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'ext.visualEditor.viewPageTarget.noscript' => 
$wgVisualEditorResourceTemplate + array(
@@ -205,6 +223,43 @@
                        'visualeditor-savedialog-identify-user',
                ),
        ),
+       'ext.visualEditor.mobileViewTarget' => $wgVisualEditorResourceTemplate 
+ array(
+               'scripts' => array(
+                       've-mw/init/targets/ve.init.mw.MobileViewTarget.js',
+               ),
+               'styles' => array(
+                       've-mw/init/styles/ve.init.mw.ViewPageTarget.css',
+               ),
+               'dependencies' => array(
+                       'ext.visualEditor.base',
+                       'ext.visualEditor.mediawiki',
+                       'jquery.visibleText',
+                       'mediawiki.api',
+                       'mediawiki.notify',
+                       'mediawiki.Title',
+                       'mediawiki.Uri',
+                       'mediawiki.user',
+                       'user.options',
+                       'user.tokens',
+               ),
+               'messages' => array(
+                       // MW core messages
+                       'creating',
+                       'editing',
+                       'spamprotectionmatch',
+                       'spamprotectiontext',
+
+                       // Messages needed by VE in init phase only (rest go 
below)
+                       'visualeditor-loadwarning',
+                       'visualeditor-loadwarning-token',
+                       'visualeditor-notification-created',
+                       'visualeditor-notification-restored',
+                       'visualeditor-notification-saved',
+                       'visualeditor-savedialog-identify-anon',
+                       'visualeditor-savedialog-identify-user',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
 
        'ext.visualEditor.base' => $wgVisualEditorResourceTemplate + array(
                'scripts' => array(
@@ -226,6 +281,7 @@
                        'unicodejs.wordbreak',
                        'mediawiki.util',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'ext.visualEditor.mediawiki' => $wgVisualEditorResourceTemplate + array(
@@ -241,6 +297,7 @@
                        'mediawiki.Uri',
                        'ext.visualEditor.base',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'ext.visualEditor.standalone' => $wgVisualEditorResourceTemplate + 
array(
@@ -256,8 +313,10 @@
        ),
 
        'ext.visualEditor.data' => $wgVisualEditorResourceTemplate + array(
-               'class' => 'VisualEditorDataModule'
+               'class' => 'VisualEditorDataModule',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
+
 
        'ext.visualEditor.core' => $wgVisualEditorResourceTemplate + array(
                'scripts' => array(
@@ -704,6 +763,7 @@
                        'fancycaptcha-edit',
                        'colon-separator',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'ext.visualEditor.experimental' => $wgVisualEditorResourceTemplate + 
array(
@@ -730,7 +790,7 @@
                'dependencies' => array(
                        'ext.visualEditor.core',
                        'jquery.uls',
-                       'ext.visualEditor.syntaxHighlight',
+                       'ext.visualEditor.syntaxHighlight'
                ),
                'messages' => array(
                        // VE messages needed by code that is only in 
experimental mode
@@ -755,12 +815,14 @@
                        've/ui/styles/ve.ui.Icons-raster.css',
                        've-mw/ui/styles/ve.ui.Icons-raster.css',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'ext.visualEditor.icons-vector' => $wgVisualEditorResourceTemplate + 
array(
                'styles' => array(
                        've/ui/styles/ve.ui.Icons-vector.css',
                        've-mw/ui/styles/ve.ui.Icons-vector.css',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'ext.visualEditor.syntaxHighlight' => $wgVisualEditorResourceTemplate + 
array(
                'scripts' => array(
@@ -783,6 +845,7 @@
                'styles' => array(
                        'syntaxhighlight/styles/ve.ui.MWSyntaxHighlight.css',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 );
 
diff --git a/VisualEditorDataModule.php b/VisualEditorDataModule.php
index 66f4727..f64ea58 100644
--- a/VisualEditorDataModule.php
+++ b/VisualEditorDataModule.php
@@ -15,6 +15,7 @@
        protected $origin = self::ORIGIN_USER_SITEWIDE;
        protected $gitInfo;
        protected $gitHeadHash;
+       protected $targets = array( 'desktop', 'mobile' );
 
        /* Methods */
 
diff --git a/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.init.js 
b/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.init.js
new file mode 100644
index 0000000..5795b83
--- /dev/null
+++ b/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.init.js
@@ -0,0 +1,51 @@
+/*!
+ * VisualEditor MediaWiki MobileViewTarget init.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/*global mw */
+
+/**
+ * Platform preparation for the MediaWiki MobileView page. This loads (when 
user needs it) the
+ * actual MediaWiki integration and VisualEditor library.
+ *
+ * @class ve.init.mw.MobileViewTarget.init
+ * @singleton
+ */
+( function ( M ) {
+       var init, getTargetDeferred;
+       /**
+        * Use deferreds to avoid loading and instantiating Target multiple 
times.
+        * @returns {jQuery.Promise}
+        */
+       function getTarget() {
+               var loadTargetDeferred;
+               if ( !getTargetDeferred ) {
+                       getTargetDeferred = $.Deferred();
+                       loadTargetDeferred = $.Deferred()
+                               .done( function () {
+                                       var target = new 
ve.init.mw.MobileViewTarget();
+                                       ve.init.mw.targets.push( target );
+                                       getTargetDeferred.resolve( target );
+                               } )
+                               .fail( getTargetDeferred.reject );
+                       mw.loader.using(
+                               'ext.visualEditor.mobileViewTarget',
+                               loadTargetDeferred.resolve,
+                               loadTargetDeferred.reject
+                       );
+               }
+               return getTargetDeferred.promise();
+       }
+       // FIXME: Attach static setup method to mw.mobileFrontend
+       // Determine if ve instance should be created by a special overlay 
inside of mobilefrontend
+       M.setupVisualEditor = function ( sectionId, callback ) {
+               getTarget().done( function ( target ) {
+                       // FIXME: Do we need to track these events?
+                       target.setSection( sectionId );
+                       target.activate( callback );
+               } );
+       };
+}( mw.mobileFrontend ) );
diff --git a/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js 
b/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
new file mode 100644
index 0000000..ddd434b
--- /dev/null
+++ b/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
@@ -0,0 +1,149 @@
+/*!
+ * VisualEditor MediaWiki Initialization MobileViewTarget class.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/*global mw, confirm, alert */
+
+/**
+ * Initialization MediaWiki mobile view page target.
+ *
+ * @class
+ * @extends ve.init.mw.Target
+ *
+ * @constructor
+ */
+ve.init.mw.MobileViewTarget = function VeInitMwMobileViewTarget() {
+       var currentUri = new mw.Uri();
+
+       // Parent constructor
+       ve.init.mw.Target.call(
+               this, $( '.mw-mf-overlay' ),
+               mw.config.get( 'wgRelevantPageName' ),
+               currentUri.query.oldid
+       );
+
+       // Properties
+       this.section = currentUri.query.vesection || null;
+       this.activating = false;
+       this.postActivation = null;
+
+       // Events
+       this.connect( this, { 'load': 'onLoad' } );
+};
+
+/* Inheritance */
+
+ve.inheritClass( ve.init.mw.MobileViewTarget, ve.init.mw.Target );
+
+/* Static Properties */
+
+ve.init.mw.MobileViewTarget.static.toolbarGroups = [
+       { 'include': [ 'undo', 'redo' ] },
+       { 'include': [ 'bold', 'italic', 'link', 'clear' ] },
+       { 'include': [ 'number', 'bullet', 'outdent', 'indent' ] },
+       { 'include': '*', 'exclude': [ { 'group': 'format' }, 'reference', 
'referenceList', 'mediaEdit', 'mediaInsert', 'transclusion' ] }
+];
+
+ve.init.mw.MobileViewTarget.static.surfaceCommands = [
+       'undo', 'redo', 'bold', 'italic', 'link', 'clear'
+];
+
+/* Methods */
+
+/**
+ * Switch to edit mode.
+ *
+ * @method
+ */
+ve.init.mw.MobileViewTarget.prototype.activate = function ( callback ) {
+       this.activating = true;
+       this.postActivation = callback;
+       this.load();
+};
+
+/**
+ * Handle successful DOM load event.
+ *
+ * @method
+ * @param {HTMLDocument} doc Parsed DOM from server
+ */
+ve.init.mw.MobileViewTarget.prototype.onLoad = function ( doc ) {
+       if ( this.activating ) {
+               ve.track( 'Edit', { action: 'page-edit-impression' } );
+               this.edited = false;
+               this.doc = doc;
+               this.setUpSurface( doc, ve.bind( function () {
+                       this.activating = false;
+                       this.postActivation();
+                       // FIXME: target.$.append( target.surface.$ );
+                       // FIXME: Append surface to MobileFrontEnd overlay.
+                       $( '.mw-mf-overlay' )
+                               .append( this.surface.$ );
+                       // After surface is setup
+                       this.setUpToolbar();
+                       // Init rangy
+                       window.rangy.init();
+
+
+               }, this ) );
+       }
+};
+
+ve.init.mw.MobileViewTarget.prototype.setUpSurface = function ( doc, callback 
) {
+       var target = this;
+       setTimeout( function() {
+               // Build linmod
+               var store = new ve.dm.IndexValueStore(),
+                       internalList = new ve.dm.InternalList(),
+                       data = ve.dm.converter.getDataFromDom( doc, store, 
internalList );
+                       setTimeout( function () {
+                               var dmDoc = new ve.dm.Document( data, 
undefined, internalList );
+                               target.surface = new ve.ui.Surface( dmDoc, 
target.surfaceOptions );
+                               target.surface.$.addClass( 
've-init-mw-viewPageTarget-surface' );
+                               setTimeout( function () {
+                                       // Initialize surface
+                                       target.surface.getContext().hide();
+                                       target.$document = 
target.surface.$.find( '.ve-ce-documentNode' );
+                                       // Now that the surface is attached to 
the document and ready,
+                                       // we may init the surface
+                                       target.surface.initialize();
+                                       setTimeout( callback );
+                               } );
+                       } );
+       } );
+
+};
+
+/**
+ * Show the toolbar.
+ *
+ * @method
+ */
+ve.init.mw.MobileViewTarget.prototype.setUpToolbar = function () {
+       this.toolbar = new ve.ui.TargetToolbar( this, this.surface, { 'shadow': 
true, 'actions': true } );
+       this.toolbar.setup( this.constructor.static.toolbarGroups );
+       this.surface.addCommands( this.constructor.static.surfaceCommands );
+       this.toolbar.$
+               .addClass( 've-init-mw-viewPageTarget-toolbar' )
+               .insertBefore( this.surface.$ );
+       this.toolbar.$bar.show( 'fast', ve.bind( function () {
+               // Check the surface wasn't torn down while the toolbar was 
animating
+               if ( this.surface ) {
+                       this.toolbar.initialize();
+                       this.surface.getContext().update();
+               }
+       }, this ) );
+};
+
+/**
+ * Store the section for which the edit link has been triggered.
+ *
+ * @method
+ * @param {integer} section Section number
+ */
+ve.init.mw.MobileViewTarget.prototype.setSection = function ( section ) {
+       this.section = section;
+};
\ No newline at end of file
diff --git a/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js 
b/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
index 13c1602..ce7f976 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
@@ -170,7 +170,7 @@
 
                this.saveScrollPosition();
 
-               this.load();
+               this.load( [ 'site', 'user' ] );
        }
 };
 
diff --git a/modules/ve-mw/init/ve.init.mw.Target.js 
b/modules/ve-mw/init/ve.init.mw.Target.js
index fc45845..65f9900 100644
--- a/modules/ve-mw/init/ve.init.mw.Target.js
+++ b/modules/ve-mw/init/ve.init.mw.Target.js
@@ -490,7 +490,7 @@
  * @method
  * @returns {boolean} Loading has been started
 */
-ve.init.mw.Target.prototype.load = function () {
+ve.init.mw.Target.prototype.load = function ( additionalModules ) {
        var data, start;
        // Prevent duplicate requests
        if ( this.loading ) {
@@ -499,7 +499,7 @@
        // Start loading the module immediately
        mw.loader.using(
                // Wait for site and user JS before running plugins
-               this.modules.concat( [ 'site', 'user' ] ),
+               this.modules.concat( additionalModules || [] ),
                ve.bind( ve.init.mw.Target.onModulesReady, this )
        );
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I786b63ab57518fc6af7761501259ed66592f70e3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Robmoen <rm...@wikimedia.org>

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

Reply via email to