0
Fork 0
mirror of https://github.com/fastmail/Squire.git synced 2025-01-03 05:00:13 -05:00

Add setTextDirection method.

Allows setting RTL or LTR text direction on a block level basis.
This commit is contained in:
Neil Jenkins 2012-07-24 15:59:36 +10:00
parent 630a7c4e4f
commit b87a9c26fe
3 changed files with 47 additions and 6 deletions

View file

@ -302,6 +302,18 @@ Sets the text alignment in all blocks at least partially contained by the select
Returns self.
### setTextDirection ###
Sets the text direction in all blocks at least partially contained by the selection.
#### Parameters ####
* **direction**: The text direction. Can be 'ltr' or 'rtl'.
#### Returns ####
Returns self.
### forEachBlock ###
Executes a function on each block in the current selection, or until the function returns a truthy value.

File diff suppressed because one or more lines are too long

View file

@ -833,7 +833,10 @@
tag = node.nodeName;
if ( node.isBlock() ) {
if ( tag !== 'LI' ) {
replacement = createElement( 'LI', [
replacement = createElement( 'LI', {
'class': node.dir === 'rtl' ? 'dir-rtl' : '',
dir: node.dir
}, [
node.empty()
]);
if ( node.parentNode.nodeName === type ) {
@ -889,7 +892,10 @@
while ( l-- ) {
child = children[l];
if ( child.nodeName === 'LI' ) {
frag.replaceChild( createElement( 'DIV', [
frag.replaceChild( createElement( 'DIV', {
'class': child.dir === 'rtl' ? 'dir-rtl' : '',
dir: child.dir
}, [
child.empty()
]), child );
}
@ -921,6 +927,8 @@
// Make sure the new node is the correct type.
if ( nodeAfterSplit.nodeName !== splitTag ) {
block = createElement( splitTag );
block.className = nodeAfterSplit.dir === 'rtl' ? 'dir-rtl' : '';
block.dir = nodeAfterSplit.dir;
block.replaces( nodeAfterSplit )
.appendChild( nodeAfterSplit.empty() );
nodeAfterSplit = block;
@ -1833,10 +1841,31 @@
return this;
},
setTextAlignment: function ( dir ) {
setTextAlignment: function ( alignment ) {
forEachBlock( function ( block ) {
block.className = 'align-' + dir;
block.style.textAlign = dir;
block.className = ( block.className
.split( /\s+/ )
.filter( function ( klass ) {
return !( /align/.test( klass ) );
})
.join( ' ' ) +
' align-' + alignment ).trim();
block.style.textAlign = alignment;
}, true );
focus();
return this;
},
setTextDirection: function ( direction ) {
forEachBlock( function ( block ) {
block.className = ( block.className
.split( /\s+/ )
.filter( function ( klass ) {
return !( /dir/.test( klass ) );
})
.join( ' ' ) +
' dir-' + direction ).trim();
block.dir = direction;
}, true );
focus();
return this;