jplayer-rails 2.4.1 → 2.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cdb99efef11428a5a04bd45724ee97318ef7d41a
4
- data.tar.gz: ca0f6a9f854e8f04206f243060c07793e6dc15a7
3
+ metadata.gz: 4bedbc2e37a9c306255e09416b3393c0f0bfd464
4
+ data.tar.gz: cdacd7ecfa3261da2376aeae87f915090f2a8b9f
5
5
  SHA512:
6
- metadata.gz: f342f0e7325e9654bb09b6a12ed831022dffafa1f8476e443bddf1dff201c2e3cbbc646bc80249258e78ec8a6251442718f65386f294a3a9229aa5ef71149615
7
- data.tar.gz: 45120000d12c7777c48acbb9dfcc7521545a65a5f82e659a0b3599a82e35255e9d5eafb7123f506821c2ac1123f363e87e32a47cb2126374ebeee4a0c7e66d91
6
+ metadata.gz: dab5a328dadf9c98f6413f058660ae9cabca55319cd3a57b5dc4581940c79d235e4753f6120f2c8776ada5a628734d39e592d03d9ffdb8dd5368e725a8045ff7
7
+ data.tar.gz: f933da5ca76ab73af29565b437d8aa4b53f17dcf1f2f0166e771b7e7726e0555b3da0150dca6fd9d5fa65bc580c4edfd783af39375a751a203e7913052f6d3a6
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  jplayer for rails asset pipeline
4
4
 
5
5
  http://www.jplayer.org/
6
+
6
7
  https://github.com/happyworm/jPlayer
7
8
 
8
9
  ## Installation
@@ -1,5 +1,5 @@
1
1
  module Jplayer
2
2
  module Rails
3
- VERSION = "2.4.1"
3
+ VERSION = "2.5.0"
4
4
  end
5
5
  end
@@ -7,8 +7,8 @@
7
7
  * http://opensource.org/licenses/MIT
8
8
  *
9
9
  * Author: Mark J Panaghiston
10
- * Version: 2.4.1
11
- * Date: 21st June 2013
10
+ * Version: 2.5.0
11
+ * Date: 7th November 2013
12
12
  */
13
13
 
14
14
  /* Code verified using http://www.jshint.com/ */
@@ -163,12 +163,12 @@
163
163
  // "waiting", // jPlayer uses internally before bubbling.
164
164
  // "playing", // jPlayer uses internally before bubbling.
165
165
  "canplay",
166
- "canplaythrough",
166
+ "canplaythrough"
167
167
  // "seeking", // jPlayer uses internally before bubbling.
168
168
  // "seeked", // jPlayer uses internally before bubbling.
169
169
  // "timeupdate", // jPlayer uses internally before bubbling.
170
170
  // "ended", // jPlayer uses internally before bubbling.
171
- "ratechange"
171
+ // "ratechange" // jPlayer uses internally before bubbling.
172
172
  // "durationchange" // jPlayer uses internally before bubbling.
173
173
  // "volumechange" // jPlayer uses internally before bubbling.
174
174
  ];
@@ -468,8 +468,8 @@
468
468
  $.jPlayer.prototype = {
469
469
  count: 0, // Static Variable: Change it via prototype.
470
470
  version: { // Static Object
471
- script: "2.4.1",
472
- needFlash: "2.4.1",
471
+ script: "2.5.0",
472
+ needFlash: "2.5.0",
473
473
  flash: "unknown"
474
474
  },
475
475
  options: { // Instanced in $.jPlayer() constructor
@@ -479,6 +479,10 @@
479
479
  preload: 'metadata', // HTML5 Spec values: none, metadata, auto.
480
480
  volume: 0.8, // The volume. Number 0 to 1.
481
481
  muted: false,
482
+ playbackRate: 1,
483
+ defaultPlaybackRate: 1,
484
+ minPlaybackRate: 0.5,
485
+ maxPlaybackRate: 4,
482
486
  wmode: "opaque", // Valid wmode: window, transparent, opaque, direct, gpu.
483
487
  backgroundColor: "#000000", // To define the jPlayer div and Flash background color.
484
488
  cssSelectorAncestor: "#jp_container_1",
@@ -494,6 +498,8 @@
494
498
  volumeBar: ".jp-volume-bar",
495
499
  volumeBarValue: ".jp-volume-bar-value",
496
500
  volumeMax: ".jp-volume-max",
501
+ playbackRateBar: ".jp-playback-rate-bar",
502
+ playbackRateBarValue: ".jp-playback-rate-bar-value",
497
503
  currentTime: ".jp-current-time",
498
504
  duration: ".jp-duration",
499
505
  fullScreen: ".jp-full-screen", // *
@@ -598,11 +604,12 @@
598
604
  }
599
605
  },
