JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.5
[ckeditor.git] / _source / plugins / iframe / dialogs / iframe.js
diff --git a/_source/plugins/iframe/dialogs/iframe.js b/_source/plugins/iframe/dialogs/iframe.js
new file mode 100644 (file)
index 0000000..a463652
--- /dev/null
@@ -0,0 +1,257 @@
+/*\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       // Map 'true' and 'false' values to match W3C's specifications\r
+       // http://www.w3.org/TR/REC-html40/present/frames.html#h-16.5\r
+       var checkboxValues =\r
+       {\r
+               scrolling : { 'true' : 'yes', 'false' : 'no' },\r
+               frameborder : { 'true' : '1', 'false' : '0' }\r
+       };\r
+\r
+       function loadValue( iframeNode )\r
+       {\r
+               var isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox;\r
+               if ( iframeNode.hasAttribute( this.id ) )\r
+               {\r
+                       var value = iframeNode.getAttribute( this.id );\r
+                       if ( isCheckbox )\r
+                               this.setValue( checkboxValues[ this.id ][ 'true' ] == value.toLowerCase() );\r
+                       else\r
+                               this.setValue( value );\r
+               }\r
+       }\r
+\r
+       function commitValue( iframeNode )\r
+       {\r
+               var isRemove = this.getValue() === '',\r
+                       isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox,\r
+                       value = this.getValue();\r
+               if ( isRemove )\r
+                       iframeNode.removeAttribute( this.att || this.id );\r
+               else if ( isCheckbox )\r
+                       iframeNode.setAttribute( this.id, checkboxValues[ this.id ][ value ] );\r
+               else\r
+                       iframeNode.setAttribute( this.att || this.id, value );\r
+       }\r
+\r
+       CKEDITOR.dialog.add( 'iframe', function( editor )\r
+       {\r
+               var iframeLang = editor.lang.iframe,\r
+                       commonLang = editor.lang.common,\r
+                       dialogadvtab = editor.plugins.dialogadvtab;\r
+               return {\r
+                       title : iframeLang.title,\r
+                       minWidth : 350,\r
+                       minHeight : 260,\r
+                       onShow : function()\r
+                       {\r
+                               // Clear previously saved elements.\r
+                               this.fakeImage = this.iframeNode = null;\r
+\r
+                               var fakeImage = this.getSelectedElement();\r
+                               if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'iframe' )\r
+                               {\r
+                                       this.fakeImage = fakeImage;\r
+\r
+                                       var iframeNode = editor.restoreRealElement( fakeImage );\r
+                                       this.iframeNode = iframeNode;\r
+\r
+                                       this.setupContent( iframeNode, fakeImage );\r
+                               }\r
+                       },\r
+                       onOk : function()\r
+                       {\r
+                               var iframeNode;\r
+                               if ( !this.fakeImage )\r
+                                       iframeNode = new CKEDITOR.dom.element( 'iframe' );\r
+                               else\r
+                                       iframeNode = this.iframeNode;\r
+\r
+                               // A subset of the specified attributes/styles\r
+                               // should also be applied on the fake element to\r
+                               // have better visual effect. (#5240)\r
+                               var extraStyles = {}, extraAttributes = {};\r
+                               this.commitContent( iframeNode, extraStyles, extraAttributes );\r
+\r
+                               // Refresh the fake image.\r
+                               var newFakeImage = editor.createFakeElement( iframeNode, 'cke_iframe', 'iframe', true );\r
+                               newFakeImage.setAttributes( extraAttributes );\r
+                               newFakeImage.setStyles( extraStyles );\r
+                               if ( this.fakeImage )\r
+                               {\r
+                                       newFakeImage.replace( this.fakeImage );\r
+                                       editor.getSelection().selectElement( newFakeImage );\r
+                               }\r
+                               else\r
+                                       editor.insertElement( newFakeImage );\r
+                       },\r
+                       contents : [\r
+                               {\r
+                                       id : 'info',\r
+                                       label : commonLang.generalTab,\r
+                                       accessKey : 'I',\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'src',\r
+                                                                       type : 'text',\r
+                                                                       label : commonLang.url,\r
+                                                                       required : true,\r
+                                                                       validate : CKEDITOR.dialog.validate.notEmpty( iframeLang.noUrl ),\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'width',\r
+                                                                       type : 'text',\r
+                                                                       style : 'width:100%',\r
+                                                                       labelLayout : 'vertical',\r
+                                                                       label : commonLang.width,\r
+                                                                       validate : CKEDITOR.dialog.validate.integer( commonLang.invalidWidth ),\r
+                                                                       setup : function( iframeNode, fakeImage )\r
+                                                                       {\r
+                                                                               loadValue.apply( this, arguments );\r
+                                                                               if ( fakeImage )\r
+                                                                               {\r
+                                                                                       var fakeImageWidth = parseInt( fakeImage.$.style.width, 10 );\r
+                                                                                       if ( !isNaN( fakeImageWidth ) )\r
+                                                                                               this.setValue( fakeImageWidth );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       commit : function( iframeNode, extraStyles )\r
+                                                                       {\r
+                                                                               commitValue.apply( this, arguments );\r
+                                                                               if ( this.getValue() )\r
+                                                                                       extraStyles.width = this.getValue() + 'px';\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'height',\r
+                                                                       type : 'text',\r
+                                                                       style : 'width:100%',\r
+                                                                       labelLayout : 'vertical',\r
+                                                                       label : commonLang.height,\r
+                                                                       validate : CKEDITOR.dialog.validate.integer( commonLang.invalidHeight ),\r
+                                                                       setup : function( iframeNode, fakeImage )\r
+                                                                       {\r
+                                                                               loadValue.apply( this, arguments );\r
+                                                                               if ( fakeImage )\r
+                                                                               {\r
+                                                                                       var fakeImageHeight = parseInt( fakeImage.$.style.height, 10 );\r
+                                                                                       if ( !isNaN( fakeImageHeight ) )\r
+                                                                                               this.setValue( fakeImageHeight );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       commit : function( iframeNode, extraStyles )\r
+                                                                       {\r
+                                                                               commitValue.apply( this, arguments );\r
+                                                                               if ( this.getValue() )\r
+                                                                                       extraStyles.height = this.getValue() + 'px';\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'align',\r
+                                                                       type : 'select',\r
+                                                                       'default' : '',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ commonLang.notSet , '' ],\r
+                                                                               [ commonLang.alignLeft , 'left' ],\r
+                                                                               [ commonLang.alignRight , 'right' ],\r
+                                                                               [ commonLang.alignTop , 'top' ],\r
+                                                                               [ commonLang.alignMiddle , 'middle' ],\r
+                                                                               [ commonLang.alignBottom , 'bottom' ]\r
+                                                                       ],\r
+                                                                       style : 'width:100%',\r
+                                                                       labelLayout : 'vertical',\r
+                                                                       label : commonLang.align,\r
+                                                                       setup : function( iframeNode, fakeImage )\r
+                                                                       {\r
+                                                                               loadValue.apply( this, arguments );\r
+                                                                               if ( fakeImage )\r
+                                                                               {\r
+                                                                                       var fakeImageAlign = fakeImage.getAttribute( 'align' );\r
+                                                                                       this.setValue( fakeImageAlign && fakeImageAlign.toLowerCase() || '' );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       commit : function( iframeNode, extraStyles, extraAttributes )\r
+                                                                       {\r
+                                                                               commitValue.apply( this, arguments );\r
+                                                                               if ( this.getValue() )\r
+                                                                                       extraAttributes.align = this.getValue();\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '50%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'scrolling',\r
+                                                                       type : 'checkbox',\r
+                                                                       label : iframeLang.scrolling,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'frameborder',\r
+                                                                       type : 'checkbox',\r
+                                                                       label : iframeLang.border,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '50%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'name',\r
+                                                                       type : 'text',\r
+                                                                       label : commonLang.name,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'title',\r
+                                                                       type : 'text',\r
+                                                                       label : commonLang.advisoryTitle,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       id : 'longdesc',\r
+                                                       type : 'text',\r
+                                                       label : commonLang.longDescr,\r
+                                                       setup : loadValue,\r
+                                                       commit : commitValue\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               dialogadvtab && dialogadvtab.createAdvancedTab( editor, { id:1, classes:1, styles:1 })\r
+                       ]\r
+               };\r
+       });\r
+})();\r