jw_player_helper 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +10 -0
  3. data/Gemfile.lock +81 -0
  4. data/README.markdown +81 -0
  5. data/Rakefile +12 -0
  6. data/assets/javascripts/swfobject.js +4 -0
  7. data/assets/swf/player.swf +0 -0
  8. data/assets/swf/skins/beelden.zip +0 -0
  9. data/assets/swf/skins/glow.zip +0 -0
  10. data/assets/swf/skins/simple.zip +0 -0
  11. data/assets/swf/skins/stormtrooper.zip +0 -0
  12. data/jw_player_helper.gemspec +21 -0
  13. data/lib/jw_player_helper.rb +29 -0
  14. data/lib/jw_player_helper/engine.rb +13 -0
  15. data/lib/jw_player_helper/helper.rb +45 -0
  16. data/lib/jw_player_helper/version.rb +3 -0
  17. data/test/helper.rb +22 -0
  18. data/test/jw_player_helper_test.rb +33 -0
  19. data/test/rails_app/.gitignore +4 -0
  20. data/test/rails_app/Gemfile +4 -0
  21. data/test/rails_app/Gemfile.lock +81 -0
  22. data/test/rails_app/Rakefile +7 -0
  23. data/test/rails_app/app/controllers/application_controller.rb +3 -0
  24. data/test/rails_app/app/helpers/application_helper.rb +2 -0
  25. data/test/rails_app/app/views/layouts/application.html.erb +14 -0
  26. data/test/rails_app/config.ru +4 -0
  27. data/test/rails_app/config/application.rb +42 -0
  28. data/test/rails_app/config/boot.rb +13 -0
  29. data/test/rails_app/config/database.yml +18 -0
  30. data/test/rails_app/config/environment.rb +5 -0
  31. data/test/rails_app/config/environments/development.rb +26 -0
  32. data/test/rails_app/config/environments/production.rb +49 -0
  33. data/test/rails_app/config/environments/test.rb +35 -0
  34. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/rails_app/config/initializers/inflections.rb +10 -0
  36. data/test/rails_app/config/initializers/mime_types.rb +5 -0
  37. data/test/rails_app/config/initializers/secret_token.rb +7 -0
  38. data/test/rails_app/config/initializers/session_store.rb +8 -0
  39. data/test/rails_app/config/locales/en.yml +5 -0
  40. data/test/rails_app/config/routes.rb +58 -0
  41. data/test/rails_app/db/seeds.rb +7 -0
  42. data/test/rails_app/lib/tasks/.gitkeep +0 -0
  43. data/test/rails_app/public/404.html +26 -0
  44. data/test/rails_app/public/422.html +26 -0
  45. data/test/rails_app/public/500.html +26 -0
  46. data/test/rails_app/public/favicon.ico +0 -0
  47. data/test/rails_app/public/images/rails.png +0 -0
  48. data/test/rails_app/public/index.html +239 -0
  49. data/test/rails_app/public/javascripts/application.js +2 -0
  50. data/test/rails_app/public/javascripts/controls.js +965 -0
  51. data/test/rails_app/public/javascripts/dragdrop.js +974 -0
  52. data/test/rails_app/public/javascripts/effects.js +1123 -0
  53. data/test/rails_app/public/javascripts/prototype.js +6001 -0
  54. data/test/rails_app/public/javascripts/rails.js +175 -0
  55. data/test/rails_app/public/robots.txt +5 -0
  56. data/test/rails_app/public/stylesheets/.gitkeep +0 -0
  57. data/test/rails_app/script/rails +6 -0
  58. metadata +164 -0
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "json"
4
+
5
+ group :test do
6
+ gem "shoulda"
7
+ gem "turn"
8
+ gem "rails"
9
+ gem "sqlite3"
10
+ end
@@ -0,0 +1,81 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.3)
6
+ actionpack (= 3.0.3)
7
+ mail (~> 2.2.9)
8
+ actionpack (3.0.3)
9
+ activemodel (= 3.0.3)
10
+ activesupport (= 3.0.3)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.4)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.13)
16
+ rack-test (~> 0.5.6)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.3)
19
+ activesupport (= 3.0.3)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.4)
22
+ activerecord (3.0.3)
23
+ activemodel (= 3.0.3)
24
+ activesupport (= 3.0.3)
25
+ arel (~> 2.0.2)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.3)
28
+ activemodel (= 3.0.3)
29
+ activesupport (= 3.0.3)
30
+ activesupport (3.0.3)
31
+ ansi (1.2.2)
32
+ arel (2.0.6)
33
+ builder (2.1.2)
34
+ erubis (2.6.6)
35
+ abstract (>= 1.0.0)
36
+ i18n (0.5.0)
37
+ json (1.4.6)
38
+ mail (2.2.13)
39
+ activesupport (>= 2.3.6)
40
+ i18n (>= 0.4.0)
41
+ mime-types (~> 1.16)
42
+ treetop (~> 1.4.8)
43
+ mime-types (1.16)
44
+ polyglot (0.3.1)
45
+ rack (1.2.1)
46
+ rack-mount (0.6.13)
47
+ rack (>= 1.0.0)
48
+ rack-test (0.5.6)
49
+ rack (>= 1.0)
50
+ rails (3.0.3)
51
+ actionmailer (= 3.0.3)
52
+ actionpack (= 3.0.3)
53
+ activerecord (= 3.0.3)
54
+ activeresource (= 3.0.3)
55
+ activesupport (= 3.0.3)
56
+ bundler (~> 1.0)
57
+ railties (= 3.0.3)
58
+ railties (3.0.3)
59
+ actionpack (= 3.0.3)
60
+ activesupport (= 3.0.3)
61
+ rake (>= 0.8.7)
62
+ thor (~> 0.14.4)
63
+ rake (0.8.7)
64
+ shoulda (2.11.3)
65
+ sqlite3 (1.3.3)
66
+ thor (0.14.6)
67
+ treetop (1.4.9)
68
+ polyglot (>= 0.3.1)
69
+ turn (0.8.1)
70
+ ansi (>= 1.2.2)
71
+ tzinfo (0.3.23)
72
+
73
+ PLATFORMS
74
+ ruby
75
+
76
+ DEPENDENCIES
77
+ json
78
+ rails
79
+ shoulda
80
+ sqlite3
81
+ turn
@@ -0,0 +1,81 @@
1
+ # JW Player Helper #
2
+
3
+ Simple Rails helper for rendering [JWPlayer 5.4](http://www.longtailvideo.com/players/) using [SWFObject v2.2](http://code.google.com/p/swfobject/)
4
+
5
+ ## JW Player ##
6
+
7
+ Is opensource player supporting video (for example .mp4, .mov, .f4v, .flv), audio (.mp3) and image (.jpg, .png, .gif) files ([full list](http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12539/supported-video-and-audio-formats)).
8
+
9
+
10
+ ## Usage ##
11
+
12
+ ### Installation ###
13
+
14
+ #### Rails 3 ####
15
+
16
+ * add `gem 'jw_player_helper'` into yout `Gemfile`
17
+ * add `<%= javascript_include_tag 'swfobject' %>` in your layout
18
+ * now you can use `<%= video_player(flashvars={}, attributes={}, params={}) %>` to render JW Player
19
+
20
+ #### Rails 2 ####
21
+
22
+ * add `config.gem "jw_player_helper"` into yout `config/environment.rb`
23
+ * add `<%= javascript_include_tag 'swfobject' %>` in your layout
24
+ * now you can use `<%= video_player(flashvars={}, attributes={}, params={}) %>` to render JW Player
25
+
26
+ ### Configuration ###
27
+
28
+ #### flashvars ####
29
+
30
+ :file => "relative path to file (for example: /video/pf2011.flv)",
31
+ :image => "relative path to splash image (for example: /video/pf2011.jpg)",
32
+ :bufferlength => 1,
33
+ :autostart => false
34
+
35
+
36
+ [Full list of JW Player flashvars](http://developer.longtailvideo.com/trac/wiki/Player5FlashVars)
37
+
38
+ #### attributes ####
39
+
40
+ :id => 'jw_player',
41
+ :name => 'jw_player',
42
+ :width => 300,
43
+ :height => 300,
44
+ :message => "Get the Adobe Flash Player to see this video.",
45
+ :element => "div",
46
+ :onmouseover => nil, # you can define javascript callbacks for element
47
+ :onmouseout => nil,
48
+ :onclick => nil
49
+
50
+ #### params ####
51
+
52
+ :allowfullscreen => true,
53
+ :allowscriptaccess => 'always'
54
+
55
+ ### examples ###
56
+
57
+ <%= video_player({:file => "/video/pf2011.flv", :image => "/video/pf2011.jpg"}) %>
58
+ renders JW Player with splash screen pf2011.jpg
59
+
60
+ <%= video_player({:file => "/video/pf2011.flv", :image => "/video/pf2011.jpg"}, {:width => 640, :height => 480, :id => "pf2011_video"}) %>
61
+ renders JW Player with resolution `640x480px` and id `pf2011_video`
62
+
63
+ <%= video_player({:file => "/video/pf2011.flv", :image => "/video/pf2011.jpg", :mute => true}, {:width => 640, :height => 480, :id => "pf2011_video", :onclick => "alert('clicked!');"}) %>
64
+ renders muted JW player with javascript alert when user click on video
65
+
66
+
67
+ ### skins ###
68
+
69
+ Gem is packed with few skins
70
+
71
+ * [glow](http://www.longtailvideo.com/addons/skins/196/Glow?q=)
72
+ * [beelden](http://www.longtailvideo.com/addons/skins/155/Beelden?q=)
73
+ * [stormtrooper](http://www.longtailvideo.com/addons/skins/156/Stormtrooper?q=)
74
+ * [simple](http://www.longtailvideo.com/addons/skins/51/Simple?q=)
75
+
76
+ Usage: add :skin => 'name' to your flashvars. For example: <%= video_player({:file => "/video/pf2011.flv", :image => "/video/pf2011.jpg", :skin => "glow"}) %>
77
+
78
+ You can find more skins [here](http://www.longtailvideo.com/addons/skins).
79
+
80
+ Usage: Copy downloaded zip into `RAILS_ROOT/public/swf/skins` and set `:skin => 'name without .zip extension'` flashvar
81
+
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ require 'rake/testtask'
3
+
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << 'test'
8
+ t.test_files = FileList['test/**/*_test.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ task :default => :test
@@ -0,0 +1,4 @@
1
+ /* SWFObject v2.2 <http://code.google.com/p/swfobject/>
2
+ is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
3
+ */
4
+ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
Binary file
Binary file
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "jw_player_helper/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "jw_player_helper"
7
+ s.version = JWPlayerHelper::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Vojtech Hyza"]
10
+ s.email = ["vhyza@vhyza.eu"]
11
+ s.homepage = "http://github.com/vhyza/jw_player_helper"
12
+ s.summary = %q{JWPlayer helper}
13
+ s.description = %q{Simple Rails JWPlayer helper}
14
+
15
+ s.rubyforge_project = "jw_player_helper"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,29 @@
1
+ require 'jw_player_helper/helper'
2
+
3
+ if defined?(Rails)
4
+
5
+ if defined?(Rails::Engine)
6
+ puts "* Loading engine jw_player_helper"
7
+ require 'jw_player_helper/engine'
8
+ else
9
+ ActionView::Base.send :include, JWPlayerHelper::Helper
10
+
11
+ gem_root = File.expand_path("../../", __FILE__)
12
+
13
+ javascript_file = Rails.root.join("public", "javascripts", "swfobject.js")
14
+ gem_javascript_file = Pathname.new(File.join(gem_root, "assets", "javascripts", "swfobject.js"))
15
+
16
+ if !File.exists?(javascript_file) or javascript_file.size != gem_javascript_file.size
17
+ puts "Copying swfobject.js to public/jovascripts"
18
+ FileUtils.cp_r File.join(gem_root, "assets", "javascripts"), Rails.root.join("public")
19
+ end
20
+
21
+ swf_file = Rails.root.join("public", "swf", "player.swf")
22
+ gem_swf_file = Pathname.new(File.join(gem_root, "assets", "swf", "player.swf"))
23
+
24
+ if !File.exists?(swf_file) or swf_file.size != gem_swf_file.size
25
+ puts "Copying SWF files to public/swf"
26
+ FileUtils.cp_r File.join(gem_root, "assets", "swf"), Rails.root.join("public")
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ require 'rails'
2
+
3
+ module JWPlayerHelper
4
+
5
+ class Engine < Rails::Engine
6
+ ActionView::Base.send :include, JWPlayerHelper::Helper
7
+
8
+ initializer "static assets" do |app|
9
+ app.middleware.use ::ActionDispatch::Static, "#{root}/assets"
10
+ end
11
+ end
12
+
13
+ end
@@ -0,0 +1,45 @@
1
+ module JWPlayerHelper
2
+ module Helper
3
+
4
+ DEFAULT_ATTRIBUTES = {
5
+ :id => 'jw_player',
6
+ :name => 'jw_player',
7
+ :width => 300,
8
+ :height => 300,
9
+ :message => "Get the Adobe Flash Player to see this video.",
10
+ :element => "div"
11
+ }
12
+
13
+ DEFAULT_FLASHVARS = {
14
+ :bufferlength => 1,
15
+ :autostart => false
16
+ }
17
+
18
+ DEFAULT_PARAMS = {
19
+ :allowfullscreen => true,
20
+ :allowscriptaccess => 'always'
21
+ }
22
+
23
+ def video_player(flashvars, attributes = {} , params = {})
24
+ flashvars[:skin] = "/swf/skins/#{flashvars[:skin]}.zip" if flashvars[:skin]
25
+
26
+ attributes = DEFAULT_ATTRIBUTES.merge(attributes)
27
+ flashvars = DEFAULT_FLASHVARS.merge(flashvars)
28
+ params = DEFAULT_PARAMS.merge(params)
29
+
30
+ result = %Q{<script type="text/javascript">
31
+ var flashvars_#{attributes[:id]} = #{flashvars.to_json};
32
+ var params_#{attributes[:id]} = #{params.to_json};
33
+ var attributes_#{attributes[:id]} = #{attributes.except(:width, :height, :message, :element).to_json};
34
+ swfobject.embedSWF('/swf/player.swf','#{attributes[:id]}','#{attributes[:width]}','#{attributes[:height]}','9','false', flashvars_#{attributes[:id]}, params_#{attributes[:id]}, attributes_#{attributes[:id]})
35
+
36
+ </script>
37
+ <#{attributes[:element]} id="#{attributes[:id]}">#{attributes[:message]}</#{attributes[:element]}>
38
+ }
39
+
40
+ result.respond_to?(:html_safe) ? result.html_safe : result
41
+ end
42
+
43
+ end
44
+ end
45
+
@@ -0,0 +1,3 @@
1
+ module JWPlayerHelper
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ ENV['RAILS_ENV'] = 'test'
13
+ require "rails_app/config/environment"
14
+ require "rails/test_help"
15
+
16
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
17
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
18
+
19
+ require 'jw_player_helper'
20
+
21
+ class Test::Unit::TestCase
22
+ end
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+
3
+ class TestJwPlayerHelper < ActionView::TestCase
4
+
5
+ include JWPlayerHelper::Helper
6
+
7
+ setup do
8
+ @flashvars = {:file => "/path/to/video"}
9
+ end
10
+
11
+ should "be loaded" do
12
+ assert ActionView::Base.include?(JWPlayerHelper::Helper)
13
+ end
14
+
15
+ should "generate default javascript for jwplayer" do
16
+ video_script = video_player(@flashvars)
17
+ assert video_script.include?("/path/to/video")
18
+ assert video_script.include?("/swf/player.swf")
19
+ assert video_script.include?(%q{id="jw_player"})
20
+ assert video_script.include?("flashvars_jw_player")
21
+ assert video_script.include?("params_jw_player")
22
+ assert video_script.include?("attributes_jw_player")
23
+ end
24
+
25
+ should "generate different id and vars if is defined" do
26
+ video_script = video_player(@flashvars, {:id => "video_div"})
27
+ assert video_script.include?(%q{id="video_div"})
28
+ assert video_script.include?("flashvars_video_div")
29
+ assert video_script.include?("params_video_div")
30
+ assert video_script.include?("attributes_video_div")
31
+ end
32
+
33
+ end
@@ -0,0 +1,4 @@
1
+ .bundle
2
+ db/*.sqlite3
3
+ log/*.log
4
+ tmp/**/*
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '3.0.3'
4
+ gem 'sqlite3-ruby', :require => 'sqlite3'
@@ -0,0 +1,81 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.3)
6
+ actionpack (= 3.0.3)
7
+ mail (~> 2.2.9)
8
+ actionpack (3.0.3)
9
+ activemodel (= 3.0.3)
10
+ activesupport (= 3.0.3)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.4)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.13)
16
+ rack-test (~> 0.5.6)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.3)
19
+ activesupport (= 3.0.3)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.4)
22
+ activerecord (3.0.3)
23
+ activemodel (= 3.0.3)
24
+ activesupport (= 3.0.3)
25
+ arel (~> 2.0.2)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.3)
28
+ activemodel (= 3.0.3)
29
+ activesupport (= 3.0.3)
30
+ activesupport (3.0.3)
31
+ ansi (1.2.2)
32
+ arel (2.0.6)
33
+ builder (2.1.2)
34
+ erubis (2.6.6)
35
+ abstract (>= 1.0.0)
36
+ i18n (0.5.0)
37
+ json (1.4.6)
38
+ mail (2.2.13)
39
+ activesupport (>= 2.3.6)
40
+ i18n (>= 0.4.0)
41
+ mime-types (~> 1.16)
42
+ treetop (~> 1.4.8)
43
+ mime-types (1.16)
44
+ polyglot (0.3.1)
45
+ rack (1.2.1)
46
+ rack-mount (0.6.13)
47
+ rack (>= 1.0.0)
48
+ rack-test (0.5.6)
49
+ rack (>= 1.0)
50
+ rails (3.0.3)
51
+ actionmailer (= 3.0.3)
52
+ actionpack (= 3.0.3)
53
+ activerecord (= 3.0.3)
54
+ activeresource (= 3.0.3)
55
+ activesupport (= 3.0.3)
56
+ bundler (~> 1.0)
57
+ railties (= 3.0.3)
58
+ railties (3.0.3)
59
+ actionpack (= 3.0.3)
60
+ activesupport (= 3.0.3)
61
+ rake (>= 0.8.7)
62
+ thor (~> 0.14.4)
63
+ rake (0.8.7)
64
+ shoulda (2.11.3)
65
+ sqlite3 (1.3.3)
66
+ thor (0.14.6)
67
+ treetop (1.4.9)
68
+ polyglot (>= 0.3.1)
69
+ turn (0.8.1)
70
+ ansi (>= 1.2.2)
71
+ tzinfo (0.3.23)
72
+
73
+ PLATFORMS
74
+ ruby
75
+
76
+ DEPENDENCIES
77
+ json
78
+ rails
79
+ shoulda
80
+ sqlite3
81
+ turn