]> git.wh0rd.org - tt-rss.git/commitdiff
use html5 audio player instead of flash when possible
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Tue, 30 Nov 2010 09:40:23 +0000 (12:40 +0300)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Tue, 30 Nov 2010 09:40:23 +0000 (12:40 +0300)
functions.php
modules/backend-rpc.php
tt-rss.css
tt-rss.js
viewfeed.js

index 17581789211c663fa7b3fbfa44ced9250575c8f1..90e23d89780c9110cea7eb17f8f110209de3dcfe 100644 (file)
 
                $entry = "";
 
-               if ($ctype == "audio/mpeg") {  
-                     
-                       $entry .= "<object type=\"application/x-shockwave-flash\" 
-                               data=\"extras/button/musicplayer.swf?song_url=$url\" 
-                               width=\"17\" height=\"17\" style='float : left; margin-right : 5px;'> 
-                                       <param name=\"movie\" value=\"extras/button/musicplayer.swf?song_url=$url\" /> </object>";  
+               if (strpos($ctype, "audio/") === 0) {  
+
+                       if ($_SESSION["hasAudio"] && (strpos($ctype, "ogg") !== false ||
+                               strpos($_SERVER['HTTP_USER_AGENT'], "Chrome") !== false ||  
+                               strpos($_SERVER['HTTP_USER_AGENT'], "Safari") !== false )) {
+
+                               $id = 'AUDIO-' . uniqid();
+
+                               $entry .= "<audio id=\"$id\"\">
+                                       <source src=\"$url\"></source>
+                                       </audio>";      
+
+                               $entry .= "<span onclick=\"player(this)\" 
+                                       title=\"".__("Click to play")."\" status=\"0\"
+                                       class=\"player\" audio-id=\"$id\">".__("Play")."</span>";
+
+                       } else {
+                    
+                               $entry .= "<object type=\"application/x-shockwave-flash\" 
+                                       data=\"extras/button/musicplayer.swf?song_url=$url\" 
+                                       width=\"17\" height=\"17\" style='float : left; margin-right : 5px;'> 
+                                       <param name=\"movie\" 
+                                               value=\"extras/button/musicplayer.swf?song_url=$url\" />
+                                       </object>";  
+                       }
                }
 
+               $filename = substr($url, strrpos($url, "/")+1);
+
+               $entry .= " <a target=\"_blank\" href=\"" . htmlspecialchars($url) . "\">" .
+                       $filename . " (" . $ctype . ")" . "</a>";
+
                return $entry;
        }
 
        
                                if (!$ctype) $ctype = __("unknown type");
        
-                               $filename = substr($url, strrpos($url, "/")+1);
+#                              $filename = substr($url, strrpos($url, "/")+1);
        
                                $entry = format_inline_player($link, $url, $ctype);
        
-                               $entry .= " <a target=\"_blank\" href=\"" . htmlspecialchars($url) . "\">" .
-                                       $filename . " (" . $ctype . ")" . "</a>";
+#                              $entry .= " <a target=\"_blank\" href=\"" . htmlspecialchars($url) . "\">" .
+#                                      $filename . " (" . $ctype . ")" . "</a>";
        
                                array_push($entries_html, $entry);
        
index 239ff60f6b8eb9f4e75f12df3fdb802e02cba57f..1447634bf6a3ad55973d420d609b0efa8998d1ac 100644 (file)
 
                // XML method
                if ($subop == "sanityCheck") {
+
+                       $_SESSION["hasAudio"] = $_REQUEST["hasAudio"] === "true";
+
                        print "<rpc-reply>";
                        if (sanity_check($link)) {
                                print "<error error-code=\"0\"/>";
index d8b92e5aba99146a52f95368a688dbf78c1ce7f7..a5662fede92794cfc839832663a5b372bc12e0d6 100644 (file)
@@ -1652,4 +1652,25 @@ a.bookmarklet {
        top : -1px;
 }
 
+.player {
+       display : inline-block;
+       color : gray;
+       font-size : 11px;
+       font-family : sans-serif;
+       border : 1px solid gray;
+       padding : 0px 4px 0px 4px;
+       margin : 0px 2px 0px 2px;
+       width : 50px;
+       text-align : center;
+       background : white;
+}
+.player.playing {
+       color : #00c000;
+       border-color : #00c000;
+}
+
+.player:hover {
+       background : #f0f0f0;
+       cursor : pointer;
+}
 
index fef3066f304b13673d6f04b910a07f7ee6f5a3fb..d619c4c028f2ecf2d678b9f2ddadfcec38b9058a 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -318,8 +318,10 @@ function init() {
 
                loading_set_progress(20);
 
+               var hasAudio = !!((myAudioTag = document.createElement('audio')).canPlayType);
+
                new Ajax.Request("backend.php", {
-                       parameters: {op: "rpc", subop: "sanityCheck"},
+                       parameters: {op: "rpc", subop: "sanityCheck", hasAudio: hasAudio},
                        onComplete: function(transport) {
                                        backend_sanity_check_callback(transport);
                                } });
index 5d40fb3216f95e5f8ed3b0d8a661967cad222878..4444ce29da8ccda9b62fd154144931f33bb347d6 100644 (file)
@@ -2365,3 +2365,31 @@ function editArticleNote(id) {
                exception_error("editArticleNote", e);
        }
 }
+
+function player(elem) {
+       var aid = elem.getAttribute("audio-id");
+       var status = elem.getAttribute("status");
+
+       var audio = $(aid);
+
+       if (audio) {
+               if (status == 0) {
+                       audio.play();
+                       status = 1;
+                       elem.innerHTML = __("Playing...");
+                       elem.title = __("Click to pause");
+                       elem.addClassName("playing");
+               } else {
+                       audio.pause();
+                       status = 0;
+                       elem.innerHTML = __("Play");
+                       elem.title = __("Click to play");
+                       elem.removeClassName("playing");
+               }
+
+               elem.setAttribute("status", status);
+       } else {
+               alert("Your browser doesn't seem to support HTML5 audio.");
+       }
+}
+