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