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