mediaelement_rails 0.7.0 → 0.8.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: e6de3b42c57e45c1a61a60d8ec98c0fd66ee2df4
4
- data.tar.gz: df336f0708e2a50975aa669cd3956ffbb109b89d
3
+ metadata.gz: 23365c544c82660f323c1daabc33b00f6181dffb
4
+ data.tar.gz: a8c9ff738d46f26e0ec107d5284e750bef83fadd
5
5
  SHA512:
6
- metadata.gz: 4c8ebde5252b5680454c8e8cb7fb8e45fcaaf71251aee75c617c95f0971915e2bafb1a9fb67828dae8e185843e11b1b550e3f1d310b828f90358e12fdce0cfbb
7
- data.tar.gz: b3776c5c16c5176593279a4d7b3d6959def7d73eb429b261c9612134403fdeae489aa7d739ded0c34a4897c51ec2bf300e47526a542e09893515bd61e75541a6
6
+ metadata.gz: 7e4207d1706fe455887273959db1e042ae32ec28ab3726bf0828b67443035951b741f9c48d80031eda3488627c85317a31f28018d2b22e84171dce52211bc68f
7
+ data.tar.gz: 6462b9298fd2670d65ccd8df2e97efc954f6b0ab6b2ab43cf5bf9f50d267fce94ef89749b6337cb2e9134de9a354dcc332afe04f51cc5b4a6c74ac67a55dad9d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Changelog
2
2
 
3
+ ### v0.8
4
+
5
+ - Updated MediaElement.js to 2.14.2
6
+
3
7
  ### v0.7.0
4
8
 
5
9
  - Updated MediaElement.js to 2.13.2
data/README.md CHANGED
@@ -50,4 +50,12 @@ Nothing special! This project includes all assets you might need.
50
50
  - Add support for `flashmediaelement-cdn.swf` for cases when the assets are hosted on a different domain than the rails application.
