Mooeypoo has uploaded a new change for review. https://gerrit.wikimedia.org/r/78670
Change subject: LanguageBlock Node ...................................................................... LanguageBlock Node This is the ce/dm definition for the LanguageBlockNode as part of the new LanguageBlockInspector. The inspector UI will come up next. This commit sets up the dm/ce to recognize language <div> blocks with some langu='xx' dir='yy' definition and visually marks them for the user. The LanguageBlock Node definition is set up as BranchNode so it can wrap a block of content that has other nodes in it. Change-Id: I0e7d3156085970ce3b0cca1f853d2ad7417bd712 --- M VisualEditor.php A modules/ve/ce/nodes/ve.ce.LanguageBlockNode.js M modules/ve/ce/styles/ve.ce.Node.css A modules/ve/dm/nodes/ve.dm.LanguageBlockNode.js 4 files changed, 119 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor refs/changes/70/78670/1 diff --git a/VisualEditor.php b/VisualEditor.php index b067472..e5007a7 100644 --- a/VisualEditor.php +++ b/VisualEditor.php @@ -732,6 +732,8 @@ 've/ui/widgets/ve.ui.LanguageInputWidget.js', 've/ui/tools/buttons/ve.ui.CodeButtonTool.js', 've/ui/tools/buttons/ve.ui.StrikethroughButtonTool.js', + 've/ce/nodes/ve.ce.LanguageBlockNode.js', + 've/dm/nodes/ve.dm.LanguageBlockNode.js', ), 'dependencies' => array( 'ext.visualEditor.core', diff --git a/modules/ve/ce/nodes/ve.ce.LanguageBlockNode.js b/modules/ve/ce/nodes/ve.ce.LanguageBlockNode.js new file mode 100644 index 0000000..58bea53 --- /dev/null +++ b/modules/ve/ce/nodes/ve.ce.LanguageBlockNode.js @@ -0,0 +1,55 @@ +/*! + * VisualEditor ContentEditable ListNode class. + * + * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ + +/** + * ContentEditable language block node. + * + * @class + * @extends ve.ce.BranchNode + * @constructor + * @param {ve.dm.ListNode} model Model to observe + * @param {Object} [config] Config options + */ +ve.ce.LanguageBlockNode = function VeCeLanguageBlockNode( model, config ) { + // Parent constructor + ve.ce.BranchNode.call( this, model, config ); + + // Events + this.model.connect( this, { 'update': 'onUpdate' } ); + + // DOM Changes + this.$.addClass( 've-ce-languageBlockNode' ); +}; + +/* Inheritance */ + +ve.inheritClass( ve.ce.LanguageBlockNode, ve.ce.BranchNode ); + +/* Static Properties */ + +ve.ce.LanguageBlockNode.static.name = 'languageblock'; + +ve.ce.LanguageBlockNode.static.tagName = 'div'; + +ve.ce.LanguageBlockNode.static.canBeSplit = true; + +/* Methods */ + +/** + * Handle model update events. + * + * If the style changed since last update the DOM wrapper will be replaced with an appropriate one. + * + * @method + */ +ve.ce.LanguageBlockNode.prototype.onUpdate = function () { +// this.updateTagName(); +}; + +/* Registration */ + +ve.ce.nodeFactory.register( ve.ce.LanguageBlockNode ); diff --git a/modules/ve/ce/styles/ve.ce.Node.css b/modules/ve/ce/styles/ve.ce.Node.css index 6458fb6..b20e57a 100644 --- a/modules/ve/ce/styles/ve.ce.Node.css +++ b/modules/ve/ce/styles/ve.ce.Node.css @@ -192,3 +192,10 @@ border-bottom: dashed #ccc 1px; background-color: #ebf3f5; } + +/* Language Block Div Node */ +.ve-ce-languageBlockNode { + border: dashed #ccc 1px; + background-color: #ebf3f5; +} + diff --git a/modules/ve/dm/nodes/ve.dm.LanguageBlockNode.js b/modules/ve/dm/nodes/ve.dm.LanguageBlockNode.js new file mode 100644 index 0000000..316220b --- /dev/null +++ b/modules/ve/dm/nodes/ve.dm.LanguageBlockNode.js @@ -0,0 +1,55 @@ +/*! + * VisualEditor DataModel LanguageBlockNode class. + * + * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ + +/** + * DataModel language block node. + * + * @class + * @extends ve.dm.BranchNode + * @constructor + * @param {ve.dm.BranchNode[]} [children] Child nodes to attach + * @param {Object} [element] Reference to element in linear model + */ +ve.dm.LanguageBlockNode = function VeDmLanguageBlockNode( children, element ) { + // Parent constructor + ve.dm.BranchNode.call( this, children, element ); +}; + +/* Inheritance */ + +ve.inheritClass( ve.dm.LanguageBlockNode, ve.dm.BranchNode ); + +/* Static Properties */ + +ve.dm.LanguageBlockNode.static.name = 'languageblock'; + +ve.dm.LanguageBlockNode.static.matchTagNames = [ 'div' ]; + +// TODO: +// change the default from 'en'/'ltr' to the page langauge/dir +// from the surface.getDir() +ve.dm.LanguageBlockNode.static.toDataElement = function ( domElements ) { + var $node = $( domElements[0] ); + return { + 'type': 'languageblock', + 'attributes': { + 'lang': $node.attr( 'lang' ) || 'en', + 'dir': $node.css( 'direction' ) || 'ltr' + } + }; +}; + +ve.dm.LanguageBlockNode.static.toDomElements = function ( dataElement, doc ) { + var domElement = doc.createElement( 'div' ); + ve.setDomAttributes( domElement, dataElement.attributes, [ 'lang', 'dir' ] ); + return [ domElement ]; +}; + + +/* Registration */ + +ve.dm.modelRegistry.register( ve.dm.LanguageBlockNode ); -- To view, visit https://gerrit.wikimedia.org/r/78670 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0e7d3156085970ce3b0cca1f853d2ad7417bd712 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/VisualEditor Gerrit-Branch: master Gerrit-Owner: Mooeypoo <mor...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits