From 7beb13e8bab9b0e636b5e688ac9a2a8336738699 Mon Sep 17 00:00:00 2001 From: Acellam Guy Date: Wed, 17 Jun 2015 22:47:59 +0300 Subject: [PATCH] Video Embed working --- .../widget/AudioVideoPlayback.js | 3 +- .../widget/AudioVideoPlaybackURL.js | 242 +++++++++--------- test/widgets/AudioVideoPlayback.mpk | Bin 11292472 -> 11292311 bytes 3 files changed, 118 insertions(+), 127 deletions(-) diff --git a/src/AudioVideoPlayback/widget/AudioVideoPlayback.js b/src/AudioVideoPlayback/widget/AudioVideoPlayback.js index 2f33a6c..ac469e6 100644 --- a/src/AudioVideoPlayback/widget/AudioVideoPlayback.js +++ b/src/AudioVideoPlayback/widget/AudioVideoPlayback.js @@ -196,7 +196,8 @@ define([ // dijit._WidgetBase.postCreate is called after constructing the widget. Implement to do extra setup work. postCreate: function () { - console.log(this.id + '.postCreate'); + console.log(this.id + '.postCreate'); + this._updateRendering(); this._setupEvents(); }, diff --git a/src/AudioVideoPlayback/widget/AudioVideoPlaybackURL.js b/src/AudioVideoPlayback/widget/AudioVideoPlaybackURL.js index e97318b..71f2645 100644 --- a/src/AudioVideoPlayback/widget/AudioVideoPlaybackURL.js +++ b/src/AudioVideoPlayback/widget/AudioVideoPlaybackURL.js @@ -5,7 +5,7 @@ AudioVideoPlayback ======================== - @file : AudioVideoPlayback.js + @file : AudioVideoPlaybackURL.js @version : 3.0.0 @author : Acellam Guy @date : Tue, 16 Jun 2015 10:16:07 GMT @@ -21,14 +21,14 @@ define([ 'dojo/_base/declare', 'mxui/widget/_WidgetBase', 'dijit/_TemplatedMixin', 'mxui/dom', 'dojo/dom', 'dojo/query', 'dojo/dom-prop', 'dojo/dom-geometry', 'dojo/dom-class', 'dojo/dom-style', 'dojo/dom-construct', 'dojo/_base/array', 'dojo/_base/lang', 'dojo/text', 'dojo/html', 'dojo/_base/event', - 'AudioVideoPlayback/lib/jquery-1.11.2.min', 'dojo/text!AudioVideoPlayback/widget/template/playback.html','AudioVideoPlayback/lib/jQueryjPlayer/jqueryJplayerMin' + 'AudioVideoPlayback/lib/jquery-1.11.2.min', 'dojo/text!AudioVideoPlayback/widget/template/playback.html','AudioVideoPlayback/lib/jQueryjPlayer/jquery.jplayer' ], function (declare, _WidgetBase, _TemplatedMixin, dom, dojoDom, domQuery, domProp, domGeom, domClass, domStyle, domConstruct, dojoArray, lang, text, html, event, _jQuery, widgetTemplate) { 'use strict'; //var $ = jQuery.noConflict(true); -mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jplayer.blue.monday.css")); + mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jplayer.blue.monday.css")); mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/playback.css")); // Declare widget's prototype. @@ -38,7 +38,7 @@ mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jpla templateString: widgetTemplate, // Parameters configured in the Modeler. - autoPlay: false, + autoPlay: false, loop: false, fullScreen: false, videoWidth: 640, @@ -52,7 +52,7 @@ mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jpla showTime: true, showToggles: true, showFullScreenToggle: true, - + // Internal variables. Non-primitives created in the prototype are shared between all widget instances. _handles: null, _contextObj: null, @@ -66,109 +66,115 @@ mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jpla constructor: function () { this._handles = []; }, - choosePlayer: function (context, ext) { - if (ext === "mp3" || ext === "wma" || ext === "m4a" || ext === "wav"|| ext === "ogg"|| ext === "au"|| ext === "vox"|| ext === "raw"){ - this.isAudio = true; - this.audio(context); - } else { - this.isAudio = false; - this.video(context); - } - }, - audio: function (context) { - var self = this; - dojo.removeClass(this.jpPlayerUI, "jp-video"); - dojo.addClass(this.jpPlayerUI, "jp-audio"); - $(this.jpPlayer).jPlayer({ - ready: function () { - $(this).jPlayer("setMedia", { - mp3: 'file?target=window&guid=' + context.trackId - }); - if (self.autoPlay) { - $(this).jPlayer("play"); - } - }, - cssSelectorAncestor: "#"+ this.id, - loop: this.loop, - swfPath: "/jQueryjPlayerSource", - supplied: "mp3,wav,ogg,wma,ogg,au,vox,raw,m4a" - }); - }, - video: function (context) { - var self = this; - dojo.removeClass(this.jpPlayerUI, "jp-audio"); - dojo.addClass(this.jpPlayerUI, "jp-video"); - $(this.jpPlayer).jPlayer({ - ready: function () { - $(this).jPlayer("setMedia", { - m4v: 'file?target=window&guid=' + context.trackId - }); - if (self.autoPlay) { - $(this).jPlayer("play"); - } - }, - cssSelectorAncestor: "#"+ this.id, - fullScreen: this.fullScreen, - fullWindow: this.fullScreen, - loop: this.loop, - swfPath: "/jQueryjPlayerSource", - supplied: "m4v,webm,flv,wmv,avi,vob,mp4,mov", - size: { - width: self.videoWidth + "px", - height: self.videoHeigth + "px", - cssClass: self.videoCssClass - }, - smoothPlayBar: true, - keyEnabled: true - }); - - }, - showHideControlls: function () { - if(!this.showUserInterface){ - dojo.style(this.jpPlayerUI, "display", "none"); - } - if (!this.showPlayControl) { - dojo.style(this.jpPlay, "display", "none"); - dojo.style(this.jpPause, "display", "none"); - dojo.style(this.jpStop, "display", "none"); - } - if (!this.showAudiocontrol) { - dojo.style(this.jpMute, "display", "none"); - dojo.style(this.jpUnMute, "display", "none"); - dojo.style(this.jpMaxValue, "display", "none"); - dojo.style(this.jpVolume, "display", "none"); + + choosePlayer: function (ext) { + if (ext === "mp3" || ext === "wma" || ext === "m4a" || ext === "wav"|| ext === "ogg"|| ext === "au"|| ext === "vox"|| ext === "raw"){ + this.isAudio = true; + this.audio(); + } else { + this.isAudio = false; + this.video(); + } + }, + + audio: function () { + var self = this; + dojo.removeClass(this.jpPlayerUI, "jp-video"); + dojo.addClass(this.jpPlayerUI, "jp-audio"); + $(this.jpPlayer).jPlayer({ + ready: function () { + $(this).jPlayer("setMedia", { + mp3: self.mediaURL + }); + if (self.autoPlay) { + $(this).jPlayer("play"); + } + }, + cssSelectorAncestor: "#"+ this.id, + loop: this.loop, + swfPath: "../lib/jQueryjPlayer", + supplied: "mp3,wav,ogg,wma,ogg,au,vox,raw,m4a" + }); + }, + + video: function () { + var self = this; + dojo.removeClass(this.jpPlayerUI, "jp-audio"); + dojo.addClass(this.jpPlayerUI, "jp-video"); + $(this.jpPlayer).jPlayer({ + ready: function () { + $(this).jPlayer("setMedia", { + m4v: self.mediaURL + }); + if (self.autoPlay) { + $(this).jPlayer("play"); + } + }, + cssSelectorAncestor: "#"+ this.id, + fullScreen: this.fullScreen, + fullWindow: this.fullScreen, + loop: this.loop, + swfPath: "../lib/jQueryjPlayer", + supplied: "m4v,webm,flv,wmv,avi,vob,mp4,mov", + size: { + width: self.videoWidth + "px", + height: self.videoHeigth + "px", + cssClass: self.videoCssClass + }, + smoothPlayBar: true, + keyEnabled: true + }); + + }, + + showHideControlls: function () { + if(!this.showUserInterface){ + domStyle.set(this.jpPlayerUI, "display", "none"); + } + if (!this.showPlayControl) { + domStyle.set(this.jpPlay, "display", "none"); + domStyle.set(this.jpPause, "display", "none"); + domStyle.set(this.jpStop, "display", "none"); + } + if (!this.showAudiocontrol) { + domStyle.set(this.jpMute, "display", "none"); + domStyle.set(this.jpUnMute, "display", "none"); + domStyle.set(this.jpMaxValue, "display", "none"); + domStyle.set(this.jpVolume, "display", "none"); - } - if (!this.showProgressBar) { - dojo.style(this.jpProgress, "display", "none"); - } - if (!this.showTitle) { - dojo.style(this.jpTitle, "display", "none"); - } - if (!this.showTime) { - dojo.style(this.jpTimeHolder, "display", "none"); - } - if (!this.showToggles) { - dojo.style(this.jpToggles, "display", "none"); - } - if (!this.showFullScreenToggle || this.isAudio) { - dojo.style(this.jpFullScreen, "display", "none"); - dojo.style(this.jpRestoreScreen, "display", "none"); - } else if (this.showFullScreenToggle && ! this.isAudio){ - dojo.style(this.jpFullScreen, "display", ""); - dojo.style(this.jpRestoreScreen, "display", ""); - } - if(this.isAudio) { - dojo.style(this.jpVideoPlay, "display", "none"); - } - }, + } + if (!this.showProgressBar) { + domStyle.set(this.jpProgress, "display", "none"); + } + if (!this.showTitle) { + domStyle.set(this.jpTitle, "display", "none"); + } + if (!this.showTime) { + domStyle.set(this.jpTimeHolder, "display", "none"); + } + if (!this.showToggles) { + domStyle.set(this.jpToggles, "display", "none"); + } + if (!this.showFullScreenToggle || this.isAudio) { + domStyle.set(this.jpFullScreen, "display", "none"); + domStyle.set(this.jpRestoreScreen, "display", "none"); + } else if (this.showFullScreenToggle && ! this.isAudio){ + domStyle.set(this.jpFullScreen, "display", ""); + domStyle.set(this.jpRestoreScreen, "display", ""); + } + if(this.isAudio) { + domStyle.set(this.jpVideoPlay, "display", "none"); + } + }, // dijit._WidgetBase.postCreate is called after constructing the widget. Implement to do extra setup work. postCreate: function () { console.log(this.id + '.postCreate'); - this._updateRendering(); - this._setupEvents(); + + + + this.actLoaded(); //destroy if need be (allow shitching, between audio, video or deselecting) $(this.jpPlayer).jPlayer( "destroy" ); @@ -177,20 +183,23 @@ mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jpla var fileName = this.mediaURL; //file extension var ext = fileName.substr(fileName.lastIndexOf('.') + 1); - dojo.style(this.jpPlayerUI, "display", ""); - dojo.style(this.jpPlayer, "display", ""); + domStyle.set(this.jpPlayerUI, "display", ""); + domStyle.set(this.jpPlayer, "display", ""); this.choosePlayer(ext); this.showHideControlls(); - dojo.html.set(this.jpTitle,fileName); + html.set(this.jpTitle,fileName); }else{ // no context no player - dojo.style(this.jpPlayerUI, "display", "none"); - dojo.style(this.jpPlayer, "display", "none"); + domStyle.set(this.jpPlayerUI, "display", "none"); + domStyle.set(this.jpPlayer, "display", "none"); } + this._updateRendering(); + this._setupEvents(); + }, // mxui.widget._WidgetBase.update is called when context is changed or initialized. Implement to re-render and / or fetch data. @@ -201,25 +210,6 @@ mxui.dom.addCss(dojo.moduleUrl("AudioVideoPlayback", "widget/ui/blue.monday/jpla this._resetSubscriptions(); this._updateRendering(); - //destroy if need be (allow shitching, between audio, video or deselecting) - $(this.jpPlayer).jPlayer( "destroy" ); - - if (this._contextObj.trackObject) { - // file name - var fileName = this._contextObj.trackObject.get("Name"); - //file extension - var ext = fileName.substr(fileName.lastIndexOf('.') + 1); - dojo.style(this.jpPlayerUI, "display", ""); - dojo.style(this.jpPlayer, "display", ""); - this.choosePlayer(this._contextObj, ext); - - this.showHideControlls(); - dojo.html.set(this.jpTitle,fileName); - }else { - // no context no player - dojo.style(this.jpPlayerUI, "display", "none"); - dojo.style(this.jpPlayer, "display", "none"); - } callback(); }, diff --git a/test/widgets/AudioVideoPlayback.mpk b/test/widgets/AudioVideoPlayback.mpk index e21d174ec3d2501ef3d6184a629496c13144fc9e..03a939bf0f79243e386e14ba0743604c20ad4c93 100644 GIT binary patch delta 9082 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 delta 9278 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 K%(x&FsQw=mict0d