APIs

Show:
  1. /**
  2. * BlockTwitter block resides inside a scene or timeline
  3. * @class BlockTwitter
  4. * @extends Block
  5. * @constructor
  6. * @param {string} i_placement location where objects resides which can be scene or timeline
  7. * @param {string} i_campaign_timeline_chanel_player_id required and set as block id when block is inserted onto timeline_channel
  8. * @return {Object} Block instance
  9. */
  10. define(['jquery', 'backbone', 'Block'], function ($, Backbone, Block) {
  11.  
  12. var BlockTwitter = Block.extend({
  13.  
  14. /**
  15. Constructor
  16. @method initialize
  17. **/
  18. constructor: function (options) {
  19. var self = this;
  20. self.m_blockType = 4500;
  21. _.extend(options, {blockType: self.m_blockType})
  22. Block.prototype.constructor.call(this, options);
  23. self._initSubPanel(Elements.BLOCK_TWITTER_COMMON_PROPERTIES);
  24. self._listenSceneListChange();
  25. self._listenScreenNameChange();
  26. self._listenSceneDropdownChange();
  27. self._listenIntervalChange();
  28. },
  29.  
  30. /**
  31. Populate the LI with all available scenes from msdb
  32. @method _populateSceneDropdowb
  33. **/
  34. _populateSceneDropdowb: function () {
  35. var self = this;
  36. $(Elements.TWITTER_DROPDOWN).empty();
  37. var scenenames = BB.Pepper.getSceneNames();
  38. if (_.size(scenenames) == 0)
  39. return;
  40. _.forEach(scenenames, function (i_name, i_id) {
  41. // var pseudoID = pepper.getPseudoIdFromSceneId(i_id);
  42. var snippet = '<li><a name="resource" data-localize="profileImage" role="menuitem" tabindex="-1" href="#" data-scene_id="' + i_id + '">' + i_name.label + '</a></li>';
  43. $(Elements.TWITTER_DROPDOWN).append($(snippet));
  44. });
  45. },
  46.  
  47. /**
  48. Populate the UI of the scene label selector
  49. @method _populateSceneLabel
  50. @param {Number} i_sceneName
  51. **/
  52. _populateSceneLabel: function(i_sceneName){
  53. var self = this;
  54. $(Elements.TWITTER_SCENE_LIST).text(i_sceneName);
  55. },
  56.  
  57. /**
  58. Populate the UI of the scene interval selector
  59. @method _populateInterval
  60. @param {Number} i_interval
  61. **/
  62. _populateInterval: function(i_interval){
  63. var self = this;
  64. var interval = Number(i_interval);
  65. $('.spinner', Elements.BLOCK_TWITTER_COMMON_PROPERTIES).spinner('value', interval);
  66. },
  67.  
  68. /**
  69. Load up property values in the common panel
  70. @method _populate
  71. @return none
  72. **/
  73. _populate: function () {
  74. var self = this;
  75. var domPlayerData = self._getBlockPlayerData();
  76. var xSnippet = $(domPlayerData).find('Twitter');
  77. var screenName = $(xSnippet).attr('screenName');
  78. var xSnippetPlayer = $(xSnippet).find('Player');
  79. var sceneID = $(xSnippetPlayer).attr('hDataSrc');
  80. var interval = $(xSnippet).attr('itemInterval');
  81.  
  82. if (_.isEmpty(sceneID)){
  83. self._populateSceneLabel($(Elements.BOOTBOX_SELECT_SCENE).text());
  84. } else {
  85. var scenenames = BB.Pepper.getSceneNames();
  86. _.forEach(scenenames, function (i_name, i_id) {
  87. if (i_id == sceneID)
  88. self._populateSceneLabel(i_name.label);
  89. });
  90. }
  91. $(Elements.TWITTER_SCREEN_INPUT).val(screenName);
  92. self._populateSceneDropdowb();
  93. self._populateSceneLabel();
  94. self._populateInterval(interval);
  95. },
  96.  
  97. /**
  98. Listen to changes in the scene interval control
  99. @method _listenIntervalChange
  100. **/
  101. _listenIntervalChange: function(){
  102. var self = this;
  103. $('.spinner', Elements.BLOCK_TWITTER_COMMON_PROPERTIES).spinner({value: 4, min: 1, max: 9999, step: 1});
  104. $(Elements.TWITTER_INTERVAL_INPUT).prop('disabled', true).css({backgroundColor: 'transparent'});
  105. self.m_intervalInput = _.debounce(function (e) {
  106. if (!self.m_selected)
  107. return;
  108. if ($(e.target).prop("tagName") == 'INPUT')
  109. return;
  110. var interval = $(Elements.TWITTER_INTERVAL_INPUT).val();
  111. var domPlayerData = self._getBlockPlayerData();
  112. var xSnippet = $(domPlayerData).find('Twitter');
  113. $(xSnippet).attr('itemInterval', interval);
  114. self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
  115. }, 250, false);
  116. //$(Elements.TWITTER_SCREEN_INPUT).on("input", self.m_screenNameChange);
  117. $('.spinner', Elements.BLOCK_TWITTER_COMMON_PROPERTIES).on('mouseup', self.m_intervalInput);
  118. },
  119.  
  120. /**
  121. Wire changing of campaign name through scene properties
  122. @method _listenScreenNameChange
  123. @return none
  124. **/
  125. _listenScreenNameChange: function () {
  126. var self = this;
  127. self.m_screenNameChange = _.debounce(function (e) {
  128. if (!self.m_selected)
  129. return;
  130. var screenName = $(e.target).val();
  131. var domPlayerData = self._getBlockPlayerData();
  132. var xSnippet = $(domPlayerData).find('Twitter');
  133. $(xSnippet).attr('screenName', screenName);
  134. self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
  135. }, 333, false);
  136. $(Elements.TWITTER_SCREEN_INPUT).on("input", self.m_screenNameChange);
  137. },
  138.  
  139. /**
  140. Listen to the global scene list changes event so we can update the list of available scenes
  141. @method _listenSceneListChange
  142. **/
  143. _listenSceneListChange: function(){
  144. var self = this;
  145. BB.comBroker.listenWithNamespace(BB.EVENTS.SCENE_LIST_UPDATED,self, function(e){
  146. if (!self.m_selected)
  147. return;
  148. self._populateSceneDropdowb();
  149. })
  150. },
  151.  
  152. /**
  153. Listen to playlist changes dropdown
  154. @method _listenSceneDropdownChange
  155. **/
  156. _listenSceneDropdownChange: function () {
  157. var self = this;
  158. self.m_bindScene = function (e) {
  159. if (!self.m_selected)
  160. return;
  161. var listType = $(e.target).attr('name');
  162. if (_.isUndefined(listType))
  163. return;
  164. var sceneName = $(e.target).text();
  165. var sceneID = $(e.target).attr('data-scene_id');
  166. self._populateSceneLabel(sceneName);
  167. var domPlayerData = self._getBlockPlayerData();
  168. var xSnippet = $(domPlayerData).find('Twitter');
  169. var xSnippetPlayer = $(xSnippet).find('Player');
  170. $(xSnippetPlayer).attr('hDataSrc', sceneID);
  171. self._setBlockPlayerData(domPlayerData, BB.CONSTS.NO_NOTIFICATION);
  172.  
  173. };
  174. $(Elements.TWITTER_DROPDOWN).on('click', self.m_bindScene);
  175. },
  176.  
  177. /**
  178. Populate the common block properties panel, called from base class if exists
  179. @method _loadBlockSpecificProps
  180. @return none
  181. **/
  182. _loadBlockSpecificProps: function () {
  183. var self = this;
  184. self._populate();
  185. this._viewSubPanel(Elements.BLOCK_TWITTER_COMMON_PROPERTIES);
  186. },
  187.  
  188. /**
  189. Delete this block
  190. @method deleteBlock
  191. @params {Boolean} i_memoryOnly if true only remove from existance but not from msdb
  192. **/
  193. deleteBlock: function (i_memoryOnly) {
  194. var self = this;
  195. $('.spinner', Elements.BLOCK_TWITTER_COMMON_PROPERTIES).off('mouseup', self.m_intervalInput);
  196. $(Elements.TWITTER_DROPDOWN).off('click', self.m_bindScene);
  197. $(Elements.TWITTER_SCREEN_INPUT).off("input", self.m_screenNameChange);
  198. BB.comBroker.stopListenWithNamespace(BB.EVENTS.SCENE_LIST_UPDATED,self);
  199. self._deleteBlock(i_memoryOnly);
  200. }
  201. });
  202.  
  203. return BlockTwitter;
  204. });