600
606
  verticalVolume: false, // Calculate volume from the bottom of the volume bar. Default is from the left. Also volume affects either width or height.
601
- // globalVolume: false, // Not implemented: Set to make volume changes affect all jPlayer instances
602
- // globalMute: false, // Not implemented: Set to make mute changes affect all jPlayer instances
607
+ verticalPlaybackRate: false,
608
+ globalVolume: false, // Set to make volume and muted changes affect all jPlayer instances with this option enabled
603
609
  idPrefix: "jp", // Prefix for the ids of html elements created by jPlayer. For flash, this must not include characters: . - + * / \
604
610
  noConflict: "jQuery",
605
611
  emulateHtml: false, // Emulates the HTML5 Media element on the jPlayer element.
612
+ consoleAlerts: true, // Alerts are sent to the console.log() instead of alert().
606
613
  errorAlerts: false,
607
614
  warningAlerts: false
608
615
  },
@@ -650,7 +657,7 @@
650
657
  videoHeight: 0, // Intrinsic height of the video in pixels.
651
658
  readyState: 0,
652
659
  networkState: 0,
653
- playbackRate: 1,
660
+ playbackRate: 1, // Warning - Now both an option and a status property
654
661
  ended: 0
655
662
 
656
663
  /* Persistant status properties created dynamically at _init():
@@ -660,6 +667,7 @@
660
667
  nativeVideoControls
661
668
  noFullWindow
662
669
  noVolume
670
+ playbackRateEnabled // Warning - Technically, we can have both Flash and HTML, so this might not be correct if the Flash is active. That is a niche case.
663
671
  */
664
672
  },
665
673
 
@@ -687,8 +695,23 @@
687
695
  flashCanPlay: true,
688
696
  media: 'audio'
689
697
  },
698
+ m3u8a: { // AAC / MP4 / Apple HLS
699
+ codec: 'application/vnd.apple.mpegurl; codecs="mp4a.40.2"',
700
+ flashCanPlay: false,
701
+ media: 'audio'
702
+ },
703
+ m3ua: { // M3U
704
+ codec: 'audio/mpegurl',
705
+ flashCanPlay: false,
706
+ media: 'audio'
707
+ },
690
708
  oga: { // OGG
691
- codec: 'audio/ogg; codecs="vorbis"',
709
+ codec: 'audio/ogg; codecs="vorbis, opus"',
710
+ flashCanPlay: false,
711
+ media: 'audio'
712
+ },
713
+ flac: { // FLAC
714
+ codec: 'audio/x-flac',
692
715
  flashCanPlay: false,
693
716
  media: 'audio'
694
717
  },
@@ -717,6 +740,16 @@
717
740
  flashCanPlay: true,
718
741
  media: 'video'
719
742
  },
743
+ m3u8v: { // H.264 / AAC / MP4 / Apple HLS
744
+ codec: 'application/vnd.apple.mpegurl; codecs="avc1.42E01E, mp4a.40.2"',
745
+ flashCanPlay: false,
746
+ media: 'video'
747
+ },
748
+ m3uv: { // M3U
749
+ codec: 'audio/mpegurl',
750
+ flashCanPlay: false,
751
+ media: 'video'
752
+ },
720
753
  ogv: { // OGG
721
754
  codec: 'video/ogg; codecs="theora, vorbis"',
722
755
  flashCanPlay: false,
@@ -1032,7 +1065,17 @@
1032
1065
  this.element.append(htmlObj);
1033
1066
  this.internal.flash.jq = $(htmlObj);
1034
1067
  }
