Your IP : 18.117.174.43


Current Path : /usr/local/mgr5/skins/orion/src/
Upload File :
Current File : //usr/local/mgr5/skins/orion/src/App.Builder.js

/**
 * 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);