JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.1
[ckeditor.git] / _source / plugins / dialogui / plugin.js
index 6d7aaa3..c68c35b 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -59,9 +59,9 @@ CKEDITOR.plugins.add( 'dialogui' );
                        return this.getValue() != this.getInitValue();\r
                },\r
 \r
-               reset : function()\r
+               reset : function( noChangeEvent )\r
                {\r
-                       this.setValue( this.getInitValue() );\r
+                       this.setValue( this.getInitValue(), noChangeEvent );\r
                },\r
 \r
                setInitValue : function()\r
@@ -124,7 +124,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @extends CKEDITOR.ui.dialog.uiElement\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>label</strong> (Required) The label string.</li>\r
@@ -147,7 +147,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                        return;\r
 \r
                                var _ = initPrivateObject.call( this, elementDefinition );\r
-                               _.labelId = CKEDITOR.tools.getNextNumber() + '_label';\r
+                               _.labelId = CKEDITOR.tools.getNextId() + '_label';\r
                                var children = this._.children = [];\r
                                /** @ignore */\r
                                var innerHTML = function()\r
@@ -158,10 +158,10 @@ CKEDITOR.plugins.add( 'dialogui' );
                                                html.push( '<label class="cke_dialog_ui_labeled_label' + requiredClass + '" ',\r
                                                                ' id="'+  _.labelId + '"',\r
                                                                ' for="' + _.inputId + '"',\r
-                                                               ' style="' + elementDefinition.labelStyle + '">',\r
+                                                               ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) +'>',\r
                                                                elementDefinition.label,\r
                                                                '</label>',\r
-                                                               '<div class="cke_dialog_ui_labeled_content" role="presentation">',\r
+                                                               '<div class="cke_dialog_ui_labeled_content"' + ( elementDefinition.controlStyle ? ' style="' + elementDefinition.controlStyle + '"' : '' ) + ' role="presentation">',\r
                                                                contentHtml.call( this, dialog, elementDefinition ),\r
                                                                '</div>' );\r
                                        else\r
@@ -177,13 +177,13 @@ CKEDITOR.plugins.add( 'dialogui' );
                                                                        html : '<label class="cke_dialog_ui_labeled_label' + requiredClass + '"' +\r
                                                                                ' id="' + _.labelId + '"' +\r
                                                                                ' for="' + _.inputId + '"' +\r
-                                                                               ' style="' + elementDefinition.labelStyle + '">' +\r
+                                                                               ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) +'>' +\r
                                                                                   CKEDITOR.tools.htmlEncode( elementDefinition.label ) +\r
                                                                                '</span>'\r
                                                                },\r
                                                                {\r
                                                                        type : 'html',\r
-                                                                       html : '<span class="cke_dialog_ui_labeled_content">' +\r
+                                                                       html : '<span class="cke_dialog_ui_labeled_content"' + ( elementDefinition.controlStyle ? ' style="' + elementDefinition.controlStyle + '"' : '' ) + '>' +\r
                                                                                contentHtml.call( this, dialog, elementDefinition ) +\r
                                                                                '</span>'\r
                                                                }\r
@@ -204,7 +204,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @extends CKEDITOR.ui.dialog.labeledElement\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>default</strong> (Optional) The default value.</li>\r
@@ -223,7 +223,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                        return;\r
 \r
                                initPrivateObject.call( this, elementDefinition );\r
-                               var domId = this._.inputId = CKEDITOR.tools.getNextNumber() + '_textInput',\r
+                               var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput',\r
                                        attributes = { 'class' : 'cke_dialog_ui_input_' + elementDefinition.type, id : domId, type : 'text' },\r
                                        i;\r
 \r
@@ -237,8 +237,8 @@ CKEDITOR.plugins.add( 'dialogui' );
                                if ( elementDefinition.size )\r
                                        attributes.size = elementDefinition.size;\r
 \r
-                               if ( elementDefinition.controlStyle )\r
-                                       attributes.style = elementDefinition.controlStyle;\r
+                               if ( elementDefinition.inputStyle )\r
+                                       attributes.style = elementDefinition.inputStyle;\r
 \r
                                // If user presses Enter in a text box, it implies clicking OK for the dialog.\r
                                var me = this, keyPressedOnMe = false;\r
