Your IP : 3.135.223.175


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

/**
 *  TestCases
 *  @param {object} window  global object
 *  @param {function} $ jQuery library
 *  @param {object} EventMgr EventMgr library
 *  @param {object} App Application
 *  @return {object} api
 */
App.TestCases = function(window, $, EventMgr, App) {
  'use strict';

  var formLinkSel = '.testmode__form-link',
      contentWrapperSel = '#main-wrapper',
      testModeFieldSel = '.i-testmode-field',
      inputTextareaSel = '.tab-content_st_testmode input, .tab-content_st_testmode textarea',
      iconSelector = '#testmode__list-icon';

  function $mainWrapper() {
    return App.u.selectorCache('.i-list-wr');
  }

  function formLinkHandler(e) {
    e.preventDefault();
    var fieldName = this.getAttribute('data-elid'),
        tabId = this.getAttribute('data-tabid'),
        func = $('#cont-' + tabId).attr('data-func'),
        $self = $(this),
        value = $('#cont-' + tabId + ' input[type=hidden][name="' + fieldName + '"],' +
        '#cont-' + tabId + ' input[type=text][name="' + fieldName + '"],' +
        '#cont-' + tabId + ' textarea[name=' + fieldName + ']').val();
    //if it html/textdata
    if (value === undefined) {
      //textdata
      value = $('#' + tabId + '-' + fieldName + '-inner').html();
      if (!value) {
        value = $('#' + tabId + '-' + fieldName).html();
      }
    }

    var param = {
      func: 'test.check',
      fieldname: fieldName,
      ffunc: func,
      value: value
    };

    if ($self.hasClass('b-elem_style_gracescale')) {
      $self.removeClass('b-elem_style_gracescale');
    } else {
      $self.addClass('b-elem_style_gracescale');
      param.cancel = 'yes';
    }

    EventMgr.trigger('ajaxRequest', {
      param: param,
      invar: { sourceTab: tabId },
      type: 'get',
      outtype: 'json',
      trfunc: 'DoNothing',
      queue: ''
    });
  }
  var field, iconLeftPos;

  function $icon() {
    return App.Dom.byId('testmode__list-icon');
  }

  function showIcon() {
    var self = $(this),
        offset = self.offset(),
        left = offset.left,
        top = offset.top,
        width = this.offsetWidth,
        fastFilterIconElem = $icon(),
        isEditable = self.hasClass('editable') ||
         self.hasClass('i-filter-field') || self.parent().hasClass('i-filter-field'),
        marginLeft = 22;
    field = self;
    if (isEditable) {
      marginLeft += 22;
    }
    if (fastFilterIconElem.className.match('active')) { return; }
    iconLeftPos = left + width - marginLeft;
    fastFilterIconElem.style.left = iconLeftPos + 'px';
    fastFilterIconElem.style.top = top + 'px';
    fastFilterIconElem.style.display = 'block';
  }

  function hideIcon(e) {
    var fastFilterIconElem = $icon();
    if (!fastFilterIconElem.className.match('active')) {
      fastFilterIconElem.style.display = 'none';
    }
  }

  function selfShowIcon() {
    var fastFilterIconElem = $icon();
    fastFilterIconElem.style.display = 'block';
  }

  function addFieldFromFormList(e, data) {
    var value = field.html(),
        $tabCont = field.closest('.tab-content'),
        func = $tabCont.attr('data-func'),
        $list = field.closest('.b-form-list__table'),
        $tr = field.closest('.b-form-list__col'),
        keyName = $list.attr('data-key'),
        fieldName = $list.attr('data-name'),
        tabId = $tabCont.attr('data-tabid'),
        elid = $('#' + tabId + '-elid').val(),
        colName = $tr.attr('data-colname');

    var param = {
        func: 'test.check',
        colname: colName,
        ffunc: func,
        elid: elid,
        keyname: keyName,
        value: value,
        fieldname: fieldName
      };
    checkTestRequest(param, field);
  }

  function addFieldFromInfoList(e, data) {
    var value = field.html(),
        $list = field.closest('.block-table'),
        func = $list.attr('data-block-func'),
        fieldName = field.attr('data-name');

    var param = {
        func: 'test.check',
        ffunc: func,
        value: value,
        fieldname: fieldName
      };
    checkTestRequest(param, field);

  }

  function addField(e, data) {
      //check for formlist
      if (field.hasClass('b-form-list__data')) {
        addFieldFromFormList(e, data);
        return;
      } else if (field.hasClass('b-infolist__col_type_value')) {
        addFieldFromInfoList(e, data);
        return;
      }
      var value = field.find('.b-list__table-col-content').html(),
          listRow = field.closest('.b-list__table-row'),
          elid = listRow.attr('data-elid'),
          keyName = listRow.attr('data-elkeyname'),
          index = field.closest('td').index(),
        fieldName = field.closest('table').find('th')[index].getAttribute('data-colname'),
        $tabCont = field.closest('.tab-content'),
        tabId = $tabCont.attr('data-tabid'),
        func = $tabCont.attr('data-func'),
        rowIndex = listRow.attr('data-index'),
        props = field.find('.props'),
        propsString = '';
    props.each(function() {
      if (propsString !== '') {
        propsString += ',';
      }
      propsString += this.getAttribute('data-name');
      propsString += '=';
      var v = this.getAttribute('data-value');
      if (v) {
        propsString += this.getAttribute('data-value');
      }
    });
    if (data.__tabs[tabId] && data.__tabs[tabId].__content) {
      if (data.__tabs[tabId].__content[rowIndex] &&
          data.__tabs[tabId].__content[rowIndex][fieldName] &&
          data.__tabs[tabId].__content[rowIndex][fieldName].orig) {
        value = data.__tabs[tabId].__content[rowIndex][fieldName].orig;
      }

    }
    var param = {
      func: 'test.check',
      colname: fieldName,
      ffunc: func,
      elid: elid,
      keyname: keyName,
      value: value
    };
    if (propsString) {
      /* jshint camelcase: false */
      param.p_value = propsString;
    }
    checkTestRequest(param, field);
  }

  function checkTestRequest(param, field) {
    if (field.hasClass('bg__green')) {
      field.removeClass('bg__green');
      param.cancel = 'yes';
    } else {
      field.addClass('bg__green');
    }
    //value @orig
    //unselect cancel=yes

    EventMgr.trigger('ajaxRequest', {
      param: param,
      invar: {},
      type: 'get',
      outtype: 'json',
      trfunc: 'DoNothing',
      queue: ''
    });
  }

  function removeChecker() {
    $(this).closest('.l-form__table-control').find('.testmode__form-link').remove();
  }

  function init() {
    EventMgr.on($mainWrapper(), formLinkSel, 'click', formLinkHandler);
    EventMgr.on($mainWrapper(), inputTextareaSel, 'change', removeChecker);
    $mainWrapper().append('<div class="testmode__list-icon" id="testmode__list-icon" style="display:none;"></div>');
    EventMgr.on($mainWrapper(), testModeFieldSel,
        'mouseover', showIcon);
    EventMgr.on($mainWrapper(), testModeFieldSel,
        'mouseout', hideIcon);
    EventMgr.obind(iconSelector, 'mouseout', hideIcon);
    EventMgr.obind(iconSelector, 'mouseover', selfShowIcon);
    //EventMgr.obind(iconSelector, 'click', addField);
    EventMgr.onwithdata($mainWrapper(), iconSelector, 'click', 'testColCheck',
        addField);
  }

  var api = {
    init: init
  };

  return api;

} (window, $, EventMgr, App);