summaryrefslogtreecommitdiff
path: root/addons/website/static/lib/ckeditor/plugins/indentblock/plugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website/static/lib/ckeditor/plugins/indentblock/plugin.js')
-rw-r--r--addons/website/static/lib/ckeditor/plugins/indentblock/plugin.js307
1 files changed, 0 insertions, 307 deletions
diff --git a/addons/website/static/lib/ckeditor/plugins/indentblock/plugin.js b/addons/website/static/lib/ckeditor/plugins/indentblock/plugin.js
deleted file mode 100644
index 37130e6e334..00000000000
--- a/addons/website/static/lib/ckeditor/plugins/indentblock/plugin.js
+++ /dev/null
@@ -1,307 +0,0 @@
-/**
- * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
-
-/**
- * @fileOverview Handles the indentation of block elements.
- */
-
-(function() {
- 'use strict';
-
- var $listItem = CKEDITOR.dtd.$listItem,
- $list = CKEDITOR.dtd.$list,
- TRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED,
- TRISTATE_OFF = CKEDITOR.TRISTATE_OFF;
-
- CKEDITOR.plugins.add( 'indentblock', {
- requires: 'indent',
- init: function( editor ) {
- var globalHelpers = CKEDITOR.plugins.indent,
- classes = editor.config.indentClasses;
-
- // Register commands.
- globalHelpers.registerCommands( editor, {
- indentblock: new commandDefinition( editor, 'indentblock', true ),
- outdentblock: new commandDefinition( editor, 'outdentblock' )
- } );
-
- function commandDefinition( editor, name ) {
- globalHelpers.specificDefinition.apply( this, arguments );
-
- this.allowedContent = {
- 'div h1 h2 h3 h4 h5 h6 ol p pre ul': {
- // Do not add elements, but only text-align style if element is validated by other rule.
- propertiesOnly: true,
- styles: !classes ? 'margin-left,margin-right' : null,
- classes: classes || null
- }
- };
-
- if ( this.enterBr )
- this.allowedContent.div = true;
-
- this.requiredContent = ( this.enterBr ? 'div' : 'p' ) +
- ( classes ?
- '(' + classes.join( ',' ) + ')'
- :
- '{margin-left}' );
-
- this.jobs = {
- '20': {
- refresh: function( editor, path ) {
- var firstBlock = path.block || path.blockLimit;
-
- // Switch context from list item to list
- // because indentblock can indent entire list
- // but not a single list element.
-
- if ( firstBlock.is( $listItem ) )
- firstBlock = firstBlock.getParent();
-
- // If firstBlock isn't list item, but still there's
- // some ascendant (i.e. <ul>), then this is not
- // a job for indentblock, e.g.:
- //
- // <ul>
- // <li><p>foo</p></li>
- // </ul>
-
- else if ( firstBlock.getAscendant( $listItem ) )
- return TRISTATE_DISABLED;
-
- // [-] Context in the path or ENTER_BR
- //
- // Don't try to indent if the element is out of
- // this plugin's scope. This assertion is omitted
- // if ENTER_BR is in use since there may be no block
- // in the path.
-
- if ( !this.enterBr && !this.getContext( path ) )
- return TRISTATE_DISABLED;
-
- else if ( classes ) {
-
- // [+] Context in the path or ENTER_BR
- // [+] IndentClasses
- //
- // If there are indentation classes, check if reached
- // the highest level of indentation. If so, disable
- // the command.
-
- if ( indentClassLeft.call( this, firstBlock, classes ) )
- return TRISTATE_OFF;
- else
- return TRISTATE_DISABLED;
- } else {
-
- // [+] Context in the path or ENTER_BR
- // [-] IndentClasses
- // [+] Indenting
- //
- // No indent-level limitations due to indent classes.
- // Indent-like command can always be executed.
-
- if ( this.isIndent )
- return TRISTATE_OFF;
-
- // [+] Context in the path or ENTER_BR
- // [-] IndentClasses
- // [-] Indenting
- // [-] Block in the path
- //
- // No block in path. There's no element to apply indentation
- // so disable the command.
-
- else if ( !firstBlock )
- return TRISTATE_DISABLED;
-
- // [+] Context in the path or ENTER_BR
- // [-] IndentClasses
- // [-] Indenting
- // [+] Block in path.
- //
- // Not using indentClasses but there is firstBlock.
- // We can calculate current indentation level and
- // try to increase/decrease it.
-
- else {
- return CKEDITOR[
- ( getIndent( firstBlock ) || 0 ) <= 0 ?
- 'TRISTATE_DISABLED'
- :
- 'TRISTATE_OFF' ];
- }
- }
- },
-
- exec: function( editor ) {
- var selection = editor.getSelection(),
- range = selection && selection.getRanges( 1 )[ 0 ],
- nearestListBlock;
-
- // If there's some list in the path, then it will be
- // a full-list indent by increasing or decreasing margin property.
- if ( ( nearestListBlock = editor.elementPath().contains( $list ) ) )
- indentElement.call( this, nearestListBlock, classes );
-
- // If no list in the path, use iterator to indent all the possible
- // paragraphs in the range, creating them if necessary.
- else {
- var iterator = range.createIterator(),
- enterMode = editor.config.enterMode,
- block;
-
- iterator.enforceRealBlocks = true;
- iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
-
- while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) )
- indentElement.call( this, block, classes );
- }
-
- return true;
- }
- }
- };
- }
-
- CKEDITOR.tools.extend( commandDefinition.prototype, globalHelpers.specificDefinition.prototype, {
- // Elements that, if in an elementpath, will be handled by this
- // command. They restrict the scope of the plugin.
- context: { div: 1, dl: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, ul: 1, ol: 1, p: 1, pre: 1, table: 1 },
-
- // A regex built on config#indentClasses to detect whether an
- // element has some indentClass or not.
- classNameRegex: classes ?
- new RegExp( '(?:^|\\s+)(' + classes.join( '|' ) + ')(?=$|\\s)' )
- :
- null
- } );
- }
- } );
-
- // Generic indentation procedure for indentation of any element
- // either with margin property or config#indentClass.
- function indentElement( element, classes, dir ) {
- if ( element.getCustomData( 'indent_processed' ) )
- return;
-
- var editor = this.editor,
- isIndent = this.isIndent;
-
- if ( classes ) {
- // Transform current class f to indent step index.
- var indentClass = element.$.className.match( this.classNameRegex ),
- indentStep = 0;
-
- if ( indentClass ) {
- indentClass = indentClass[ 1 ];
- indentStep = CKEDITOR.tools.indexOf( classes, indentClass ) + 1;
- }
-
- // Operate on indent step index, transform indent step index
- // back to class name.
- if ( ( indentStep += isIndent ? 1 : -1 ) < 0 )
- return;
-
- indentStep = Math.min( indentStep, classes.length );
- indentStep = Math.max( indentStep, 0 );
- element.$.className = CKEDITOR.tools.ltrim( element.$.className.replace( this.classNameRegex, '' ) );
-
- if ( indentStep > 0 )
- element.addClass( classes[ indentStep - 1 ] );
- } else {
- var indentCssProperty = getIndentCss( element, dir ),
- currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 ),
- indentOffset = editor.config.indentOffset || 40;
-
- if ( isNaN( currentOffset ) )
- currentOffset = 0;
-
- currentOffset += ( isIndent ? 1 : -1 ) * indentOffset;
-
- if ( currentOffset < 0 )
- return;
-
- currentOffset = Math.max( currentOffset, 0 );
- currentOffset = Math.ceil( currentOffset / indentOffset ) * indentOffset;
-
- element.setStyle( indentCssProperty, currentOffset ?
- currentOffset + ( editor.config.indentUnit || 'px' )
- :
- '' );
-
- if ( element.getAttribute( 'style' ) === '' )
- element.removeAttribute( 'style' );
- }
-
- CKEDITOR.dom.element.setMarker( this.database, element, 'indent_processed', 1 );
-
- return;
- }
-
- // Method that checks if current indentation level for an element
- // reached the limit determined by config#indentClasses.
- function indentClassLeft( node, classes ) {
- var indentClass = node.$.className.match( this.classNameRegex ),
- isIndent = this.isIndent;
-
- // If node has one of the indentClasses:
- // * If it holds the topmost indentClass, then
- // no more classes have left.
- // * If it holds any other indentClass, it can use the next one
- // or the previous one.
- // * Outdent is always possible. We can remove indentClass.
- if ( indentClass )
- return isIndent ? indentClass[ 1 ] != classes.slice( -1 ) : true;
-
- // If node has no class which belongs to indentClasses,
- // then it is at 0-level. It can be indented but not outdented.
- else
- return isIndent;
- }
-
- // Determines indent CSS property for an element according to
- // what is the direction of such element. It can be either `margin-left`
- // or `margin-right`.
- function getIndentCss( element, dir ) {
- return ( dir || element.getComputedStyle( 'direction' ) ) == 'ltr' ? 'margin-left' : 'margin-right';
- }
-
- // Return the numerical indent value of margin-left|right of an element,
- // considering element's direction. If element has no margin specified,
- // NaN is returned.
- function getIndent( element ) {
- return parseInt( element.getStyle( getIndentCss( element ) ), 10 );
- }
-})();
-
-/**
- * A list of classes to use for indenting the contents. If set to `null`, no classes will be used
- * and instead the {@link #indentUnit} and {@link #indentOffset} properties will be used.
- *
- * // Use the 'Indent1', 'Indent2', 'Indent3' classes.
- * config.indentClasses = ['Indent1', 'Indent2', 'Indent3'];
- *
- * @cfg {Array} [indentClasses=null]
- * @member CKEDITOR.config
- */
-
-/**
- * The size in {@link CKEDITOR.config#indentUnit indentation units} of each indentation step.
- *
- * config.indentOffset = 4;
- *
- * @cfg {Number} [indentOffset=40]
- * @member CKEDITOR.config
- */
-
-/**
- * The unit used for {@link CKEDITOR.config#indentOffset indentation offset}.
- *
- * config.indentUnit = 'em';
- *
- * @cfg {String} [indentUnit='px']
- * @member CKEDITOR.config
- */ \ No newline at end of file