@@ -293,7 +293,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @example\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>rows</strong> (Optional) The number of rows displayed.\r
@@ -313,7 +313,7 @@ CKEDITOR.plugins.add( 'dialogui' );
 \r
                                initPrivateObject.call( this, elementDefinition );\r
                                var me = this,\r
-                                       domId = this._.inputId = CKEDITOR.tools.getNextNumber() + '_textarea',\r
+                                       domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea',\r
                                        attributes = {};\r
 \r
                                if ( elementDefinition.validate )\r
@@ -323,6 +323,10 @@ CKEDITOR.plugins.add( 'dialogui' );
                                attributes.rows = elementDefinition.rows || 5;\r
                                attributes.cols = elementDefinition.cols || 20;\r
 \r
+                               if ( typeof elementDefinition.inputStyle != 'undefined' )\r
+                                       attributes.style = elementDefinition.inputStyle;\r
+\r
+\r
                                /** @ignore */\r
                                var innerHTML = function()\r
                                {\r
@@ -344,7 +348,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @example\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>checked</strong> (Optional) Whether the checkbox is checked\r
@@ -370,21 +374,21 @@ CKEDITOR.plugins.add( 'dialogui' );
                                {\r
                                        var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,\r
                                                        {\r
-                                                               id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextNumber() + '_checkbox'\r
+                                                               id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox'\r
                                                        }, true ),\r
                                                html = [];\r
 \r
-                                       var labelId = CKEDITOR.tools.getNextNumber() + '_label';\r
+                                       var labelId = CKEDITOR.tools.getNextId() + '_label';\r
                                        var attributes = { 'class' : 'cke_dialog_ui_checkbox_input', type : 'checkbox', 'aria-labelledby' : labelId };\r
                                        cleanInnerDefinition( myDefinition );\r
                                        if ( elementDefinition[ 'default' ] )\r
                                                attributes.checked = 'checked';\r
 \r
-                                       if (typeof myDefinition.controlStyle != 'undefined')\r
-                                               myDefinition.style = myDefinition.controlStyle;\r
+                                       if ( typeof myDefinition.inputStyle != 'undefined' )\r
+                                               myDefinition.style = myDefinition.inputStyle;\r
 \r
                                        _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes );\r
-                                       html.push( ' <label id="', labelId, '" for="', attributes.id, '">',\r
+                                       html.push( ' <label id="', labelId, '" for="', attributes.id, '"' + ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) + '>',\r
                                                        CKEDITOR.tools.htmlEncode( elementDefinition.label ),\r
                                                        '</label>' );\r
                                        return html.join( '' );\r
@@ -400,7 +404,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @extends CKEDITOR.ui.dialog.labeledElement\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>default</strong> (Required) The default value.</li>\r
@@ -430,13 +434,13 @@ CKEDITOR.plugins.add( 'dialogui' );
                                {\r
                                        var inputHtmlList = [], html = [],\r
                                                commonAttributes = { 'class' : 'cke_dialog_ui_radio_item', 'aria-labelledby' : this._.labelId },\r
-                                               commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextNumber() + '_radio';\r
+                                               commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextId() + '_radio';\r
                                        for ( var i = 0 ; i < elementDefinition.items.length ; i++ )\r
                                        {\r
                                                var item = elementDefinition.items[i],\r
                                                        title = item[2] !== undefined ? item[2] : item[0],\r
                                                        value = item[1] !== undefined ? item[1] : item[0],\r
-                                                       inputId = CKEDITOR.tools.getNextNumber() + '_radio_input',\r
+                                                       inputId = CKEDITOR.tools.getNextId() + '_radio_input',\r
                                                        labelId = inputId + '_label',\r
                                                        inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition,\r
                                                                        {\r
@@ -462,8 +466,8 @@ CKEDITOR.plugins.add( 'dialogui' );
                                                cleanInnerDefinition( inputDefinition );\r
                                                cleanInnerDefinition( labelDefinition );\r
 \r
-                                               if (typeof inputDefinition.controlStyle != 'undefined')\r
-                                                       inputDefinition.style = inputDefinition.controlStyle;\r
+                                               if ( typeof inputDefinition.inputStyle != 'undefined' )\r
+                                                       inputDefinition.style = inputDefinition.inputStyle;\r
 \r
                                                children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) );\r
                                                inputHtml.push( ' ' );\r
@@ -486,7 +490,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @extends CKEDITOR.ui.dialog.uiElement\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>label</strong> (Required) The button label.</li>\r
@@ -540,7 +544,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition );\r
                                delete outerDefinition.style;\r
 \r
