JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.5.1
[ckeditor.git] / _source / plugins / forms / dialogs / button.js
index 3e02476..730864f 100644 (file)
@@ -1,9 +1,26 @@
 /*\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
 CKEDITOR.dialog.add( 'button', function( editor )\r
 {\r
+       function commitAttributes( element )\r
+       {\r
+               var val = this.getValue();\r
+               if ( val )\r
+               {\r
+                       element.attributes[ this.id ] = val;\r
+                       if ( this.id == 'name' )\r
+                               element.attributes[ 'data-cke-saved-name' ] = val;\r
+               }\r
+               else\r
+               {\r
+                       delete element.attributes[ this.id ];\r
+                       if ( this.id == 'name' )\r
+                               delete element.attributes[ 'data-cke-saved-name' ];\r
+               }\r
+       }\r
+\r
        return {\r
                title : editor.lang.button.title,\r
                minWidth : 350,\r
@@ -24,19 +41,25 @@ CKEDITOR.dialog.add( 'button', function( editor )
                },\r
                onOk : function()\r
                {\r
-                       var editor,\r
+                       var editor = this.getParentEditor(),\r
                                element = this.button,\r
                                isInsertMode = !element;\r
 \r
+                       var fake = element ? CKEDITOR.htmlParser.fragment.fromHtml( element.getOuterHtml() ).children[ 0 ]\r
+                                       : new CKEDITOR.htmlParser.element( 'input' );\r
+                       this.commitContent( fake );\r
+\r
+                       var writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       fake.writeHtml( writer );\r
+                       var newElement = CKEDITOR.dom.element.createFromHtml( writer.getHtml(), editor.document );\r
+\r
                        if ( isInsertMode )\r
+                               editor.insertElement( newElement );\r
+                       else\r
                        {\r
-                               editor = this.getParentEditor();\r
-                               element = editor.document.createElement( 'input' );\r
+                               newElement.replace( element );\r
+                               editor.getSelection().selectElement( newElement );\r
                        }\r
-\r
-                       if ( isInsertMode )\r
-                               editor.insertElement( element );\r
-                       this.commitContent( { element : element } );\r
                },\r
                contents : [\r
                        {\r
@@ -45,7 +68,7 @@ CKEDITOR.dialog.add( 'button', function( editor )
                                title : editor.lang.button.title,\r
                                elements : [\r
                                        {\r
-                                               id : '_cke_saved_name',\r
+                                               id : 'name',\r
                                                type : 'text',\r
                                                label : editor.lang.common.name,\r
                                                'default' : '',\r
@@ -56,18 +79,7 @@ CKEDITOR.dialog.add( 'button', function( editor )
                                                                        element.getAttribute( 'name' ) ||\r
                                                                        '' );\r
                                                },\r
-                                               commit : function( data )\r
-                                               {\r
-                                                       var element = data.element;\r
-\r
-                                                       if ( this.getValue() )\r
-                                                               element.data( 'cke-saved-name', this.getValue() );\r
-                                                       else\r
-                                                       {\r
-                                                               element.data( 'cke-saved-name', false );\r
-                                                               element.removeAttribute( 'name' );\r
-                                                       }\r
-                                               }\r
+                                               commit : commitAttributes\r
                                        },\r
                                        {\r
                                                id : 'value',\r
@@ -79,15 +91,7 @@ CKEDITOR.dialog.add( 'button', function( editor )
                                                {\r
                                                        this.setValue( element.getAttribute( 'value' ) || '' );\r
                                                },\r
-                                               commit : function( data )\r
-                                               {\r
-                                                       var element = data.element;\r
-\r
-                                                       if ( this.getValue() )\r
-                                                               element.setAttribute( 'value', this.getValue() );\r
-                                                       else\r
-                                                               element.removeAttribute( 'value' );\r
-                                               }\r
+                                               commit : commitAttributes\r
                                        },\r
                                        {\r
                                                id : 'type',\r
@@ -105,28 +109,7 @@ CKEDITOR.dialog.add( 'button', function( editor )
                                                {\r
                                                        this.setValue( element.getAttribute( 'type' ) || '' );\r
                                                },\r
-                                               commit : function( data )\r
-                                               {\r
-                                                       var element = data.element;\r
-\r
-                                                       if ( CKEDITOR.env.ie )\r
-                                                       {\r
-                                                               var elementType = element.getAttribute( 'type' );\r
-                                                               var currentType = this.getValue();\r
-\r
-                                                               if ( currentType != elementType )\r
-                                                               {\r
-                                                                       var replace = CKEDITOR.dom.element.createFromHtml( '<input type="' + currentType +\r
-                                                                               '"></input>', editor.document );\r
-                                                                       element.copyAttributes( replace, { type : 1 } );\r
-                                                                       replace.replace( element );\r
-                                                                       editor.getSelection().selectElement( replace );\r
-                                                                       data.element = replace;\r
-                                                               }\r
-                                                       }\r
-                                                       else\r
-                                                               element.setAttribute( 'type', this.getValue() );\r
-                                               }\r
+                                               commit : commitAttributes\r
                                        }\r
                                ]\r
                        }\r