730864f6ce5e1948327da81fa5d9033dc3d71db3
[ckeditor.git] / _source / plugins / forms / dialogs / button.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 CKEDITOR.dialog.add( 'button', function( editor )
6 {
7 function commitAttributes( element )
8 {
9 var val = this.getValue();
10 if ( val )
11 {
12 element.attributes[ this.id ] = val;
13 if ( this.id == 'name' )
14 element.attributes[ 'data-cke-saved-name' ] = val;
15 }
16 else
17 {
18 delete element.attributes[ this.id ];
19 if ( this.id == 'name' )
20 delete element.attributes[ 'data-cke-saved-name' ];
21 }
22 }
23
24 return {
25 title : editor.lang.button.title,
26 minWidth : 350,
27 minHeight : 150,
28 onShow : function()
29 {
30 delete this.button;
31 var element = this.getParentEditor().getSelection().getSelectedElement();
32 if ( element && element.is( 'input' ) )
33 {
34 var type = element.getAttribute( 'type' );
35 if ( type in { button:1, reset:1, submit:1 } )
36 {
37 this.button = element;
38 this.setupContent( element );
39 }
40 }
41 },
42 onOk : function()
43 {
44 var editor = this.getParentEditor(),
45 element = this.button,
46 isInsertMode = !element;
47
48 var fake = element ? CKEDITOR.htmlParser.fragment.fromHtml( element.getOuterHtml() ).children[ 0 ]
49 : new CKEDITOR.htmlParser.element( 'input' );
50 this.commitContent( fake );
51
52 var writer = new CKEDITOR.htmlParser.basicWriter();
53 fake.writeHtml( writer );
54 var newElement = CKEDITOR.dom.element.createFromHtml( writer.getHtml(), editor.document );
55
56 if ( isInsertMode )
57 editor.insertElement( newElement );
58 else
59 {
60 newElement.replace( element );
61 editor.getSelection().selectElement( newElement );
62 }
63 },
64 contents : [
65 {
66 id : 'info',
67 label : editor.lang.button.title,
68 title : editor.lang.button.title,
69 elements : [
70 {
71 id : 'name',
72 type : 'text',
73 label : editor.lang.common.name,
74 'default' : '',
75 setup : function( element )
76 {
77 this.setValue(
78 element.data( 'cke-saved-name' ) ||
79 element.getAttribute( 'name' ) ||
80 '' );
81 },
82 commit : commitAttributes
83 },
84 {
85 id : 'value',
86 type : 'text',
87 label : editor.lang.button.text,
88 accessKey : 'V',
89 'default' : '',
90 setup : function( element )
91 {
92 this.setValue( element.getAttribute( 'value' ) || '' );
93 },
94 commit : commitAttributes
95 },
96 {
97 id : 'type',
98 type : 'select',
99 label : editor.lang.button.type,
100 'default' : 'button',
101 accessKey : 'T',
102 items :
103 [
104 [ editor.lang.button.typeBtn, 'button' ],
105 [ editor.lang.button.typeSbm, 'submit' ],
106 [ editor.lang.button.typeRst, 'reset' ]
107 ],
108 setup : function( element )
109 {
110 this.setValue( element.getAttribute( 'type' ) || '' );
111 },
112 commit : commitAttributes
113 }
114 ]
115 }
116 ]
117 };
118 });