Ticket #1376: 1376_4.patch
File 1376_4.patch, 21.8 KB (added by , 13 years ago) |
---|
-
_source/plugins/showblocks/plugin.js
89 89 90 90 var commandDefinition = 91 91 { 92 readOnly : 1, 92 93 preserveState : true, 93 94 editorFocus : false, 94 95 -
_samples/readonly.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <!-- 3 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. 4 For licensing, see LICENSE.html or http://ckeditor.com/license 5 --> 6 <html xmlns="http://www.w3.org/1999/xhtml"> 7 <head> 8 <title>Read-only — CKEditor Sample</title> 9 <meta content="text/html; charset=utf-8" http-equiv="content-type" /> 10 <!-- CKReleaser %REMOVE_LINE% 11 <script type="text/javascript" src="../ckeditor.js"></script> 12 CKReleaser %REMOVE_START% --> 13 <script type="text/javascript" src="../ckeditor_source.js"></script> 14 <!-- CKReleaser %REMOVE_END% --> 15 <script src="sample.js" type="text/javascript"></script> 16 <link href="sample.css" rel="stylesheet" type="text/css" /> 17 <script type="text/javascript"> 18 //<![CDATA[ 19 20 // The instanceReady event is fired, when an instance of CKEditor has finished 21 // its initialization. 22 CKEDITOR.on( 'instanceReady', function( ev ) 23 { 24 // Show the editor name and description in the browser status bar. 25 document.getElementById( 'eMessage' ).innerHTML = '<p>Instance <code>' + ev.editor.name + '<\/code> loaded.<\/p>'; 26 27 // Show this sample buttons. 28 document.getElementById( 'eButtons' ).style.display = 'block'; 29 }); 30 31 function toggleReadOnly( isReadOnly ) 32 { 33 // Get the editor instance that we want to interact with. 34 var oEditor = CKEDITOR.instances.editor1; 35 36 // Change the read-only state of editor. 37 // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setReadOnly 38 oEditor.setReadOnly( isReadOnly ); 39 alert( 'Editor is ' + ( isReadOnly ? 'now' : 'no longer' ) + " in read-only mode." ); 40 } 41 42 //]]> 43 </script> 44 45 </head> 46 <body> 47 <h1 class="samples"> 48 CKEditor Sample — Using CKEditor JavaScript API 49 </h1> 50 <div class="description"> 51 <p> 52 This sample shows how to use the 53 <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setReadOnly">set read-only</a> 54 API to put editor into an immutable state. 55 </p> 56 <p> 57 For details on how to create this setup check the source code of this sample page. 58 </p> 59 </div> 60 61 <!-- This <div> holds alert messages to be display in the sample page. --> 62 <div id="alerts"> 63 <noscript> 64 <p> 65 <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript 66 support, like yours, you should still see the contents (HTML data) and you should 67 be able to edit it normally, without a rich editor interface. 68 </p> 69 </noscript> 70 </div> 71 <form action="sample_posteddata.php" method="post"> 72 <textarea class="ckeditor" id="editor1" name="editor1" cols="100" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> 73 <div id="eMessage"> 74 </div> 75 <div id="eButtons" style="display: none"> 76 <input onclick="toggleReadOnly( 1 );" type="button" value="Turn on read-only" /> 77 <input onclick="toggleReadOnly();" type="button" value="Turn off read-only" /> 78 </div> 79 </form> 80 <div id="footer"> 81 <hr /> 82 <p> 83 CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> 84 </p> 85 <p id="copy"> 86 Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico 87 Knabben. All rights reserved. 88 </p> 89 </div> 90 </body> 91 </html> -
_source/plugins/about/plugin.js
11 11 var command = editor.addCommand( 'about', new CKEDITOR.dialogCommand( 'about' ) ); 12 12 command.modes = { wysiwyg:1, source:1 }; 13 13 command.canUndo = false; 14 command.readOnly = 1; 14 15 15 16 editor.ui.addButton( 'About', 16 17 { -
_source/plugins/save/plugin.js
12 12 var saveCmd = 13 13 { 14 14 modes : { wysiwyg:1, source:1 }, 15 readOnly : 1, 15 16 16 17 exec : function( editor ) 17 18 { -
_source/plugins/showborders/plugin.js
40 40 { 41 41 preserveState : true, 42 42 editorFocus : false, 43 readOnly: 1, 43 44 44 45 exec : function ( editor ) 45 46 { -
_source/plugins/basicstyles/plugin.js
17 17 18 18 editor.attachStyleStateChange( style, function( state ) 19 19 { 20 editor.getCommand( commandName ).setState( state );20 !editor.readOnly && editor.getCommand( commandName ).setState( state ); 21 21 }); 22 22 23 23 editor.addCommand( commandName, new CKEDITOR.styleCommand( style ) ); -
_source/plugins/editingblock/plugin.js
113 113 }, 0 ); 114 114 }); 115 115 116 editor.readOnly = !!editor.config.readOnly; 117 editor.on( 'mode', function() { this.readOnly && this.fire( 'readonly' ); }, null, null, Infinity ); 118 116 119 editor.on( 'destroy', function () 117 120 { 118 121 // -> currentMode.unload( holderElement ); 119 122 if ( this.mode ) 120 123 this._.modes[ this.mode ].unload( this.getThemeSpace( 'contents' ) ); 121 124 }); 125 122 126 } 123 127 }); 124 128 … … 151 155 * // Switch to "source" view. 152 156 * CKEDITOR.instances.editor1.setMode( 'source' ); 153 157 */ 154 CKEDITOR.editor.prototype.setMode = function( mode )158 CKEDITOR.editor.prototype.setMode = function( mode, forceReload ) 155 159 { 156 160 this.fire( 'beforeSetMode', { newMode : mode } ); 157 161 … … 162 166 // Unload the previous mode. 163 167 if ( this.mode ) 164 168 { 165 if ( mode == this.mode )169 if ( !forceReload && mode == this.mode ) 166 170 return; 167 171 168 172 this.fire( 'beforeModeUnload' ); … … 202 206 if ( mode ) 203 207 mode.focus(); 204 208 }; 209 210 /** 211 * Turn editor into read-only mode or restore it from read-only mode. 212 * @param enable {Boolean} 213 * @since 3.6 214 * <strong>Note:</strong> current editing block will be reloaded. 215 */ 216 CKEDITOR.editor.prototype.setReadOnly = function( enable ) 217 { 218 this.readOnly = !!enable; 219 220 // Reload current mode, then fire the event on editor. 221 this.on( 'mode', function( evt ) { evt.removeListener(); enable && this.fire( 'readonly' ); }, this, null, Infinity ); 222 this.setMode( this.mode || this.config.startupMode, 1 ); 223 } 224 205 225 })(); 206 226 207 227 /** … … 233 253 CKEDITOR.config.editingBlock = true; 234 254 235 255 /** 256 * Whether to start the editor in read-only mode. 257 * @name CKEDITOR.config.readOnly 258 * @see CKEDITOR.editor.setReadOnly 259 * @type Boolean 260 * @default false 261 * @since 3.6 262 * @example 263 * config.readOnly = true; 264 */ 265 266 /** 236 267 * Fired when a CKEDITOR instance is created, fully initialized and ready for interaction. 237 268 * @name CKEDITOR#instanceReady 238 269 * @event -
_source/plugins/justify/plugin.js
49 49 50 50 function onSelectionChange( evt ) 51 51 { 52 if ( evt.editor.readOnly ) 53 return; 54 52 55 var command = evt.editor.getCommand( this.name ); 53 56 command.state = getState.call( this, evt.editor, evt.data.path ); 54 57 command.fire( 'state' ); -
_source/core/dom/range.js
1870 1870 return 0; 1871 1871 } 1872 1872 // Range enclosed entirely in an editable element. 1873 else if ( node.is( ' body' )1873 else if ( node.is( 'html' ) 1874 1874 || node.getAttribute( 'contentEditable' ) == 'true' 1875 1875 && ( node.contains( anotherEnd ) || node.equals( anotherEnd ) ) ) 1876 1876 { -
_source/plugins/selection/plugin.js
92 92 var selectAllCmd = 93 93 { 94 94 modes : { wysiwyg : 1, source : 1 }, 95 readOnly : 1, 95 96 exec : function( editor ) 96 97 { 97 98 switch ( editor.mode ) -
_source/plugins/menu/plugin.js
97 97 { 98 98 var item = this.editor.getMenuItem( itemName ); 99 99 100 if ( item )100 if ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) 101 101 { 102 item.state = listenerItems[ itemName ];102 item.state = listenerItems[ itemName ]; 103 103 this.add( item ); 104 104 } 105 105 } -
_source/plugins/elementspath/plugin.js
15 15 toolbarFocus : 16 16 { 17 17 editorFocus : false, 18 readOnly : 1, 18 19 exec : function( editor ) 19 20 { 20 21 var idBase = editor._.elementsPath.idBase; -
_source/plugins/a11yhelp/plugin.js
37 37 }); 38 38 }, 39 39 modes : { wysiwyg:1, source:1 }, 40 readOnly : 1, 40 41 canUndo : false 41 42 }); 42 43 -
_source/core/editor.js
394 394 } 395 395 }; 396 396 397 function updateCommands Mode()397 function updateCommands( evt ) 398 398 { 399 399 var command, 400 400 commands = this._.commands, 401 mode = this.mode; 401 mode = this.mode, 402 readOnlyEvent = evt.name == 'readonly'; 402 403 403 404 for ( var name in commands ) 404 405 { 405 406 command = commands[ name ]; 406 command[ command.startDisabled ? 'disable' : command.modes[ mode ] ? 'enable' : 'disable' ](); 407 command[ command.startDisabled ? 408 'disable' : ( readOnlyEvent ? command.readOnly : command.modes[ mode ] ) ? 409 'enable' : 'disable' ](); 407 410 } 408 411 } 409 412 … … 491 494 492 495 CKEDITOR.fire( 'instanceCreated', null, this ); 493 496 494 this.on( 'mode', updateCommandsMode, null, null, 1 ); 497 this.on( 'mode', updateCommands, null, null, 1 ); 498 this.on( 'readonly', updateCommands, null, null, 1 ); 495 499 496 500 initConfig( this, instanceConfig ); 497 501 }; -
_source/plugins/toolbar/plugin.js
36 36 toolbarFocus : 37 37 { 38 38 modes : { wysiwyg : 1, source : 1 }, 39 readOnly : 1, 39 40 40 41 exec : function( editor ) 41 42 { -
_source/plugins/print/plugin.js
37 37 editor.document.$.execCommand( "Print" ); 38 38 }, 39 39 canUndo : false, 40 readOnly : 1, 40 41 modes : { wysiwyg : !( CKEDITOR.env.opera ) } // It is imposible to print the inner document in Opera. 41 42 }; -
_source/plugins/richcombo/plugin.js
135 135 }, 136 136 this ); 137 137 138 editor.on( 'readonly', function() 139 { 140 this.setState( CKEDITOR.TRISTATE_DISABLED ); 141 this.setValue( '' ); 142 }, this ); 143 144 138 145 var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element ) 139 146 { 140 147 ev = new CKEDITOR.dom.event( ev ); -
_source/plugins/button/plugin.js
154 154 modeStates[ mode ] != undefined ? modeStates[ mode ] : 155 155 CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); 156 156 }, this); 157 158 editor.on( 'readonly', function() { this.setState( CKEDITOR.TRISTATE_DISABLED ); }, this); 157 159 } 158 160 else if ( command ) 159 161 { -
_source/plugins/sourcearea/plugin.js
41 41 textarea.addClass( 'cke_source' ); 42 42 textarea.addClass( 'cke_enable_context_menu' ); 43 43 44 editor.readOnly && textarea.setAttribute( 'disabled', true ); 45 44 46 var styles = 45 47 { 46 48 // IE7 has overflow the <textarea> from wrapping table cell. … … 181 183 { 182 184 modes : { wysiwyg:1, source:1 }, 183 185 editorFocus : false, 184 186 readOnly : 1, 185 187 exec : function( editor ) 186 188 { 187 189 if ( editor.mode == 'wysiwyg' ) -
_source/plugins/clipboard/plugin.js
293 293 // keyboard paste or execCommand ) (#4874). 294 294 CKEDITOR.env.ie && ( depressBeforeEvent = 1 ); 295 295 296 var retval = editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; 296 var retval = CKEDITOR.TRISTATE_OFF; 297 try { retval = editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; }catch( er ){} 298 297 299 depressBeforeEvent = 0; 298 300 return retval; 299 301 } -
_source/plugins/undo/plugin.js
94 94 undoManager.onChange(); 95 95 }); 96 96 97 editor.on( 'readonly', function() 98 { 99 undoManager.enabled = 0; 100 undoManager.onChange(); 101 }); 102 97 103 editor.ui.addButton( 'Undo', 98 104 { 99 105 label : editor.lang.undo, -
_source/plugins/enterkey/plugin.js
11 11 12 12 init : function( editor ) 13 13 { 14 var specialKeys = editor.specialKeys; 15 specialKeys[ 13 ] = enter; 16 specialKeys[ CKEDITOR.SHIFT + 13 ] = shiftEnter; 14 editor.addCommand( 'enter', { 15 modes : { wysiwyg:1 }, 16 editorFocus : false, 17 exec : enter 18 }); 19 20 editor.addCommand( 'shiftEnter', { 21 modes : { wysiwyg:1 }, 22 editorFocus : false, 23 exec : shiftEnter 24 }); 25 26 var keystrokes = editor.keystrokeHandler.keystrokes; 27 keystrokes[ 13 ] = 'enter'; 28 keystrokes[ CKEDITOR.SHIFT + 13 ] = 'shiftEnter'; 17 29 } 18 30 }); 19 31 -
_source/plugins/preview/plugin.js
13 13 { 14 14 modes : { wysiwyg:1, source:1 }, 15 15 canUndo : false, 16 readOnly : 1, 16 17 exec : function( editor ) 17 18 { 18 19 var sHTML, -
_source/plugins/list/plugin.js
218 218 219 219 function onSelectionChange( evt ) 220 220 { 221 if ( evt.editor.readOnly ) 222 return; 223 221 224 var path = evt.data.path, 222 225 blockLimit = path.blockLimit, 223 226 elements = path.elements, -
_source/plugins/blockquote/plugin.js
25 25 26 26 function onSelectionChange( evt ) 27 27 { 28 var editor = evt.editor, 29 command = editor.getCommand( 'blockquote' ); 28 var editor = evt.editor; 29 if ( editor.readOnly ) 30 return; 31 32 var command = editor.getCommand( 'blockquote' ); 30 33 command.state = getState( editor, evt.data.path ); 31 34 command.fire( 'state' ); 32 35 } -
_source/plugins/wysiwygarea/plugin.js
597 597 598 598 body.spellcheck = !editor.config.disableNativeSpellChecker; 599 599 600 var editable = !editor.readOnly; 601 600 602 if ( CKEDITOR.env.ie ) 601 603 { 602 604 // Don't display the focus border. … … 605 607 // Disable and re-enable the body to avoid IE from 606 608 // taking the editing focus at startup. (#141 / #523) 607 609 body.disabled = true; 608 body.contentEditable = true;610 body.contentEditable = editable; 609 611 body.removeAttribute( 'disabled' ); 610 612 } 611 613 else … … 617 619 // Prefer 'contentEditable' instead of 'designMode'. (#3593) 618 620 if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 619 621 || CKEDITOR.env.opera ) 620 domDocument.$.body.contentEditable = true;622 domDocument.$.body.contentEditable = editable; 621 623 else if ( CKEDITOR.env.webkit ) 622 domDocument.$.body.parentNode.contentEditable = true;624 domDocument.$.body.parentNode.contentEditable = editable; 623 625 else 624 domDocument.$.designMode = 'on';626 domDocument.$.designMode = editable? 'off' : 'on'; 625 627 }, 0 ); 626 628 } 627 629 628 CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor );630 editable && CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor ); 629 631 630 632 domWindow = editor.window = new CKEDITOR.dom.window( domWindow ); 631 633 domDocument = editor.document = new CKEDITOR.dom.document( domDocument ); 632 634 633 domDocument.on( 'dblclick', function( evt )635 editable && domDocument.on( 'dblclick', function( evt ) 634 636 { 635 637 var element = evt.data.getTarget(), 636 638 data = { element : element, dialog : '' }; … … 711 713 712 714 // IE standard compliant in editing frame doesn't focus the editor when 713 715 // clicking outside actual content, manually apply the focus. (#1659) 714 if ( CKEDITOR.env.ie715 && domDocument.$.compatMode == 'CSS1Compat'716 if ( editable && 717 CKEDITOR.env.ie && domDocument.$.compatMode == 'CSS1Compat' 716 718 || CKEDITOR.env.gecko 717 719 || CKEDITOR.env.opera ) 718 720 { … … 761 763 }); 762 764 763 765 var keystrokeHandler = editor.keystrokeHandler; 764 if ( keystrokeHandler ) 765 keystrokeHandler.attach( domDocument ); 766 // Prevent backspace from navigating off the page. 767 !editable && ( keystrokeHandler.blockedKeystrokes[ 8 ] = 1 ); 768 keystrokeHandler.attach( domDocument ); 766 769 767 770 if ( CKEDITOR.env.ie ) 768 771 { 769 772 domDocument.getDocumentElement().addClass( domDocument.$.compatMode ); 770 773 // Override keystrokes which should have deletion behavior 771 774 // on control types in IE . (#4047) 772 domDocument.on( 'keydown', function( evt )775 editable && domDocument.on( 'keydown', function( evt ) 773 776 { 774 777 var keyCode = evt.data.getKeystroke(); 775 778 -
_source/plugins/bidi/plugin.js
22 22 { 23 23 var editor = evt.editor, 24 24 path = evt.data.path; 25 26 if ( editor.readOnly ) 27 return; 28 25 29 var useComputedState = editor.config.useComputedState, 26 30 selectedElement; 27 31 -
_source/plugins/maximize/plugin.js
155 155 editor.addCommand( 'maximize', 156 156 { 157 157 modes : { wysiwyg : 1, source : 1 }, 158 readOnly : 1, 158 159 editorFocus : false, 159 160 exec : function() 160 161 { -
_source/plugins/indent/plugin.js
15 15 16 16 function onSelectionChange( evt ) 17 17 { 18 if ( evt.editor.readOnly ) 19 return; 20 18 21 var editor = evt.editor, 19 22 elementPath = evt.data.path, 20 23 list = elementPath && elementPath.contains( listNodeNames ),