[ Index ] |
|
Code source de vtiger CRM 5.0.2 |
1 /* 2 * FCKeditor - The text editor for internet 3 * Copyright (C) 2003-2005 Frederico Caldeira Knabben 4 * 5 * Licensed under the terms of the GNU Lesser General Public License: 6 * http://www.opensource.org/licenses/lgpl-license.php 7 * 8 * For further information visit: 9 * http://www.fckeditor.net/ 10 * 11 * "Support Open Source software. What about a donation today?" 12 * 13 * File Name: fck_1_ie.js 14 * This is the first part of the "FCK" object creation. This is the main 15 * object that represents an editor instance. 16 * (IE specific implementations) 17 * 18 * File Authors: 19 * Frederico Caldeira Knabben (fredck@fckeditor.net) 20 */ 21 22 FCK.Description = "FCKeditor for Internet Explorer 5.5+" ; 23 24 // The behaviors should be pointed using the FullBasePath to avoid security 25 // errors when using a differente BaseHref. 26 FCK._BehaviorsStyle = 27 '<style type="text/css" _fcktemp="true"> \ 28 INPUT { behavior: url(' + FCKConfig.FullBasePath + 'css/behaviors/hiddenfield.htc) ; } ' ; 29 30 if ( FCKConfig.ShowBorders ) 31 FCK._BehaviorsStyle += 'TABLE { behavior: url(' + FCKConfig.FullBasePath + 'css/behaviors/showtableborders.htc) ; }' ; 32 33 // Disable resize handlers. 34 var sNoHandlers = 'INPUT, TEXTAREA, SELECT, .FCK__Anchor, .FCK__PageBreak' ; 35 36 if ( FCKConfig.DisableImageHandles ) 37 sNoHandlers += ', IMG' ; 38 39 if ( FCKConfig.DisableTableHandles ) 40 sNoHandlers += ', TABLE' ; 41 42 FCK._BehaviorsStyle += sNoHandlers + ' { behavior: url(' + FCKConfig.FullBasePath + 'css/behaviors/disablehandles.htc) ; }' ; 43 44 FCK._BehaviorsStyle += '</style>' ; 45 46 function Doc_OnMouseUp() 47 { 48 if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' ) 49 { 50 FCK.Focus() ; 51 FCK.EditorWindow.event.cancelBubble = true ; 52 FCK.EditorWindow.event.returnValue = false ; 53 } 54 } 55 56 function Doc_OnPaste() 57 { 58 if ( FCK.Status == FCK_STATUS_COMPLETE ) 59 return FCK.Events.FireEvent( "OnPaste" ) ; 60 else 61 return false ; 62 } 63 64 function Doc_OnContextMenu() 65 { 66 var e = FCK.EditorWindow.event ; 67 68 FCK.ShowContextMenu( e.screenX, e.screenY ) ; 69 return false ; 70 } 71 72 function Doc_OnKeyDown() 73 { 74 var e = FCK.EditorWindow.event ; 75 76 77 switch ( e.keyCode ) 78 { 79 case 13 : // ENTER 80 if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) ) 81 { 82 Doc_OnKeyDownUndo() ; 83 84 // We must ignore it if we are inside a List. 85 if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) ) 86 return true ; 87 88 // Insert the <BR> (The must be also inserted to make it work) 89 FCK.InsertHtml( '<br> ' ) ; 90 91 // Remove the 92 var oRange = FCK.EditorDocument.selection.createRange() ; 93 oRange.moveStart( 'character', -1 ) ; 94 oRange.select() ; 95 FCK.EditorDocument.selection.clear() ; 96 97 return false ; 98 } 99 break ; 100 101 case 8 : // BACKSPACE 102 // We must delete a control selection by code and cancels the 103 // keystroke, otherwise IE will execute the browser's "back" button. 104 if ( FCKSelection.GetType() == 'Control' ) 105 { 106 FCKSelection.Delete() ; 107 return false ; 108 } 109 break ; 110 111 case 9 : // TAB 112 if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) ) 113 { 114 Doc_OnKeyDownUndo() ; 115 116 FCK.InsertHtml( window.FCKTabHTML ) ; 117 return false ; 118 } 119 break ; 120 case 90 : // Z 121 if ( e.ctrlKey && !(e.altKey || e.shiftKey) ) 122 { 123 FCKUndo.Undo() ; 124 return false ; 125 } 126 break ; 127 case 89 : // Y 128 if ( e.ctrlKey && !(e.altKey || e.shiftKey) ) 129 { 130 FCKUndo.Redo() ; 131 return false ; 132 } 133 break ; 134 } 135 136 if ( !( e.keyCode >=16 && e.keyCode <= 18 ) ) 137 Doc_OnKeyDownUndo() ; 138 return true ; 139 } 140 141 function Doc_OnKeyDownUndo() 142 { 143 if ( !FCKUndo.Typing ) 144 { 145 FCKUndo.SaveUndoStep() ; 146 FCKUndo.Typing = true ; 147 FCK.Events.FireEvent( "OnSelectionChange" ) ; 148 } 149 150 FCKUndo.TypesCount++ ; 151 152 if ( FCKUndo.TypesCount > FCKUndo.MaxTypes ) 153 { 154 FCKUndo.TypesCount = 0 ; 155 FCKUndo.SaveUndoStep() ; 156 } 157 } 158 159 function Doc_OnDblClick() 160 { 161 FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ; 162 FCK.EditorWindow.event.cancelBubble = true ; 163 } 164 165 function Doc_OnSelectionChange() 166 { 167 FCK.Events.FireEvent( "OnSelectionChange" ) ; 168 } 169 170 FCK.InitializeBehaviors = function( dontReturn ) 171 { 172 // Set the focus to the editable area when clicking in the document area. 173 // TODO: The cursor must be positioned at the end. 174 this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ; 175 176 // Intercept pasting operations 177 this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ; 178 179 // Disable Right-Click and shows the context menu. 180 this.EditorDocument.attachEvent('oncontextmenu', Doc_OnContextMenu ) ; 181 182 // Build the "TAB" key replacement (if necessary). 183 if ( FCKConfig.TabSpaces > 0 ) 184 { 185 window.FCKTabHTML = '' ; 186 for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ ) 187 window.FCKTabHTML += " " ; 188 } 189 this.EditorDocument.attachEvent("onkeydown", Doc_OnKeyDown ) ; 190 191 this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ; 192 193 // Catch cursor movements 194 this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ; 195 196 //Enable editing 197 // this.EditorDocument.body.contentEditable = true ; 198 } 199 200 FCK.Focus = function() 201 { 202 try 203 { 204 if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) 205 FCK.EditorDocument.body.focus() ; 206 else 207 document.getElementById('eSourceField').focus() ; 208 } 209 catch(e) {} 210 } 211 212 FCK.SetHTML = function( html, forceWYSIWYG ) 213 { 214 if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG ) 215 { 216 html = FCKConfig.ProtectedSource.Protect( html ) ; 217 html = FCK.ProtectUrls( html ) ; 218 219 var sHtml ; 220 221 if ( FCKConfig.FullPage ) 222 { 223 var sHtml = 224 FCK._BehaviorsStyle + 225 '<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ; 226 227 if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( html ) ) 228 sHtml += FCK.TempBaseTag ; 229 230 sHtml = html.replace( FCKRegexLib.HeadOpener, '$&' + sHtml ) ; 231 } 232 else 233 { 234 sHtml = 235 FCKConfig.DocType + 236 '<html dir="' + FCKConfig.ContentLangDirection + '"' ; 237 238 if ( FCKConfig.IEForceVScroll ) 239 sHtml += ' style="overflow-y: scroll"' ; 240 241 sHtml += 242 '><head><title></title>' + 243 '<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' + 244 '<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ; 245 246 sHtml += FCK._BehaviorsStyle ; 247 sHtml += FCK.TempBaseTag ; 248 sHtml += '</head><body>' + html + '</body></html>' ; 249 } 250 251 // this.EditorDocument.open( '', '_self', '', true ) ; // This one opens popups in IE 5.5 - BUG 1204220 (I was not able to reproduce the problem). 252 this.EditorDocument.open( '', 'replace' ) ; 253 this.EditorDocument.write( sHtml ) ; 254 this.EditorDocument.close() ; 255 256 this.InitializeBehaviors() ; 257 this.EditorDocument.body.contentEditable = true ; 258 259 FCK.OnAfterSetHTML() ; 260 } 261 else 262 document.getElementById('eSourceField').value = html ; 263 } 264 265 FCK.InsertHtml = function( html ) 266 { 267 html = FCKConfig.ProtectedSource.Protect( html ) ; 268 html = FCK.ProtectUrls( html ) ; 269 270 FCK.Focus() ; 271 272 FCKUndo.SaveUndoStep() ; 273 274 // Gets the actual selection. 275 var oSel = FCK.EditorDocument.selection ; 276 277 // Deletes the actual selection contents. 278 if ( oSel.type.toLowerCase() != "none" ) 279 oSel.clear() ; 280 281 // Insert the HTML. 282 oSel.createRange().pasteHTML( html ) ; 283 } 284 285 FCK.SetInnerHtml = function( html ) // IE Only 286 { 287 var oDoc = FCK.EditorDocument ; 288 // Using the following trick, any comment in the begining of the HTML will 289 // be preserved. 290 oDoc.body.innerHTML = '<div id="__fakeFCKRemove__"> </div>' + html ; 291 oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ; 292 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 10:22:19 2007 | par Balluche grâce à PHPXref 0.7 |