/**
* BlockVideo block resides inside a scene or timeline
* @class BlockVideo
* @extends Block
* @constructor
* @param {string} i_placement location where objects resides which can be scene or timeline
* @param {string} i_campaign_timeline_chanel_player_id required and set as block id when block is inserted onto timeline_channel
* @return {object} Block instance
*/
define(['jquery', 'backbone', 'Block'], function ($, Backbone, Block) {
var BlockVideo = Block.extend({
/**
Constructor
@method initialize
**/
constructor: function (options) {
var self = this;
self.m_blockType = 3100;
_.extend(options, {blockType: self.m_blockType})
Block.prototype.constructor.call(this, options);
self._initSubPanel(Elements.BLOCK_VIDEO_COMMON_PROPERTIES);
self._listenAspectChange();
self._listenRewind();
self._listenVolumeChange();
self._initResourcesData();
},
/**
Listen to changes in volume control
@method _listenVolumeChange
**/
_listenVolumeChange: function(){
var self = this;
self.m_inputVolumeHandler = function (e) {
if (!self.m_selected)
return;
var volume = e.edata;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Video');
$(xSnippet).attr('volume', volume);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
};
BB.comBroker.listen(BB.EVENTS.VIDEO_VOLUME_CHANGED, self.m_inputVolumeHandler);
},
/**
Set the instance resource data from msdb which includes resource_id (handle of a resource)
as well as the description of the resource and icon.
@method _initResourcesData
**/
_initResourcesData: function () {
var self = this;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Resource');
self.m_resourceID = $(xSnippet).attr('hResource');
var resRec = self.m_blockName = pepper.getResourceRecord(self.m_resourceID);
if (_.isNull(resRec)){
self._selfDestruct();
return;
}
self.m_blockName = resRec['resource_name'];
self.m_blockDescription = pepper.getResourceName(self.m_resourceID);
var fileFormat = pepper.getResourceType(self.m_resourceID);
self.m_blockFontAwesome = BB.PepperHelper.getFontAwesome(fileFormat);
},
/**
Populate the common block properties panel, called from base class if exists
@method _loadBlockSpecificProps
@return none
**/
_loadBlockSpecificProps: function () {
var self = this;
self._populate();
this._viewSubPanel(Elements.BLOCK_VIDEO_COMMON_PROPERTIES);
},
/**
Update the video's properties title
@method override _updateTitle
@return none
**/
_updateTitle: function () {
var self = this;
$(Elements.SELECTED_CHANNEL_RESOURCE_NAME).text(self.m_blockDescription);
},
/**
When user changes aspect ratio checkbox
@method _listenAspectChange
@return none
**/
_listenAspectChange: function () {
var self = this;
self.m_inputAspectHandler = function (e) {
if (!self.m_selected)
return;
var v = $(e.target).prop('checked') == true ? 1 : 0;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('AspectRatio');
$(xSnippet).attr('maintain', v);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
};
$(Elements.VIDEO_ASPECT_RATIO).on('change', self.m_inputAspectHandler);
},
/**
When user changes rewind checkbox
@method _listenRewind
@return none
**/
_listenRewind: function () {
var self = this;
self.m_inputRewind = function (e) {
if (!self.m_selected)
return;
var v = $(e.target).prop('checked') == true ? 1 : 0;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Video');
$(xSnippet).attr('autoRewind', v);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
};
$(Elements.VIDEO_AUTO_REWIND).on('change', self.m_inputRewind);
},
/**
Load up property values in the common panel
@method _populate
@return none
**/
_populate: function () {
var self = this;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('AspectRatio');
var xSnippetVideo = $(domPlayerData).find('Video');
var aspectRatio = xSnippet.attr('maintain') == '1' ? true : false;
var autoRewind = xSnippetVideo.attr('autoRewind') == '1' ? true : false;
var volume = parseFloat(xSnippetVideo.attr('volume')) * 100;
$(Elements.VIDEO_AUTO_REWIND).prop('checked', autoRewind);
$(Elements.VIDEO_ASPECT_RATIO).prop('checked', aspectRatio);
$(Elements.VIDEO_VOLUME_WRAP_SLIDER).val(volume);
},
/**
Get the resource id of the embedded resource
@method getResourceID
@return {Number} resource_id;
**/
getResourceID: function () {
var self = this;
return self.m_resourceID;
},
/**
Delete this block
@method deleteBlock
@params {Boolean} i_memoryOnly if true only remove from existance but not from msdb
**/
deleteBlock: function (i_memoryOnly) {
var self = this;
$(Elements.VIDEO_AUTO_REWIND).off('change', self.m_inputRewind);
$(Elements.VIDEO_ASPECT_RATIO).off('change', self.m_inputAspectHandler);
BB.comBroker.stopListen(BB.EVENTS.VIDEO_VOLUME_CHANGED, self.m_inputVolumeHandler);
self._deleteBlock(i_memoryOnly);
}
});
return BlockVideo;
});