From 3332bebe4da6dfa0fe3e4b2abddc84b1cc62f8f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 19 Feb 2016 23:38:52 +0100 Subject: Initial commit --- sources/plugins/liststyle/dialogs/liststyle.js | 189 +++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 sources/plugins/liststyle/dialogs/liststyle.js (limited to 'sources/plugins/liststyle/dialogs') diff --git a/sources/plugins/liststyle/dialogs/liststyle.js b/sources/plugins/liststyle/dialogs/liststyle.js new file mode 100644 index 0000000..c9f3430 --- /dev/null +++ b/sources/plugins/liststyle/dialogs/liststyle.js @@ -0,0 +1,189 @@ +/** + * @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' ); + } ); +} )(); -- cgit v1.2.3