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 +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:
|