").attr("id", this.innerElementId).appendTo(this.container);
+ this.debug("Injecting player into element '{0}'.", this.container.id);
+
+ swfobject.embedSWF(this.contentBaseUrl + "StrobeMediaPlayback.swf", this.innerElementId, this.playerWidth.toString(), this.playerHeight.toString(), this.flashVersion, this.contentBaseUrl + "expressInstall.swf", flashvars, params, attributes, function (e) {
+ if (!e.success)
+ _this.fault();
+ });
+
+ Injectors.instances[this.innerElementId] = this;
+ };
+
+ SmpInjector.prototype.onMediaPlayerStateChange = function (state) {
+ if (state == "playbackError") {
+ this.debug("Playback error detected; cleaning up container and faulting this injector.");
+ Injectors.instances[this.innerElementId] = null;
+ this.fault();
+ }
+ };
+
+ SmpInjector.prototype.debug = function (message) {
+ var args = [];
+ for (var _i = 0; _i < (arguments.length - 1); _i++) {
+ args[_i] = arguments[_i + 1];
+ }
+ _super.prototype.debug.call(this, "SmpInjector: " + message, args);
+ };
+ return SmpInjector;
+ })(Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector);
+ Injectors.SmpInjector = SmpInjector;
+
+ function onSmpBridgeCreated(playerElementId) {
+ var player = document.getElementById(playerElementId);
+ if (player) {
+ player.addEventListener("mediaPlayerStateChange", "Orchard.Azure.MediaServices.VideoPlayer.Injectors.instances[\"" + playerElementId + "\"].onMediaPlayerStateChange");
+ }
+ }
+ Injectors.onSmpBridgeCreated = onSmpBridgeCreated;
+ })(VideoPlayer.Injectors || (VideoPlayer.Injectors = {}));
+ var Injectors = VideoPlayer.Injectors;
+ })(MediaServices.VideoPlayer || (MediaServices.VideoPlayer = {}));
+ var VideoPlayer = MediaServices.VideoPlayer;
+ })(Azure.MediaServices || (Azure.MediaServices = {}));
+ var MediaServices = Azure.MediaServices;
+ })(Orchard.Azure || (Orchard.Azure = {}));
+ var Azure = Orchard.Azure;
+})(Orchard || (Orchard = {}));
+//# sourceMappingURL=cloudmedia-videoplayer-injectors-smp.js.map
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map
new file mode 100644
index 000000000..b2af5cc45
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"cloudmedia-videoplayer-injectors-smp.js","sourceRoot":"","sources":["cloudmedia-videoplayer-injectors-smp.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.VideoPlayer","Orchard.Azure.MediaServices.VideoPlayer.Injectors","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.constructor","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.isSupported","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.inject","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.onMediaPlayerStateChange","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.debug","Orchard.Azure.MediaServices.VideoPlayer.Injectors.onSmpBridgeCreated"],"mappings":"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"}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts
new file mode 100644
index 000000000..d4749a5b5
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts
@@ -0,0 +1,108 @@
+///
+///
+
+module Orchard.Azure.MediaServices.VideoPlayer.Injectors {
+
+ import Data = Orchard.Azure.MediaServices.VideoPlayer.Data;
+
+ declare var swfobject: any;
+
+ export var instances: SmpInjector[] = new Array();
+
+ export class SmpInjector extends Injector {
+
+ private flashVersion = "10.2.0";
+ private innerElementId: string;
+
+ constructor(
+ container: HTMLElement,
+ playerWidth: number,
+ playerHeight: number,
+ autoPlay: boolean,
+ assetData: Data.IAssetData,
+ applyMediaQueries: boolean,
+ debugToConsole: boolean,
+ nextInjector: Injector,
+ private contentBaseUrl: string) {
+ super(container, playerWidth, playerHeight, autoPlay, assetData, applyMediaQueries, debugToConsole, nextInjector);
+ this.innerElementId = container.id + "-inner";
+ }
+
+ public isSupported(): boolean {
+ var browserHasFlash = swfobject.hasFlashPlayerVersion(this.flashVersion);
+ var hasDynamicAssets = _(this.filteredAssets().DynamicVideoAssets).any();
+ var result = browserHasFlash && hasDynamicAssets;
+
+ this.debug("Browser has required Flash version: {0}", browserHasFlash);
+ this.debug("Item has at least one dynamic video asset: {0}", hasDynamicAssets);
+
+ this.debug("isSupported() returns {0}.", result);
+ return result;
+ }
+
+ public inject(): void {
+ var firstDynamicAsset = _(this.filteredAssets().DynamicVideoAssets).first();
+ var firstThumbnailAsset = _(this.filteredAssets().ThumbnailAssets).first();
+
+ var flashvars = {
+ src: firstDynamicAsset.SmoothStreamingUrl,
+ plugin_AdaptiveStreamingPlugin: encodeURIComponent(this.contentBaseUrl + "MSAdaptiveStreamingPlugin.swf"),
+ AdaptiveStreamingPlugin_retryLive: "true",
+ AdaptiveStreamingPlugin_retryInterval: "10",
+ autoPlay: this.autoPlay.toString(),
+ bufferingOverlay: "false",
+ poster: firstThumbnailAsset ? encodeURIComponent(firstThumbnailAsset.MainFileUrl) : null,
+ javascriptCallbackFunction: "Orchard.Azure.MediaServices.VideoPlayer.Injectors.onSmpBridgeCreated"
+ };
+
+ var params = {
+ allowFullScreen: "true",
+ allowScriptAccess: "always",
+ wmode: "direct"
+ };
+
+ var attributes = {
+ id: this.innerElementId
+ };
+
+ $("
").attr("id", this.innerElementId).appendTo(this.container);
+ this.debug("Injecting player into element '{0}'.", this.container.id);
+
+ swfobject.embedSWF(
+ this.contentBaseUrl + "StrobeMediaPlayback.swf",
+ this.innerElementId,
+ this.playerWidth.toString(),
+ this.playerHeight.toString(),
+ this.flashVersion,
+ this.contentBaseUrl + "expressInstall.swf",
+ flashvars,
+ params,
+ attributes,
+ e => {
+ if (!e.success)
+ this.fault();
+ });
+
+ instances[this.innerElementId] = this;
+ }
+
+ public onMediaPlayerStateChange(state: string) {
+ if (state == "playbackError") {
+ this.debug("Playback error detected; cleaning up container and faulting this injector.");
+ instances[this.innerElementId] = null;
+ this.fault();
+ }
+ }
+
+ public debug(message: string, ...args: any[]): void {
+ super.debug("SmpInjector: " + message, args);
+ }
+ }
+
+ export function onSmpBridgeCreated(playerElementId: string) {
+ var player = document.getElementById(playerElementId);
+ if (player) {
+ (
player).addEventListener("mediaPlayerStateChange", "Orchard.Azure.MediaServices.VideoPlayer.Injectors.instances[\"" + playerElementId + "\"].onMediaPlayerStateChange");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js
new file mode 100644
index 000000000..28cf1232f
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js
@@ -0,0 +1,86 @@
+var Orchard;
+(function (Orchard) {
+ (function (Azure) {
+ (function (MediaServices) {
+ (function (VideoPlayer) {
+ (function (Injectors) {
+ var Injector = (function () {
+ function Injector(container, playerWidth, playerHeight, autoPlay, assetData, applyMediaQueries, debugToConsole, nextInjector) {
+ this.container = container;
+ this.playerWidth = playerWidth;
+ this.playerHeight = playerHeight;
+ this.autoPlay = autoPlay;
+ this.assetData = assetData;
+ this.applyMediaQueries = applyMediaQueries;
+ this.debugToConsole = debugToConsole;
+ this.nextInjector = nextInjector;
+ this._isFaulted = false;
+ }
+ Injector.prototype.isFaulted = function () {
+ return this._isFaulted;
+ };
+
+ Injector.prototype.invoke = function () {
+ if (this.isSupported())
+ this.inject();
+ else if (this.nextInjector)
+ this.nextInjector.invoke();
+ };
+
+ Injector.prototype.isSupported = function () {
+ throw new Error("This method is abstract and must be overridden in an inherited class.");
+ };
+
+ Injector.prototype.inject = function () {
+ throw new Error("This method is abstract and must be overridden in an inherited class.");
+ };
+
+ Injector.prototype.filteredAssets = function () {
+ if (!this.applyMediaQueries)
+ return this.assetData;
+
+ var hasMatchingMediaQuery = function (asset) {
+ return !asset.MediaQuery || window.matchMedia(asset.MediaQuery).matches;
+ };
+
+ return {
+ VideoAssets: _(this.assetData.VideoAssets).filter(hasMatchingMediaQuery),
+ DynamicVideoAssets: _(this.assetData.DynamicVideoAssets).filter(hasMatchingMediaQuery),
+ ThumbnailAssets: _(this.assetData.ThumbnailAssets).filter(hasMatchingMediaQuery),
+ SubtitleAssets: _(this.assetData.SubtitleAssets).filter(hasMatchingMediaQuery)
+ };
+ };
+
+ Injector.prototype.fault = function () {
+ if (!this._isFaulted) {
+ this._isFaulted = true;
+ $(this.container).empty();
+ if (this.nextInjector)
+ this.nextInjector.invoke();
+ }
+ };
+
+ Injector.prototype.debug = function (message) {
+ var args = [];
+ for (var _i = 0; _i < (arguments.length - 1); _i++) {
+ args[_i] = arguments[_i + 1];
+ }
+ if (this.debugToConsole) {
+ console.debug(message.replace(/{(\d+)}/g, function (match, index) {
+ return (typeof args[index] != "undefined" ? args[index] : match);
+ }));
+ }
+ };
+ return Injector;
+ })();
+ Injectors.Injector = Injector;
+ })(VideoPlayer.Injectors || (VideoPlayer.Injectors = {}));
+ var Injectors = VideoPlayer.Injectors;
+ })(MediaServices.VideoPlayer || (MediaServices.VideoPlayer = {}));
+ var VideoPlayer = MediaServices.VideoPlayer;
+ })(Azure.MediaServices || (Azure.MediaServices = {}));
+ var MediaServices = Azure.MediaServices;
+ })(Orchard.Azure || (Orchard.Azure = {}));
+ var Azure = Orchard.Azure;
+})(Orchard || (Orchard = {}));
+//# sourceMappingURL=cloudmedia-videoplayer-injectors.js.map
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map
new file mode 100644
index 000000000..8190e6293
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"cloudmedia-videoplayer-injectors.js","sourceRoot":"","sources":["cloudmedia-videoplayer-injectors.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.VideoPlayer","Orchard.Azure.MediaServices.VideoPlayer.Injectors","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.constructor","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.isFaulted","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.invoke","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.isSupported","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.inject","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.filteredAssets","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.fault","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.debug"],"mappings":"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"}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts
new file mode 100644
index 000000000..71c3a05ec
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts
@@ -0,0 +1,68 @@
+module Orchard.Azure.MediaServices.VideoPlayer.Injectors {
+
+ import Data = Orchard.Azure.MediaServices.VideoPlayer.Data;
+
+ export class Injector {
+
+ constructor(
+ public container: HTMLElement,
+ public playerWidth: number,
+ public playerHeight: number,
+ public autoPlay: boolean,
+ public assetData: Data.IAssetData,
+ public applyMediaQueries: boolean,
+ private debugToConsole: boolean,
+ private nextInjector: Injector) { }
+
+ private _isFaulted: boolean = false;
+ public isFaulted(): boolean {
+ return this._isFaulted;
+ }
+
+ public invoke() {
+ if (this.isSupported())
+ this.inject();
+ else if (this.nextInjector)
+ this.nextInjector.invoke();
+ }
+
+ public isSupported(): boolean {
+ throw new Error("This method is abstract and must be overridden in an inherited class.");
+ }
+
+ public inject(): void {
+ throw new Error("This method is abstract and must be overridden in an inherited class.");
+ }
+
+ public filteredAssets(): Data.IAssetData {
+ if (!this.applyMediaQueries)
+ return this.assetData;
+
+ var hasMatchingMediaQuery = function (asset: Data.IAsset) {
+ return !asset.MediaQuery || window.matchMedia(asset.MediaQuery).matches;
+ };
+
+ return {
+ VideoAssets: _(this.assetData.VideoAssets).filter(hasMatchingMediaQuery),
+ DynamicVideoAssets: _(this.assetData.DynamicVideoAssets).filter(hasMatchingMediaQuery),
+ ThumbnailAssets: _(this.assetData.ThumbnailAssets).filter(hasMatchingMediaQuery),
+ SubtitleAssets: _(this.assetData.SubtitleAssets).filter(hasMatchingMediaQuery)
+ };
+ }
+
+ public fault() {
+ if (!this._isFaulted) {
+ this._isFaulted = true;
+ $(this.container).empty();
+ if (this.nextInjector)
+ this.nextInjector.invoke();
+ }
+ }
+
+ public debug(message: string, ...args: any[]): void {
+ if (this.debugToConsole) {
+ console.debug((message).replace(/{(\d+)}/g, (match: string, index: number) => { return (typeof args[index] != "undefined" ? args[index] : match); }));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js
new file mode 100644
index 000000000..378d6971d
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js
@@ -0,0 +1,55 @@
+///
+///
+var Orchard;
+(function (Orchard) {
+ (function (Azure) {
+ (function (MediaServices) {
+ (function (VideoPlayer) {
+ var Injectors = Orchard.Azure.MediaServices.VideoPlayer.Injectors;
+
+ $(function () {
+ $(".cloudmedia-videoplayer-container").each(function (index, elem) {
+ var container = elem;
+
+ var assetData = $(elem).data("cloudvideo-player-assetdata");
+ var playerWidth = $(elem).data("cloudvideo-player-width");
+ var playerHeight = $(elem).data("cloudvideo-player-height");
+ var applyMediaQueries = $(elem).data("cloudvideo-player-applymediaqueries");
+ var autoPlay = $(elem).data("cloudvideo-player-autoplay");
+ var contentBaseUrl = $(elem).data("cloudvideo-player-content-baseurl");
+ var errorText = $(elem).data("cloudvideo-player-errortext");
+ var altText = $(elem).data("cloudvideo-player-alttext");
+ var retryText = $(elem).data("cloudvideo-player-retrytext");
+
+ function invokeInjectors() {
+ $(container).empty();
+
+ var alternateContent = [
+ $("").addClass("cloudvideo-player-error-text").text(errorText),
+ $("