/**
* BlockRSS block resides inside a scene or timeline
* @class BlockRSS
* @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 BlockRSS = Block.extend({
/**
Constructor
@method initialize
**/
constructor: function (options) {
var self = this;
self.m_blockType = 3345;
_.extend(options, {blockType: self.m_blockType})
Block.prototype.constructor.call(this, options);
self.m_rssFontSelector = self.m_blockProperty.getRssFontSelector();
self.m_rssLinkSelector = self.m_blockProperty.getRssLinkSelector();
self._initSubPanel(Elements.BLOCK_RSS_COMMON_PROPERTIES);
self._listenRSSLinkChange();
self._listenFontSelectionChange();
self._listenMinRefreshTime();
self._listenScrollDirection();
self._listenScrollSpeed();
},
/**
Listen to changes in font UI selection from Block property and take action on changes
@method _listenFontSelectionChange
**/
_listenFontSelectionChange: function () {
var self = this;
BB.comBroker.listenWithNamespace(BB.EVENTS.FONT_SELECTION_CHANGED, self, function (e) {
if (!self.m_selected || e.caller !== self.m_rssFontSelector)
return;
var config = e.edata;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Rss');
var xSnippetTitle = $(xSnippet).find('Font').eq(0);
var xSnippetDescription = $(xSnippet).find('Font').eq(1);
$.each([xSnippetTitle, xSnippetDescription],function(k,xmlData){
config.bold == true ? xmlData.attr('fontWeight', 'bold') : xmlData.attr('fontWeight', 'normal');
config.italic == true ? xmlData.attr('fontStyle', 'italic') : xmlData.attr('fontStyle', 'normal');
config.underline == true ? xmlData.attr('textDecoration', 'underline') : xmlData.attr('textDecoration', 'none');
xmlData.attr('fontColor', BB.lib.colorToDecimal(config.color));
xmlData.attr('fontSize', config.size);
xmlData.attr('fontFamily', config.font);
xmlData.attr('textAlign', config.alignment);
});
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
});
},
/**
Listen to RSS link changes
@method _listenRSSLinkChange
**/
_listenRSSLinkChange: function () {
var self = this
BB.comBroker.listenWithNamespace(BB.EVENTS.RSSLINK_CHANGED, self, function (e) {
if (!self.m_selected || e.caller !== self.m_rssLinkSelector)
return;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Rss');
$(xSnippet).attr('url', e.edata);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
// log(xSnippet[0].outerHTML);
});
},
/**
Listen to RSS Poll time value changes
@method _listenMinRefreshTime
**/
_listenMinRefreshTime: function () {
var self = this;
self.m_rssPollSpinner = function (e) {
if (!self.m_selected)
return;
var minRefreshTime = $('input', e.target).val();
if (_.isEmpty(minRefreshTime))
minRefreshTime = 30;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Rss');
$(xSnippet).attr('minRefreshTime', minRefreshTime);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
}
$(Elements.RSS_POLL_SPINNER).on('change', self.m_rssPollSpinner);
},
/**
Listen to RSS scroll direction changes
@method _listenMinRefreshTime
**/
_listenScrollDirection: function () {
var self = this;
self.m_rssModeSelect = function (e) {
if (!self.m_selected)
return;
var modeSelect = $(e.target).val();
modeSelect = modeSelect == 'Vertical mode' ? 1 : 0;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Rss');
$(xSnippet).attr('vertical', modeSelect);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
};
$(Elements.RSS_MODE_SELECT).on('change', self.m_rssModeSelect);
},
/**
Listen to RSS scroll speed changes
@method _listenMinRefreshTime
**/
_listenScrollSpeed: function () {
var self = this;
self.m_rssScrollSpeed = function (e) {
if (!self.m_selected)
return;
var scrollSpeed = $(e.target).val();
if (scrollSpeed == 'Slow')
scrollSpeed = 20;
if (scrollSpeed == 'Medium')
scrollSpeed = 50;
if (scrollSpeed == 'Fast')
scrollSpeed = 100;
var domPlayerData = self._getBlockPlayerData();
var xSnippet = $(domPlayerData).find('Rss');
$(xSnippet).attr('speed', scrollSpeed);
self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
};
$(Elements.RSS_SCROLL_SPEED).on('change', self.m_rssScrollSpeed);
},
/**
Load up property values in the RSS panel
@method _populate
@return none
**/
_populate: function () {
var self = this;
switch (self.m_placement) {
case BB.CONSTS.PLACEMENT_CHANNEL:
{
var domPlayerData = self._getBlockPlayerData();
break;
}
case BB.CONSTS.PLACEMENT_SCENE:
{
domPlayerData = pepper.getScenePlayerdataBlock(self.m_sceneID, self.m_block_id);
break;
}
}
var xSnippet = $(domPlayerData).find('Rss');
var xSnippetTitle = $(xSnippet).find('Font').eq(0);
var url = xSnippet.attr('url');
self.m_rssLinkSelector.setRssLink(url);
var minRefreshTime = xSnippet.attr('minRefreshTime');
$(Elements.RSS_MIN_REFRESH_TIME).closest('div').spinner('value', parseInt(minRefreshTime));
var scrollDirection = parseInt(xSnippet.attr('vertical'));
$(Elements.RSS_MODE_SELECT + ' option').eq(scrollDirection).prop('selected', 'selected');
var scrollSpeed = parseInt(xSnippet.attr('speed'));
if (scrollSpeed == '20')
scrollSpeed = 0;
if (scrollSpeed == '50')
scrollSpeed = 1;
if (scrollSpeed == '100')
scrollSpeed = 2;
$(Elements.RSS_SCROLL_SPEED + ' option').eq(scrollSpeed).prop('selected', 'selected');
self.m_rssFontSelector.setConfig({
bold: xSnippetTitle.attr('fontWeight') == 'bold' ? true : false,
italic: xSnippetTitle.attr('fontStyle') == 'italic' ? true : false,
underline: xSnippetTitle.attr('textDecoration') == 'underline' ? true : false,
alignment: xSnippetTitle.attr('textAlign'),
font: xSnippetTitle.attr('fontFamily'),
color: BB.lib.colorToHex(BB.lib.decimalToHex(xSnippetTitle.attr('fontColor'))),
size: xSnippetTitle.attr('fontSize')
});
},
/**
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_RSS_COMMON_PROPERTIES);
},
/**
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;
BB.comBroker.stopListenWithNamespace(BB.EVENTS.RSSLINK_CHANGED, self);
BB.comBroker.stopListenWithNamespace(BB.EVENTS.FONT_SELECTION_CHANGED, self);
$(Elements.RSS_POLL_SPINNER).off('change', self.m_rssPollSpinner);
$(Elements.RSS_MODE_SELECT).off('change', self.m_rssModeSelect);
$(Elements.RSS_SCROLL_SPEED).off('change', self.m_rssScrollSpeed);
self._deleteBlock(i_memoryOnly);
}
});
return BlockRSS;
});