Surfaces should have parent document direction

Make sure all surface widgets have documents that are initialized
with the direction of the parent document, so the alignment is set up
correctly.

Bug: T71969
Change-Id: I6e5f003e18a9c5808d9a4b148eddf0d0f7e29e67
This commit is contained in:
Moriel Schottlender 2014-12-10 14:40:22 -05:00
parent 8f30eddee2
commit e0894b807f
5 changed files with 90 additions and 10 deletions

View file

@ -40,7 +40,8 @@ ve.dm.MWImageModel = function VeDmMWImageModel( config ) {
this.sizeType = null;
this.border = false;
this.borderable = false;
this.dir = 'ltr';
this.dir = null;
this.lang = null;
this.defaultDimensions = null;
this.imageSrc = '';
@ -154,10 +155,11 @@ ve.dm.MWImageModel.static.createImageNode = function ( attributes, imageType ) {
* Load from image data with scalable information.
*
* @param {Object} attrs Image node attributes
* @param {string} [dir=ltr] Document direction
* @param {string} [dir] Document direction
* @param {string} [lang] Document language
* @return {ve.dm.MWImageModel} Image model
*/
ve.dm.MWImageModel.static.newFromImageAttributes = function ( attrs, dir ) {
ve.dm.MWImageModel.static.newFromImageAttributes = function ( attrs, dir, lang ) {
var imgModel = new ve.dm.MWImageModel( {
resourceName: attrs.resource,
currentDimensions: {
@ -178,7 +180,8 @@ ve.dm.MWImageModel.static.newFromImageAttributes = function ( attrs, dir ) {
imgModel.toggleBorder( !!attrs.borderImage );
imgModel.setAltText( attrs.alt || '' );
imgModel.setDir( dir || 'ltr' );
imgModel.setDir( dir );
imgModel.setLang( lang );
imgModel.setType( attrs.type );
@ -749,7 +752,13 @@ ve.dm.MWImageModel.prototype.getCaptionDocument = function () {
{ type: '/paragraph' },
{ type: 'internalList' },
{ type: '/internalList' }
] );
],
/* htmlDocument */ null,
/* parentDocument */ null,
/* internalList */ null,
/* innerWhitespace */ null,
/* lang */ this.getLang(),
/* dir */ this.getDir() );
}
return this.captionDoc;
};
@ -997,6 +1006,24 @@ ve.dm.MWImageModel.prototype.setDir = function ( dir ) {
this.dir = dir;
};
/**
* Get the language of the image document. Specifically relevant
* for the caption document.
* @return {string} Document language
*/
ve.dm.MWImageModel.prototype.getLang = function () {
return this.lang;
};
/**
* Set the language of the image document. Specifically relevant
* for the caption document.
* @param {string} lang Document language
*/
ve.dm.MWImageModel.prototype.setLang = function ( lang ) {
this.lang = lang;
};
/**
* Get the image file source
* The image file source that points to the location of the

View file

@ -24,6 +24,8 @@ ve.dm.MWReferenceModel = function VeDmMWReferenceModel() {
this.group = '';
this.doc = null;
this.deferDoc = null;
this.dir = null;
this.lang = null;
};
/* Inheritance */
@ -48,6 +50,8 @@ ve.dm.MWReferenceModel.static.newFromReferenceNode = function ( node ) {
ref.setListGroup( attr.listGroup );
ref.setListIndex( attr.listIndex );
ref.setGroup( attr.refGroup );
ref.setDir( doc.getDir() );
ref.setLang( doc.getLang() );
ref.deferDoc = function () {
// cloneFromRange is very expensive, so lazy evaluate it
return doc.cloneFromRange( internalList.getItemNode( attr.listIndex ).getRange() );
@ -231,12 +235,50 @@ ve.dm.MWReferenceModel.prototype.getDocument = function () {
{ type: '/paragraph' },
{ type: 'internalList' },
{ type: '/internalList' }
] );
],
/* htmlDocument */ null,
/* parentDocument */ null,
/* internalList */ null,
/* innerWhitespace */ null,
/* lang */ this.getLang(),
/* dir */ this.getDir() );
}
}
return this.doc;
};
/**
* Set the directionality of the reference document
* @param {string} dir Document directionality
*/
ve.dm.MWReferenceModel.prototype.setDir = function ( dir ) {
this.dir = dir;
};
/**
* Get the directionality of the reference document
* @returns {string} Document directionality
*/
ve.dm.MWReferenceModel.prototype.getDir = function () {
return this.dir;
};
/**
* Set the language of the reference document
* @param {string} lang Document language
*/
ve.dm.MWReferenceModel.prototype.setLang = function ( lang ) {
this.lang = lang;
};
/**
* Get the language of the reference document
* @returns {string} Document language
*/
ve.dm.MWReferenceModel.prototype.getLang = function () {
return this.lang;
};
/**
* Set key of reference in list.
*

View file

@ -173,6 +173,8 @@ ve.ui.MWCitationDialog.prototype.getActionProcess = function ( action ) {
// Collapse returns a new fragment, so update this.fragment
this.fragment = this.getFragment().collapseToEnd();
this.referenceModel = new ve.dm.MWReferenceModel();
this.referenceModel.setDir( doc.getDir() );
this.referenceModel.setLang( doc.getLang() );
this.referenceModel.insertInternalItem( surfaceModel );
this.referenceModel.insertReferenceNode( this.getFragment() );
}

View file

@ -386,7 +386,8 @@ ve.ui.MWMediaDialog.prototype.onSearchSelect = function ( item ) {
align: 'default',
defaultSize: true
},
this.getFragment().getSurface().getDocument().getDir()
this.getFragment().getDocument().getDir(),
this.getFragment().getDocument().getLang()
);
this.attachImageModel();
} else {
@ -614,7 +615,8 @@ ve.ui.MWMediaDialog.prototype.getSetupProcess = function ( data ) {
// Create image model
this.imageModel = ve.dm.MWImageModel.static.newFromImageAttributes(
this.selectedNode.getAttributes(),
this.selectedNode.getDocument().getDir()
this.selectedNode.getDocument().getDir(),
this.selectedNode.getDocument().getLang()
);
this.attachImageModel();
@ -789,7 +791,7 @@ ve.ui.MWMediaDialog.prototype.attachImageModel = function () {
*/
ve.ui.MWMediaDialog.prototype.resetCaption = function () {
var captionDocument,
doc = this.getFragment().getSurface().getDocument();
doc = this.getFragment().getDocument();
if ( this.captionSurface ) {
// Reset the caption surface if it already exists
@ -824,7 +826,12 @@ ve.ui.MWMediaDialog.prototype.resetCaption = function () {
{ type: '/paragraph' },
{ type: 'internalList' },
{ type: '/internalList' }
] );
],
// The ve.dm.Document constructor expects
// ( data, htmlDocument, parentDocument, internalList, innerWhitespace, lang, dir )
// as parameters. We are only interested in setting up language, hence the
// multiple 'null' values.
null, null, null, null, doc.getLang(), doc.getDir() );
}
this.store = doc.getStore();

View file

@ -233,6 +233,8 @@ ve.ui.MWReferenceDialog.prototype.useReference = function ( ref ) {
} else {
// Create a new reference
this.referenceModel = new ve.dm.MWReferenceModel();
this.referenceModel.setDir( this.getFragment().getDocument().getDir() );
this.referenceModel.setLang( this.getFragment().getDocument().getLang() );
}
// Cleanup