From 055cb251f6b823c884fe4b7cecd6c433b19aeb96 Mon Sep 17 00:00:00 2001 From: Jason Frame Date: Thu, 22 Sep 2011 17:27:45 +1000 Subject: [PATCH] Media plugin now supports audio media using embedded tag --- .../plugins/media/editor_plugin_src.js | 51 +++++++++++++++++-- jscripts/tiny_mce/plugins/media/js/media.js | 26 +++++++++- .../tiny_mce/plugins/media/langs/en_dlg.js | 2 +- jscripts/tiny_mce/plugins/media/media.htm | 49 +++++++++++++----- .../themes/advanced/skins/default/content.css | 1 + 5 files changed, 110 insertions(+), 19 deletions(-) diff --git a/jscripts/tiny_mce/plugins/media/editor_plugin_src.js b/jscripts/tiny_mce/plugins/media/editor_plugin_src.js index 0bce246efd5..5d42a0909ef 100644 --- a/jscripts/tiny_mce/plugins/media/editor_plugin_src.js +++ b/jscripts/tiny_mce/plugins/media/editor_plugin_src.js @@ -24,6 +24,7 @@ ["Silverlight", "dfeaf541-f3e1-4c24-acac-99c30715084a", "application/x-silverlight-2"], ["Iframe"], ["Video"], + ["EmbeddedAudio"], ["Audio"] ]; @@ -370,7 +371,7 @@ data = node.attr('data-mce-json'); if (!data) - return; + return; data = JSON.parse(data); typeItem = this.getType(node.attr('class')); @@ -494,6 +495,28 @@ data.params.src = ''; } + if (typeItem.name === 'EmbeddedAudio') { + embed = new Node('embed', 1); + embed.shortEnded = true; + embed.attr({ + id: node.attr('id'), + width: node.attr('width'), + height: node.attr('height'), + style : style, + type: node.attr('type') + }); + + for (name in data.params) + embed.attr(name, data.params[name]); + + tinymce.each(rootAttributes, function(name) { + if (data[name] && name != 'type') + embed.attr(name, data[name]); + }); + + data.params.src = ''; + } + // Do we have a params src then we can generate object if (data.params.src) { // Is flv movie add player for it @@ -596,8 +619,11 @@ } } - if (video || audio || object) - node.replace(video || audio || object); + var n = video || audio || object || embed; + if (n) { + n.attr('class', 'mceItemMedia mceItem' + (typeItem.name || 'Flash')); + node.replace(n); + } else node.remove(); }, @@ -624,6 +650,15 @@ }).serialize(node); }; + function lookupAttribute(o, attr) { + return lookup[o.attr(attr).toLowerCase() || '']; + } + + function lookupExtension(src) { + var ext = src.replace(/^.*\.([^.]+)$/, '$1'); + return lookup[ext.toLowerCase() || '']; + } + // If node isn't in document if (!node.parent) return; @@ -777,10 +812,16 @@ } if (object && !type) - type = (lookup[(object.attr('clsid') || object.attr('classid') || object.attr('type') || '').toLowerCase()] || {}).name; + type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name; if (embed && !type) - type = (lookup[(embed.attr('type') || '').toLowerCase()] || {}).name; + type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name; + + // for embedded audio we preserve the original specified type + if (embed && type == 'EmbeddedAudio') { + data.params.type = embed.attr('type'); + } + // Replace the video/object/embed element with a placeholder image containing the data node.replace(img); diff --git a/jscripts/tiny_mce/plugins/media/js/media.js b/jscripts/tiny_mce/plugins/media/js/media.js index 055a68dc36e..0b73cd00062 100644 --- a/jscripts/tiny_mce/plugins/media/js/media.js +++ b/jscripts/tiny_mce/plugins/media/js/media.js @@ -77,6 +77,8 @@ if (isVisible('filebrowser_poster')) get('video_poster').style.width = '220px'; + editor.dom.setOuterHTML(get('media_type'), this.getMediaTypeHTML(editor)); + this.data = tinyMCEPopup.getWindowArg('data'); this.dataToForm(); this.preview(); @@ -209,6 +211,7 @@ get('shockwave_options').style.display = 'none'; get('windowsmedia_options').style.display = 'none'; get('realmedia_options').style.display = 'none'; + get('embeddedaudio_options').style.display = 'none'; if (get(data.type + '_options')) get(data.type + '_options').style.display = 'block'; @@ -222,6 +225,7 @@ setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks'); setOptions('video', 'poster,autoplay,loop,muted,preload,controls'); setOptions('audio', 'autoplay,loop,preload,controls'); + setOptions('embeddedaudio', 'autoplay,loop,controls'); setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height'); if (to_form) { @@ -379,6 +383,26 @@ } return ""; + }, + + getMediaTypeHTML : function(editor) { + var html = ""; + html += ''; + return html; } }; @@ -386,4 +410,4 @@ tinyMCEPopup.onInit.add(function() { Media.init(); }); -})(); \ No newline at end of file +})(); diff --git a/jscripts/tiny_mce/plugins/media/langs/en_dlg.js b/jscripts/tiny_mce/plugins/media/langs/en_dlg.js index efbc94c43f4..49412596a10 100644 --- a/jscripts/tiny_mce/plugins/media/langs/en_dlg.js +++ b/jscripts/tiny_mce/plugins/media/langs/en_dlg.js @@ -1 +1 @@ -tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file +tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide", "embedded_audio_options":"Embedded Audio Options"}); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/media/media.htm b/jscripts/tiny_mce/plugins/media/media.htm index 5ce8d67e1b1..964286a4757 100644 --- a/jscripts/tiny_mce/plugins/media/media.htm +++ b/jscripts/tiny_mce/plugins/media/media.htm @@ -29,16 +29,7 @@ - + @@ -214,6 +205,41 @@ +
+ {#media_dlg.embedded_audio_options} + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+
{#media_dlg.html5_audio_options} @@ -246,7 +272,7 @@ @@ -286,7 +312,6 @@
-
{#media_dlg.flash_options} diff --git a/jscripts/tiny_mce/themes/advanced/skins/default/content.css b/jscripts/tiny_mce/themes/advanced/skins/default/content.css index 8de9ddbe1d9..6884bc89890 100644 --- a/jscripts/tiny_mce/themes/advanced/skins/default/content.css +++ b/jscripts/tiny_mce/themes/advanced/skins/default/content.css @@ -45,5 +45,6 @@ font[face=mceinline] {font-family:inherit !important} .mceItemRealMedia {background-image:url(../../img/realmedia.gif)} .mceItemVideo {background-image:url(../../img/video.gif)} .mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} .mceItemIframe {background-image:url(../../img/iframe.gif)} .mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}