diff --git a/app/helpers/status_messages_helper.rb b/app/helpers/status_messages_helper.rb index 4131ccaf080f83322989ecba4316e1b92d8be600..f44ffe42e5481d77b36010ccac3d348a4c9b1bf3 100644 --- a/app/helpers/status_messages_helper.rb +++ b/app/helpers/status_messages_helper.rb @@ -16,8 +16,11 @@ module StatusMessagesHelper # next line is important due to XSS! (h is rail's make_html_safe-function) message = h(message).html_safe - message.gsub!(/( |^)(www\.[^ ]+\.[^ ])/, '\1http://\2'); - return message.gsub(/(http|ftp):\/\/([^ ]+)/, '<a target="_blank" href="\1://\2">\2</a>'); + message.gsub!(/( |^)(www\.[^ ]+\.[^ ])/, '\1http://\2') + message.gsub!(/( |^)http:\/\/www\.youtube\.com\/watch.*v=([A-Za-z0-9_]+)[^ ]*/, '\1youtube::\2') + message.gsub!(/(http|ftp):\/\/([^ ]+)/, '<a target="_blank" href="\1://\2">\2</a>') + message.gsub!(/youtube::([A-Za-z0-9_]+)/, '<a name="\1" onclick="openYoutube(\'\1\', this)" href="#\1">Youtube: \1</a>') + return message end end diff --git a/public/javascripts/view.js b/public/javascripts/view.js index dec170a07b1209cd3fe134d170cb21d0142e465f..362543243613e8c81c23f456f13f14d968a93f3b 100644 --- a/public/javascripts/view.js +++ b/public/javascripts/view.js @@ -72,3 +72,12 @@ $.fn.clearForm = function() { }); }; +function openYoutube(videoid, link) { + var container = document.createElement('div'); + container.innerHTML = '<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/'+videoid+'?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+videoid+'?fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object><br><a href="#'+videoid+'" onclick="closeYoutube(this)">Close</a> <a href="http://www.youtube.com/watch?v='+videoid+'" target="_blank">Watch on Youtube</a>'; + link.parentNode.insertBefore(container, this.nextSibling); +} + +function closeYoutube(link) { + link.parentNode.parentNode.removeChild(link.parentNode); +}