- /**
- SceneSelectionView Backbone > View
- @class SceneSelectionView
- @constructor
- @return {Object} instantiated SceneSelectionView
- **/
- define(['jquery', 'backbone', 'imagesloaded'], function ($, Backbone, imagesloaded) {
-
- BB.SERVICES.SCENES_SELECTION_VIEW = 'SceneSelectionView';
-
- var SceneSelectionView = Backbone.View.extend({
-
- /**
- Constructor
- @method initialize
- **/
- initialize: function () {
- var self = this;
- self.m_selectedSceneID = -1;
- self.m_sceneProperties = new BB.View({
- el: Elements.SCENE_SELECTION_PROPERTIES
- });
-
- self.m_propertiesPanel = BB.comBroker.getService(BB.SERVICES.PROPERTIES_VIEW);
- self.m_propertiesPanel.addView(this.m_sceneProperties);
- BB.comBroker.setService(BB.SERVICES['SCENES_SELECTION_VIEW'], this);
-
- self._render();
- self._listenAddRemoveScene();
- self._listenSceneRemoved();
- self._listenDuplicateScene();
- self._listenSceneRename();
- self._listenSceneSelectorWrap();
- },
-
- /**
- Shoot down wrap div clicks to keep wizard inline
- @method _listenSceneSelectorWrap
- **/
- _listenSceneSelectorWrap: function () {
- var self = this;
- $(Elements.SCENE_SELECTOR_LIST).on('click', function (e) {
- if ((e.target.tagName).toLocaleLowerCase() == 'div') {
- e.preventDefault();
- e.stopImmediatePropagation();
- return false
- }
- })
- },
-
- /**
- Populate the LI with all available scenes from msdb
- @method _render
- **/
- _render: function () {
- var self = this;
- $(Elements.SCENE_SELECTOR_LIST).empty();
- var scenenames = BB.Pepper.getSceneNames();
- if (_.size(scenenames) == 0)
- return;
- _.forEach(scenenames, function (i_scene, i_id) {
- var pseudoID = pepper.getPseudoIdFromSceneId(i_id);
- var icon = BB.PepperHelper.getIconFromMimeType(i_scene.mimeType);
- var snippet = '<a href="#" class="' + BB.lib.unclass(Elements.CLASS_CAMPIGN_LIST_ITEM) + ' list-group-item" data-sceneid="' + pseudoID + '">' +
- '<h4>' + '<i style="font-size: 1.6em; position: relative; top: 5px; left: -5px" class="fa ' + icon + '"></i>' + i_scene.label + '</h4>' +
- '<p class="list-group-item-text">' + ' ' + '</p>' +
- '<div class="openProps">' +
- '<button type="button" class="' + BB.lib.unclass(Elements.CLASS_OPEN_PROPS_BUTTON) + ' btn btn-default btn-sm"><i style="font-size: 1.5em" class="fa fa-gear"></i></button>' +
- '</div>' +
- '</a>';
- $(Elements.SCENE_SELECTOR_LIST).append($(snippet));
- });
- self._stopEventListening();
- self._listenOpenProps();
- self._listenSelectScene();
- self._listenInputChange();
- },
-
- /**
- Push last scene to top
- @method _pushLastSceneTop
- @param {Number} i_delay
- @param {Number} i_delay
- **/
- _pushLastSceneTop: function (i_delay, i_duration) {
- var self = this;
- var height = 0, lastHeight = 0;
- $(Elements.SCENE_SELECTOR_LIST).children().each(function () {
- lastHeight = $(this).outerHeight(true);
- height = height + $(this).outerHeight(true);
- });
- height = 0 - (height - lastHeight);
- var last = $(Elements.SCENE_SELECTOR_LIST).children(':last-child');
- TweenLite.to($(last), i_duration, {
- top: height,
- delay: i_delay,
- onComplete: function () {
- $(last).prependTo(Elements.SCENE_SELECTOR_LIST);
- $(last).css({top: 0});
- }
- });
- },
-
- /**
- Listen to renaming of scene so we can render the updated scene list
- @method _listenSceneRename
- **/
- _listenSceneRename: function () {
- var self = this;
- BB.comBroker.listen(BB.EVENTS['SCENE_LIST_UPDATED'], function (e) {
- self._render();
- if (e.edata=='pushToTop'){
- self._pushLastSceneTop(1,1);
- }
- });
- },
-
- /**
- Listen to duplicate scene
- @method _listenDuplicateScene
- **/
- _listenDuplicateScene: function () {
- var self = this;
- $(Elements.DUPLICATE_SCENE).on('click', function () {
- if (self.m_selectedSceneID == -1) {
- bootbox.alert($(Elements.MSG_BOOTBOX_SELECT_SCENE_FIRST).text());
- return;
- }
- var scenePlayerData = pepper.getScenePlayerdata(self.m_selectedSceneID);
- BB.comBroker.getService(BB.SERVICES['SCENE_EDIT_VIEW']).createScene(scenePlayerData, true, false);
- // self._render();
- });
- },
-
- /**
- Listen for user trigger on campaign selection and populate the properties panel
- @method _listenOpenProps
- @return none
- **/
- _listenOpenProps: function () {
- var self = this;
- $(Elements.CLASS_OPEN_PROPS_BUTTON, self.el).on('click', function (e) {
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).removeClass('active');
- var elem = $(e.target).closest('a').addClass('active');
- self.m_selectedSceneID = $(elem).data('sceneid');
- var sceneID = pepper.getSceneIdFromPseudoId(self.m_selectedSceneID);
- var domSceneData = pepper.getScenePlayerdataDom(sceneID);
- var label = $(domSceneData).find('Player').attr('label');
- $(Elements.FORM_SCENE_NAME).val(label);
- self.m_propertiesPanel.selectView(self.m_sceneProperties);
- self.m_propertiesPanel.openPropertiesPanel();
- return false;
- });
- },
-
- /**
- Listen select scene
- @method _listenSelectScene
- @return none
- **/
- _listenSelectScene: function () {
- var self = this;
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).on('click', function (e) {
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).removeClass('active');
- $(this).addClass('active');
- self.m_selectedSceneID = $(this).data('sceneid');
- BB.comBroker.getService(BB.SERVICES['SCENE_EDIT_VIEW']).disposeScene();
- self.m_propertiesPanel.resetPropertiesView();
- self.options.stackView.slideToPage(Elements.SCENE_SLIDER_ELEMENT_VIEW, 'right');
- setTimeout(function () {
- BB.comBroker.fire(BB.EVENTS.LOAD_SCENE, this, null, self.m_selectedSceneID);
- }, 555);
- //return false;
- });
- },
-
- /**
- Wire changing of campaign name through scene properties
- @method _listenInputChange
- @return none
- **/
- _listenInputChange: function () {
- var self = this;
- self.m_onChange = _.debounce(function (e) {
- var text = $(e.target).val();
- var sceneID = pepper.getSceneIdFromPseudoId(self.m_selectedSceneID);
- var domSceneData = pepper.getScenePlayerdataDom(sceneID);
- if (BB.lib.isEmpty(text))
- return;
- text = BB.lib.cleanProbCharacters(text, 1);
- $(domSceneData).find('Player').attr('label', text);
- pepper.setScenePlayerData(sceneID, (new XMLSerializer()).serializeToString(domSceneData));
- self.$el.find('[data-sceneid="' + self.m_selectedSceneID + '"]').find('h4').text(text);
- BB.comBroker.fire(BB.EVENTS.SCENE_LIST_UPDATED, this);
- }, 333, false);
- $(Elements.FORM_SCENE_NAME).on("input", self.m_onChange);
- },
-
- /**
- Wire the UI including new scene creation and delete existing scene
- @method _listenAddRemoveScene
- **/
- _listenAddRemoveScene: function () {
- var self = this;
- $(Elements.NEW_SCENE).on('click', function (e) {
- self.options.stackView.slideToPage(Elements.SCENE_CREATOR, 'right');
- return false;
- self.m_selectedSceneID = -1;
- BB.comBroker.fire(BB.EVENTS.NEW_SCENE_ADD, this, null);
- BB.comBroker.fire(BB.EVENTS.SCENE_LIST_UPDATED, this);
- return false;
- });
-
- $(Elements.REMOVE_SELECTED_SCENE).on('click', function (e) {
- if (self.m_selectedSceneID != -1) {
- bootbox.confirm($(Elements.MSG_BOOTBOX_SURE_DELETE_SCENE).text(), function (result) {
- if (result == true) {
- // var selectedElement = self.$el.find('[data-sceneid="' + self.m_selectedSceneID + '"]');
- // selectedElement.remove();
- BB.comBroker.fire(BB.EVENTS.SCENE_EDITOR_REMOVE, self, this, self.m_selectedSceneID);
- BB.comBroker.fire(BB.EVENTS.SCENE_LIST_UPDATED, this);
- }
- });
- } else {
- bootbox.alert($(Elements.MSG_BOOTBOX_SELECT_SCENE_FIRST).text());
- return false;
- }
- });
- },
-
- /**
- Listen after a scene has been removed so we can update the list
- @method _listenSceneRemoved
- **/
- _listenSceneRemoved: function () {
- var self = this;
- BB.comBroker.listen(BB.EVENTS.REMOVED_SCENE, function (e) {
- self.m_selectedSceneID = -1;
- self._render();
- });
- },
-
- /**
- Stop listening to scene li events
- @method _stopEventListening
- **/
- _stopEventListening: function () {
- var self = this;
- $(Elements.CLASS_OPEN_PROPS_BUTTON, self.el).off('click');
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).off('click');
- $(Elements.FORM_SCENE_NAME).off("input", self.m_onChange);
- }
- });
-
- return SceneSelectionView;
- });
-
-
-