JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.3
[ckeditor.git] / _source / plugins / forms / plugin.js
index a2c3027..8c247c4 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -18,6 +18,17 @@ CKEDITOR.plugins.add( 'forms',
                        '{' +\r
                                'border: 1px dotted #FF0000;' +\r
                                'padding: 2px;' +\r
+                       '}\n' );\r
+\r
+               editor.addCss(\r
+                       'img.cke_hidden' +\r
+                       '{' +\r
+                               'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/hiddenfield.gif' ) + ');' +\r
+                               'background-position: center center;' +\r
+                               'background-repeat: no-repeat;' +\r
+                               'border: 1px solid #a9a9a9;' +\r
+                               'width: 16px !important;' +\r
+                               'height: 16px !important;' +\r
                        '}' );\r
 \r
                // All buttons use the same code to register. So, to avoid\r
@@ -120,13 +131,13 @@ CKEDITOR.plugins.add( 'forms',
                {\r
                        editor.contextMenu.addListener( function( element )\r
                                {\r
-                                       if ( element && element.hasAscendant( 'form', true ) )\r
+                                       if ( element && element.hasAscendant( 'form', true ) && !element.isReadOnly() )\r
                                                return { form : CKEDITOR.TRISTATE_OFF };\r
                                });\r
 \r
                        editor.contextMenu.addListener( function( element )\r
                                {\r
-                                       if ( element )\r
+                                       if ( element && !element.isReadOnly() )\r
                                        {\r
                                                var name = element.getName();\r
 \r
@@ -138,39 +149,80 @@ CKEDITOR.plugins.add( 'forms',
 \r
                                                if ( name == 'input' )\r
                                                {\r
-                                                       var type = element.getAttribute( 'type' );\r
+                                                       switch( element.getAttribute( 'type' ) )\r
+                                                       {\r
+                                                               case 'button' :\r
+                                                               case 'submit' :\r
+                                                               case 'reset' :\r
+                                                                       return { button : CKEDITOR.TRISTATE_OFF };\r
 \r
-                                                       if ( type == 'text' || type == 'password' )\r
-                                                               return { textfield : CKEDITOR.TRISTATE_OFF };\r
+                                                               case 'checkbox' :\r
+                                                                       return { checkbox : CKEDITOR.TRISTATE_OFF };\r
 \r
-                                                       if ( type == 'button' || type == 'submit' || type == 'reset' )\r
-                                                               return { button : CKEDITOR.TRISTATE_OFF };\r
+                                                               case 'radio' :\r
+                                                                       return { radio : CKEDITOR.TRISTATE_OFF };\r
 \r
-                                                       if ( type == 'checkbox' )\r
-                                                               return { checkbox : CKEDITOR.TRISTATE_OFF };\r
+                                                               case 'image' :\r
+                                                                       return { imagebutton : CKEDITOR.TRISTATE_OFF };\r
 \r
-                                                       if ( type == 'radio' )\r
-                                                               return { radio : CKEDITOR.TRISTATE_OFF };\r
-\r
-                                                       if ( type == 'image' )\r
-                                                               return { imagebutton : CKEDITOR.TRISTATE_OFF };\r
+                                                               default :\r
+                                                                       return { textfield : CKEDITOR.TRISTATE_OFF };\r
+                                                       }\r
                                                }\r
 \r
-                                               if ( name == 'img' && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' )\r
+                                               if ( name == 'img' && element.data( 'cke-real-element-type' ) == 'hiddenfield' )\r
                                                        return { hiddenfield : CKEDITOR.TRISTATE_OFF };\r
                                        }\r
                                });\r
                }\r
+\r
+               editor.on( 'doubleclick', function( evt )\r
+                       {\r
+                               var element = evt.data.element;\r
+\r
+                               if ( element.is( 'form' ) )\r
+                                       evt.data.dialog = 'form';\r
+                               else if ( element.is( 'select' ) )\r
+                                       evt.data.dialog = 'select';\r
+                               else if ( element.is( 'textarea' ) )\r
+                                       evt.data.dialog = 'textarea';\r
+                               else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' )\r
+                                       evt.data.dialog = 'hiddenfield';\r
+                               else if ( element.is( 'input' ) )\r
+                               {\r
+                                       switch ( element.getAttribute( 'type' ) )\r
+                                       {\r
+                                               case 'button' :\r
+                                               case 'submit' :\r
+                                               case 'reset' :\r
+                                                       evt.data.dialog = 'button';\r
+                                                       break;\r
+                                               case 'checkbox' :\r
+                                                       evt.data.dialog = 'checkbox';\r
+                                                       break;\r
+                                               case 'radio' :\r
+                                                       evt.data.dialog = 'radio';\r
+                                                       break;\r
+                                               case 'image' :\r
+                                                       evt.data.dialog = 'imagebutton';\r
+                                                       break;\r
+                                               default :\r
+                                                       evt.data.dialog = 'textfield';\r
+                                                       break;\r
+                                       }\r
+                               }\r
+                       });\r
        },\r
 \r
        afterInit : function( editor )\r
        {\r
+               var dataProcessor = editor.dataProcessor,\r
+                       htmlFilter = dataProcessor && dataProcessor.htmlFilter,\r
+                       dataFilter = dataProcessor && dataProcessor.dataFilter;\r
+\r
                // Cleanup certain IE form elements default values.\r
-               if( CKEDITOR.env.ie )\r
+               if ( CKEDITOR.env.ie )\r
                {\r
-                       var dataProcessor = editor.dataProcessor,\r
-                               htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
-\r
                        htmlFilter && htmlFilter.addRules(\r
                        {\r
                                elements :\r
@@ -179,39 +231,58 @@ CKEDITOR.plugins.add( 'forms',
                                        {\r
                                                var attrs = input.attributes,\r
                                                        type = attrs.type;\r
-                                               if( type == 'checkbox' || type == 'radio' )\r
+                                               // Old IEs don't provide type for Text inputs #5522\r
+                                               if ( !type )\r
+                                                       attrs.type = 'text';\r
+                                               if ( type == 'checkbox' || type == 'radio' )\r
                                                        attrs.value == 'on' && delete attrs.value;\r
                                        }\r
                                }\r
                        } );\r
                }\r
+\r
+               if ( dataFilter )\r
+               {\r
+                       dataFilter.addRules(\r
+                       {\r
+                               elements :\r
+                               {\r
+                                       input : function( element )\r
+                                       {\r
+                                               if ( element.attributes.type == 'hidden' )\r
+                                                       return editor.createFakeParserElement( element, 'cke_hidden', 'hiddenfield' );\r
+                                       }\r
+                               }\r
+                       } );\r
+               }\r
        },\r
-       requires : [ 'image' ]\r
+       requires : [ 'image', 'fakeobjects' ]\r
 } );\r
 \r
 if ( CKEDITOR.env.ie )\r
 {\r
-       CKEDITOR.dom.element.prototype.hasAttribute = function( name )\r
-       {\r
-               var $attr = this.$.attributes.getNamedItem( name );\r
-\r
-               if ( this.getName() == 'input' )\r
+       CKEDITOR.dom.element.prototype.hasAttribute = CKEDITOR.tools.override( CKEDITOR.dom.element.prototype.hasAttribute,\r
+               function( original )\r
                {\r
-                       switch ( name )\r
-                       {\r
-                               case 'class' :\r
-                                       return this.$.className.length > 0;\r
-                               case 'checked' :\r
-                                       return !!this.$.checked;\r
-                               case 'value' :\r
-                                       var type = this.getAttribute( 'type' );\r
-                                       if ( type == 'checkbox' || type == 'radio' )\r
-                                               return this.$.value != 'on';\r
-                                       break;\r
-                               default:\r
-                       }\r
-               }\r
+                       return function( name )\r
+                               {\r
+                                       var $attr = this.$.attributes.getNamedItem( name );\r
+\r
+                                       if ( this.getName() == 'input' )\r
+                                       {\r
+                                               switch ( name )\r
+                                               {\r
+                                                       case 'class' :\r
+                                                               return this.$.className.length > 0;\r
+                                                       case 'checked' :\r
+                                                               return !!this.$.checked;\r
+                                                       case 'value' :\r
+                                                               var type = this.getAttribute( 'type' );\r
+                                                               return type == 'checkbox' || type == 'radio' ? this.$.value != 'on' : this.$.value;\r
+                                               }\r
+                                       }\r
 \r
-               return !!( $attr && $attr.specified );\r
-       };\r
+                                       return original.apply( this, arguments );\r
+                               };\r
+               });\r
 }\r