+ if (!data) {\r
+ data = {\r
+ type : 'flash',\r
+ video: {sources:[]},\r
+ params: {}\r
+ };\r
+ }\r
+\r
+ ed.windowManager.open({\r
+ file : url + '/media.htm',\r
+ width : 430 + parseInt(ed.getLang('media.delta_width', 0)),\r
+ height : 500 + parseInt(ed.getLang('media.delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url,\r
+ data : data\r
+ });\r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});\r
+\r
+ // Update media selection status\r
+ ed.onNodeChange.add(function(ed, cm, node) {\r
+ cm.setActive('media', isMediaImg(node));\r
+ });\r
+ },\r
+\r
+ convertUrl : function(url, force_absolute) {\r
+ var self = this, editor = self.editor, settings = editor.settings,\r
+ urlConverter = settings.url_converter,\r
+ urlConverterScope = settings.url_converter_scope || self;\r
+\r
+ if (!url)\r
+ return url;\r
+\r
+ if (force_absolute)\r
+ return editor.documentBaseURI.toAbsolute(url);\r
+\r
+ return urlConverter.call(urlConverterScope, url, 'src', 'object');\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Media',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ /**\r
+ * Converts the JSON data object to an img node.\r
+ */\r
+ dataToImg : function(data, force_absolute) {\r
+ var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i;\r
+\r
+ data.params.src = self.convertUrl(data.params.src, force_absolute);\r
+\r
+ attrs = data.video.attrs;\r
+ if (attrs)\r
+ attrs.src = self.convertUrl(attrs.src, force_absolute);\r
+\r
+ if (attrs)\r
+ attrs.poster = self.convertUrl(attrs.poster, force_absolute);\r
+\r
+ sources = toArray(data.video.sources);\r
+ if (sources) {\r
+ for (i = 0; i < sources.length; i++)\r
+ sources[i].src = self.convertUrl(sources[i].src, force_absolute);\r
+ }\r
+\r
+ img = self.editor.dom.create('img', {\r
+ id : data.id,\r
+ style : data.style,\r
+ align : data.align,\r
+ src : self.editor.theme.url + '/img/trans.gif',\r
+ 'class' : 'mceItemMedia mceItem' + self.getType(data.type).name,\r
+ 'data-mce-json' : JSON.serialize(data, "'")\r
+ });\r
+\r
+ img.width = data.width || (data.type == 'audio' ? "300" : "320");\r
+ img.height = data.height || (data.type == 'audio' ? "32" : "240");\r
+\r
+ return img;\r
+ },\r
+\r
+ /**\r
+ * Converts the JSON data object to a HTML string.\r
+ */\r
+ dataToHtml : function(data, force_absolute) {\r
+ return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute});\r
+ },\r
+\r
+ /**\r
+ * Converts the JSON data object to a HTML string.\r
+ */\r
+ htmlToData : function(html) {\r
+ var fragment, img, data;\r
+\r
+ data = {\r
+ type : 'flash',\r
+ video: {sources:[]},\r
+ params: {}\r
+ };\r
+\r
+ fragment = this.editor.parser.parse(html);\r
+ img = fragment.getAll('img')[0];\r
+\r
+ if (img) {\r
+ data = JSON.parse(img.attr('data-mce-json'));\r
+ data.type = this.getType(img.attr('class')).name.toLowerCase();\r
+\r
+ // Add some extra properties to the data object\r
+ tinymce.each(rootAttributes, function(name) {\r
+ var value = img.attr(name);\r
+\r
+ if (value)\r
+ data[name] = value;\r
+ });\r
+ }\r
+\r
+ return data;\r
+ },\r
+\r
+ /**\r
+ * Get type item by extension, class, clsid or mime type.\r
+ *\r
+ * @method getType\r
+ * @param {String} value Value to get type item by.\r
+ * @return {Object} Type item object or undefined.\r
+ */\r
+ getType : function(value) {\r
+ var i, values, typeItem;\r
+\r
+ // Find type by checking the classes\r
+ values = tinymce.explode(value, ' ');\r
+ for (i = 0; i < values.length; i++) {\r
+ typeItem = this.lookup[values[i]];\r
+\r
+ if (typeItem)\r
+ return typeItem;\r
+ }\r
+ },\r
+\r
+ /**\r
+ * Converts a tinymce.html.Node image element to video/object/embed.\r
+ */\r
+ imgToObject : function(node, args) {\r
+ var self = this, editor = self.editor, video, object, embed, iframe, name, value, data,\r
+ source, sources, params, param, typeItem, i, item, mp4Source, replacement,\r
+ posterSrc, style, audio;\r
+\r
+ // Adds the flash player\r
+ function addPlayer(video_src, poster_src) {\r
+ var baseUri, flashVars, flashVarsOutput, params, flashPlayer;\r
+\r
+ flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));\r
+ if (flashPlayer) {\r
+ baseUri = editor.documentBaseURI;\r
+ data.params.src = flashPlayer;\r
+\r
+ // Convert the movie url to absolute urls\r
+ if (editor.getParam('flash_video_player_absvideourl', true)) {\r
+ video_src = baseUri.toAbsolute(video_src || '', true);\r
+ poster_src = baseUri.toAbsolute(poster_src || '', true);\r