-                               var labelId = CKEDITOR.tools.getNextNumber() + '_label';\r
+                               var labelId = CKEDITOR.tools.getNextId() + '_label';\r
                                CKEDITOR.ui.dialog.uiElement.call(\r
                                        this,\r
                                        dialog,\r
@@ -569,7 +573,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @constructor\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>default</strong> (Required) The default value.</li>\r
@@ -596,13 +600,13 @@ CKEDITOR.plugins.add( 'dialogui' );
                                if ( elementDefinition.validate )\r
                                        this.validate = elementDefinition.validate;\r
 \r
-                               _.inputId = CKEDITOR.tools.getNextNumber() + '_select';\r
+                               _.inputId = CKEDITOR.tools.getNextId() + '_select';\r
                                /** @ignore */\r
                                var innerHTML = function()\r
                                {\r
                                        var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,\r
                                                        {\r
-                                                               id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextNumber() + '_select'\r
+                                                               id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select'\r
                                                        }, true ),\r
                                                html = [],\r
                                                innerHTML = [],\r
@@ -618,12 +622,12 @@ CKEDITOR.plugins.add( 'dialogui' );
                                        for ( var i = 0, item ; i < elementDefinition.items.length && ( item = elementDefinition.items[i] ) ; i++ )\r
                                        {\r
                                                innerHTML.push( '<option value="',\r
-                                                       CKEDITOR.tools.htmlEncode( item[1] !== undefined ? item[1] : item[0] ), '" /> ',\r
+                                                       CKEDITOR.tools.htmlEncode( item[1] !== undefined ? item[1] : item[0] ).replace( /"/g, '&quot;' ), '" /> ',\r
                                                        CKEDITOR.tools.htmlEncode( item[0] ) );\r
                                        }\r
 \r
-                                       if (typeof myDefinition.controlStyle != 'undefined')\r
-                                               myDefinition.style = myDefinition.controlStyle;\r
+                                       if ( typeof myDefinition.inputStyle != 'undefined' )\r
+                                               myDefinition.style = myDefinition.inputStyle;\r
 \r
                                        _.select = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'select', null, attributes, innerHTML.join( '' ) );\r
                                        return html.join( '' );\r
@@ -639,7 +643,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @constructor\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>validate</strong> (Optional) The validation function.</li>\r
@@ -663,7 +667,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                /** @ignore */\r
                                var innerHTML = function()\r
                                {\r
-                                       _.frameId = CKEDITOR.tools.getNextNumber() + '_fileInput';\r
+                                       _.frameId = CKEDITOR.tools.getNextId() + '_fileInput';\r
 \r
                                        // Support for custom document.domain in IE.\r
                                        var isCustomDomain = CKEDITOR.env.isCustomDomain();\r
@@ -712,7 +716,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * @constructor\r
                         * @param {CKEDITOR.dialog} dialog\r
                         * Parent dialog object.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>for</strong> (Required) The file input's page and element Id\r
@@ -765,7 +769,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                 * @extends CKEDITOR.ui.dialog.uiElement\r
                                 * @name CKEDITOR.ui.dialog.html\r
                                 * @param {CKEDITOR.dialog} dialog Parent dialog object.\r
-                                * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition Element definition.\r
+                                * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition.\r
                                 * Accepted fields:\r
                                 * <ul>\r
                                 *      <li><strong>html</strong> (Required) HTML code of this element.</li>\r
@@ -837,7 +841,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                         * objects in childObjList.\r
                         * @param {Array} htmlList\r
                         * Array of HTML code that this element will output to.\r
-                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\r
                         * The element definition. Accepted fields:\r
                         * <ul>\r
                         *      <li><strong>label</strong> (Optional) The legend of the this fieldset.</li>\r
@@ -931,7 +935,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                {\r
                                        this._.disabled = false;\r
                                        var element = this.getElement();\r
-                                       element && element.removeClass( 'disabled' );\r
+                                       element && element.removeClass( 'cke_disabled' );\r
                                },\r
 \r
                                /**\r
@@ -941,7 +945,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                disable : function()\r
                                {\r
                                        this._.disabled = true;\r
-                                       this.getElement().addClass( 'disabled' );\r
+                                       this.getElement().addClass( 'cke_disabled' );\r
                                },\r
 \r
                                isVisible : function()\r
@@ -1061,7 +1065,7 @@ CKEDITOR.plugins.add( 'dialogui' );
                                setValue : function( value )\r
                                {\r
                                        !value && ( value = '' );\r
-                                       return CKEDITOR.ui.dialog.uiElement.prototype.setValue.call( this, value );\r
+                                       return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments );\r
                                },\r
 \r
                                keyboardFocusable : true\r
@@ -1156,11 +1160,12 @@ CKEDITOR.plugins.add( 'dialogui' );
                                 * Sets the state of the checkbox.\r
                                 * @example\r
                                 * @param {Boolean} true to tick the checkbox, false to untick it.\r
+                                * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.\r
                                 */\r
-                               setValue : function( checked )\r
+                               setValue : function( checked, noChangeEvent )\r
                                {\r
                                        this.getInputElement().$.checked = checked;\r
-                                       this.fire( 'change', { value : checked } );\r
+                                       !noChangeEvent && this.fire( 'change', { value : checked } );\r
                                },\r
 \r
                                /**\r
@@ -1222,14 +1227,15 @@ CKEDITOR.plugins.add( 'dialogui' );
                                 * Checks one of the radio buttons in this button group.\r
                                 * @example\r
                                 * @param {String} value The value of the button to be chcked.\r
+                                * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.\r
                                 */\r
-                               setValue : function( value )\r
+                               setValue : function( value, noChangeEvent )\r
                                {\r
                                        var children = this._.children,\r
                                                item;\r
                                        for ( var i = 0 ; ( i < children.length ) && ( item = children[i] ) ; i++ )\r
                                                item.getElement().$.checked = ( item.getValue() == value );\r
-                                       this.fire( 'change', { value : value } );\r
+                                       !noChangeEvent && this.fire( 'change', { value : value } );\r
                                },\r
 \r
                                /**\r
@@ -1382,18 +1388,19 @@ CKEDITOR.plugins.add( 'dialogui' );
                                 */\r
                                reset : function()\r
                                {\r
-                                       var frameElement = CKEDITOR.document.getById( this._.frameId ),\r
+                                       var _ = this._,\r
+                                               frameElement = CKEDITOR.document.getById( _.frameId ),\r
                                                frameDocument = frameElement.getFrameDocument(),\r
-                                               elementDefinition = this._.definition,\r
-                                               buttons = this._.buttons,\r
+                                               elementDefinition = _.definition,\r
+                                               buttons = _.buttons,\r
                                                callNumber = this.formLoadedNumber,\r
                                                unloadNumber = this.formUnloadNumber,\r
-                                               langDir = this._.dialog._.editor.lang.dir,\r
-                                               langCode = this._.dialog._.editor.langCode;\r
+                                               langDir = _.dialog._.editor.lang.dir,\r
+                                               langCode = _.dialog._.editor.langCode;\r
 \r
                                        // The callback function for the iframe, but we must call tools.addFunction only once\r
                                        // so we store the function number in this.formLoadedNumber\r
-                                       if (!callNumber)\r
+                                       if ( !callNumber )\r
                                        {\r
                                                callNumber = this.formLoadedNumber = CKEDITOR.tools.addFunction(\r
                                                        function()\r
@@ -1457,7 +1464,7 @@ CKEDITOR.plugins.add( 'dialogui' );
 \r
                                getValue : function()\r
                                {\r
-                                       return this.getInputElement().$.value;\r
+                                       return this.getInputElement().$.value || '';\r
                                },\r
 \r
                                /***\r
@@ -1518,3 +1525,17 @@ CKEDITOR.plugins.add( 'dialogui' );
        CKEDITOR.dialog.addUIElement( 'html', commonBuilder );\r
        CKEDITOR.dialog.addUIElement( 'fieldset', containerBuilder );\r
 })();\r
+\r
+/**\r
+ * Fired when the value of the uiElement is changed\r
+ * @name CKEDITOR.ui.dialog.uiElement#change\r
+ * @event\r
+ */\r
+\r
+/**\r
+ * Fired when the inner frame created by the element is ready.\r
+ * Each time the button is used or the dialog is loaded a new\r
+ * form might be created.\r
+ * @name CKEDITOR.ui.dialog.fileButton#formLoaded\r
+ * @event\r
+ */\r