/**
Select new screen layout (template) for a campaign > timeline
@class ScreenLayoutSelectorView
@constructor
@return {Object} instantiated ScreenLayoutSelectorView
**/
define(['jquery', 'backbone', 'StackView', 'ScreenTemplateFactory'], function ($, Backbone, StackView, ScreenTemplateFactory) {
BB.SERVICES.SCREEN_LAYOUT_SELECTOR_VIEW = 'ScreenLayoutSelectorView';
var ScreenLayoutSelectorView = BB.View.extend({
/**
Constructor
@method initialize
**/
initialize: function () {
var self = this;
self.m_screens = [];
self.m_direction = 'left';
self._listenOutsideClick();
self.listenTo(self.options.stackView, BB.EVENTS.SELECTED_STACK_VIEW, function (e) {
if (e == self) {
self._render();
}
});
$(this.el).find(Elements.PREVIOUS).on('click', function (e) {
if (self.options.from == null)
return;
if (self.m_direction == 'left'){
self.options.stackView.slideToPage(self.options.from, 'left');
} else {
self.options.stackView.slideToPage(self.options.to, 'right');
}
return false;
});
},
/**
Listen to clicks outside the layout and shoot them down to assist
the Wizard in preventing false positive
@method _listenOutsideClick
**/
_listenOutsideClick: function(){
var self = this;
$(Elements.SCREEN_LAYOUT_LIST).on('click',function(e){
if (e.target.tagName != 'rect'){
e.preventDefault();
e.stopImmediatePropagation()
return false;
}
});
},
/**
Build the list of templates a user can select from.
@method render
@return none
**/
_render: function () {
var self = this;
BB.comBroker.getService(BB.SERVICES.PROPERTIES_VIEW).resetPropertiesView();
$(Elements.SCREEN_LAYOUT_LIST).empty();
var resolution = BB.comBroker.getService(BB.SERVICES.RESOLUTION_SELECTOR_VIEW).model.get(BB.CONSTS.RESOLUTION);
var orientation = BB.comBroker.getService(BB.SERVICES.ORIENTATION_SELECTOR_VIEW).model.get(BB.CONSTS.ORIENTATION);
BB.comBroker.listenOnce(BB.EVENTS.ON_VIEWER_SELECTED, function () {
setTimeout(function () {
self.options.stackView.slideToPage(self.options.to, 'right');
}, 700)
});
$(Elements.SCREEN_LAYOUT_LIST).empty();
require(['ScreenTemplate'], function (ScreenTemplate) {
for (var screenType in ScreenTemplate[orientation][resolution]) {
var screenTemplateData = {
orientation: orientation,
resolution: resolution,
screenType: screenType,
screenProps: ScreenTemplate[orientation][resolution][screenType],
scale: 14
};
var screenTemplate = new ScreenTemplateFactory({
i_screenTemplateData: screenTemplateData,
i_selfDestruct: true,
i_owner: self
});
var snippet = screenTemplate.create();
$(Elements.SCREEN_LAYOUT_LIST).append($(snippet));
screenTemplate.selectableFrame();
self.m_screens.push(screenTemplate);
}
});
},
/**
Slide back to specified direction to / from
@method slideBackDirection
@param {String} i_direction
**/
slideBackDirection: function(i_direction){
var self = this;
self.m_direction = i_direction;
}
});
return ScreenLayoutSelectorView;
});