From 154ce61a3df51ff0ba0f81e7e9f18dd80e914693 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Mon, 5 Mar 2012 12:57:47 -0800 Subject: [PATCH 1/3] New audio control, with Flash fallback for browsers like Firefox/IE. --- assets.yml | 1 + media/css/reader.css | 4 + media/flash/audiojs.swf | Bin 0 -> 1735 bytes media/img/reader/player-graphics.gif | Bin 0 -> 4499 bytes media/js/audio.js | 702 +++++++++++++++++++++++++++ media/js/newsblur/reader.js | 16 +- utils/story_functions.py | 2 +- 7 files changed, 723 insertions(+), 2 deletions(-) create mode 100755 media/flash/audiojs.swf create mode 100755 media/img/reader/player-graphics.gif create mode 100755 media/js/audio.js diff --git a/assets.yml b/assets.yml index f5577c18a..18657808e 100644 --- a/assets.yml +++ b/assets.yml @@ -50,6 +50,7 @@ javascripts: - media/js/jquery.flot.js - media/js/jquery.tipsy.js - media/js/jquery.chosen.js + - media/js/audio.js - media/js/socket.io-client.0.8.7.js - media/js/inflector.js - media/js/underscore.js diff --git a/media/css/reader.css b/media/css/reader.css index b0c439b93..ac0c240f2 100644 --- a/media/css/reader.css +++ b/media/css/reader.css @@ -1949,6 +1949,10 @@ background: transparent; padding: 0; } +#story_pane .audiojs audio { + display: none; +} + /* ====================== */ /* = River Progress Bar = */ /* ====================== */ diff --git a/media/flash/audiojs.swf b/media/flash/audiojs.swf new file mode 100755 index 0000000000000000000000000000000000000000..b6b0275ae2c8225c6fe929e42a9c47f8593fe354 GIT binary patch literal 1735 zcmV;&1~~acS5pd_3IG6j+I?2tQzOR_pPBs_Y4w4GK->v9gb{~*7W#nm*$|KqgE&LD zTO#39DpgmfVRsg-S?wzO!N*hbr(A`q{2O^qRr0W$%g%eA{G7+UoM(0g9JVVev~>4$ z|GN9vy#p6O{0{)xzX9+7f}Q+B0KlIM|AYW+xVo|4+1V{$3@qDQXWHgc-}i^>_4@hw zdF_0)=C~*I=Gxj?y|GeXSy^Tt%ig8!lZ$2BTUcsE06WyvTyyA~j$P(DId%enb7^UW zs%y8P!@#v7NL{N_iw>ymd-Z0m$$)fi-EiCi@mpj#v`md~xcbGi*LSqjb8<$P4U2gF zjryG7Zme^dlEVVQkJ_^%d-K2PX>ck688 z|4>Mvo6ff$`1=G+0KiPZaLIr+K@QY_zzv;LM0IUIb(5sKPGIZXePY|x0^*rt>go8H zp7HT1N9KUKZ7ydHUFXE5o)>9y*LO|(B)zA$UDt^{g^I5_t5`F&QX7VQKMKj$=_`%V&-i z45;MuDo1?i<5xRSH=9BZO>&=hW`EHfBx~uh-M&nuiI4~{W zv?uPdydJY$xo_Nwf2+seQqA9X*lTXG(&p|v?b$3L(R}la#*Wkf2V~~MRauWZ=I6xM z*vlfvKCqS@d0jAMn^^hwNQhDyM58H2*EVC~m}sZcFj|vgM1G31(e;VzQ(e@UM`GxB zCSMWd_|m7|k>e996^RF&H(j=8R6Xa~lA)_>+6Rry~K zTm1ETOcr5LC`!f5gR}&S4~w5jU`j|dO6gLwv{G6vJuQ7!dRF|RxQj9}N-8NSoym^n z^5a_=B8)^V$XLJ_C9sghNWnr1qcj$?SRTW24#PZ_$FW?%@&uMAF)Ctt3d;{LE@62Z z%QIM>#quL8&tbWY<#{ZBgyjV+SFpT@<;NH;Ve~OhJi(}n(K1FgjOxh(#Dz7C)-h^f z^d&~mG1|iDD~z@=+QF!eCthImHAZ_F?PD~L(Qh$4z-S7iXIOZJMHP#OSo~csy2;oD z1rfit5ElfHfax?uB3Go_ha8{Zd|BhSk3@VS0+>{i5)dX+95M|+24n%iUU4;Nc zArHW~q7;~ngb4s9K@kB)JwQ_si0m(^^bi8M1Oc9gATa|$aux#R5d^6@23Uq5GY>f? z9D_*_GE4{)Ng-^!U?#}2%V8rlQeU$I1vaJ$rd^X1v-A?iN1-vVE+FP9h|KenoxPr1 z{2#1<{YliH2=_p*QvFn2gkkTov1EK~d{X`VZGWuyr1~f{9;%-rCe4LLDV7#O<54XA zCNySZX(KddW2q7vbFs7-8s$g|jj`(HTeS*V0iqx#mCdkmJ+1%{8bxC{$cbFa1;G#R zLL++>{QJ8K%raXAauH-1nK8!9+wasW??RGUBi&o(2*Z#8p z!*vCuIrAX+{`z(Z-@m&iY*&i!$QldF-fQ^fsNpfh_IV*}P|(|G^fnv4R-^Z2qxZbg dQ`pZRz-;vCCwa*Q{=VM) literal 0 HcmV?d00001 diff --git a/media/img/reader/player-graphics.gif b/media/img/reader/player-graphics.gif new file mode 100755 index 0000000000000000000000000000000000000000..3e4d9d4e512052d49bfa872c37d14f2a1c211b69 GIT binary patch literal 4499 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 KA7@~Jh5rN$ej` element. The `$n`s are placeholders. + // `$1` The name of the flash movie + // `$2` The path to the swf + // `$3` Cache invalidation + flashSource: '\ + \ + \ + \ + \ + ', + + // ### The main settings object + // Where all the default settings are stored. Each of these variables and methods can be overwritten by the user-provided `options` object. + settings: { + autoplay: false, + loop: false, + preload: true, + imageLocation: path + 'player-graphics.gif', + swfLocation: path + 'audiojs.swf', + useFlash: (function() { + var a = document.createElement('audio'); + return !(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); + })(), + hasFlash: (function() { + if (navigator.plugins && navigator.plugins.length && navigator.plugins['Shockwave Flash']) { + return true; + } else if (navigator.mimeTypes && navigator.mimeTypes.length) { + var mimeType = navigator.mimeTypes['application/x-shockwave-flash']; + return mimeType && mimeType.enabledPlugin; + } else { + try { + var ax = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); + return true; + } catch (e) {} + } + return false; + })(), + // The default markup and classes for creating the player: + createPlayer: { + markup: '\ +
\ +

\ +

\ +

\ +

\ +
\ +
\ +
\ +
\ +
\ +
\ + 00:00/00:00 \ +
\ +
', + playPauseClass: 'play-pause', + scrubberClass: 'scrubber', + progressClass: 'progress', + loaderClass: 'loaded', + timeClass: 'time', + durationClass: 'duration', + playedClass: 'played', + errorMessageClass: 'error-message', + playingClass: 'playing', + loadingClass: 'loading', + errorClass: 'error' + }, + // The css used by the default player. This is is dynamically injected into a `