Bugfix : prendre le innerHTML du body du document n'est pas une bonne idée, dans...
[ckeditor.git] / skins / ckeditor / _source / plugins / iframe / dialogs / iframe.js
1 /*
2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3 For licensing, see LICENSE.html or http://ckeditor.com/license
4 */
5
6 (function()
7 {
8 // Map 'true' and 'false' values to match W3C's specifications
9 // http://www.w3.org/TR/REC-html40/present/frames.html#h-16.5
10 var checkboxValues =
11 {
12 scrolling : { 'true' : 'yes', 'false' : 'no' },
13 frameborder : { 'true' : '1', 'false' : '0' }
14 };
15
16 function loadValue( iframeNode )
17 {
18 var isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox;
19 if ( iframeNode.hasAttribute( this.id ) )
20 {
21 var value = iframeNode.getAttribute( this.id );
22 if ( isCheckbox )
23 this.setValue( checkboxValues[ this.id ][ 'true' ] == value.toLowerCase() );
24 else
25 this.setValue( value );
26 }
27 }
28
29 function commitValue( iframeNode )
30 {
31 var isRemove = this.getValue() === '',
32 isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox,
33 value = this.getValue();
34 if ( isRemove )
35 iframeNode.removeAttribute( this.att || this.id );
36 else if ( isCheckbox )
37 iframeNode.setAttribute( this.id, checkboxValues[ this.id ][ value ] );
38 else
39 iframeNode.setAttribute( this.att || this.id, value );
40 }
41
42 CKEDITOR.dialog.add( 'iframe', function( editor )
43 {
44 var iframeLang = editor.lang.iframe,
45 commonLang = editor.lang.common,
46 dialogadvtab = editor.plugins.dialogadvtab;
47 return {
48 title : iframeLang.title,
49 minWidth : 350,
50 minHeight : 260,
51 onShow : function()
52 {
53 // Clear previously saved elements.
54 this.fakeImage = this.iframeNode = null;
55
56 var fakeImage = this.getSelectedElement();
57 if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'iframe' )
58 {
59 this.fakeImage = fakeImage;
60
61 var iframeNode = editor.restoreRealElement( fakeImage );
62 this.iframeNode = iframeNode;
63
64 this.setupContent( iframeNode );
65 }
66 },
67 onOk : function()
68 {
69 var iframeNode;
70 if ( !this.fakeImage )
71 iframeNode = new CKEDITOR.dom.element( 'iframe' );
72 else
73 iframeNode = this.iframeNode;
74
75 // A subset of the specified attributes/styles
76 // should also be applied on the fake element to
77 // have better visual effect. (#5240)
78 var extraStyles = {}, extraAttributes = {};
79 this.commitContent( iframeNode, extraStyles, extraAttributes );
80
81 // Refresh the fake image.
82 var newFakeImage = editor.createFakeElement( iframeNode, 'cke_iframe', 'iframe', true );
83 newFakeImage.setAttributes( extraAttributes );
84 newFakeImage.setStyles( extraStyles );
85 if ( this.fakeImage )
86 {
87 newFakeImage.replace( this.fakeImage );
88 editor.getSelection().selectElement( newFakeImage );
89 }
90 else
91 editor.insertElement( newFakeImage );
92 },
93 contents : [
94 {
95 id : 'info',
96 label : commonLang.generalTab,
97 accessKey : 'I',
98 elements :
99 [
100 {
101 type : 'vbox',
102 padding : 0,
103 children :
104 [
105 {
106 id : 'src',
107 type : 'text',
108 label : commonLang.url,
109 required : true,
110 validate : CKEDITOR.dialog.validate.notEmpty( iframeLang.noUrl ),
111 setup : loadValue,
112 commit : commitValue
113 }
114 ]
115 },
116 {
117 type : 'hbox',
118 children :
119 [
120 {
121 id : 'width',
122 type : 'text',
123 style : 'width:100%',
124 labelLayout : 'vertical',
125 label : commonLang.width,
126 validate : CKEDITOR.dialog.validate.htmlLength( commonLang.invalidHtmlLength.replace( '%1', commonLang.width ) ),
127 setup : loadValue,
128 commit : commitValue
129 },
130 {
131 id : 'height',
132 type : 'text',
133 style : 'width:100%',
134 labelLayout : 'vertical',
135 label : commonLang.height,
136 validate : CKEDITOR.dialog.validate.htmlLength( commonLang.invalidHtmlLength.replace( '%1', commonLang.height ) ),
137 setup : loadValue,
138 commit : commitValue
139 },
140 {
141 id : 'align',
142 type : 'select',
143 'default' : '',
144 items :
145 [
146 [ commonLang.notSet , '' ],
147 [ commonLang.alignLeft , 'left' ],
148 [ commonLang.alignRight , 'right' ],
149 [ commonLang.alignTop , 'top' ],
150 [ commonLang.alignMiddle , 'middle' ],
151 [ commonLang.alignBottom , 'bottom' ]
152 ],
153 style : 'width:100%',
154 labelLayout : 'vertical',
155 label : commonLang.align,
156 setup : function( iframeNode, fakeImage )
157 {
158 loadValue.apply( this, arguments );
159 if ( fakeImage )
160 {
161 var fakeImageAlign = fakeImage.getAttribute( 'align' );
162 this.setValue( fakeImageAlign && fakeImageAlign.toLowerCase() || '' );
163 }
164 },
165 commit : function( iframeNode, extraStyles, extraAttributes )
166 {
167 commitValue.apply( this, arguments );
168 if ( this.getValue() )
169 extraAttributes.align = this.getValue();
170 }
171 }
172 ]
173 },
174 {
175 type : 'hbox',
176 widths : [ '50%', '50%' ],
177 children :
178 [
179 {
180 id : 'scrolling',
181 type : 'checkbox',
182 label : iframeLang.scrolling,
183 setup : loadValue,
184 commit : commitValue
185 },
186 {
187 id : 'frameborder',
188 type : 'checkbox',
189 label : iframeLang.border,
190 setup : loadValue,
191 commit : commitValue
192 }
193 ]
194 },
195 {
196 type : 'hbox',
197 widths : [ '50%', '50%' ],
198 children :
199 [
200 {
201 id : 'name',
202 type : 'text',
203 label : commonLang.name,
204 setup : loadValue,
205 commit : commitValue
206 },
207 {
208 id : 'title',
209 type : 'text',
210 label : commonLang.advisoryTitle,
211 setup : loadValue,
212 commit : commitValue
213 }
214 ]
215 },
216 {
217 id : 'longdesc',
218 type : 'text',
219 label : commonLang.longDescr,
220 setup : loadValue,
221 commit : commitValue
222 }
223 ]
224 },
225 dialogadvtab && dialogadvtab.createAdvancedTab( editor, { id:1, classes:1, styles:1 })
226 ]
227 };
228 });
229 })();