From b1a359060ecbee3e024d5bef82f34a5e2d098e00 Mon Sep 17 00:00:00 2001 From: Olivier Audard Date: Fri, 8 Aug 2014 18:41:36 +0200 Subject: [PATCH 1/6] Handle arrays in QS decoder --- src/core/qs.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/core/qs.js b/src/core/qs.js index 8ae19cb..21009e5 100644 --- a/src/core/qs.js +++ b/src/core/qs.js @@ -69,14 +69,26 @@ DM.provide('QS', params = {}, parts = str.split('&'), i, - pair; + pair, + key, + val; for (i = 0; i < parts.length; i++) { pair = parts[i].split('=', 2); if (pair && pair[0]) { - params[decode(pair[0])] = pair[1] ? decode(pair[1].replace(/\+/g, '%20')) : ''; + key = decode(pair[0]); + val = pair[1] ? decode(pair[1].replace(/\+/g, '%20')) : ''; + if (/\[\]$/.test(key)) + { + key = key.slice(0,-2); + (params[key] ? params[key] : params[key] = []).push(val); + } + else + { + params[key] = val; + } } } From df156eeedf18be18b54586945558d5f1ce49cfa9 Mon Sep 17 00:00:00 2001 From: Olivier Audard Date: Fri, 8 Aug 2014 18:44:45 +0200 Subject: [PATCH 2/6] Use JSON.stringify() to display event data in test page --- tests/player.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/player.html b/tests/player.html index 23a43ec..b8647ce 100644 --- a/tests/player.html +++ b/tests/player.html @@ -141,7 +141,7 @@ } if ($.inArray(e.type, ['play', 'playing', 'pause', 'ad_play', 'ad_pause']) !== -1) $('#status').html(e.type); - var line = $('
  • -> ' + e.type + ' ' + ($.param(data).replace(/&/g, ' ')) + '
  • ').prependTo('#console'); + var line = $('
  • -> ' + e.type + ' ' + JSON.stringify(data) + '
  • ').prependTo('#console'); if ($.inArray(e.type, ['timeupdate', 'progress', 'ad_timeupdate']) !== -1) line.addClass('minor'); if (e.type == 'error') line.addClass('fatal'); }); From d74e70586f91c85846b720c019eec1c23492f519 Mon Sep 17 00:00:00 2001 From: Olivier Audard Date: Fri, 8 Aug 2014 18:45:47 +0200 Subject: [PATCH 3/6] Handle Qualities in player API --- src/core/player.js | 5 +++++ tests/player.html | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/core/player.js b/src/core/player.js index 2359f71..eefaaff 100644 --- a/src/core/player.js +++ b/src/core/player.js @@ -62,6 +62,8 @@ DM.provide('Player', paused: true, fullscreen: false, rebuffering: false, + qualities: [], + quality: undefined, play: function() {this.api('play');}, togglePlay: function() {this.api('toggle-play');}, @@ -71,6 +73,7 @@ DM.provide('Player', setMuted: function(muted) {this.api('muted', muted);}, toggleMuted: function() {this.api('toggle-muted');}, setVolume: function(volume) {this.api('volume', volume);}, + setQuality: function(quality) {this.api('quality', quality);}, setFullscreen: function(fullscreen) {this.api('fullscreen', fullscreen);}, watchOnSite: function(muted) {this.api('watch-on-site');}, @@ -303,6 +306,8 @@ DM.provide('Player', case 'pause': this.paused = true; break; case 'error': this.error = {code: event.code, title: event.title, message: event.message}; break; case 'rebuffer': this.rebuffering = DM.parseBool(event.rebuffering); break; + case 'availablequalities': this.qualities = event.qualities; break; + case 'qualitychange': this.quality = event.quality; break; } this._dispatch(event.event); diff --git a/tests/player.html b/tests/player.html index b8647ce..e69975d 100644 --- a/tests/player.html +++ b/tests/player.html @@ -40,6 +40,9 @@ Platform:
    + +
    +
    @@ -67,7 +70,7 @@ //DM.XDCom._swfPath = '../xdcom.swf' var params = {html: "0"}, - video = 'x6q96t', + video = 'xwr14q', player = DM.player($('#player').get(0), {video: video, width: '100%', height: '100%', params: params}); $('input[name=html]:checkbox').change(function() @@ -104,7 +107,7 @@ $('
  • <- ' + cmd + (arg ? '=' + arg : '') + '
  • ').prependTo('#console'); $('#player').get(0).api(cmd, arg); }); -$(player).bind( 'apiready play playing canplay canplaythrough loadedmetadata timeupdate progress seeking seeked volumechange durationchange pause ended error fullscreenchange ad_start ad_timeupdate ad_play ad_pause ad_end', function(e) +$(player).bind( 'apiready play playing canplay canplaythrough loadedmetadata timeupdate progress seeking seeked volumechange durationchange pause ended error fullscreenchange availablequalities qualitychange ad_start ad_timeupdate ad_play ad_pause ad_end', function(e) { var data = {}, player = e.target; switch (e.type) @@ -134,6 +137,12 @@ data['volume'] = player.volume; data['muted'] = player.muted; break; + case 'availablequalities': + data['qualities'] = player.qualities; + break; + case 'qualitychange': + data['quality'] = player.quality; + break; case 'error': data = player.error; From e0da9514c21e4b36370e7d8037f579441b8e8c67 Mon Sep 17 00:00:00 2001 From: Olivier Audard Date: Fri, 8 Aug 2014 18:53:24 +0200 Subject: [PATCH 4/6] Makefile: provide a dedicated build for the player api --- Makefile | 9 +++++++-- src/core/epilogue.js | 6 ++++++ src/core/init.js | 9 +-------- 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 src/core/epilogue.js diff --git a/Makefile b/Makefile index 0cf4d3e..84547a7 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,19 @@ +PLAYER_FILES := src/core/prelude.js src/common/array.js src/core/player.js src/core/epilogue.js src/core/qs.js + FILES := src/third-party/json2.js src/core/prelude.js src/core/json.js src/common/array.js \ - src/core/cookie.js src/core/event.js src/core/init.js src/core/qs.js src/core/api.js \ + src/core/cookie.js src/core/event.js src/core/init.js src/core/epilogue.js src/core/qs.js src/core/api.js \ src/core/auth.js src/core/xdcom.js src/core/player.js COMPRESSOR_BIN := yuicompressor MXMLC_BIN := mxmlc -all: all.js xdcom.swf +all: all.js player_api.js xdcom.swf all.js: $(FILES) cat $(FILES) | $(COMPRESSOR_BIN) --type js -o $@ +player_api.js: $(PLAYER_FILES) + cat $(PLAYER_FILES) | $(COMPRESSOR_BIN) --type js -o $@ + xdcom.swf: src/core/xdcom.as $(MXMLC_BIN) --strict -optimize -debug=true -static-link-runtime-shared-libraries=true -o $@ -- src/core/xdcom.as diff --git a/src/core/epilogue.js b/src/core/epilogue.js new file mode 100644 index 0000000..a6db472 --- /dev/null +++ b/src/core/epilogue.js @@ -0,0 +1,6 @@ +// this is useful when the library is being loaded asynchronously +// +// we do it in a setTimeout to wait until the current event loop as finished. +// this allows potential library code being included below this block (possible +// when being served from an automatically combined version) +window.setTimeout(function() { if (window.dmAsyncInit) { dmAsyncInit(); }}, 0); diff --git a/src/core/init.js b/src/core/init.js index 5d6d6fd..b110ba6 100644 --- a/src/core/init.js +++ b/src/core/init.js @@ -73,11 +73,4 @@ DM.provide('', } } } -}); - -// this is useful when the library is being loaded asynchronously -// -// we do it in a setTimeout to wait until the current event loop as finished. -// this allows potential library code being included below this block (possible -// when being served from an automatically combined version) -window.setTimeout(function() { if (window.dmAsyncInit) { dmAsyncInit(); }}, 0); +}); \ No newline at end of file From 4c25fbbc3d37ddd11d521e9bc52e2a42be5e0fd6 Mon Sep 17 00:00:00 2001 From: Florian Mailliet Date: Tue, 30 Jun 2015 12:12:37 +0200 Subject: [PATCH 5/6] Handle Subtitles in player API --- src/core/player.js | 5 +++++ tests/player.html | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/player.js b/src/core/player.js index eefaaff..ecd68ad 100644 --- a/src/core/player.js +++ b/src/core/player.js @@ -64,6 +64,8 @@ DM.provide('Player', rebuffering: false, qualities: [], quality: undefined, + subtitles: [], + subtitle: undefined, play: function() {this.api('play');}, togglePlay: function() {this.api('toggle-play');}, @@ -74,6 +76,7 @@ DM.provide('Player', toggleMuted: function() {this.api('toggle-muted');}, setVolume: function(volume) {this.api('volume', volume);}, setQuality: function(quality) {this.api('quality', quality);}, + setSubtitle: function(subtitle) {this.api('subtitle', subtitle);}, setFullscreen: function(fullscreen) {this.api('fullscreen', fullscreen);}, watchOnSite: function(muted) {this.api('watch-on-site');}, @@ -308,6 +311,8 @@ DM.provide('Player', case 'rebuffer': this.rebuffering = DM.parseBool(event.rebuffering); break; case 'availablequalities': this.qualities = event.qualities; break; case 'qualitychange': this.quality = event.quality; break; + case 'availablesubtitles': this.subtitles = event.subtitles; break; + case 'subtitlechange': this.subtitle = event.subtitle; break; } this._dispatch(event.event); diff --git a/tests/player.html b/tests/player.html index e69975d..3e6a87b 100644 --- a/tests/player.html +++ b/tests/player.html @@ -41,6 +41,7 @@
    +
    @@ -107,7 +108,7 @@ $('
  • <- ' + cmd + (arg ? '=' + arg : '') + '
  • ').prependTo('#console'); $('#player').get(0).api(cmd, arg); }); -$(player).bind( 'apiready play playing canplay canplaythrough loadedmetadata timeupdate progress seeking seeked volumechange durationchange pause ended error fullscreenchange availablequalities qualitychange ad_start ad_timeupdate ad_play ad_pause ad_end', function(e) +$(player).bind( 'apiready play playing canplay canplaythrough loadedmetadata timeupdate progress seeking seeked volumechange durationchange pause ended error fullscreenchange availablequalities qualitychange availablesubtitles subtitlechange ad_start ad_timeupdate ad_play ad_pause ad_end', function(e) { var data = {}, player = e.target; switch (e.type) @@ -143,6 +144,12 @@ case 'qualitychange': data['quality'] = player.quality; break; + case 'availablesubtitles': + data['subtitles'] = player.subtitles; + break; + case 'subtitlechange': + data['subtitle'] = player.subtitle; + break; case 'error': data = player.error; From 54f3a574fbc8ae1cfeea1649ee98bbee2a7f611c Mon Sep 17 00:00:00 2001 From: Florian Mailliet Date: Wed, 1 Jul 2015 12:27:29 +0200 Subject: [PATCH 6/6] Rename events --- src/core/player.js | 4 ++-- tests/player.html | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/player.js b/src/core/player.js index ecd68ad..7f5f293 100644 --- a/src/core/player.js +++ b/src/core/player.js @@ -309,9 +309,9 @@ DM.provide('Player', case 'pause': this.paused = true; break; case 'error': this.error = {code: event.code, title: event.title, message: event.message}; break; case 'rebuffer': this.rebuffering = DM.parseBool(event.rebuffering); break; - case 'availablequalities': this.qualities = event.qualities; break; + case 'qualitiesavailable': this.qualities = event.qualities; break; case 'qualitychange': this.quality = event.quality; break; - case 'availablesubtitles': this.subtitles = event.subtitles; break; + case 'subtitlesavailable': this.subtitles = event.subtitles; break; case 'subtitlechange': this.subtitle = event.subtitle; break; } diff --git a/tests/player.html b/tests/player.html index 3e6a87b..2a9b87f 100644 --- a/tests/player.html +++ b/tests/player.html @@ -108,7 +108,7 @@ $('
  • <- ' + cmd + (arg ? '=' + arg : '') + '
  • ').prependTo('#console'); $('#player').get(0).api(cmd, arg); }); -$(player).bind( 'apiready play playing canplay canplaythrough loadedmetadata timeupdate progress seeking seeked volumechange durationchange pause ended error fullscreenchange availablequalities qualitychange availablesubtitles subtitlechange ad_start ad_timeupdate ad_play ad_pause ad_end', function(e) +$(player).bind( 'apiready play playing canplay canplaythrough loadedmetadata timeupdate progress seeking seeked volumechange durationchange pause ended error fullscreenchange qualitiesavailable qualitychange subtitlesavailable subtitlechange ad_start ad_timeupdate ad_play ad_pause ad_end', function(e) { var data = {}, player = e.target; switch (e.type) @@ -138,13 +138,13 @@ data['volume'] = player.volume; data['muted'] = player.muted; break; - case 'availablequalities': + case 'qualitiesavailable': data['qualities'] = player.qualities; break; case 'qualitychange': data['quality'] = player.quality; break; - case 'availablesubtitles': + case 'subtitlesavailable': data['subtitles'] = player.subtitles; break; case 'subtitlechange':