[239] | 1 | /*
|
---|
| 2 | Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
|
---|
| 3 | For licensing, see LICENSE.html or http://ckeditor.com/license
|
---|
| 4 | */
|
---|
| 5 |
|
---|
| 6 | /**
|
---|
| 7 | * @fileOverview The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes.
|
---|
| 8 | *
|
---|
| 9 | */
|
---|
| 10 |
|
---|
| 11 | (function()
|
---|
| 12 | {
|
---|
| 13 | CKEDITOR.plugins.add( 'div',
|
---|
| 14 | {
|
---|
| 15 | requires : [ 'editingblock', 'domiterator', 'styles' ],
|
---|
| 16 |
|
---|
| 17 | init : function( editor )
|
---|
| 18 | {
|
---|
| 19 | var lang = editor.lang.div;
|
---|
| 20 |
|
---|
| 21 | editor.addCommand( 'creatediv', new CKEDITOR.dialogCommand( 'creatediv' ) );
|
---|
| 22 | editor.addCommand( 'editdiv', new CKEDITOR.dialogCommand( 'editdiv' ) );
|
---|
| 23 | editor.addCommand( 'removediv',
|
---|
| 24 | {
|
---|
| 25 | exec : function( editor )
|
---|
| 26 | {
|
---|
| 27 | var selection = editor.getSelection(),
|
---|
| 28 | ranges = selection && selection.getRanges(),
|
---|
| 29 | range,
|
---|
| 30 | bookmarks = selection.createBookmarks(),
|
---|
| 31 | walker,
|
---|
| 32 | toRemove = [];
|
---|
| 33 |
|
---|
| 34 | function findDiv( node )
|
---|
| 35 | {
|
---|
| 36 | var path = new CKEDITOR.dom.elementPath( node ),
|
---|
| 37 | blockLimit = path.blockLimit,
|
---|
| 38 | div = blockLimit.is( 'div' ) && blockLimit;
|
---|
| 39 |
|
---|
| 40 | if ( div && !div.data( 'cke-div-added' ) )
|
---|
| 41 | {
|
---|
| 42 | toRemove.push( div );
|
---|
| 43 | div.data( 'cke-div-added' );
|
---|
| 44 | }
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | for ( var i = 0 ; i < ranges.length ; i++ )
|
---|
| 48 | {
|
---|
| 49 | range = ranges[ i ];
|
---|
| 50 | if ( range.collapsed )
|
---|
| 51 | findDiv( selection.getStartElement() );
|
---|
| 52 | else
|
---|
| 53 | {
|
---|
| 54 | walker = new CKEDITOR.dom.walker( range );
|
---|
| 55 | walker.evaluator = findDiv;
|
---|
| 56 | walker.lastForward();
|
---|
| 57 | }
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | for ( i = 0 ; i < toRemove.length ; i++ )
|
---|
| 61 | toRemove[ i ].remove( true );
|
---|
| 62 |
|
---|
| 63 | selection.selectBookmarks( bookmarks );
|
---|
| 64 | }
|
---|
| 65 | } );
|
---|
| 66 |
|
---|
| 67 | editor.ui.addButton( 'CreateDiv',
|
---|
| 68 | {
|
---|
| 69 | label : lang.toolbar,
|
---|
| 70 | command :'creatediv'
|
---|
| 71 | } );
|
---|
| 72 |
|
---|
| 73 | if ( editor.addMenuItems )
|
---|
| 74 | {
|
---|
| 75 | editor.addMenuItems(
|
---|
| 76 | {
|
---|
| 77 | editdiv :
|
---|
| 78 | {
|
---|
| 79 | label : lang.edit,
|
---|
| 80 | command : 'editdiv',
|
---|
| 81 | group : 'div',
|
---|
| 82 | order : 1
|
---|
| 83 | },
|
---|
| 84 |
|
---|
| 85 | removediv:
|
---|
| 86 | {
|
---|
| 87 | label : lang.remove,
|
---|
| 88 | command : 'removediv',
|
---|
| 89 | group : 'div',
|
---|
| 90 | order : 5
|
---|
| 91 | }
|
---|
| 92 | } );
|
---|
| 93 |
|
---|
| 94 | if ( editor.contextMenu )
|
---|
| 95 | {
|
---|
| 96 | editor.contextMenu.addListener( function( element, selection )
|
---|
| 97 | {
|
---|
| 98 | if ( !element || element.isReadOnly() )
|
---|
| 99 | return null;
|
---|
| 100 |
|
---|
| 101 | var elementPath = new CKEDITOR.dom.elementPath( element ),
|
---|
| 102 | blockLimit = elementPath.blockLimit;
|
---|
| 103 |
|
---|
| 104 | if ( blockLimit && blockLimit.getAscendant( 'div', true ) )
|
---|
| 105 | {
|
---|
| 106 | return {
|
---|
| 107 | editdiv : CKEDITOR.TRISTATE_OFF,
|
---|
| 108 | removediv : CKEDITOR.TRISTATE_OFF
|
---|
| 109 | };
|
---|
| 110 | }
|
---|
| 111 |
|
---|
| 112 | return null;
|
---|
| 113 | } );
|
---|
| 114 | }
|
---|
| 115 | }
|
---|
| 116 |
|
---|
| 117 | CKEDITOR.dialog.add( 'creatediv', this.path + 'dialogs/div.js' );
|
---|
| 118 | CKEDITOR.dialog.add( 'editdiv', this.path + 'dialogs/div.js' );
|
---|
| 119 | }
|
---|
| 120 | } );
|
---|
| 121 | })();
|
---|