Ticket #3673: 3673_10.patch
File 3673_10.patch, 29.0 KB (added by , 14 years ago) |
---|
-
_source/core/config.js
149 149 * @example 150 150 * config.plugins = 'basicstyles,button,htmldataprocessor,toolbar,wysiwygarea'; 151 151 */ 152 153 plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc', 154 152 plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,save,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc', 155 153 /** 156 154 * List of additional plugins to be loaded. This is a tool setting which 157 155 * makes it easier to add new plugins, whithout having to touch and -
_source/plugins/dialog/plugin.js
756 756 '<a class="cke_dialog_tab"', 757 757 ( this._.pageCount > 0 ? ' cke_last' : 'cke_first' ), 758 758 titleHtml, 759 ( !!contents.hidden ? ' style="display:none"' : '' ), 759 760 ' id="', contents.id + '_', CKEDITOR.tools.getNextNumber(), '"' + 760 761 ' href="javascript:void(0)"', 761 762 ' hidefocus="true">', … … 859 860 }, 860 861 861 862 /** 863 * Returns boolean variable indicating whether page was initially hidden. 864 * @param {String} id The page's Id. 865 * @returns {Boolean} true if hidden, false if not. 866 * @example 867 * dialog.isInitiallyHidden( 'upload' ); 868 */ 869 isInitiallyHidden : function( id ) 870 { 871 return !!this.definition.getContents( id ).hidden; 872 }, 873 874 /** 862 875 * Gets the root DOM element of the dialog. 863 876 * @returns {CKEDITOR.dom.element} The <span> element containing this dialog. 864 877 * @example … … 871 884 }, 872 885 873 886 /** 887 * Gets the name of the dialog. 888 * @returns {String} The name of this dialog. 889 * @example 890 * var dialogName = dialogObj.getName(); 891 */ 892 getName : function() 893 { 894 return this._.name; 895 }, 896 897 /** 874 898 * Gets a dialog UI element object from a dialog page. 875 899 * @param {String} pageId id of dialog page. 876 900 * @param {String} elementId id of UI element. … … 1786 1810 * generate the final widget.</li> 1787 1811 * <li><strong>title</strong> (Optional) The popup tooltip for the UI 1788 1812 * element.</li> 1813 * <li><strong>hidden</strong> (Optional) A flag that tells if the element 1814 * should be initially visible.</li> 1789 1815 * <li><strong>className</strong> (Optional) Additional CSS class names 1790 1816 * to add to the UI element. Separated by space.</li> 1791 1817 * <li><strong>style</strong> (Optional) Additional CSS inline styles … … 1859 1885 var styleStr = ( elementDefinition.style || '' ).split( ';' ); 1860 1886 for ( i in styles ) 1861 1887 styleStr.push( i + ':' + styles[i] ); 1888 if ( elementDefinition.hidden ) 1889 styleStr.push( 'display:none' ); 1862 1890 for ( i = styleStr.length - 1 ; i >= 0 ; i-- ) 1863 1891 { 1864 1892 if ( styleStr[i] === '' ) 1865 1893 styleStr.splice( i, 1 ); 1866 1894 } 1867 1895 if ( styleStr.length > 0 ) 1868 attributes.style = ( attributes.style ||'' ) + styleStr.join( '; ' );1896 attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' ); 1869 1897 1870 1898 // Write the attributes. 1871 1899 for ( i in attributes ) … … 2183 2211 }, 2184 2212 2185 2213 /** 2214 * Gets the name of the parent tab of this element. 2215 * @returns {String} The name of selected tab. 2216 * @example 2217 * focus : function() 2218 * { 2219 * this.getParentTab(); 2220 * // do something else. 2221 * } 2222 */ 2223 getParentTab : function() 2224 { 2225 var element = this.getInputElement(), 2226 cursor = element, 2227 tabId; 2228 while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) 2229 { /*jsl:pass*/ } 2230 2231 tabId = cursor.getAttribute( 'name' ); 2232 2233 return tabId; 2234 }, 2235 2236 /** 2186 2237 * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page. 2187 2238 * @returns {CKEDITOR.dialog.uiElement} The current UI element. 2188 2239 * @example -
_source/plugins/dialogui/plugin.js
654 654 this.validate = elementDefinition.validate; 655 655 656 656 var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); 657 var onClick = myDefinition.onClick; 657 658 myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button'; 658 659 myDefinition.onClick = function( evt ) 659 660 { 660 661 var target = elementDefinition[ 'for' ]; // [ pageId, elementId ] 661 dialog.getContentElement( target[0], target[1] ).submit(); 662 this.disable(); 662 if ( !onClick || onClick.call( this, evt ) !== false ) 663 { 664 dialog.getContentElement( target[0], target[1] ).submit(); 665 this.disable(); 666 } 663 667 }; 664 668 665 669 dialog.on( 'load', function() … … 1197 1201 }, 1198 1202 1199 1203 /** 1204 * Get the action assigned to the form. 1205 * @returns {String} The value of the action. 1206 * @example 1207 */ 1208 getAction : function( action ) 1209 { 1210 return this.getInputElement().getParent().$.action; 1211 }, 1212 1213 /** 1200 1214 * Redraws the file input and resets the file path in the file input. 1201 1215 * The redraw logic is necessary because non-IE browsers tend to clear 1202 1216 * the <iframe> containing the file input after closing the dialog. 1203 1217 * @example 1204 1218 */ 1205 reset : function( )1219 reset : function( action ) 1206 1220 { 1207 1221 var frameElement = CKEDITOR.document.getById( this._.frameId ), 1208 1222 frameDocument = frameElement.getFrameDocument(), … … 1219 1233 1220 1234 frameDocument.$.write( [ '<html><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">', 1221 1235 '<form enctype="multipart/form-data" method="POST" action="', 1222 CKEDITOR.tools.htmlEncode( elementDefinition.action ),1236 CKEDITOR.tools.htmlEncode( action || elementDefinition.action ), 1223 1237 '">', 1224 1238 '<input type="file" name="', 1225 1239 CKEDITOR.tools.htmlEncode( elementDefinition.id || 'cke_upload' ), -
_source/plugins/filebrowser/plugin.js
1 /* 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 /** 7 * @fileOverview The "filebrowser" plugin, it adds support for file uploads and 8 * browsing. 9 * 10 * When file is selected inside of the file browser or uploaded, its url is 11 * inserted automatically to a field, which is described in the 'filebrowser' 12 * attribute. To specify field that should be updated, pass the tab id and 13 * element id, separated with a colon. 14 * 15 * Example 1: (Browse) 16 * 17 * <pre> 18 * { 19 * type : 'button', 20 * id : 'browse', 21 * filebrowser : 'tabId:elementId', 22 * label : editor.lang.common.browseServer 23 * } 24 * </pre> 25 * 26 * If you set the 'filebrowser' attribute on any element other than 27 * 'fileButton', the 'Browse' action will be triggered. 28 * 29 * Example 2: (Quick Upload) 30 * 31 * <pre> 32 * { 33 * type : 'fileButton', 34 * id : 'uploadButton', 35 * filebrowser : 'tabId:elementId', 36 * label : editor.lang.common.uploadSubmit, 37 * 'for' : [ 'upload', 'upload' ] 38 * } 39 * </pre> 40 * 41 * If you set the 'filebrowser' attribute on a fileButton element, the 42 * 'QuickUpload' action will be executed. 43 * 44 * Filebrowser plugin also supports more advanced configuration (through 45 * javascript object). 46 * 47 * The following settings are supported: 48 * 49 * <pre> 50 * [action] - Browse or QuickUpload 51 * [target] - field to update, tabId:elementId 52 * [params] - additional arguments to be passed to the server connector (optional) 53 * [onSelect] - function to execute when file is selected/uploaded (optional) 54 * [url] - the URL to be called (optional) 55 * </pre> 56 * 57 * Example 3: (Quick Upload) 58 * 59 * <pre> 60 * { 61 * type : 'fileButton', 62 * label : editor.lang.common.uploadSubmit, 63 * id : 'buttonId', 64 * filebrowser : 65 * { 66 * action : 'QuickUpload', //required 67 * target : 'tab1:elementId', //required 68 * params : //optional 69 * { 70 * type : 'Files', 71 * currentFolder : '/folder/' 72 * }, 73 * onSelect : function( fileUrl, errorMessage ) //optional 74 * { 75 * // Do not call the built-in selectFuntion 76 * // return false; 77 * } 78 * }, 79 * 'for' : [ 'tab1', 'myFile' ] 80 * } 81 * </pre> 82 * 83 * Suppose we have a file element with id 'myFile', text field with id 84 * 'elementId' and a fileButton. If filebowser.url is not specified explicitly, 85 * form action will be set to 'filebrowser[DialogName]UploadUrl' or, if not 86 * specified, to 'filebrowserUploadUrl'. Additional parameters from 'params' 87 * object will be added to the query string. It is possible to create your own 88 * uploadHandler and cancel the built-in updateTargetElement command. 89 * 90 * Example 4: (Browse) 91 * 92 * <pre> 93 * { 94 * type : 'button', 95 * id : 'buttonId', 96 * label : editor.lang.common.browseServer, 97 * filebrowser : 98 * { 99 * action : 'Browse', 100 * url : '/ckfinder/ckfinder.html&type=Images', 101 * target : 'tab1:elementId' 102 * } 103 * } 104 * </pre> 105 * 106 * In this example, after pressing a button, file browser will be opened in a 107 * popup. If we don't specify filebrowser.url attribute, 108 * 'filebrowser[DialogName]BrowseUrl' or 'filebrowserBrowseUrl' will be used. 109 * After selecting a file in a file browser, an element with id 'elementId' will 110 * be updated. Just like in the third example, a custom 'onSelect' function may be 111 * defined. 112 */ 113 ( function() 114 { 115 /** 116 * Adds (additional) arguments to given url. 117 * 118 * @param {String} 119 * url The url. 120 * @param {Object} 121 * params Additional parameters. 122 */ 123 function addQueryString( url, params ) 124 { 125 var queryString = []; 126 127 if ( !params ) 128 return url; 129 else 130 { 131 for ( var i in params ) 132 queryString.push( i + "=" + encodeURIComponent( params[ i ] ) ); 133 } 134 135 return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" ); 136 } 137 138 /** 139 * Make a string's first character uppercase. 140 * 141 * @param {String} 142 * str String. 143 */ 144 function ucFirst( str ) 145 { 146 str += ''; 147 var f = str.charAt( 0 ).toUpperCase(); 148 return f + str.substr( 1 ); 149 } 150 151 /** 152 * The onlick function assigned to the 'Browse Server' button. Opens the 153 * file browser and updates target field when file is selected. 154 * 155 * @param {CKEDITOR.event} 156 * evt The event object. 157 */ 158 function browseServer( evt ) 159 { 160 var dialog = this.getDialog(); 161 var editor = dialog.getParentEditor(); 162 163 editor._.filebrowserSe = this; 164 165 var width = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowWidth' ] 166 || editor.config.filebrowserWindowWidth || '80%'; 167 var height = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowHeight' ] 168 || editor.config.filebrowserWindowHeight || '70%'; 169 170 var params = this.filebrowser.params || {}; 171 params.CKEditor = editor.name; 172 params.CKEditorFuncNum = editor._.filebrowserFn; 173 if ( !params.langCode ) 174 params.langCode = editor.langCode; 175 176 url = addQueryString( this.filebrowser.url, params ); 177 editor.popup( url, width, height ); 178 } 179 180 /** 181 * The onlick function assigned to the 'Upload' button. Makes the final 182 * decision whether form is really submitted and updates target field when 183 * file is uploaded. 184 * 185 * @param {CKEDITOR.event} 186 * evt The event object. 187 */ 188 function uploadFile( evt ) 189 { 190 var dialog = this.getDialog(); 191 var editor = dialog.getParentEditor(); 192 193 editor._.filebrowserSe = this; 194 195 // If user didn't select the file, stop the upload. 196 if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value ) 197 return false; 198 199 if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() ) 200 return false; 201 202 return true; 203 } 204 205 /** 206 * Setups the file element. 207 * 208 * @param {CKEDITOR.ui.dialog.file} 209 * fileInput The file element used during file upload. 210 * @param {Object} 211 * filebrowser Object containing filebrowser settings assigned to 212 * the fileButton associated with this file element. 213 */ 214 function setupFileElement( editor, fileInput, filebrowser ) 215 { 216 var params = filebrowser.params || {}; 217 params.CKEditor = editor.name; 218 params.CKEditorFuncNum = editor._.filebrowserFn; 219 if ( !params.langCode ) 220 params.langCode = editor.langCode; 221 222 fileInput.action = addQueryString( filebrowser.url, params ); 223 fileInput.filebrowser = filebrowser; 224 } 225 226 /** 227 * Traverse through the content definition and attach filebrowser to 228 * elements with 'filebrowser' attribute. 229 * 230 * @param String 231 * dialogName Dialog name. 232 * @param {CKEDITOR.dialog.dialogDefinitionObject} 233 * definition Dialog definition. 234 * @param {Array} 235 * elements Array of {@link CKEDITOR.dialog.contentDefinition} 236 * objects. 237 */ 238 function attachFileBrowser( editor, dialogName, definition, elements ) 239 { 240 var element, fileInput; 241 242 for ( var i in elements ) 243 { 244 element = elements[ i ]; 245 246 if ( element.type == 'hbox' || element.type == 'vbox' ) 247 attachFileBrowser( editor, dialogName, definition, element.children ); 248 249 if ( !element.filebrowser ) 250 continue; 251 252 if ( typeof element.filebrowser == 'string' ) 253 { 254 var fb = 255 { 256 action : ( element.type == 'fileButton' ) ? 'QuickUpload' : 'Browse', 257 target : element.filebrowser 258 }; 259 element.filebrowser = fb; 260 } 261 262 if ( element.filebrowser.action == 'Browse' ) 263 { 264 var url = element.filebrowser.url || editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ] 265 || editor.config.filebrowserBrowseUrl; 266 267 if ( url ) 268 { 269 element.onClick = browseServer; 270 element.filebrowser.url = url; 271 element.hidden = false; 272 } 273 } 274 else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] ) 275 { 276 var url = element.filebrowser.url || editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ] 277 || editor.config.filebrowserUploadUrl; 278 279 if ( url ) 280 { 281 element.onClick = uploadFile; 282 element.filebrowser.url = url; 283 element.hidden = false; 284 setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser ); 285 } 286 } 287 } 288 } 289 290 /** 291 * Updates the target element with the url of uploaded/selected file. 292 * 293 * @param {String} 294 * url The url of a file. 295 */ 296 function updateTargetElement( url, sourceElement ) 297 { 298 var dialog = sourceElement.getDialog(); 299 var targetElement = sourceElement.filebrowser.target || null; 300 url = url.replace( /#/g, '%23' ); 301 302 // If there is a reference to targetElement, update it. 303 if ( targetElement ) 304 { 305 if ( targetElement === true ) 306 targetElement = 'url'; 307 308 if ( targetElement.indexOf( ':' ) == -1 ) 309 { 310 dialog.foreach( function( element ) 311 { 312 if ( element.id == targetElement ) 313 { 314 element.setValue( url ); 315 dialog.selectPage( element.getParentTab() ); 316 } 317 } ); 318 } 319 else 320 { 321 var target = targetElement.split( ':' ); 322 var element = dialog.getContentElement( target[ 0 ], target[ 1 ] ); 323 if ( element ) 324 { 325 element.setValue( url ); 326 dialog.selectPage( target[ 0 ] ); 327 } 328 } 329 } 330 } 331 332 /** 333 * Returns true if filebrowser is configured in one of the elements. 334 * 335 * @param {CKEDITOR.dialog.dialogDefinitionObject} 336 * definition Dialog definition. 337 * @param String 338 * tabId The tab id where element(s) can be found. 339 * @param String 340 * elementId The element id (or ids, separated with a semicolon) to check. 341 */ 342 function isConfigured( definition, tabId, elementId ) 343 { 344 if ( elementId.indexOf( ";" ) !== -1 ) 345 { 346 var ids = elementId.split( ";" ); 347 for ( var i = 0 ; i < ids.length ; i++ ) 348 { 349 if ( isConfigured( definition, tabId, ids[i]) ) 350 return true; 351 } 352 return false; 353 } 354 355 return ( definition.getContents( tabId ).get( elementId ).filebrowser && definition.getContents( tabId ).get( elementId ).filebrowser.url ); 356 } 357 358 function setUrl( fileUrl, data ) 359 { 360 var dialog = this._.filebrowserSe.getDialog(), 361 targetInput = this._.filebrowserSe[ 'for' ], 362 onSelect = this._.filebrowserSe.filebrowser.onSelect; 363 364 if ( targetInput ) 365 { 366 var formAction = dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).getAction(); 367 dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset( formAction ); 368 } 369 370 if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false ) 371 return; 372 373 // The "data" argument may be used to pass the error message to the editor. 374 if ( typeof data == 'string' && data ) 375 alert( data ); 376 377 if ( fileUrl ) 378 updateTargetElement( fileUrl, this._.filebrowserSe ); 379 } 380 381 CKEDITOR.plugins.add( 'filebrowser', 382 { 383 init : function( editor, pluginPath ) 384 { 385 editor._.filebrowserFn = CKEDITOR.tools.addFunction( setUrl, editor ); 386 387 CKEDITOR.on( 'dialogDefinition', function( evt ) 388 { 389 // Associate filebrowser to elements with 'filebrowser' attribute. 390 for ( var i in evt.data.definition.contents ) 391 { 392 attachFileBrowser( evt.editor, evt.data.name, evt.data.definition, evt.data.definition.contents[ i ].elements ); 393 if ( evt.data.definition.contents[ i ].hidden && evt.data.definition.contents[ i ].filebrowser ) 394 { 395 evt.data.definition.contents[ i ].hidden = 396 !isConfigured( evt.data.definition, evt.data.definition.contents[ i ][ 'id' ], evt.data.definition.contents[ i ].filebrowser ); 397 } 398 } 399 } ); 400 } 401 } ); 402 403 } )(); -
_source/plugins/flash/dialogs/flash.js
181 181 title : editor.lang.flash.title, 182 182 minWidth : 420, 183 183 minHeight : 310, 184 onLoad : function()185 {186 if ( !editor.config.flashUploadTab )187 this.hidePage( 'Upload' ); // Hide Upload tab.188 189 if ( !editor.config.flashBrowseServer )190 this.getContentElement( 'info', 'browse' ).getElement().hide();191 },192 184 onShow : function() 193 185 { 194 186 // Clear previously saved elements. … … 347 339 { 348 340 type : 'button', 349 341 id : 'browse', 342 filebrowser : 'src', 343 hidden : true, 350 344 align : 'center', 351 345 label : editor.lang.common.browseServer 352 346 } … … 438 432 }, 439 433 { 440 434 id : 'Upload', 435 hidden : true, 436 filebrowser : 'uploadButton', 441 437 label : editor.lang.common.upload, 442 438 elements : 443 439 [ … … 445 441 type : 'file', 446 442 id : 'upload', 447 443 label : editor.lang.common.upload, 448 action : editor.config.image_uploadAction,449 444 size : 38 450 445 }, 451 446 { 452 447 type : 'fileButton', 453 448 id : 'uploadButton', 454 449 label : editor.lang.common.uploadSubmit, 450 filebrowser : 'src', 455 451 'for' : [ 'Upload', 'upload' ] 456 452 } 457 453 ] -
_source/plugins/flash/plugin.js
142 142 143 143 CKEDITOR.tools.extend( CKEDITOR.config, 144 144 { 145 flashUploadTab : true,146 flashUploadAction : 'nowhere.php',147 flashBrowseServer : true,148 149 145 /** 150 146 * Save as EMBED tag only. This tag is unrecommended. 151 147 * @type Boolean -
_source/plugins/image/dialogs/image.js
445 445 id : 'browse', 446 446 align : 'center', 447 447 label : editor.lang.common.browseServer, 448 onLoad : function() 449 { 450 var dialog = this.getDialog(); 451 if ( !dialog.getParentEditor().config.image_browseServer ) 452 dialog.getContentElement( 'info', 'browse' ).getElement().hide(); 453 }, 454 onClick : function() 455 { 456 457 } 448 hidden : true, 449 filebrowser : 'info:txtUrl' 458 450 } 459 451 ] 460 452 } … … 930 922 { 931 923 type : 'button', 932 924 id : 'browse', 925 filebrowser : 'Link:txtUrl', 933 926 style : 'float:right', 934 label : editor.lang.common.browseServer, 935 onClick : function() 936 { 937 } 927 hidden : true, 928 label : editor.lang.common.browseServer 938 929 }, 939 930 { 940 931 id : 'cmbTarget', … … 967 958 }, 968 959 { 969 960 id : 'Upload', 961 hidden : true, 962 filebrowser : 'uploadButton', 970 963 label : editor.lang.image.upload, 971 964 elements : 972 965 [ … … 974 967 type : 'file', 975 968 id : 'upload', 976 969 label : editor.lang.image.btnUpload, 977 action : editor.config.image_uploadAction,978 970 size : 38 979 971 }, 980 972 { 981 973 type : 'fileButton', 982 974 id : 'uploadButton', 975 filebrowser : 'info:txtUrl', 983 976 label : editor.lang.image.btnUpload, 984 977 'for' : [ 'Upload', 'upload' ] 985 978 } -
_source/plugins/image/plugin.js
54 54 } 55 55 } ); 56 56 57 /**58 * Show Browse Server button.59 * @type Boolean60 * @default true61 */62 CKEDITOR.config.image_browseServer = true;63 64 /**65 * Upload action attribute.66 * @type URL67 */68 CKEDITOR.config.image_uploadAction = 'nowhere.php';69 70 57 CKEDITOR.config.image_removeLinkByEmptyURL = true; -
_source/plugins/link/dialogs/link.js
41 41 { 42 42 if ( editor.config.linkShowTargetTab ) 43 43 dialog.showPage( 'target' ); 44 if ( editor.config.linkUploadTab)44 if ( !dialog.isInitiallyHidden( 'upload' ) ) 45 45 dialog.showPage( 'upload' ); 46 46 } 47 47 else 48 48 { 49 49 dialog.hidePage( 'target' ); 50 dialog.hidePage( 'upload' ); 50 if ( !dialog.isInitiallyHidden( 'upload' ) ) 51 dialog.hidePage( 'upload' ); 51 52 } 52 53 53 54 for ( var i = 0 ; i < partIds.length ; i++ ) … … 388 389 { 389 390 type : 'button', 390 391 id : 'browse', 392 hidden : 'true', 393 filebrowser : 'url', 391 394 label : editor.lang.common.browseServer 392 395 } 393 396 ] … … 815 818 id : 'upload', 816 819 label : editor.lang.link.upload, 817 820 title : editor.lang.link.upload, 821 hidden : true, 822 filebrowser : 'uploadButton', 818 823 elements : 819 824 [ 820 825 { 821 826 type : 'file', 822 827 id : 'upload', 823 828 label : editor.lang.common.upload, 824 action : editor.config.linkUploadAction,825 829 size : 38 826 830 }, 827 831 { 828 832 type : 'fileButton', 829 833 id : 'uploadButton', 830 834 label : editor.lang.common.uploadSubmit, 835 filebrowser : 'url', 831 836 'for' : [ 'upload', 'upload' ] 832 837 } 833 838 ] … … 1039 1044 case 'url': 1040 1045 var protocol = ( data.url && data.url.protocol != undefined ) ? data.url.protocol : 'http://', 1041 1046 url = ( data.url && data.url.url ) || ''; 1042 attributes._cke_saved_href = protocol + url;1047 attributes._cke_saved_href = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url; 1043 1048 break; 1044 1049 case 'anchor': 1045 1050 var name = ( data.anchor && data.anchor.name ), … … 1195 1200 }, 1196 1201 onLoad : function() 1197 1202 { 1198 if ( !editor.config.linkUploadTab )1199 this.hidePage( 'upload' ); //Hide Upload tab.1200 1201 1203 if ( !editor.config.linkShowAdvancedTab ) 1202 1204 this.hidePage( 'advanced' ); //Hide Advanded tab. 1203 1205 1204 if ( !editor.config.linkBrowseServer )1205 this.getContentElement( 'info', 'browse' ).getElement().hide();1206 1207 1206 if ( !editor.config.linkShowTargetTab ) 1208 1207 this.hidePage( 'target' ); //Hide Target tab. 1209 1208 -
_source/plugins/link/plugin.js
183 183 184 184 CKEDITOR.tools.extend( CKEDITOR.config, 185 185 { 186 linkUploadTab : true,187 linkBrowseServer : true,188 linkUploadAction : 'nowhere.php',189 186 linkShowAdvancedTab : true, 190 187 linkShowTargetTab : true 191 188 } ); -
_source/plugins/popup/plugin.js
1 /* 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 CKEDITOR.plugins.add( 'popup'); 7 8 CKEDITOR.tools.extend( CKEDITOR.editor.prototype, 9 { 10 /** 11 * Opens Browser in a popup. The "width" and "height" parameters accept 12 * numbers (pixels) or percent (of screen size) values. 13 * @param {String} url The url of the external file browser. 14 * @param {String} width Popup window width. 15 * @param {String} height Popup window height. 16 */ 17 popup : function( url, width, height ) 18 { 19 width = width || '80%'; 20 height = height || '70%'; 21 22 if ( typeof width == 'string' && width.length > 1 && width.substr( width.length - 1, 1 ) == '%' ) 23 width = parseInt( window.screen.width * parseInt( width, 10 ) / 100, 10 ); 24 25 if ( typeof height == 'string' && height.length > 1 && height.substr( height.length - 1, 1 ) == '%' ) 26 height = parseInt( window.screen.height * parseInt( height, 10 ) / 100, 10 ); 27 28 if ( width < 640 ) 29 width = 640; 30 31 if ( height < 420 ) 32 height = 420; 33 34 var top = parseInt( ( window.screen.height - height ) / 2, 10 ), 35 left = parseInt( ( window.screen.width - width ) / 2, 10 ), 36 options = 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes' + 37 ',width=' + width + 38 ',height=' + height + 39 ',top=' + top + 40 ',left=' + left; 41 42 var popupWindow = window.open( '', null, options, true ); 43 44 // Blocked by a popup blocker. 45 if ( !popupWindow ) 46 return false; 47 48 try 49 { 50 popupWindow.moveTo( left, top ); 51 popupWindow.resizeTo( width, height ); 52 popupWindow.focus(); 53 popupWindow.location.href = url; 54 } 55 catch (e) 56 { 57 popupWindow = window.open( url, null, options, true ); 58 } 59 60 return true ; 61 } 62 }); -
ckeditor.pack
153 153 '_source/plugins/pagebreak/plugin.js', 154 154 '_source/plugins/pastefromword/plugin.js', 155 155 '_source/plugins/pastetext/plugin.js', 156 '_source/plugins/popup/plugin.js', 156 157 '_source/plugins/preview/plugin.js', 157 158 '_source/plugins/print/plugin.js', 158 159 '_source/plugins/removeformat/plugin.js', 159 160 '_source/plugins/resize/plugin.js', 160 161 '_source/plugins/save/plugin.js', 162 '_source/plugins/filebrowser/plugin.js', 161 163 '_source/plugins/scayt/plugin.js', 162 164 '_source/plugins/smiley/plugin.js', 163 165 '_source/plugins/showblocks/plugin.js',