Ticket #5105: 5105.patch

File 5105.patch, 17.8 KB (added by Alfonso Martínez de Lizarrondo, 10 years ago)

First approach

  • _source/plugins/dialog/plugin.js

     
    106106                        contentSize : { width : 0, height : 0 },
    107107                        size : { width : 0, height : 0 },
    108108                        updateSize : false,
    109                         contents : {},
     109                        uiElements : {},
    110110                        buttons : {},
    111111                        accessKeyMap : {},
    112112
     
    188188                // function for each of them.
    189189                var iterContents = function( func )
    190190                {
    191                         var contents = me._.contents,
     191                        var contents = me._.uiElements,
    192192                                stop = false;
    193193
    194194                        for ( var i in contents )
    195195                        {
    196                                 for ( var j in contents[i] )
    197                                 {
    198                                         stop = func.call( this, contents[i][j] );
    199                                         if ( stop )
    200                                                 return;
    201                                 }
     196                                stop = func.call( this, contents[i] );
     197                                if ( stop )
     198                                        return;
    202199                        }
    203200                };
    204201
     
    751748                 */
    752749                foreach : function( fn )
    753750                {
    754                         for ( var i in this._.contents )
    755                         {
    756                                 for ( var j in this._.contents[i] )
    757                                         fn( this._.contents[i][j]);
    758                         }
     751                        for ( var i in this._.uiElements )
     752                                fn( this._.uiElements[i]);
     753
    759754                        return this;
    760755                },
    761756
     
    902897                        this._.lastTab = tab;
    903898                        this.updateStyle();
    904899
    905                         var contentMap = this._.contents[ contents.id ] = {},
     900                        var contentMap = this._.uiElements,
    906901                                cursor,
    907902                                children = vbox.getChild();
    908903
     
    10331028
    10341029                /**
    10351030                 * Gets a dialog UI element object from a dialog page.
    1036                  * @param {String} pageId id of dialog page.
     1031                 * Since 3.4 only the elementId parameter is needed
     1032                 * (previous versions require the pageId as the first parameter)
    10371033                 * @param {String} elementId id of UI element.
    10381034                 * @example
    10391035                 * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element.
    10401036                 */
    10411037                getContentElement : function( pageId, elementId )
    10421038                {
    1043                         var page = this._.contents[ pageId ];
    1044                         return page && page[ elementId ];
     1039                        if (elementId && window.console)
     1040                                console.log('Warning: getContentElement has been called with two parameters, only the elementId is needed. (' + pageId + ', ' + elementId + ')');
     1041
     1042                        return this._.uiElements[ elementId || pageId ];
    10451043                },
    10461044
    10471045                /**
    10481046                 * Gets the value of a dialog UI element.
    1049                  * @param {String} pageId id of dialog page.
     1047                 * Since 3.4 only the elementId parameter is needed
     1048                 * (previous versions require the pageId as the first parameter)
    10501049                 * @param {String} elementId id of UI element.
    10511050                 * @example
    10521051                 * @returns {Object} The value of the UI element.
    10531052                 */
    10541053                getValueOf : function( pageId, elementId )
    10551054                {
    1056                         return this.getContentElement( pageId, elementId ).getValue();
     1055                        if (elementId && window.console)
     1056                                console.log('Warning: getValueOf has been called with two parameters, only the elementId is needed. (' + pageId + ', ' + elementId + ')');
     1057
     1058                        return this.getContentElement( elementId || pageId ).getValue();
    10571059                },
    10581060
    10591061                /**
    10601062                 * Sets the value of a dialog UI element.
    1061                  * @param {String} pageId id of the dialog page.
     1063                 * Since 3.4 only the elementId parameter is needed
     1064                 * (previous versions require the pageId as the first parameter)
    10621065                 * @param {String} elementId id of the UI element.
    10631066                 * @param {Object} value The new value of the UI element.
    10641067                 * @example
    10651068                 */
    10661069                setValueOf : function( pageId, elementId, value )
    10671070                {
    1068                         return this.getContentElement( pageId, elementId ).setValue( value );
     1071                        // Warning: if it's called with value = undefined the check will fail, although that call is probably another error.
     1072                        if ((typeof value !== 'undefined') && window.console)
     1073                                        console.log('Warning: setValueOf has been called with three parameters, only the elementId is needed. (' + pageId + ', ' + elementId + ')');
     1074                        else
     1075                        {
     1076                                value = elementId;
     1077                                elementId = pageId;
     1078                        }
     1079                        return this.getContentElement( elementId ).setValue( value );
    10691080                },
    10701081
    10711082                /**
     
    14651476                removeButton : function( id )
    14661477                {
    14671478                        removeById( this.buttons, id );
     1479                },
     1480
     1481                /**
     1482                 * Gets a UI element definition under the content definition.
     1483                 * @param {String} id The id of the UI element definition.
     1484                 * @returns {CKEDITOR.dialog.uiElementDefinition}
     1485                 */
     1486                get : function( id )
     1487                {
     1488                        for (var i in this.contents)
     1489                        {
     1490                                var child = this.contents[i].get( id );
     1491                                if (child)
     1492                                        return child;
     1493                        }
     1494                        return null;
    14681495                }
     1496
    14691497        };
    14701498
    14711499        /**
  • _source/plugins/dialogui/plugin.js

     
    733733                                if ( elementDefinition.validate )
    734734                                        this.validate = elementDefinition.validate;
    735735
     736                                if ( typeof elementDefinition[ 'for' ] != 'string' )
     737                                        elementDefinition[ 'for' ] = elementDefinition[ 'for' ][ 1 ];
     738
    736739                                var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition );
    737740                                var onClick = myDefinition.onClick;
    738741                                myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button';
    739742                                myDefinition.onClick = function( evt )
    740743                                {
    741                                         var target = elementDefinition[ 'for' ];                // [ pageId, elementId ]
    742744                                        if ( !onClick || onClick.call( this, evt ) !== false )
    743745                                        {
    744                                                 dialog.getContentElement( target[0], target[1] ).submit();
     746                                                dialog.getContentElement( elementDefinition[ 'for' ] ).submit();
    745747                                                this.disable();
    746748                                        }
    747749                                };
    748750
    749751                                dialog.on( 'load', function()
    750752                                                {
    751                                                         dialog.getContentElement( elementDefinition[ 'for' ][0], elementDefinition[ 'for' ][1] )._.buttons.push( me );
     753                                                        dialog.getContentElement( elementDefinition[ 'for' ] )._.buttons.push( me );
    752754                                                } );
    753755
    754756                                CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList );
  • _source/plugins/filebrowser/plugin.js

     
    99 *
    1010 * When file is selected inside of the file browser or uploaded, its url is
    1111 * 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.
     12 * attribute. To specify field that should be updated, pass the element id.
    1413 *
    1514 * Example 1: (Browse)
    1615 *
     
    1817 * {
    1918 *      type : 'button',
    2019 *      id : 'browse',
    21  *      filebrowser : 'tabId:elementId',
     20 *      filebrowser : 'elementId',
    2221 *      label : editor.lang.common.browseServer
    2322 * }
    2423 * </pre>
     
    3231 * {
    3332 *      type : 'fileButton',
    3433 *      id : 'uploadButton',
    35  *      filebrowser : 'tabId:elementId',
     34 *      filebrowser : 'elementId',
    3635 *      label : editor.lang.common.uploadSubmit,
    37  *      'for' : [ 'upload', 'upload' ]
     36 *      'for' : 'upload'
    3837 * }
    3938 * </pre>
    4039 *
     
    4847 *
    4948 * <pre>
    5049 *  [action] - Browse or QuickUpload
    51  *  [target] - field to update, tabId:elementId
     50 *  [target] - field to update, elementId
    5251 *  [params] - additional arguments to be passed to the server connector (optional)
    5352 *  [onSelect] - function to execute when file is selected/uploaded (optional)
    5453 *  [url] - the URL to be called (optional)
     
    6463 *      filebrowser :
    6564 *      {
    6665 *              action : 'QuickUpload', //required
    67  *              target : 'tab1:elementId', //required
     66 *              target : 'elementId', //required
    6867 *              params : //optional
    6968 *              {
    7069 *                      type : 'Files',
     
    7675 *                      // return false;
    7776 *              }
    7877 *      },
    79  *      'for' : [ 'tab1', 'myFile' ]
     78 *      'for' : 'myFile'
    8079 * }
    8180 * </pre>
    8281 *
     
    9897 *      {
    9998 *              action : 'Browse',
    10099 *              url : '/ckfinder/ckfinder.html&amp;type=Images',
    101  *              target : 'tab1:elementId'
     100 *              target : 'elementId'
    102101 *      }
    103102 * }
    104103 * </pre>
     
    187186         */
    188187        function uploadFile( evt )
    189188        {
    190                 var dialog = this.getDialog();
    191                 var editor = dialog.getParentEditor();
     189                var dialog = this.getDialog(),
     190                        editor = dialog.getParentEditor(),
     191                        element = dialog.getContentElement( this['for'] );
    192192
    193193                editor._.filebrowserSe = this;
    194194
    195195                // If user didn't select the file, stop the upload.
    196                 if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value )
     196
     197                if ( !element.getInputElement().$.value )
    197198                        return false;
    198199
    199                 if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() )
     200                if ( !element.getAction() )
    200201                        return false;
    201202
    202203                return true;
     
    292293
    293294                                        element.filebrowser.url = url;
    294295                                        element.hidden = false;
    295                                         setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser );
     296                                        if (typeof element[ 'for' ] != 'string')
     297                                                element[ 'for' ] = element[ 'for' ][1];
     298
     299                                        setupFileElement( editor, definition.get( element[ 'for' ] ), element.filebrowser );
    296300                                }
    297301                        }
    298302                }
     
    314318                if ( targetElement )
    315319                {
    316320                        var target = targetElement.split( ':' );
    317                         var element = dialog.getContentElement( target[ 0 ], target[ 1 ] );
     321                        var element = dialog.getContentElement( target[ target.length - 1 ] );
    318322                        if ( element )
    319323                        {
    320324                                element.setValue( url );
    321                                 dialog.selectPage( target[ 0 ] );
     325                                element.selectParentTab();
    322326                        }
    323327                }
    324328        }
     
    329333         * @param {CKEDITOR.dialog.dialogDefinitionObject}
    330334         *            definition Dialog definition.
    331335         * @param String
    332          *            tabId The tab id where element(s) can be found.
    333          * @param String
    334336         *            elementId The element id (or ids, separated with a semicolon) to check.
    335337         */
    336         function isConfigured( definition, tabId, elementId )
     338        function isConfigured( definition, elementId )
    337339        {
    338340                if ( elementId.indexOf( ";" ) !== -1 )
    339341                {
    340342                        var ids = elementId.split( ";" );
    341343                        for ( var i = 0 ; i < ids.length ; i++ )
    342344                        {
    343                                 if ( isConfigured( definition, tabId, ids[i]) )
     345                                if ( isConfigured( definition, ids[i]) )
    344346                                        return true;
    345347                        }
    346348                        return false;
    347349                }
    348350
    349                 var elementFileBrowser = definition.getContents( tabId ).get( elementId ).filebrowser;
     351                var elementFileBrowser = definition.get( elementId ).filebrowser;
    350352                return ( elementFileBrowser && elementFileBrowser.url );
    351353        }
    352354
     
    357359                        onSelect = this._.filebrowserSe.filebrowser.onSelect;
    358360
    359361                if ( targetInput )
    360                         dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset();
     362                        dialog.getContentElement( targetInput ).reset();
    361363
    362364                if ( typeof data == 'function' && data.call( this._.filebrowserSe ) === false )
    363365                        return;
     
    392394                        attachFileBrowser( evt.editor, evt.data.name, definition, element.elements );
    393395                        if ( element.hidden && element.filebrowser )
    394396                        {
    395                                 element.hidden = !isConfigured( definition, element[ 'id' ], element.filebrowser );
     397                                element.hidden = !isConfigured( definition, element.filebrowser );
    396398                        }
    397399                }
    398400        } );
  • _source/plugins/image/dialogs/image.js

     
    10871087                                        elements :
    10881088                                        [
    10891089                                                {
    1090                                                         id : 'txtUrl',
     1090                                                        id : 'txtLinkUrl',
    10911091                                                        type : 'text',
    10921092                                                        label : editor.lang.common.url,
    10931093                                                        style : 'width: 100%',
     
    11241124                                                        filebrowser :
    11251125                                                        {
    11261126                                                                action : 'Browse',
    1127                                                                 target: 'Link:txtUrl',
     1127                                                                target: 'txtLinkUrl',
    11281128                                                                url: editor.config.filebrowserImageBrowseLinkUrl || editor.config.filebrowserBrowseUrl
    11291129                                                        },
    11301130                                                        style : 'float:right',
  • _source/plugins/link/dialogs/anchor.js

     
    1313
    1414                var attributeValue = this.editObj.getAttribute( 'name' );
    1515                if ( attributeValue )
    16                         this.setValueOf( 'info','txtName', attributeValue );
     16                        this.setValueOf( 'txtName', attributeValue );
    1717                else
    18                         this.setValueOf( 'info','txtName', "" );
     18                        this.setValueOf( 'txtName', "" );
    1919        };
    2020
    2121        return {
     
    2525                onOk : function()
    2626                {
    2727                        // Always create a new anchor, because of IE BUG.
    28                         var name = this.getValueOf( 'info', 'txtName' ),
     28                        var name = this.getValueOf( 'txtName' ),
    2929                                element = CKEDITOR.env.ie ?
    3030                                editor.document.createElement( '<a name="' + CKEDITOR.tools.htmlEncode( name ) + '">' ) :
    3131                                editor.document.createElement( 'a' );
     
    6868                                loadElements.apply( this, [ editor, selection, element ] );
    6969                                selection.selectElement( this.fakeObj );
    7070                        }
    71                         this.getContentElement( 'info', 'txtName' ).focus();
     71                        this.getContentElement( 'txtName' ).focus();
    7272                },
    7373                contents : [
    7474                        {
     
    8484                                                required: true,
    8585                                                validate : function()
    8686                                                {
     87                                                        console.log(this)
    8788                                                        if ( !this.getValue() )
    8889                                                        {
    8990                                                                alert( editor.lang.anchor.errorName );
  • _source/plugins/link/dialogs/link.js

     
    1010        var targetChanged = function()
    1111        {
    1212                var dialog = this.getDialog(),
    13                         popupFeatures = dialog.getContentElement( 'target', 'popupFeatures' ),
    14                         targetName = dialog.getContentElement( 'target', 'linkTargetName' ),
     13                        popupFeatures = dialog.getContentElement( 'popupFeatures' ),
     14                        targetName = dialog.getContentElement( 'linkTargetName' ),
    1515                        value = this.getValue();
    1616
    1717                if ( !popupFeatures || !targetName )
     
    6565
    6666                for ( var i = 0 ; i < partIds.length ; i++ )
    6767                {
    68                         var element = dialog.getContentElement( 'info', partIds[i] );
     68                        var element = dialog.getContentElement( partIds[i] );
    6969                        if ( !element )
    7070                                continue;
    7171
     
    445445                                                                                onKeyUp : function()
    446446                                                                                {
    447447                                                                                        this.allowOnChange = false;
    448                                                                                         var     protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ),
     448                                                                                        var     protocolCmb = this.getDialog().getContentElement( 'protocol' ),
    449449                                                                                                url = this.getValue(),
    450450                                                                                                urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi,
    451451                                                                                                urlOnChangeTestOther = /^((javascript:)|[#\/\.\?])/gi;
     
    470470                                                                                {
    471471                                                                                        var dialog = this.getDialog();
    472472
    473                                                                                         if ( dialog.getContentElement( 'info', 'linkType' ) &&
    474                                                                                                         dialog.getValueOf( 'info', 'linkType' ) != 'url' )
     473                                                                                        if ( dialog.getContentElement( 'linkType' ) &&
     474                                                                                                        dialog.getValueOf( 'linkType' ) != 'url' )
    475475                                                                                                return true;
    476476
    477477                                                                                        if ( this.getDialog().fakeObj ) // Edit Anchor.
     
    504504                                                                ],
    505505                                                                setup : function( data )
    506506                                                                {
    507                                                                         if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
     507                                                                        if ( !this.getDialog().getContentElement( 'linkType' ) )
    508508                                                                                this.getElement().show();
    509509                                                                }
    510510                                                        },
     
    566566                                                                                                        if ( data.anchor )
    567567                                                                                                                this.setValue( data.anchor.name );
    568568
    569                                                                                                         var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
     569                                                                                                        var linkType = this.getDialog().getContentElement( 'linkType' );
    570570                                                                                                        if ( linkType && linkType.getValue() == 'email' )
    571571                                                                                                                this.focus();
    572572                                                                                                },
     
    638638                                                ],
    639639                                                setup : function( data )
    640640                                                {
    641                                                         if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
     641                                                        if ( !this.getDialog().getContentElement( 'linkType' ) )
    642642                                                                this.getElement().hide();
    643643                                                }
    644644                                        },
     
    657657                                                                {
    658658                                                                        var dialog = this.getDialog();
    659659
    660                                                                         if ( !dialog.getContentElement( 'info', 'linkType' ) ||
    661                                                                                         dialog.getValueOf( 'info', 'linkType' ) != 'email' )
     660                                                                        if ( !dialog.getContentElement( 'linkType' ) ||
     661                                                                                        dialog.getValueOf( 'linkType' ) != 'email' )
    662662                                                                                return true;
    663663
    664664                                                                        var func = CKEDITOR.dialog.validate.notEmpty( editor.lang.link.noEmail );
     
    669669                                                                        if ( data.email )
    670670                                                                                this.setValue( data.email.address );
    671671
    672                                                                         var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
     672                                                                        var linkType = this.getDialog().getContentElement( 'linkType' );
    673673                                                                        if ( linkType && linkType.getValue() == 'email' )
    674674                                                                                this.select();
    675675                                                                },
     
    720720                                                ],
    721721                                                setup : function( data )
    722722                                                {
    723                                                         if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
     723                                                        if ( !this.getDialog().getContentElement( 'linkType' ) )
    724724                                                                this.getElement().hide();
    725725                                                }
    726726                                        }
     
    954954                                elements :
    955955                                [
    956956                                        {
     957                                        // We might need to rename this field to avoid problems due to having the same id as the tab
     958                                        // if we want to provide a single settings to remove tabs or elements
    957959                                                type : 'file',
    958960                                                id : 'upload',
    959961                                                label : editor.lang.common.upload,
     
    964966                                                type : 'fileButton',
    965967                                                id : 'uploadButton',
    966968                                                label : editor.lang.common.uploadSubmit,
    967                                                 filebrowser : 'info:url',
    968                                                 'for' : [ 'upload', 'upload' ]
     969                                                filebrowser : 'url',
     970                                                'for' : 'upload'
    969971                                        }
    970972                                ]
    971973                        },
     
    13811383                // Inital focus on 'url' field if link is of type URL.
    13821384                onFocus : function()
    13831385                {
    1384                         var linkType = this.getContentElement( 'info', 'linkType' ),
     1386                        var linkType = this.getContentElement( 'linkType' ),
    13851387                                        urlField;
    13861388                        if ( linkType && linkType.getValue( ) == 'url' )
    13871389                        {
    1388                                 urlField = this.getContentElement( 'info', 'url' );
     1390                                urlField = this.getContentElement( 'url' );
    13891391                                urlField.select();
    13901392                        }
    13911393                }
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy