Esanders has uploaded a new change for review.

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

Change subject: Set content directionality on the model
......................................................................

Set content directionality on the model

Currently we set it on the view then poll it from there using .css
which is evil. We can set this information on the model then have
the view apply the appropriate CSS.

Change-Id: I2065e17020dc89964b1040ddc4f8d11f9b742d24
---
M modules/ve/ce/ve.ce.Document.js
M modules/ve/ce/ve.ce.Surface.js
M modules/ve/dm/ve.dm.Document.js
M modules/ve/ui/inspectors/ve.ui.LanguageInspector.js
M modules/ve/ui/ve.ui.DesktopContext.js
5 files changed, 43 insertions(+), 31 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/87/123887/1

diff --git a/modules/ve/ce/ve.ce.Document.js b/modules/ve/ce/ve.ce.Document.js
index 0df7a8d..a548b50 100644
--- a/modules/ve/ce/ve.ce.Document.js
+++ b/modules/ve/ce/ve.ce.Document.js
@@ -21,6 +21,11 @@
                model.getDocumentNode(), surface, { '$': surface.$ }
        ) );
 
+       this.getDocumentNode().$element.attr( {
+               'lang': model.getLang(),
+               'dir': model.getDir()
+       } );
+
        // Properties
        this.model = model;
 };
diff --git a/modules/ve/ce/ve.ce.Surface.js b/modules/ve/ce/ve.ce.Surface.js
index 0d59413..24e11d8 100644
--- a/modules/ve/ce/ve.ce.Surface.js
+++ b/modules/ve/ce/ve.ce.Surface.js
@@ -2238,14 +2238,6 @@
 };
 
 /**
- * Surface 'dir' property (Content-Level Direction)
- * @returns {string} 'ltr' or 'rtl'
- */
-ve.ce.Surface.prototype.getDir = function () {
-       return this.$element.css( 'direction' );
-};
-
-/**
  * Change the model only, not the CE surface
  *
  * This avoids event storms when the CE surface is already correct
diff --git a/modules/ve/dm/ve.dm.Document.js b/modules/ve/dm/ve.dm.Document.js
index c1a949b..bfcea48 100644
--- a/modules/ve/dm/ve.dm.Document.js
+++ b/modules/ve/dm/ve.dm.Document.js
@@ -35,6 +35,9 @@
                doc = parentDocument || this,
                root = this.documentNode;
 
+       this.lang = null;
+       this.dir = 'ltr';
+
        this.documentNode.setRoot( root );
        this.documentNode.setDocument( doc );
        this.internalList = internalList ? internalList.clone( this ) : new 
ve.dm.InternalList( this );
@@ -1034,3 +1037,29 @@
 ve.dm.Document.prototype.getCompleteHistorySince = function ( pointer ) {
        return this.completeHistory.slice( pointer );
 };
+
+/**
+ * Set content language and directionality
+ * @param {string} lang Language code
+ * @param {string} dir Directionality (ltr/rtl)
+ */
+ve.dm.Document.prototype.setLangDir = function ( lang, dir ) {
+       this.lang = lang;
+       this.dir = dir;
+};
+
+/**
+ * Get the content language
+ * @returns {string} Language code
+ */
+ve.dm.Document.prototype.getLang = function () {
+       return this.lang;
+};
+
+/**
+ * Get the content directionality
+ * @returns {string} Directionality (ltr/rtl)
+ */
+ve.dm.Document.prototype.getDir = function () {
+       return this.dir;
+};
diff --git a/modules/ve/ui/inspectors/ve.ui.LanguageInspector.js 
b/modules/ve/ui/inspectors/ve.ui.LanguageInspector.js
index f446611..595d38c 100644
--- a/modules/ve/ui/inspectors/ve.ui.LanguageInspector.js
+++ b/modules/ve/ui/inspectors/ve.ui.LanguageInspector.js
@@ -50,25 +50,13 @@
  * @inheritdoc
  */
 ve.ui.LanguageInspector.prototype.getAnnotationFromFragment = function ( 
fragment ) {
-       var offset = fragment.getRange( true ).start,
-               node = this.surface.getView().documentView.getNodeFromOffset( 
offset ),
-               attr = {};
-
-       // Set initial parameters according to parent of the DOM object.
-       // This will be called only if the annotation doesn't already exist, 
setting the default value
-       // as the current language/dir of the selected text.
-       if ( node ) {
-               attr.lang = node.$element.closest( '[lang]' ).attr( 'lang' );
-               attr.dir = node.$element.css( 'direction' );
-       }
-
-       if ( !attr.lang ) {
-               // This means there was no lang/dir defined anywhere. Get the 
default en/ltr:
-               attr.lang = 'en';
-               attr.dir = 'ltr';
-       }
-
-       return new ve.dm.LanguageAnnotation( { 'type': 'meta/language', 
'attributes': attr } );
+       return new ve.dm.LanguageAnnotation( {
+               'type': 'meta/language',
+               'attributes': {
+                       'lang': fragment.getDocument().getLang(),
+                       'dir': fragment.getDocument().getDir()
+               }
+       } );
 };
 
 /**
@@ -79,9 +67,7 @@
        ve.ui.AnnotationInspector.prototype.initialize.call( this );
 
        // Properties
-       this.languageInput = new this.constructor.static.languageInputWidget( {
-               '$': this.$, '$overlay': this.surface.$localOverlay
-       } );
+       this.languageInput = new this.constructor.static.languageInputWidget( { 
'$': this.$ } );
 
        // Initialization
        this.$form.append( this.languageInput.$element );
diff --git a/modules/ve/ui/ve.ui.DesktopContext.js 
b/modules/ve/ui/ve.ui.DesktopContext.js
index 1a0cbf8..209da78 100644
--- a/modules/ve/ui/ve.ui.DesktopContext.js
+++ b/modules/ve/ui/ve.ui.DesktopContext.js
@@ -311,7 +311,7 @@
                inspector = this.inspectors.getCurrentWindow(),
                focusedNode = surface.getFocusedNode(),
                surfaceOffset = surface.$element.offset(),
-               rtl = this.surface.view.getDir() === 'rtl';
+               rtl = this.surface.getModel().getDocument().getDir() === 'rtl';
 
        $container = inspector ? this.inspectors.$element : this.$menu;
        if ( focusedNode ) {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2065e17020dc89964b1040ddc4f8d11f9b742d24
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>

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

Reply via email to