jplayer-rails 2.4.1 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/jplayer-rails/version.rb +1 -1
- data/vendor/assets/javascripts/Jplayer.swf +0 -0
- data/vendor/assets/javascripts/jquery.jplayer.js +230 -35
- metadata +12 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bedbc2e37a9c306255e09416b3393c0f0bfd464
|
4
|
+
data.tar.gz: cdacd7ecfa3261da2376aeae87f915090f2a8b9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dab5a328dadf9c98f6413f058660ae9cabca55319cd3a57b5dc4581940c79d235e4753f6120f2c8776ada5a628734d39e592d03d9ffdb8dd5368e725a8045ff7
|
7
|
+
data.tar.gz: f933da5ca76ab73af29565b437d8aa4b53f17dcf1f2f0166e771b7e7726e0555b3da0150dca6fd9d5fa65bc580c4edfd783af39375a751a203e7913052f6d3a6
|
data/README.md
CHANGED
Binary file
|
@@ -7,8 +7,8 @@
|
|
7
7
|
* http://opensource.org/licenses/MIT
|
8
8
|
*
|
9
9
|
* Author: Mark J Panaghiston
|
10
|
-
* Version: 2.
|
11
|
-
* Date:
|
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.
|
472
|
-
needFlash: "2.
|
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
|
-
|
602
|
-
|
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('&').split('<').join('<').split('>').join('>').split('"').join('"');
|
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.
|
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
|
-
|
1746
|
-
var self = this
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
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.
|
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.
|
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
|
-
|
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
|
2713
|
+
this.htmlElement.audio[property] = value;
|
2524
2714
|
}
|
2525
2715
|
if(this.html.video.available) {
|
2526
|
-
this.htmlElement.video
|
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
|
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
|
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
|
-
|
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
|
+
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:
|
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
|
-
-
|
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.
|
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:
|