Changeset 425

Show
Ignore:
Timestamp:
2007-07-09 11:44:38 (17 months ago)
Author:
martinkou
Message:

Fixed #137 : FCKConfig.TabSpaces will now work as expected. Also, pressing <Tab> in view source mode will now produce tab spacings instead of changing the focus or doing weired things.

Location:
FCKeditor/trunk/editor/_source
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • FCKeditor/trunk/editor/_source/classes/fckenterkey.js

    r406 r425  
    3030 *                      May be "p", "div", "br". Defaults to "br". 
    3131 */ 
    32 var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode ) 
     32var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces ) 
    3333{ 
    3434        this.Window                     = targetWindow ; 
    3535        this.EnterMode          = enterMode || 'p' ; 
    3636        this.ShiftEnterMode     = shiftEnterMode || 'br' ; 
     37        this.TabText = "\xa0\xa0" ;     // the default text for each tab is two non-breaking spaces 
     38 
     39        if ( tabSpaces > 0 ) 
     40        { 
     41                var a = [] ; 
     42                for ( var i = 0 ; i < tabSpaces ; i++ ) 
     43                        a.push( "\xa0" ) ; 
     44                this.TabText = a.join( "" ) ; 
     45        } 
    3746 
    3847        // Setup the Keystroke Handler. 
     
    4554                [ SHIFT + 13, 'ShiftEnter' ], 
    4655                [ 8                     , 'Backspace' ], 
    47                 [ 46            , 'Delete' ] 
     56                [ 46            , 'Delete' ], 
     57                [ 9, "Tab" ] 
    4858        ] ) ; 
    4959 
     
    7787                        case 'Delete' : 
    7888                                return oEnterKey.DoDelete() ; 
     89                                break ; 
     90                        case "Tab" : 
     91                                return oEnterKey.DoTab() ; 
    7992                } 
    8093        /* @Packager.RemoveLine 
     
    285298        oRange.Release() ; 
    286299        return bCustom ; 
     300} 
     301 
     302/* 
     303 * Executes the <Tab> key behavior. 
     304 */ 
     305FCKEnterKey.prototype.DoTab = function() 
     306{ 
     307        var oRange = new FCKDomRange( this.Window ); 
     308        oRange.MoveToSelection() ; 
     309        oRange.DeleteContents() ; 
     310        oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ; 
     311        oRange.Collapse( false ) ; 
     312        oRange.Select() ; 
     313        return true ; 
    287314} 
    288315 
  • FCKeditor/trunk/editor/_source/internals/fck_ie.js

    r414 r425  
    100100        FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ; 
    101101 
    102         // Build the "TAB" key replacement (if necessary). 
    103         if ( FCKConfig.TabSpaces > 0 ) 
    104         { 
    105                 window.FCKTabHTML = '' ; 
    106                 for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ ) 
    107                         window.FCKTabHTML += "&nbsp;" ; 
    108         } 
    109102        this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ; 
    110103 
  • FCKeditor/trunk/editor/_source/internals/fck.js

    r411 r425  
    716716        // Create the enter key handler 
    717717        if ( !FCKConfig.DisableEnterKeyHandler ) 
    718                 FCK.EnterKeyHandler = new FCKEnterKey( FCK.EditorWindow, FCKConfig.EnterMode, FCKConfig.ShiftEnterMode ) ; 
     718                FCK.EnterKeyHandler = new FCKEnterKey( FCK.EditorWindow, FCKConfig.EnterMode, FCKConfig.ShiftEnterMode, FCKConfig.TabSpaces ) ; 
    719719 
    720720        // Listen for keystroke events. 
     
    768768                        return false ; 
    769769                } 
     770                else if ( keystrokeValue == 'CustomTab' ) 
     771                        return false ;          // ignore it here, it's handled in fckenterkey.js 
    770772        } 
    771773        else 
     
    774776                if ( keystrokeValue.Equals( 'Paste', 'Undo', 'Redo', 'SelectAll' ) ) 
    775777                        return false ; 
     778                // Pressing <Tab> in source mode should produce a tab space in the text area, not 
     779                // changing the focus to something else. 
     780                if ( keystrokeValue == 'CustomTab' ) 
     781                { 
     782                        if ( FCKBrowserInfo.IsIE ) 
     783                        { 
     784                                var range = document.selection.createRange() ; 
     785                                if ( range.parentElement() != FCK.EditingArea.Textarea )  
     786                                        return false ; 
     787                                range.text = "\t" ; 
     788                                range.select() ; 
     789                        } 
     790                        else 
     791                        { 
     792                                var a = [] ; 
     793                                var el = FCK.EditingArea.Textarea ; 
     794                                var selStart = el.selectionStart ; 
     795                                var selEnd = el.selectionEnd ; 
     796                                a.push( el.value.substr(0, selStart ) ) ; 
     797                                a.push( "\t" ) ; 
     798                                a.push( el.value.substr( selEnd ) ) ; 
     799                                el.value = a.join( "" ) ; 
     800                                el.setSelectionRange( selStart + 1, selStart + 1 ) ; 
     801                        } 
     802                        return true ; 
     803                } 
    776804        } 
    777805