51
51
  - Setup [appraisal](https://github.com/thoughtbot/appraisal) gem to test against rails 3.x and 4.x
52
52
 
53
+ ## Maintainers ##
54
+
55
+ - [Mark Oleson](https://github.com/fusion2004) - current
56
+ - [Tobias Schlottke](https://github.com/tobsch)
57
+ - [Pete Browne](https://github.com/petebrowne)
58
+
59
+ ## License ##
60
+
53
61
  This project rocks and uses MIT-LICENSE.
@@ -7,7 +7,7 @@
7
7
  * for browsers that don't understand HTML5 or can't play the provided codec
8
8
  * Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3
9
9
  *
10
- * Copyright 2010-2013, John Dyer (http://j.hn)
10
+ * Copyright 2010-2014, John Dyer (http://j.hn)
11
11
  * License: MIT
12
12
  *
13
13
  */
@@ -15,7 +15,7 @@
15
15
  var mejs = mejs || {};
16
16
 
17
17
  // version number
18
- mejs.version = '2.13.2';
18
+ mejs.version = '2.14.2';
19
19
 
20
20
 
21
21
  // player number (for missing, same id attr)
@@ -535,7 +535,7 @@ mejs.PluginMediaElement.prototype = {
535
535
  // HTML5 methods
536
536
  play: function () {
537
537
  if (this.pluginApi != null) {
538
- if (this.pluginType == 'youtube') {
538
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
539
539
  this.pluginApi.playVideo();
540
540
  } else {
541
541
  this.pluginApi.playMedia();
@@ -545,7 +545,7 @@ mejs.PluginMediaElement.prototype = {
545
545
  },
546
546
  load: function () {
547
547
  if (this.pluginApi != null) {
548
- if (this.pluginType == 'youtube') {
548
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
549
549
  } else {
550
550
  this.pluginApi.loadMedia();
551
551
  }
@@ -555,7 +555,7 @@ mejs.PluginMediaElement.prototype = {
555
555
  },
556
556
  pause: function () {
557
557
  if (this.pluginApi != null) {
558
- if (this.pluginType == 'youtube') {
558
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
559
559
  this.pluginApi.pauseVideo();
560
560
  } else {
561
561
  this.pluginApi.pauseMedia();
@@ -567,7 +567,7 @@ mejs.PluginMediaElement.prototype = {
567
567
  },
568
568
  stop: function () {
569
569
  if (this.pluginApi != null) {
570
- if (this.pluginType == 'youtube') {
570
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
571
571
  this.pluginApi.stopVideo();
572
572
  } else {
573
573
  this.pluginApi.stopMedia();
@@ -637,7 +637,7 @@ mejs.PluginMediaElement.prototype = {
637
637
  },
638
638
  setCurrentTime: function (time) {
639
639
  if (this.pluginApi != null) {
640
- if (this.pluginType == 'youtube') {
640
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
641
641
  this.pluginApi.seekTo(time);
642
642
  } else {
643
643
  this.pluginApi.setCurrentTime(time);
@@ -651,7 +651,7 @@ mejs.PluginMediaElement.prototype = {
651
651
  setVolume: function (volume) {
652
652
  if (this.pluginApi != null) {
653
653
  // same on YouTube and MEjs
654
- if (this.pluginType == 'youtube') {
654
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
655
655
  this.pluginApi.setVolume(volume * 100);
656
656
  } else {
657
657
  this.pluginApi.setVolume(volume);
@@ -661,7 +661,7 @@ mejs.PluginMediaElement.prototype = {
661
661
  },
662
662
  setMuted: function (muted) {
663
663
  if (this.pluginApi != null) {
664
- if (this.pluginType == 'youtube') {
664
+ if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
665
665
  if (muted) {
666
666
  this.pluginApi.mute();
667
667
  } else {
@@ -719,7 +719,7 @@ mejs.PluginMediaElement.prototype = {
719
719
  var callbacks = this.events[eventName];
720
720
  if (!callbacks) return true;
721
721
  if (!callback) { this.events[eventName] = []; return true; }
722
- for (i = 0; i < callbacks.length; i++) {
722
+ for (var i = 0; i < callbacks.length; i++) {
723
723
  if (callbacks[i] === callback) {
724
724
  this.events[eventName].splice(i, 1);
725
725
  return true;
@@ -1051,7 +1051,9 @@ mejs.HtmlMediaElementShim = {
1051
1051
  // normal check
1052
1052
  if (htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== ''
1053
1053
  // special case for Mac/Safari 5.0.3 which answers '' to canPlayType('audio/mp3') but 'maybe' to canPlayType('audio/mpeg')
1054
- || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/mp3/,'mpeg')).replace(/no/, '') !== '') {
1054
+ || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/mp3/,'mpeg')).replace(/no/, '') !== ''
1055
+ // special case for m4a supported by detecting mp4 support
1056
+ || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/m4a/,'mp4')).replace(/no/, '') !== '') {
1055
1057
  result.method = 'native';
1056
1058
  result.url = mediaFiles[i].url;
1057
1059
  break;
@@ -1152,6 +1154,7 @@ mejs.HtmlMediaElementShim = {
1152
1154
  switch (ext) {
1153
1155
  case 'mp4':
1154
1156
  case 'm4v':
1157
+ case 'm4a':
1155
1158
  return 'mp4';
1156
1159
  case 'webm':
1157
1160
  case 'webma':
@@ -1217,8 +1220,8 @@ mejs.HtmlMediaElementShim = {
1217
1220
 
1218
1221
  // check for placement inside a <p> tag (sometimes WYSIWYG editors do this)
1219
1222
  node = htmlMediaElement.parentNode;
1220
- while (node !== null && node.tagName.toLowerCase() != 'body') {
1221
- if (node.parentNode.tagName.toLowerCase() == 'p') {
1223
+ while (node !== null && node.tagName.toLowerCase() !== 'body' && node.parentNode != null) {
1224
+ if (node.parentNode.tagName.toLowerCase() === 'p') {
1222
1225
  node.parentNode.parentNode.insertBefore(node, node.parentNode);
1223
1226
  break;
1224
1227
  }
@@ -1345,9 +1348,18 @@ mejs.HtmlMediaElementShim = {
1345
1348
  case 'youtube':
1346
1349
 
1347
1350
 
1348
- var
1351
+ var videoId;
1352
+ // youtu.be url from share button
1353
+ if (playback.url.lastIndexOf("youtu.be") != -1) {
1354
+ videoId = playback.url.substr(playback.url.lastIndexOf('/')+1);
1355
+ if (videoId.indexOf('?') != -1) {
1356
+ videoId = videoId.substr(0, videoId.indexOf('?'));
1357
+ }
1358
+ }
1359
+ else {
1349
1360
  videoId = playback.url.substr(playback.url.lastIndexOf('=')+1);
1350
- youtubeSettings = {
1361
+ }
1362
+ youtubeSettings = {
1351
1363
  container: container,
1352
1364
  containerId: container.id,
1353
1365
  pluginMediaElement: pluginMediaElement,
@@ -1367,23 +1379,57 @@ mejs.HtmlMediaElementShim = {
1367
1379
 
1368
1380
  // DEMO Code. Does NOT work.
1369
1381
  case 'vimeo':
1370
- //
1371
-
1382
+ var player_id = pluginid + "_player";
1372
1383
  pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1);
1373
1384
 
1374
- container.innerHTML ='<iframe src="http://player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?portrait=0&byline=0&title=0" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim"></iframe>';
1375
-
1376
- /*
1377
- container.innerHTML =
1378
- '<object width="' + width + '" height="' + height + '" class="mejs-shim">' +
1379
- '<param name="allowfullscreen" value="true" />' +
1380
- '<param name="allowscriptaccess" value="always" />' +
1381
- '<param name="flashvars" value="api=1" />' +
1382
- '<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=' + pluginMediaElement.vimeoid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" />' +
1383
- '<embed src="//vimeo.com/moogaloop.swf?api=1&amp;clip_id=' + pluginMediaElement.vimeoid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="' + width + '" height="' + height + '" class="mejs-shim"></embed>' +
1384
- '</object>';
1385
- */
1386
-
1385
+ container.innerHTML ='<iframe src="//player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?api=1&portrait=0&byline=0&title=0&player_id=' + player_id + '" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim" id="' + player_id + '"></iframe>';
1386
+ if (typeof($f) == 'function') { // froogaloop available
1387
+ var player = $f(container.childNodes[0]);
1388
+ player.addEvent('ready', function() {
1389
+ player.playVideo = function() {
1390
+ player.api('play');
1391
+ };
1392
+ player.pauseVideo = function() {
1393
+ player.api('pause');
1394
+ };
1395
+ player.seekTo = function(seconds) {
1396
+ player.api('seekTo', seconds);
1397
+ };
1398
+ function createEvent(player, pluginMediaElement, eventName, e) {
1399
+ var obj = {
1400
+ type: eventName,
1401
+ target: pluginMediaElement
1402
+ };
1403
+ if (eventName == 'timeupdate') {
1404
+ pluginMediaElement.currentTime = obj.currentTime = e.seconds;
1405
+ pluginMediaElement.duration = obj.duration = e.duration;
1406
+ }
1407
+ pluginMediaElement.dispatchEvent(obj.type, obj);
1408
+ }
1409
+ player.addEvent('play', function() {
1410
+ createEvent(player, pluginMediaElement, 'play');
1411
+ createEvent(player, pluginMediaElement, 'playing');
1412
+ });
1413
+ player.addEvent('pause', function() {
1414
+ createEvent(player, pluginMediaElement, 'pause');
1415
+ });
1416
+
1417
+ player.addEvent('finish', function() {
1418
+ createEvent(player, pluginMediaElement, 'ended');
1419
+ });
1420
+ player.addEvent('playProgress', function(e) {
1421
+ createEvent(player, pluginMediaElement, 'timeupdate', e);
1422
+ });
1423
+ pluginMediaElement.pluginApi = player;
1424
+
1425
+ // init mejs
1426
+ mejs.MediaPluginBridge.initPlugin(pluginid);
1427
+
1428
+ });
1429
+ }
1430
+ else {
1431
+ console.warn("You need to include froogaloop for vimeo to work");
1432
+ }
1387
1433
  break;
1388
1434
  }
1389
1435
  // hide original element
@@ -1539,7 +1585,7 @@ mejs.YouTubeApi = {
1539
1585
  },
1540
1586
  length: 1
1541
1587
  };
1542
-
1588
+
1543
1589
  }
1544
1590
 
1545
1591
  // send event up the chain
@@ -532,8 +532,8 @@ if (typeof jQuery != 'undefined') {
532
532
  } catch (e) {
533
533
  // TODO: report control error
534
534
  //throw e;
535
- //
536
- //
535
+
536
+
537
537
  }
538
538
  }
539
539
  }
@@ -570,7 +570,7 @@ if (typeof jQuery != 'undefined') {
570
570
 
571
571
  // create callback here since it needs access to current
572
572
  // MediaElement object
573
- mejs.MediaElementPlayer.prototype.clickToPlayPauseCallback = function() {
573
+ t.clickToPlayPauseCallback = function() {
574
574
  //
575
575
 
576
576
  if (t.options.clickToPlayPause) {
@@ -771,6 +771,11 @@ if (typeof jQuery != 'undefined') {
771
771
  parentWidth = t.container.parent().closest(':visible').width(),
772
772
  newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight;
773
773
 
774
+ // When we use percent, the newHeight can't be calculated so we get the container height
775
+ if(isNaN(newHeight)) {
776
+ newHeight = t.container.parent().closest(':visible').height();
777
+ }
778
+
774
779
  if (t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) {
775
780
  parentWidth = $(window).width();
776
781
  newHeight = $(window).height();
@@ -830,7 +835,14 @@ if (typeof jQuery != 'undefined') {
830
835
  total = t.controls.find('.mejs-time-total'),
831
836
  current = t.controls.find('.mejs-time-current'),
832
837
  loaded = t.controls.find('.mejs-time-loaded'),
833
- others = rail.siblings();
838
+ others = rail.siblings(),
839
+ lastControl = others.last(),
840
+ lastControlPosition = null;
841
+
842
+ // skip calculation if hidden
843
+ if (!t.container.is(':visible') || !rail.length || !rail.is(':visible')) {
844
+ return;
845
+ }
834
846
 
835
847
 
836
848
  // allow the size to come from custom CSS
@@ -854,12 +866,22 @@ if (typeof jQuery != 'undefined') {
854
866
  // fit the rail into the remaining space
855
867
  railWidth = t.controls.width() - usedWidth - (rail.outerWidth(true) - rail.width());
856
868
  }
857
-
858
- // outer area
859
- rail.width(railWidth);
860
- // dark space
861
- total.width(railWidth - (total.outerWidth(true) - total.width()));
862
-
869
+
870
+ // resize the rail,
871
+ // but then check if the last control (say, the fullscreen button) got pushed down
872
+ // this often happens when zoomed
873
+ do {
874
+ // outer area
875
+ rail.width(railWidth);
876
+ // dark space
877
+ total.width(railWidth - (total.outerWidth(true) - total.width()));
878
+
879
+ if (lastControl.css('position') != 'absolute') {
880
+ lastControlPosition = lastControl.position();
881
+ railWidth--;
882
+ }
883
+ } while (lastControlPosition != null && lastControlPosition.top > 0 && railWidth > 0);
884
+
863
885
  if (t.setProgressRail)
864
886
  t.setProgressRail();
865
887
  if (t.setCurrentRail)
@@ -938,7 +960,7 @@ if (typeof jQuery != 'undefined') {
938
960
  .bind('click touchstart', function() {
939
961
  if (t.options.clickToPlayPause) {
940
962
  if (media.paused) {
941
- t.play();
963
+ media.play();
942
964
  }
943
965
  }
944
966
  });
@@ -1039,9 +1061,7 @@ if (typeof jQuery != 'undefined') {
1039
1061
 
1040
1062
  // check if someone clicked outside a player region, then kill its focus
1041
1063
  t.globalBind('click', function(event) {
1042
- if ($(event.target).closest('.mejs-container').length == 0) {
1043
- player.hasFocus = false;
1044
- }
1064
+ player.hasFocus = $(event.target).closest('.mejs-container').length != 0;
1045
1065
  });
1046
1066
 
1047
1067
  },
@@ -1142,7 +1162,9 @@ if (typeof jQuery != 'undefined') {
1142
1162
  // Remove the player from the mejs.players object so that pauseOtherPlayers doesn't blow up when trying to pause a non existance flash api.
1143
1163
  delete mejs.players[t.id];
1144
1164
 
1145
- t.container.remove();
1165
+ if (typeof t.container == 'object') {
1166
+ t.container.remove();
1167
+ }
1146
1168
  t.globalUnbind();
1147
1169
  delete t.node.player;
1148
1170
  }
@@ -1325,9 +1347,14 @@ if (typeof jQuery != 'undefined') {
1325
1347
  timefloat = controls.find('.mejs-time-float'),
1326
1348
  timefloatcurrent = controls.find('.mejs-time-float-current'),
1327
1349
  handleMouseMove = function (e) {
1328
- // mouse position relative to the object
1329
- var x = e.pageX,
1330
- offset = total.offset(),
1350
+ // mouse or touch position relative to the object
1351
+ if (e.originalEvent.changedTouches) {
1352
+ var x = e.originalEvent.changedTouches[0].pageX;
1353
+ }else{
1354
+ var x = e.pageX;
1355
+ }
1356
+
1357
+ var offset = total.offset(),
1331
1358
  width = total.outerWidth(true),
1332
1359
  percentage = 0,
1333
1360
  newTime = 0,
@@ -1364,15 +1391,15 @@ if (typeof jQuery != 'undefined') {
1364
1391
  // handle clicks
1365
1392
  //controls.find('.mejs-time-rail').delegate('span', 'click', handleMouseMove);
1366
1393
  total
1367
- .bind('mousedown', function (e) {
1368
- // only handle left clicks
1369
- if (e.which === 1) {
1394
+ .bind('mousedown touchstart', function (e) {
1395
+ // only handle left clicks or touch
1396
+ if (e.which === 1 || e.which === 0) {
1370
1397
  mouseIsDown = true;
1371
1398
  handleMouseMove(e);
1372
- t.globalBind('mousemove.dur', function(e) {
1399
+ t.globalBind('mousemove.dur touchmove.dur', function(e) {
1373
1400
  handleMouseMove(e);
1374
1401
  });
1375
- t.globalBind('mouseup.dur', function (e) {
1402
+ t.globalBind('mouseup.dur touchend.dur', function (e) {
1376
1403
  mouseIsDown = false;
1377
1404
  timefloat.hide();
1378
1405
  t.globalUnbind('.dur');
@@ -1569,7 +1596,7 @@ if (typeof jQuery != 'undefined') {
1569
1596
  buildvolume: function(player, controls, layers, media) {
1570
1597
 
1571
1598
  // Android and iOS don't support volume controls
1572
- if (mejs.MediaFeatures.hasTouch && this.options.hideVolumeOnTouchDevices)
1599
+ if ((mejs.MediaFeatures.isAndroid || mejs.MediaFeatures.isiOS) && this.options.hideVolumeOnTouchDevices)
1573
1600
  return;
1574
1601
 
1575
1602
  var t = this,
@@ -2103,9 +2130,16 @@ if (typeof jQuery != 'undefined') {
2103
2130
  setTimeout(function checkFullscreen() {
2104
2131
 
2105
2132
  if (t.isNativeFullScreen) {
2133
+ var zoomMultiplier = window["devicePixelRatio"] || 1;
2134
+ // Use a percent error margin since devicePixelRatio is a float and not exact.
2135
+ var percentErrorMargin = 0.002; // 0.2%
2136
+ var windowWidth = zoomMultiplier * $(window).width();
2137
+ var screenWidth = screen.width;
2138
+ var absDiff = Math.abs(screenWidth - windowWidth);
2139
+ var marginError = screenWidth * percentErrorMargin;
2106
2140
 
2107
2141
  // check if the video is suddenly not really fullscreen
2108
- if ($(window).width() !== screen.width) {
2142
+ if (absDiff > marginError) {
2109
2143
  // manually exit
2110
2144
  t.exitFullScreen();
2111
2145
  } else {
@@ -187,7 +187,7 @@
187
187
 
188
188
  /* :focus for accessibility */
189
189
  .mejs-controls .mejs-button button:focus {
190
- outline: solid 1px yellow;
190
+ outline: dotted 1px #999;
191
191
  }
192
192
 
193
193
  /* End: CONTROL BAR */
@@ -1,3 +1,3 @@
1
1
  module MediaelementRails
2
- VERSION = '0.7.0'
2
+ VERSION = '0.8.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediaelement_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Oleson
@@ -10,118 +10,118 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-03-15 00:00:00.000000000 Z
13
+ date: 2014-04-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: railties
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: '3.1'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: jquery-rails
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
35
  version: '1.0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '1.0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rails
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '3.1'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '3.1'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: i18n
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: turn
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - '>='
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: sqlite3
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - '>='
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: thor
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - '>='
103
+ - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - '>='
110
+ - - ">="
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rake
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - '>='
117
+ - - ">="
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  description: A MediaElement gem(engine) for Rails. Makes embedding HTML5 video easy.
@@ -133,7 +133,7 @@ executables: []
133
133
  extensions: []
134
134
  extra_rdoc_files: []
135
135
  files:
136
- - .gitignore
136
+ - ".gitignore"
137
137
  - CHANGELOG.md
138
138
  - Gemfile
139
139
  - MIT-LICENSE
@@ -211,12 +211,12 @@ require_paths:
211
211
  - lib
212
212
  required_ruby_version: !ruby/object:Gem::Requirement
213
213
  requirements:
214
- - - '>='
214
+ - - ">="
215
215
  - !ruby/object:Gem::Version
216
216
  version: '0'
217
217
  required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - '>='
219
+ - - ">="
220
220
  - !ruby/object:Gem::Version
221
221
  version: '0'
222
222
  requirements: []