Changeset 6750


Ignore:
Timestamp:
04/21/2011 09:28:15 PM (4 years ago)
Author:
fredck
Message:

Applied 1376_8.patch + readonly.html sample from 1376_7.patch.

Location:
CKEditor/branches/features/readonly
Files:
1 added
32 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/branches/features/readonly/_samples/index.html

    r6711 r6750  
    7777                        Configuring CKEditor to produce HTML code that can be used with Adobe Flash. 
    7878                </li> 
     79                <li><a class="samples" href="readonly.html">ReadOnly mode</a><br /> 
     80                        Using the readOnly API to disallow making any change to the editor content. 
     81                </li> 
    7982        </ul> 
    8083        <h2 class="samples"> 
  • CKEditor/branches/features/readonly/_source/core/dom/range.js

    r6682 r6750  
    18711871                                                } 
    18721872                                                // Range enclosed entirely in an editable element. 
    1873                                                 else if ( node.is( 'body' ) 
     1873                                                else if ( node.is( 'html' ) 
    18741874                                                        || node.getAttribute( 'contentEditable' ) == 'true' 
    18751875                                                        && ( node.contains( anotherEnd ) || node.equals( anotherEnd ) ) ) 
  • CKEditor/branches/features/readonly/_source/core/editor.js

    r6660 r6750  
    160160                 */ 
    161161                editor.tabIndex = editor.config.tabIndex || editor.element.getAttribute( 'tabindex' ) || 0; 
     162 
     163                /** 
     164                 * Immutable field indicate the read-only state of this editor. 
     165                 * @name CKEDITOR.editor.prototype.readOnly 
     166                 * @see CKEDITOR.editor.prototype.setReadOnly 
     167                 * @type Boolean 
     168                 * @default CKEDITOR.config.readOnly 
     169                 * @since 3.6 
     170                 */ 
     171                editor.readOnly = !!( editor.config.readOnly || editor.element.getAttribute( 'disabled' ) ); 
    162172 
    163173                // Fire the "configLoaded" event. 
     
    395405        }; 
    396406 
    397         function updateCommandsMode() 
     407        function updateCommands() 
    398408        { 
    399409                var command, 
     
    404414                { 
    405415                        command = commands[ name ]; 
    406                         command[ command.startDisabled ? 'disable' : command.modes[ mode ] ? 'enable' : 'disable' ](); 
     416                        command[ command.startDisabled ? 'disable' : 
     417                                         this.readOnly && !command.readOnly ? 'disable' : command.modes[ mode ] ? 'enable' : 'disable' ](); 
    407418                } 
    408419        } 
     
    492503                        CKEDITOR.fire( 'instanceCreated', null, this ); 
    493504 
    494                         this.on( 'mode', updateCommandsMode, null, null, 1 ); 
     505                        this.on( 'mode', updateCommands, null, null, 1 ); 
    495506 
    496507                        initConfig( this, instanceConfig ); 
     
    712723 
    713724                        !internal && this.fire( 'afterSetData', eventData ); 
     725                }, 
     726 
     727                /** 
     728                 * Turn editor into read-only mode or restore it from read-only mode. 
     729                 * @param enable {Boolean} 
     730                 * @since 3.6 
     731                 * <strong>Note:</strong> current editing block will be reloaded. 
     732                 */ 
     733                setReadOnly : function( enable ) 
     734                { 
     735                        if ( this.readOnly != enable ) 
     736                        { 
     737                                this.readOnly = !!enable; 
     738                                // Reload current mode, then fire the event on editor. 
     739                                this.fire( 'readOnly' ); 
     740                        } 
    714741                }, 
    715742 
     
    842869 
    843870/** 
     871 * Whether to start the editor in read-only mode, otherwise it depends on if "disabled" attribute is presented on the host &lt;textarea&gt;. 
     872 * @name CKEDITOR.config.readOnly 
     873 * @see CKEDITOR.editor.setReadOnly 
     874 * @type Boolean 
     875 * @default false 
     876 * @since 3.6 
     877 * @example 
     878 * config.readOnly = true; 
     879 */ 
     880 
     881/** 
    844882 * Fired when a CKEDITOR instance is created, but still before initializing it. 
    845883 * To interact with a fully initialized instance, use the 
     
    9841022 * @param {Object} element The element to insert. 
    9851023 */ 
     1024 
     1025/** 
     1026 * Event fired once editor's {@link CKEDITOR.editor.prototype.readOnly} state has changed. 
     1027 * @name CKEDITOR.editor#readOnly 
     1028 * @event 
     1029 * @param {CKEDITOR.editor} editor This editor instance. 
     1030 */ 
  • CKEditor/branches/features/readonly/_source/plugins/a11yhelp/plugin.js

    r6660 r6750  
    3838                                        }, 
    3939                                        modes : { wysiwyg:1, source:1 }, 
     40                                        readOnly : 1, 
    4041                                        canUndo : false 
    4142                                }); 
  • CKEditor/branches/features/readonly/_source/plugins/about/plugin.js

    r6660 r6750  
    1212                command.modes = { wysiwyg:1, source:1 }; 
    1313                command.canUndo = false; 
     14                command.readOnly = 1; 
    1415 
    1516                editor.ui.addButton( 'About', 
  • CKEditor/branches/features/readonly/_source/plugins/basicstyles/plugin.js

    r6660 r6750  
    1818                        editor.attachStyleStateChange( style, function( state ) 
    1919                                { 
    20                                         editor.getCommand( commandName ).setState( state ); 
     20                                        !editor.readOnly && editor.getCommand( commandName ).setState( state ); 
    2121                                }); 
    2222 
  • CKEditor/branches/features/readonly/_source/plugins/bidi/plugin.js

    r6660 r6750  
    2323                var editor = evt.editor, 
    2424                        path = evt.data.path; 
     25 
     26                if ( editor.readOnly ) 
     27                        return; 
     28 
    2529                var useComputedState = editor.config.useComputedState, 
    2630                        selectedElement; 
  • CKEditor/branches/features/readonly/_source/plugins/blockquote/plugin.js

    r6660 r6750  
    2626        function onSelectionChange( evt ) 
    2727        { 
    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' ); 
    3033                command.state = getState( editor, evt.data.path ); 
    3134                command.fire( 'state' ); 
  • CKEditor/branches/features/readonly/_source/plugins/button/plugin.js

    r6660 r6750  
    150150                                { 
    151151                                        var mode = editor.mode; 
     152 
    152153                                        // Restore saved button state. 
    153                                         this.setState( this.modes[ mode ] ? 
    154                                                 modeStates[ mode ] != undefined ? modeStates[ mode ] : 
    155                                                         CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); 
     154                                        var state = this.modes[ mode ] ? modeStates[ mode ] != undefined ? modeStates[ mode ] : 
     155                                                        CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; 
     156 
     157                                        this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state ); 
    156158                                }, this); 
    157159                } 
  • CKEditor/branches/features/readonly/_source/plugins/clipboard/plugin.js

    r6660 r6750  
    294294                CKEDITOR.env.ie && ( depressBeforeEvent = 1 ); 
    295295 
    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 
    297299                depressBeforeEvent = 0; 
    298300                return retval; 
  • CKEditor/branches/features/readonly/_source/plugins/editingblock/plugin.js

    r6660 r6750  
    114114                                }); 
    115115 
     116                        // Force reload the mode to refresh all command states. 
     117                        editor.on( 'readOnly', function() { 
     118                                this.setMode( this.mode || this.config.startupMode, 1 ); 
     119                        }); 
     120 
    116121                        editor.on( 'destroy', function () 
    117122                        { 
     
    152157         * CKEDITOR.instances.editor1.setMode( 'source' ); 
    153158         */ 
    154         CKEDITOR.editor.prototype.setMode = function( mode ) 
     159        CKEDITOR.editor.prototype.setMode = function( mode, forceReload ) 
    155160        { 
    156161                this.fire( 'beforeSetMode', { newMode : mode } ); 
     
    163168                if ( this.mode ) 
    164169                { 
    165                         if ( mode == this.mode ) 
     170                        if ( !forceReload && mode == this.mode ) 
    166171                                return; 
    167172 
  • CKEditor/branches/features/readonly/_source/plugins/elementspath/plugin.js

    r6660 r6750  
    1616                { 
    1717                        editorFocus : false, 
     18                        readOnly : 1, 
    1819                        exec : function( editor ) 
    1920                        { 
  • CKEditor/branches/features/readonly/_source/plugins/enterkey/plugin.js

    r6682 r6750  
    1212                init : function( editor ) 
    1313                { 
    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'; 
    1729                } 
    1830        }); 
  • CKEditor/branches/features/readonly/_source/plugins/find/dialogs/find.js

    r6681 r6750  
    855855 
    856856                                this.selectPage( startupPage ); 
     857 
     858                                this[ ( startupPage == 'find' && this._.editor.readOnly? 'hide' : 'show' ) + 'Page' ]( 'replace'); 
    857859                        }, 
    858860                        onHide : function() 
  • CKEditor/branches/features/readonly/_source/plugins/find/plugin.js

    r6660 r6750  
    1616                var findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) ); 
    1717                findCommand.canUndo = false; 
     18                findCommand.readOnly = 1; 
    1819 
    1920                editor.ui.addButton( 'Replace', 
  • CKEditor/branches/features/readonly/_source/plugins/indent/plugin.js

    r6660 r6750  
    1616        function onSelectionChange( evt ) 
    1717        { 
     18                if ( evt.editor.readOnly ) 
     19                        return; 
     20 
    1821                var editor = evt.editor, 
    1922                        elementPath = evt.data.path, 
  • CKEditor/branches/features/readonly/_source/plugins/justify/plugin.js

    r6660 r6750  
    5050        function onSelectionChange( evt ) 
    5151        { 
     52                if ( evt.editor.readOnly ) 
     53                        return; 
     54 
    5255                var command = evt.editor.getCommand( this.name ); 
    5356                command.state = getState.call( this, evt.editor, evt.data.path ); 
  • CKEditor/branches/features/readonly/_source/plugins/link/plugin.js

    r6660 r6750  
    5555                 editor.on( 'selectionChange', function( evt ) 
    5656                        { 
     57                                if ( editor.readOnly ) 
     58                                        return; 
     59 
    5760                                /* 
    5861                                 * Despite our initial hope, document.queryCommandEnabled() does not work 
  • CKEditor/branches/features/readonly/_source/plugins/list/plugin.js

    r6660 r6750  
    219219        function onSelectionChange( evt ) 
    220220        { 
     221                if ( evt.editor.readOnly ) 
     222                        return; 
     223 
    221224                var path = evt.data.path, 
    222225                        blockLimit = path.blockLimit, 
  • CKEditor/branches/features/readonly/_source/plugins/maximize/plugin.js

    r6660 r6750  
    8686                { 
    8787                        var one = all[ i ]; 
    88                         if ( one.mode == 'wysiwyg' ) 
     88                        if ( one.mode == 'wysiwyg' && !one.readOnly ) 
    8989                        { 
    9090                                var body = one.document.getBody(); 
     
    156156                                { 
    157157                                        modes : { wysiwyg : 1, source : 1 }, 
     158                                        readOnly : 1, 
    158159                                        editorFocus : false, 
    159160                                        exec : function() 
  • CKEditor/branches/features/readonly/_source/plugins/menu/plugin.js

    r6660 r6750  
    9898                                                        var item = this.editor.getMenuItem( itemName ); 
    9999 
    100                                                         if ( item ) 
     100                                                        if ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) 
    101101                                                        { 
    102                                                                 item.state = listenerItems[ itemName ]; 
     102                                                                item.state =  listenerItems[ itemName ]; 
    103103                                                                this.add( item ); 
    104104                                                        } 
  • CKEditor/branches/features/readonly/_source/plugins/preview/plugin.js

    r6660 r6750  
    1414                modes : { wysiwyg:1, source:1 }, 
    1515                canUndo : false, 
     16                readOnly : 1, 
    1617                exec : function( editor ) 
    1718                { 
  • CKEditor/branches/features/readonly/_source/plugins/print/plugin.js

    r6660 r6750  
    3838        }, 
    3939        canUndo : false, 
     40        readOnly : 1, 
    4041        modes : { wysiwyg : !( CKEDITOR.env.opera ) }           // It is imposible to print the inner document in Opera. 
    4142}; 
  • CKEditor/branches/features/readonly/_source/plugins/richcombo/plugin.js

    r6660 r6750  
    131131                        editor.on( 'mode', function() 
    132132                                { 
    133                                         this.setState( this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); 
     133                                        var state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; 
     134                                        this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state  ); 
    134135                                        this.setValue( '' ); 
    135136                                }, 
  • CKEditor/branches/features/readonly/_source/plugins/save/plugin.js

    r6660 r6750  
    1313        { 
    1414                modes : { wysiwyg:1, source:1 }, 
     15                readOnly : 1, 
    1516 
    1617                exec : function( editor ) 
  • CKEditor/branches/features/readonly/_source/plugins/selection/plugin.js

    r6660 r6750  
    9393        { 
    9494                modes : { wysiwyg : 1, source : 1 }, 
     95                readOnly : CKEDITOR.env.ie || CKEDITOR.env.webkit, 
    9596                exec : function( editor ) 
    9697                { 
  • CKEditor/branches/features/readonly/_source/plugins/showblocks/plugin.js

    r6660 r6750  
    9090        var commandDefinition = 
    9191        { 
     92                readOnly : 1, 
    9293                preserveState : true, 
    9394                editorFocus : false, 
  • CKEditor/branches/features/readonly/_source/plugins/showborders/plugin.js

    r6660 r6750  
    4141                preserveState : true, 
    4242                editorFocus : false, 
     43                readOnly: 1, 
    4344 
    4445                exec : function ( editor ) 
  • CKEditor/branches/features/readonly/_source/plugins/sourcearea/plugin.js

    r6660 r6750  
    4141                                                        textarea.addClass( 'cke_source' ); 
    4242                                                        textarea.addClass( 'cke_enable_context_menu' ); 
     43 
     44                                                        editor.readOnly && textarea.setAttribute( 'disabled', true ); 
    4345 
    4446                                                        var styles = 
     
    182184                        modes : { wysiwyg:1, source:1 }, 
    183185                        editorFocus : false, 
    184  
     186                        readOnly : 1, 
    185187                        exec : function( editor ) 
    186188                        { 
  • CKEditor/branches/features/readonly/_source/plugins/toolbar/plugin.js

    r6748 r6750  
    3737                { 
    3838                        modes : { wysiwyg : 1, source : 1 }, 
     39                        readOnly : 1, 
    3940 
    4041                        exec : function( editor ) 
     
    327328                                                        editor.addCommand( 'toolbarCollapse', 
    328329                                                                { 
     330                                                                        readOnly : 1, 
    329331                                                                        exec : function( editor ) 
    330332                                                                        { 
  • CKEditor/branches/features/readonly/_source/plugins/undo/plugin.js

    r6660 r6750  
    9191                        editor.on( 'mode', function() 
    9292                                { 
    93                                         undoManager.enabled = editor.mode == 'wysiwyg'; 
     93                                        undoManager.enabled = editor.readOnly ? false : editor.mode == 'wysiwyg'; 
    9494                                        undoManager.onChange(); 
    9595                                }); 
  • CKEditor/branches/features/readonly/_source/plugins/wysiwygarea/plugin.js

    r6687 r6750  
    599599                                                body.spellcheck = !editor.config.disableNativeSpellChecker; 
    600600 
     601                                                var editable = !editor.readOnly; 
     602 
    601603                                                if ( CKEDITOR.env.ie ) 
    602604                                                { 
     
    607609                                                        // taking the editing focus at startup. (#141 / #523) 
    608610                                                        body.disabled = true; 
    609                                                         body.contentEditable = true; 
     611                                                        body.contentEditable = editable; 
    610612                                                        body.removeAttribute( 'disabled' ); 
    611613                                                } 
     
    619621                                                                if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 
    620622                                                                                || CKEDITOR.env.opera ) 
    621                                                                         domDocument.$.body.contentEditable = true; 
     623                                                                        domDocument.$.body.contentEditable = editable; 
    622624                                                                else if ( CKEDITOR.env.webkit ) 
    623                                                                         domDocument.$.body.parentNode.contentEditable = true; 
     625                                                                        domDocument.$.body.parentNode.contentEditable = editable; 
    624626                                                                else 
    625                                                                         domDocument.$.designMode = 'on'; 
     627                                                                        domDocument.$.designMode = editable? 'off' : 'on'; 
    626628                                                        }, 0 ); 
    627629                                                } 
    628630 
    629                                                 CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor ); 
     631                                                editable && CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor ); 
    630632 
    631633                                                domWindow       = editor.window = new CKEDITOR.dom.window( domWindow ); 
    632634                                                domDocument     = editor.document       = new CKEDITOR.dom.document( domDocument ); 
    633635 
    634                                                 domDocument.on( 'dblclick', function( evt ) 
     636                                                editable && domDocument.on( 'dblclick', function( evt ) 
    635637                                                { 
    636638                                                        var element = evt.data.getTarget(), 
     
    713715                                                // IE standard compliant in editing frame doesn't focus the editor when 
    714716                                                // clicking outside actual content, manually apply the focus. (#1659) 
    715                                                 if ( CKEDITOR.env.ie 
    716                                                         && domDocument.$.compatMode == 'CSS1Compat' 
     717                                                if ( editable && 
     718                                                                CKEDITOR.env.ie && domDocument.$.compatMode == 'CSS1Compat' 
    717719                                                                || CKEDITOR.env.gecko 
    718720                                                                || CKEDITOR.env.opera ) 
     
    745747                                                                var doc = editor.document; 
    746748 
    747                                                                 if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 ) 
     749                                                                if ( editable && CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 ) 
    748750                                                                        blinkCursor(); 
    749751                                                                else if ( CKEDITOR.env.opera ) 
     
    763765 
    764766                                                var keystrokeHandler = editor.keystrokeHandler; 
    765                                                 if ( keystrokeHandler ) 
    766                                                         keystrokeHandler.attach( domDocument ); 
     767                                                // Prevent backspace from navigating off the page. 
     768                                                keystrokeHandler.blockedKeystrokes[ 8 ] = !editable; 
     769                                                keystrokeHandler.attach( domDocument ); 
    767770 
    768771                                                if ( CKEDITOR.env.ie ) 
     
    771774                                                        // Override keystrokes which should have deletion behavior 
    772775                                                        //  on control types in IE . (#4047) 
    773                                                         domDocument.on( 'keydown', function( evt ) 
     776                                                        editable && domDocument.on( 'keydown', function( evt ) 
    774777                                                        { 
    775778                                                                var keyCode = evt.data.getKeystroke(); 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy