/** * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { function getListElement( editor, listTag ) { var range; try { range = editor.getSelection().getRanges()[ 0 ]; } catch ( e ) { return null; } range.shrink( CKEDITOR.SHRINK_TEXT ); return editor.elementPath( range.getCommonAncestor() ).contains( listTag, 1 ); } var listItem = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' ); }; var mapListStyle = { 'a': 'lower-alpha', 'A': 'upper-alpha', 'i': 'lower-roman', 'I': 'upper-roman', '1': 'decimal', 'disc': 'disc', 'circle': 'circle', 'square': 'square' }; function listStyle( editor, startupPage ) { var lang = editor.lang.liststyle; if ( startupPage == 'bulletedListStyle' ) { return { title: lang.bulletedTitle, minWidth: 300, minHeight: 50, contents: [ { id: 'info', accessKey: 'I', elements: [ { type: 'select', label: lang.type, id: 'type', align: 'center', style: 'width:150px', items: [ [ lang.notset, '' ], [ lang.circle, 'circle' ], [ lang.disc, 'disc' ], [ lang.square, 'square' ] ], setup: function( element ) { var value = element.getStyle( 'list-style-type' ) || mapListStyle[ element.getAttribute( 'type' ) ] || element.getAttribute( 'type' ) || ''; this.setValue( value ); }, commit: function( element ) { var value = this.getValue(); if ( value ) element.setStyle( 'list-style-type', value ); else element.removeStyle( 'list-style-type' ); } } ] } ], onShow: function() { var editor = this.getParentEditor(), element = getListElement( editor, 'ul' ); element && this.setupContent( element ); }, onOk: function() { var editor = this.getParentEditor(), element = getListElement( editor, 'ul' ); element && this.commitContent( element ); } }; } else if ( startupPage == 'numberedListStyle' ) { var listStyleOptions = [ [ lang.notset, '' ], [ lang.lowerRoman, 'lower-roman' ], [ lang.upperRoman, 'upper-roman' ], [ lang.lowerAlpha, 'lower-alpha' ], [ lang.upperAlpha, 'upper-alpha' ], [ lang.decimal, 'decimal' ] ]; if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 7 ) { listStyleOptions.concat( [ [ lang.armenian, 'armenian' ], [ lang.decimalLeadingZero, 'decimal-leading-zero' ], [ lang.georgian, 'georgian' ], [ lang.lowerGreek, 'lower-greek' ] ] ); } return { title: lang.numberedTitle, minWidth: 300, minHeight: 50, contents: [ { id: 'info', accessKey: 'I', elements: [ { type: 'hbox', widths: [ '25%', '75%' ], children: [ { label: lang.start, type: 'text', id: 'start', validate: CKEDITOR.dialog.validate.integer( lang.validateStartNumber ), setup: function( element ) { // List item start number dominates. var value = element.getFirst( listItem ).getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1; value && this.setValue( value ); }, commit: function( element ) { var firstItem = element.getFirst( listItem ); var oldStart = firstItem.getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1; // Force start number on list root. element.getFirst( listItem ).removeAttribute( 'value' ); var val = parseInt( this.getValue(), 10 ); if ( isNaN( val ) ) element.removeAttribute( 'start' ); else element.setAttribute( 'start', val ); // Update consequent list item numbering. var nextItem = firstItem, conseq = oldStart, startNumber = isNaN( val ) ? 1 : val; while ( ( nextItem = nextItem.getNext( listItem ) ) && conseq++ ) { if ( nextItem.getAttribute( 'value' ) == conseq ) nextItem.setAttribute( 'value', startNumber + conseq - oldStart ); } } }, { type: 'select', label: lang.type, id: 'type', style: 'width: 100%;', items: listStyleOptions, setup: function( element ) { var value = element.getStyle( 'list-style-type' ) || mapListStyle[ element.getAttribute( 'type' ) ] || element.getAttribute( 'type' ) || ''; this.setValue( value ); }, commit: function( element ) { var value = this.getValue(); if ( value ) element.setStyle( 'list-style-type', value ); else element.removeStyle( 'list-style-type' ); } } ] } ] } ], onShow: function() { var editor = this.getParentEditor(), element = getListElement( editor, 'ol' ); element && this.setupContent( element ); }, onOk: function() { var editor = this.getParentEditor(), element = getListElement( editor, 'ol' ); element && this.commitContent( element ); } }; } } CKEDITOR.dialog.add( 'numberedListStyle', function( editor ) { return listStyle( editor, 'numberedListStyle' ); } ); CKEDITOR.dialog.add( 'bulletedListStyle', function( editor ) { return listStyle( editor, 'bulletedListStyle' ); } ); } )();