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