Your IP : 18.117.174.43
/**
* Builder state
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
/*global App:true*/
App.Builder = function(window, $, EventMgr, App) {
'use strict';
var init = function() {
EventMgr.bind('ajaxResponseInspectorForm', inspectorFormResponseHandler);
EventMgr.bind('failResponseInspectorForm',
inspectorFormResponseFailHandler);
EventMgr.bind('readyInspectorFormHtml', readyInspectorFormHtmlHandler);
EventMgr.on(inspectorWrapperSelector, inspectorCloseSelector,
'click', closeForm);
EventMgr.on(inspectorWrapperSelector, inspectorCancelSelector,
'click', closeForm);
EventMgr.on(inspectorWrapperSelector, inspectorCollapseSelector,
'click', inspectorCollapseHandler);
EventMgr.on(mainWrapperSelector, inspectorControlSelector,
'mousedown', inspectorDragHandler);
EventMgr.on(mainWrapperSelector, inspectorFieldLinkSelector,
'click', inspectorLinkFieldHandler);
EventMgr.on(mainWrapperSelector, inspectorToolBtnLinkSelector,
'click', inspectorLinkToolBtnHandler);
EventMgr.on(mainWrapperSelector, inspectorFormLinkSelector,
'click', inspectorLinkFormHandler);
EventMgr.on(mainWrapperSelector, inspectorListLinkSelector,
'click', inspectorLinkListHandler);
EventMgr.on(mainWrapperSelector, inspectorColLinkSelector,
'click', inspectorLinkColHandler);
EventMgr.on(mainWrapperSelector, inspectorToolBtnDelLinkSelector,
'click', inspectorLinkToolBtnDelHandler);
EventMgr.on(mainWrapperSelector, inspectorColDelLinkSelector,
'click', inspectorLinkColDelHandler);
EventMgr.on(mainWrapperSelector, inspectorFieldDelLinkSelector,
'click', inspectorLinkFieldDelHandler);
EventMgr.on('#wrapper', inspectorMenuLinkSelector,
'click', inspectorLinkMenuHandler);
EventMgr.bind('formInspectorResponse', formResponseHandler);
EventMgr.bind('closeModalForm', closeModalForm);
},
document = window.document,
baseUrl = pageInfo.url,
$formWrapper = function() {
return App.Dom.byId('inspector_form');
},
$inspectorContent = function() {
return App.Dom.byId('inspector-content');
},
inspectorCancelSelector = '.i-button_type_cancel',
inspectorCloseSelector = '.inspector-close',
inspectorCollapseSelector = '.inspector-collapse',
inspectorControlSelector = '.inspector-control',
mainWrapperSelector = '#main-wrapper',
inspectorWrapperSelector = '#main-wrapper',
inspectorFieldLinkSelector = '.devel-link-settings--field,' +
' .devel-link-add--field',
inspectorToolBtnLinkSelector = '.devel-link-settings--toolbutton,' +
' .devel-link-add--toolbutton',
inspectorToolBtnDelLinkSelector = '.devel-link-delete--toolbutton',
inspectorListLinkSelector = '.devel-link-settings--list',
inspectorFormLinkSelector = '.devel-link-settings--form',
inspectorColLinkSelector = '.devel-link-settings--col,' +
' .devel-link-add--col',
inspectorColDelLinkSelector = '.devel-link-delete--col',
inspectorFieldDelLinkSelector = '.devel-link-delete--field',
inspectorMenuLinkSelector = '.devel-link-settings--menu,' +
' .devel-link-add--menu',
//trigger ajax request
inspectorRequest = function(param, tabId) {
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
param: param,
invar: { sourceTab: tabId },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseInspectorForm',
queue: '',
failfunc: 'failResponseInspectorForm' });
},
//common function for list inspector
inspectorLinkListEdit = function(self, func, plid) {
var param = {},
tabId = self.getAttribute('data-tabid'),
tabCont = App.Dom.byId('cont-' + tabId);
param.func = func;
if (plid) { param.plid = tabCont.getAttribute('data-func'); }
param.elid = self.getAttribute('data-elid') || '';
inspectorRequest(param, tabId);
},
//common function for delete elem in list
inspectorDeleteListElem = function(self, func) {
var param = {},
tabId = self.getAttribute('data-tabid'),
tabCont = App.Dom.byId('cont-' + tabId),
invar = {};
param.func = func;
param.plid = tabCont.getAttribute('data-func');
param.elid = self.getAttribute('data-elid');
invar.rows = self.getAttribute('data-name');
var l = 10;
invar.confirm = '';
//Special for Kuzmich
while (l--) {
invar.confirm += 'Я точно уверен, что хочу удалить элемент!<br/>';
}
invar.tabId = tabId;
invar.params = param;
EventMgr.trigger('listSelectedData', invar);
},
//inspector for field in form
inspectorLinkFieldHandler = function(e) {
var self = this,
param = {},
tabId = self.getAttribute('data-tabid'),
form = App.Dom.byId('frm-' + tabId);
param.func = 'builder.field';
param.plid = form.func.value;
param.elid = self.getAttribute('data-elid') || '';
inspectorRequest(param, tabId);
e.preventDefault();
},
// inspector toolbtn in list
inspectorLinkToolBtnHandler = function(e) {
inspectorLinkListEdit(this, 'builder.button', true);
e.preventDefault();
},
//delete toolbtn in list
inspectorLinkToolBtnDelHandler = function(e) {
inspectorDeleteListElem(this, 'builder.button.delete');
e.preventDefault();
},
//inspector for form
inspectorLinkFormHandler = function(e) {
var self = this,
param = {},
tabId = self.getAttribute('data-tabid'),
tabCont = App.Dom.byId('cont-' + tabId);
param.func = 'builder.form';
param.elid = tabCont.getAttribute('data-func') || '';
inspectorRequest(param, tabId);
e.preventDefault();
},
//inspector for list
inspectorLinkListHandler = function(e) {
inspectorLinkListEdit(this, 'builder.list');
e.preventDefault();
},
//response handler for inspector form
inspectorFormResponseHandler = function(e, data) {
var obj = data;
obj.type = 'inspectorForm';
EventMgr.trigger('ajaxResponse', obj);
},
inspectorFormResponseFailHandler = function() {
},
//inspector for col in list
inspectorLinkColHandler = function(e) {
inspectorLinkListEdit(this, 'builder.col', true);
e.preventDefault();
e.stopPropagation();
},
//delete col in list
inspectorLinkColDelHandler = function(e) {
inspectorDeleteListElem(this, 'builder.col.delete');
e.preventDefault();
e.stopPropagation();
},
inspectorLinkFieldDelHandler = function(e) {
var self = this,
param = {},
invar = {},
tabId = self.getAttribute('data-tabid'),
form = App.Dom.byId('frm-' + tabId);
param.func = 'builder.field.delete';
param.plid = form.func.value;
param.elid = self.getAttribute('data-elid');
invar.rows = self.getAttribute('data-name');
invar.confirm = 'Delete ';
invar.tabId = tabId;
invar.params = param;
EventMgr.trigger('listSelectedData', invar);
e.preventDefault();
},
//inspector menu
inspectorLinkMenuHandler = function(e) {
var self = this,
param = {};
param.elid = self.getAttribute('data-elid') || '';
param.func = 'builder.menu';
inspectorRequest(param, '');
e.preventDefault();
},
//insert form to modal wrapper
readyInspectorFormHtmlHandler = function(e, data) {
var html = data;
$inspectorContent().innerHTML = html;
$formWrapper().style.display = 'block';
EventMgr.trigger('appendForm', { tabId: 'modal1' });
setModalFormPosition();
},
setModalFormPosition = function() {
var $$formWrapper = $formWrapper(),
formWidth,
innerWidth;
if (!$$formWrapper.style.right) {
formWidth = $$formWrapper.offsetWidth;
innerWidth = window.innerWidth;
$$formWrapper.style.right = ((innerWidth - formWidth) / 2) + 'px';
$$formWrapper.style.top = '90px';
}
},
//handler for form response
formResponseHandler = function(e, data) {
var parent = '',
reload = data.reload,
newLocation = data.location,
newWin = data.newwin,
newFormParams = data.formParam,
newListParams = data.listParam,
vars = data.__vars,
param;
if (vars && vars.afterFunc && data.ok) {
EventMgr.trigger(vars.afterFunc, { d: vars });
}
if (data.ok) {
if (reload) {
window.location = baseUrl;
closeForm(e);
return;
} else if (newLocation && newWin) {
window.open(newLocation, '_blank');
} else if (newLocation) {
window.location = newLocation;
closeForm(e);
return;
} else if (newFormParams) {
param = App.Common.parseParams(newFormParams);
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
noesc: true,
param: param,
invar: { parent: parent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
return;
} else if (newListParams) {
param = App.Common.parseParams(newListParams);
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
noesc: true,
param: param,
invar: { parent: parent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
return;
} else {
//reload source tab
if (data.parent) {
EventMgr.trigger('reloadTab', { tabId: data.parent });
}
}
closeForm(e);
} else {
//if error render form again with error
var obj = data;
obj.type = 'inspectorForm';
obj.targetTabId = null;
obj.sourceTab = obj.parent;
if (obj.__vars) {
obj.__innervars = obj.__vars;
}
EventMgr.trigger('ajaxResponse', obj);
EventMgr.trigger('tabLoadingHide', { tabId: obj.tabId });
}
},
//inspector collapsed
inspectorCollapseHandler = function(e) {
var formWrapper = $formWrapper();
if (App.Dom.hasClass(formWrapper, 'collapsed')) {
App.Dom.removeClass(formWrapper, 'collapsed');
App.Dom.addClass(formWrapper, 'uncollapsed');
} else {
App.Dom.addClass(formWrapper, 'collapsed');
App.Dom.removeClass(formWrapper, 'uncollapsed');
}
e.preventDefault();
},
//close inspector form
closeForm = function(e) {
$formWrapper().style.display = 'none';
if (e) {
e.preventDefault();
}
},
closeModalForm = function() {
closeForm();
},
formWrapper,
moveObj = {},
//inspector form drag & drop
inspectorDragHandler = function(e) {
e.preventDefault();
document.onmousemove = inspectorMove;
document.onmouseup = inspectorDrop;
formWrapper = $formWrapper();
moveObj.defX = parseInt(formWrapper.style.right, 10) || 0;
moveObj.defY = parseInt(formWrapper.style.top, 10) || 0;
moveObj.shiftX = e.clientX;
moveObj.shiftY = e.clientY;
moveObj.width = formWrapper.offsetWidth;
moveObj.maxTop = window.innerHeight - 35;
moveObj.maxRight = window.innerWidth - moveObj.width;
moveObj.minRight = 50 - moveObj.width;
},
inspectorMove = function(e) {
var x = (moveObj.shiftX - e.clientX) + moveObj.defX,
y = - (moveObj.shiftY - e.clientY) + moveObj.defY;
if (y < 0) { y = 0; }
if (y > moveObj.maxTop) { y = moveObj.maxTop; }
if (x < moveObj.minRight) { x = moveObj.minRight; }
if (x > moveObj.maxRight) { x = moveObj.maxRight; }
formWrapper.style.right = x + 'px';
formWrapper.style.top = y + 'px';
},
inspectorDrop = function(e) {
document.onmousemove = null;
document.onmouseup = null;
moveObj = {};
};
return {
init: init
};
}(window, $, EventMgr, App);