1035
-
1068
+
1069
+ // Setup playbackRate ability before using _addHtmlEventListeners()
1070
+ if(this.html.used && !this.flash.used) { // If only HTML
1071
+ // Using the audio element capabilities for playbackRate. ie., Assuming video element is the same.
1072
+ this.status.playbackRateEnabled = this._testPlaybackRate('audio');
1073
+ } else {
1074
+ this.status.playbackRateEnabled = false;
1075
+ }
1076
+
1077
+ this._updatePlaybackRate();
1078
+
1036
1079
  // Add the HTML solution if being used.
1037
1080
  if(this.html.used) {
1038
1081
 
@@ -1140,6 +1183,23 @@
1140
1183
  return false;
1141
1184
  }
1142
1185
  },
1186
+ _testPlaybackRate: function(type) {
1187
+ // type: String 'audio' or 'video'
1188
+ var el, rate = 0.5;
1189
+ type = typeof type === 'string' ? type : 'audio';
1190
+ el = document.createElement(type);
1191
+ // Wrapping in a try/catch, just in case older HTML5 browsers throw and error.
1192
+ try {
1193
+ if('playbackRate' in el) {
1194
+ el.playbackRate = rate;
1195
+ return el.playbackRate === rate;
1196
+ } else {
1197
+ return false;
1198
+ }
1199
+ } catch(err) {
1200
+ return false;
1201
+ }
1202
+ },
1143
1203
  _uaBlocklist: function(list) {
1144
1204
  // list : object with properties that are all regular expressions. Property names are irrelevant.
1145
1205
  // Returns true if the user agent is matched in list.
@@ -1185,6 +1245,11 @@
1185
1245
  mediaElement.muted = this.options.muted;
1186
1246
  mediaElement.volume = this.options.volume;
1187
1247
 
1248
+ if(this.status.playbackRateEnabled) {
1249
+ mediaElement.defaultPlaybackRate = this.options.defaultPlaybackRate;
1250
+ mediaElement.playbackRate = this.options.playbackRate;
1251
+ }
1252
+
1188
1253
  // Create the event listeners
1189
1254
  // Only want the active entity to affect jPlayer and bubble events.
1190
1255
  // Using entity.gate so that object is referenced and gate property always current
@@ -1262,6 +1327,14 @@
1262
1327
  self._trigger($.jPlayer.event.volumechange);
1263
1328
  }
1264
1329
  }, false);
