- function indentCommand( editor, name )\r
- {\r
- this.name = name;\r
- this.useIndentClasses = editor.config.indentClasses && editor.config.indentClasses.length > 0;\r
- if ( this.useIndentClasses )\r
- {\r
- this.classNameRegex = new RegExp( '(?:^|\\s+)(' + editor.config.indentClasses.join( '|' ) + ')(?=$|\\s)' );\r
- this.indentClassMap = {};\r
- for ( var i = 0 ; i < editor.config.indentClasses.length ; i++ )\r
- this.indentClassMap[ editor.config.indentClasses[i] ] = i + 1;\r
- }\r
- else\r
- this.indentCssProperty = editor.config.contentsLangDirection == 'ltr' ? 'margin-left' : 'margin-right';\r
- this.startDisabled = name == 'outdent';\r
- }\r
+ if ( self.useIndentClasses )\r
+ {\r
+ // Transform current class name to indent step index.\r
+ var indentClass = element.$.className.match( self.classNameRegex ),\r
+ indentStep = 0;\r
+ if ( indentClass )\r
+ {\r
+ indentClass = indentClass[1];\r
+ indentStep = self.indentClassMap[ indentClass ];\r
+ }\r
+\r
+ // Operate on indent step index, transform indent step index back to class\r
+ // name.\r
+ if ( self.name == 'outdent' )\r
+ indentStep--;\r
+ else\r
+ indentStep++;\r
+\r
+ if ( indentStep < 0 )\r
+ return false;\r
+\r
+ indentStep = Math.min( indentStep, editor.config.indentClasses.length );\r
+ indentStep = Math.max( indentStep, 0 );\r
+ var className = CKEDITOR.tools.ltrim( element.$.className.replace( self.classNameRegex, '' ) );\r
+ if ( indentStep < 1 )\r
+ element.$.className = className;\r
+ else\r
+ element.addClass( editor.config.indentClasses[ indentStep - 1 ] );\r
+ }\r
+ else\r
+ {\r
+ var indentCssProperty = getIndentCssProperty( element );\r
+ var currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 );\r
+ if ( isNaN( currentOffset ) )\r
+ currentOffset = 0;\r
+ currentOffset += ( self.name == 'indent' ? 1 : -1 ) * editor.config.indentOffset;\r
+\r
+ if ( currentOffset < 0 )\r
+ return false;\r
+\r
+ currentOffset = Math.max( currentOffset, 0 );\r
+ currentOffset = Math.ceil( currentOffset / editor.config.indentOffset ) * editor.config.indentOffset;\r
+ element.setStyle( indentCssProperty, currentOffset ? currentOffset + editor.config.indentUnit : '' );\r
+ if ( element.getAttribute( 'style' ) === '' )\r
+ element.removeAttribute( 'style' );\r
+ }\r