JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.1
[ckeditor.git] / _source / plugins / flash / plugin.js
1 /*\r
2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 (function()\r
7 {\r
8         var flashFilenameRegex = /\.swf(?:$|\?)/i;\r
9 \r
10         function isFlashEmbed( element )\r
11         {\r
12                 var attributes = element.attributes;\r
13 \r
14                 return ( attributes.type == 'application/x-shockwave-flash' || flashFilenameRegex.test( attributes.src || '' ) );\r
15         }\r
16 \r
17         function createFakeElement( editor, realElement )\r
18         {\r
19                 return editor.createFakeParserElement( realElement, 'cke_flash', 'flash', true );\r
20         }\r
21 \r
22         CKEDITOR.plugins.add( 'flash',\r
23         {\r
24                 init : function( editor )\r
25                 {\r
26                         editor.addCommand( 'flash', new CKEDITOR.dialogCommand( 'flash' ) );\r
27                         editor.ui.addButton( 'Flash',\r
28                                 {\r
29                                         label : editor.lang.common.flash,\r
30                                         command : 'flash'\r
31                                 });\r
32                         CKEDITOR.dialog.add( 'flash', this.path + 'dialogs/flash.js' );\r
33 \r
34                         editor.addCss(\r
35                                 'img.cke_flash' +\r
36                                 '{' +\r
37                                         'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' +\r
38                                         'background-position: center center;' +\r
39                                         'background-repeat: no-repeat;' +\r
40                                         'border: 1px solid #a9a9a9;' +\r
41                                         'width: 80px;' +\r
42                                         'height: 80px;' +\r
43                                 '}'\r
44                                 );\r
45 \r
46                         // If the "menu" plugin is loaded, register the menu items.\r
47                         if ( editor.addMenuItems )\r
48                         {\r
49                                 editor.addMenuItems(\r
50                                         {\r
51                                                 flash :\r
52                                                 {\r
53                                                         label : editor.lang.flash.properties,\r
54                                                         command : 'flash',\r
55                                                         group : 'flash'\r
56                                                 }\r
57                                         });\r
58                         }\r
59 \r
60                         editor.on( 'doubleclick', function( evt )\r
61                                 {\r
62                                         var element = evt.data.element;\r
63 \r
64                                         if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'flash' )\r
65                                                 evt.data.dialog = 'flash';\r
66                                 });\r
67 \r
68                         // If the "contextmenu" plugin is loaded, register the listeners.\r
69                         if ( editor.contextMenu )\r
70                         {\r
71                                 editor.contextMenu.addListener( function( element, selection )\r
72                                         {\r
73                                                 if ( element && element.is( 'img' ) && !element.isReadOnly()\r
74                                                                 && element.data( 'cke-real-element-type' ) == 'flash' )\r
75                                                         return { flash : CKEDITOR.TRISTATE_OFF };\r
76                                         });\r
77                         }\r
78                 },\r
79 \r
80                 afterInit : function( editor )\r
81                 {\r
82                         var dataProcessor = editor.dataProcessor,\r
83                                 dataFilter = dataProcessor && dataProcessor.dataFilter;\r
84 \r
85                         if ( dataFilter )\r
86                         {\r
87                                 dataFilter.addRules(\r
88                                         {\r
89                                                 elements :\r
90                                                 {\r
91                                                         'cke:object' : function( element )\r
92                                                         {\r
93                                                                 var attributes = element.attributes,\r
94                                                                         classId = attributes.classid && String( attributes.classid ).toLowerCase();\r
95 \r
96                                                                 if ( !classId && !isFlashEmbed( element ) )\r
97                                                                 {\r
98                                                                         // Look for the inner <embed>\r
99                                                                         for ( var i = 0 ; i < element.children.length ; i++ )\r
100                                                                         {\r
101                                                                                 if ( element.children[ i ].name == 'cke:embed' )\r
102                                                                                 {\r
103                                                                                         if ( !isFlashEmbed( element.children[ i ] ) )\r
104                                                                                                 return null;\r
105 \r
106                                                                                         return createFakeElement( editor, element );\r
107                                                                                 }\r
108                                                                         }\r
109                                                                         return null;\r
110                                                                 }\r
111 \r
112                                                                 return createFakeElement( editor, element );\r
113                                                         },\r
114 \r
115                                                         'cke:embed' : function( element )\r
116                                                         {\r
117                                                                 if ( !isFlashEmbed( element ) )\r
118                                                                         return null;\r
119 \r
120                                                                 return createFakeElement( editor, element );\r
121                                                         }\r
122                                                 }\r
123                                         },\r
124                                         5);\r
125                         }\r
126                 },\r
127 \r
128                 requires : [ 'fakeobjects' ]\r
129         });\r
130 })();\r
131 \r
132 CKEDITOR.tools.extend( CKEDITOR.config,\r
133 {\r
134         /**\r
135          * Save as EMBED tag only. This tag is unrecommended.\r
136          * @type Boolean\r
137          * @default false\r
138          */\r
139         flashEmbedTagOnly : false,\r
140 \r
141         /**\r
142          * Add EMBED tag as alternative: &lt;object&gt&lt;embed&gt&lt;/embed&gt&lt;/object&gt\r
143          * @type Boolean\r
144          * @default false\r
145          */\r
146         flashAddEmbedTag : true,\r
147 \r
148         /**\r
149          * Use embedTagOnly and addEmbedTag values on edit.\r
150          * @type Boolean\r
151          * @default false\r
152          */\r
153         flashConvertOnEdit : false\r
154 } );\r