1330
+ mediaElement.addEventListener("ratechange", function() {
1331
+ if(entity.gate) {
1332
+ self.options.defaultPlaybackRate = mediaElement.defaultPlaybackRate;
1333
+ self.options.playbackRate = mediaElement.playbackRate;
1334
+ self._updatePlaybackRate();
1335
+ self._trigger($.jPlayer.event.ratechange);
1336
+ }
1337
+ }, false);
1265
1338
  mediaElement.addEventListener("suspend", function() { // Seems to be the only way of capturing that the iOS4 browser did not actually play the media from the page code. ie., It needs a user gesture.
1266
1339
  if(entity.gate) {
1267
1340
  self._seeked();
@@ -1406,6 +1479,7 @@
1406
1479
  paused = this.status.paused;
1407
1480
 
1408
1481
  this.setMedia(this.status.media);
1482
+ this.volumeWorker(this.options.volume);
1409
1483
  if(currentTime > 0) {
1410
1484
  if(paused) {
1411
1485
  this.pause(currentTime);
@@ -1582,12 +1656,28 @@
1582
1656
  this.html.active = false;
1583
1657
  this.flash.active = false;
1584
1658
  },
1659
+ _escapeHtml: function(s) {
1660
+ return s.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;').split('"').join('&quot;');
1661
+ },
1662
+ _qualifyURL: function(url) {
1663
+ var el = document.createElement('div');
1664
+ el.innerHTML= '<a href="' + this._escapeHtml(url) + '">x</a>';
1665
+ return el.firstChild.href;
1666
+ },
1667
+ _absoluteMediaUrls: function(media) {
1668
+ var self = this;
1669
+ $.each(media, function(type, url) {
1670
+ if(self.format[type]) {
1671
+ media[type] = self._qualifyURL(url);
1672
+ }
1673
+ });
1674
+ return media;
1675
+ },
1585
1676
  setMedia: function(media) {
1586
1677
 
1587
1678
  /* media[format] = String: URL of format. Must contain all of the supplied option's video or audio formats.
1588
1679
  * media.poster = String: Video poster URL.
1589
- * media.subtitles = String: * NOT IMPLEMENTED * URL of subtitles SRT file
1590
- * media.chapters = String: * NOT IMPLEMENTED * URL of chapters SRT file
1680
+ * media.track = Array: Of objects defining the track element: kind, src, srclang, label, def.
1591
1681
  * media.stream = Boolean: * NOT IMPLEMENTED * Designating actual media streams. ie., "false/undefined" for files. Plan to refresh the flash every so often.
1592
1682
  */
1593
1683
 
@@ -1599,6 +1689,9 @@
1599
1689
  this._resetGate();
1600
1690
  this._resetActive();
1601
1691
 
1692
+ // Convert all media URLs to absolute URLs.
1693
+ media = this._absoluteMediaUrls(media);
1694
+
1602
1695
  $.each(this.formats, function(formatPriority, format) {
1603
1696
  var isVideo = self.format[format].media === 'video';
1604
1697
  $.each(self.solutions, function(solutionPriority, solution) {
@@ -1742,16 +1835,33 @@
1742
1835
  this._urlNotSetError("pause");
1743
1836
  }
1744
1837
  },
1745
- pauseOthers: function() {
1746
- var self = this;
1747
- $.each(this.instances, function(i, element) {
1748
- if(self.element !== element) { // Do not this instance.
1749
- if(element.data("jPlayer").status.srcSet) { // Check that media is set otherwise would cause error event.
1750
- element.jPlayer("pause");
1838
+ tellOthers: function(command, conditions) {
1839
+ var self = this,
1840
+ hasConditions = typeof conditions === 'function',
1841
+ args = Array.prototype.slice.call(arguments); // Convert arguments to an Array.
1842
+
1843
+ if(typeof command !== 'string') { // Ignore, since no command.
1844
+ return; // Return undefined to maintain chaining.
1845
+ }
1846
+ if(hasConditions) {
1847
+ args.splice(1, 1); // Remove the conditions from the arguments
1848
+ }
1849
+
1850
+ $.each(this.instances, function() {
1851
+ // Remember that "this" is the instance's "element" in the $.each() loop.
1852
+ if(self.element !== this) { // Do not tell my instance.
1853
+ if(!hasConditions || conditions.call(this.data("jPlayer"), self)) {
1854
+ this.jPlayer.apply(this, args);
1751
1855
  }
1752
1856
  }
1753
1857
  });
1754
1858
  },
1859
+ pauseOthers: function(time) {
1860
+ this.tellOthers("pause", function() {
1861
+ // In the conditions function, the "this" context is the other instance's jPlayer object.
1862
+ return this.status.srcSet;
1863
+ }, time);
1864
+ },
1755
1865
  stop: function() {
1756
1866
  if(this.status.srcSet) {
1757
1867
  if(this.html.active) {
@@ -1776,9 +1886,18 @@
1776
1886
  }
1777
1887
  },
1778
1888
  _muted: function(muted) {
1889
+ this.mutedWorker(muted);
1890
+ if(this.options.globalVolume) {
1891
+ this.tellOthers("mutedWorker", function() {
1892
+ // Check the other instance has global volume enabled.
1893
+ return this.options.globalVolume;
1894
+ }, muted);
1895
+ }
1896
+ },
1897
+ mutedWorker: function(muted) {
1779
1898
  this.options.muted = muted;
1780
1899
  if(this.html.used) {
1781
- this._html_mute(muted);
1900
+ this._html_setProperty('muted', muted);
1782
1901
  }
1783
1902
  if(this.flash.used) {
1784
1903
  this._flash_mute(muted);
@@ -1817,11 +1936,20 @@
1817
1936
  }
1818
1937
  },
1819
1938
  volume: function(v) {
1939
+ this.volumeWorker(v);
1940
+ if(this.options.globalVolume) {
1941
+ this.tellOthers("volumeWorker", function() {
1942
+ // Check the other instance has global volume enabled.
1943
+ return this.options.globalVolume;
1944
+ }, v);
1945
+ }
1946
+ },
1947
+ volumeWorker: function(v) {
1820
1948
  v = this._limitValue(v, 0, 1);
1821
1949
  this.options.volume = v;
1822
1950
 
1823
1951
  if(this.html.used) {
1824
- this._html_volume(v);
1952
+ this._html_setProperty('volume', v);
1825
1953
  }
1826
1954
  if(this.flash.used) {
1827
1955
  this._flash_volume(v);
@@ -1979,6 +2107,51 @@
1979
2107
  playBar: function() { // Handles clicks on the playBar
1980
2108
  // The seekBar handles this event as the event propagates up the DOM.
1981
2109
  },
2110
+ playbackRate: function(pbr) {
2111
+ this._setOption("playbackRate", pbr);
2112
+ },
2113
+ playbackRateBar: function(e) { // Handles clicks on the playbackRateBar
2114
+ if(this.css.jq.playbackRateBar.length) {
2115
+ // Using $(e.currentTarget) to enable multiple playbackRate bars
2116
+ var $bar = $(e.currentTarget),
2117
+ offset = $bar.offset(),
2118
+ x = e.pageX - offset.left,
2119
+ w = $bar.width(),
2120
+ y = $bar.height() - e.pageY + offset.top,
2121
+ h = $bar.height(),
2122
+ ratio, pbr;
2123
+ if(this.options.verticalPlaybackRate) {
2124
+ ratio = y/h;
2125
+ } else {
2126
+ ratio = x/w;
2127
+ }
2128
+ pbr = ratio * (this.options.maxPlaybackRate - this.options.minPlaybackRate) + this.options.minPlaybackRate;
2129
+ this.playbackRate(pbr);
2130
+ }
2131
+ },
2132
+ playbackRateBarValue: function() { // Handles clicks on the playbackRateBarValue
2133
+ // The playbackRateBar handles this event as the event propagates up the DOM.
2134
+ },
2135
+ _updatePlaybackRate: function() {
2136
+ var pbr = this.options.playbackRate,
2137
+ ratio = (pbr - this.options.minPlaybackRate) / (this.options.maxPlaybackRate - this.options.minPlaybackRate);
2138
+ if(this.status.playbackRateEnabled) {
2139
+ if(this.css.jq.playbackRateBar.length) {
2140
+ this.css.jq.playbackRateBar.show();
2141
+ }
2142
+ if(this.css.jq.playbackRateBarValue.length) {
2143
+ this.css.jq.playbackRateBarValue.show();
2144
+ this.css.jq.playbackRateBarValue[this.options.verticalPlaybackRate ? "height" : "width"]((ratio*100)+"%");
2145
+ }
2146
+ } else {
2147
+ if(this.css.jq.playbackRateBar.length) {
2148
+ this.css.jq.playbackRateBar.hide();
2149
+ }
2150
+ if(this.css.jq.playbackRateBarValue.length) {
2151
+ this.css.jq.playbackRateBarValue.hide();
2152
+ }
2153
+ }
2154
+ },
1982
2155
  repeat: function() { // Handle clicks on the repeat button
1983
2156
  this._loop(true);
1984
2157
  },
@@ -2083,6 +2256,9 @@
2083
2256
  case "muted" :
2084
2257
  this._muted(value);
2085
2258
  break;
2259
+ case "globalVolume" :
2260
+ this.options[key] = value;
2261
+ break;
2086
2262
  case "cssSelectorAncestor" :
2087
2263
  this._cssSelectorAncestor(value); // Set and refresh all associations for the new ancestor.
2088
2264
  break;
@@ -2091,6 +2267,28 @@
2091
2267
  self._cssSelector(fn, cssSel); // NB: The option is set inside this function, after further validity checks.
2092
2268
  });
2093
2269
  break;
2270
+ case "playbackRate" :
2271
+ this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate, this.options.maxPlaybackRate);
2272
+ if(this.html.used) {
2273
+ this._html_setProperty('playbackRate', value);
2274
+ }
2275
+ this._updatePlaybackRate();
2276
+ break;
2277
+ case "defaultPlaybackRate" :
2278
+ this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate, this.options.maxPlaybackRate);
2279
+ if(this.html.used) {
2280
+ this._html_setProperty('defaultPlaybackRate', value);
2281
+ }
2282
+ this._updatePlaybackRate();
2283
+ break;
2284
+ case "minPlaybackRate" :
2285
+ this.options[key] = value = this._limitValue(value, 0.1, this.options.maxPlaybackRate - 0.1);
2286
+ this._updatePlaybackRate();
2287
+ break;
2288
+ case "maxPlaybackRate" :
2289
+ this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate + 0.1, 16);
2290
+ this._updatePlaybackRate();
2291
+ break;
2094
2292
  case "fullScreen" :
2095
2293
  if(this.options[key] !== value) { // if changed
2096
2294
  var wkv = $.jPlayer.nativeFeatures.fullscreen.used.webkitVideo;
@@ -2510,20 +2708,12 @@
2510
2708
  }
2511
2709
  }
2512
2710
  },
2513
- _html_volume: function(v) {
2514
- if(this.html.audio.available) {
2515
- this.htmlElement.audio.volume = v;
2516
- }
2517
- if(this.html.video.available) {
2518
- this.htmlElement.video.volume = v;
2519
- }
2520
- },
2521
- _html_mute: function(m) {
2711
+ _html_setProperty: function(property, value) {
2522
2712
  if(this.html.audio.available) {
2523
- this.htmlElement.audio.muted = m;
2713
+ this.htmlElement.audio[property] = value;
2524
2714
  }
2525
2715
  if(this.html.video.available) {
2526
- this.htmlElement.video.muted = m;
2716
+ this.htmlElement.video[property] = value;
2527
2717
  }
2528
2718
  },
2529
2719
  _flash_setAudio: function(media) {
@@ -2718,17 +2908,22 @@
2718
2908
  _error: function(error) {
2719
2909
  this._trigger($.jPlayer.event.error, error);
2720
2910
  if(this.options.errorAlerts) {
2721
- this._alert("Error!" + (error.message ? "\n\n" + error.message : "") + (error.hint ? "\n\n" + error.hint : "") + "\n\nContext: " + error.context);
2911
+ this._alert("Error!" + (error.message ? "\n" + error.message : "") + (error.hint ? "\n" + error.hint : "") + "\nContext: " + error.context);
2722
2912
  }
2723
2913
  },
2724
2914
  _warning: function(warning) {
2725
2915
  this._trigger($.jPlayer.event.warning, undefined, warning);
2726
2916
  if(this.options.warningAlerts) {
2727
- this._alert("Warning!" + (warning.message ? "\n\n" + warning.message : "") + (warning.hint ? "\n\n" + warning.hint : "") + "\n\nContext: " + warning.context);
2917
+ this._alert("Warning!" + (warning.message ? "\n" + warning.message : "") + (warning.hint ? "\n" + warning.hint : "") + "\nContext: " + warning.context);
2728
2918
  }
2729
2919
  },
2730
2920
  _alert: function(message) {
2731
- alert("jPlayer " + this.version.script + " : id='" + this.internal.self.id +"' : " + message);
2921
+ var msg = "jPlayer " + this.version.script + " : id='" + this.internal.self.id +"' : " + message;
2922
+ if(!this.options.consoleAlerts) {
2923
+ alert(msg);
2924
+ } else if(console && console.log) {
2925
+ console.log(msg);
2926
+ }
2732
2927
  },
2733
2928
  _emulateHtmlBridge: function() {
2734
2929
  var self = this;
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jplayer-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Miller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-24 00:00:00.000000000 Z
11
+ date: 2014-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: jPlayer for the rails asset pipeline.
@@ -45,12 +45,12 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - LICENSE.txt
49
+ - README.md
48
50
  - lib/jplayer-rails.rb
49
51
  - lib/jplayer-rails/version.rb
50
- - vendor/assets/javascripts/jquery.jplayer.js
51
52
  - vendor/assets/javascripts/Jplayer.swf
52
- - LICENSE.txt
53
- - README.md
53
+ - vendor/assets/javascripts/jquery.jplayer.js
54
54
  homepage: ''
55
55
  licenses:
56
56
  - MIT
@@ -61,19 +61,18 @@ require_paths:
61
61
  - lib
62
62
  required_ruby_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - '>='
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - '>='
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  requirements: []
73
73
  rubyforge_project:
74
- rubygems_version: 2.0.3
74
+ rubygems_version: 2.2.2
75
75
  signing_key:
76
76
  specification_version: 4
77
77
  summary: jPlayer for the rails asset pipeline
78
78
  test_files: []
79
- has_rdoc: