Your IP : 18.219.40.177


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

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

  var msgTemplLink = '.b-msg-templ__link';

  function $content() {
    return $('#main-wrapper');
  }

  function $body() {
    return $('body');
  }

  function showFullMsg() {
    var ind = this.getAttribute('data-ind');
    $('.b-msg-templ__title-content-item_ind_' + ind).show();
  }

  function hideFullMsg() {
    var ind = this.getAttribute('data-ind');
    $('.b-msg-templ__title-content-item_ind_' + ind).hide();
  }
  function frRevstring(str) {
    var retStr = '';
    for (var i = str.length - 1; i > -1; i--) { retStr += str.substr(i, 1); }
    return retStr;
  }

  function getMsgTempl(e) {
    e.preventDefault();
    var id = this.getAttribute('data-id'),
        msgTempl = $('#b-msg-templ-' + id).find('.b-msg-templ'),
        tabId = this.getAttribute('data-tabid'),
        textarea = App.Dom.byId(id);
    var str = textarea.value,
        pos = (str.length === 0) ? 0 : App.u.getCaretPosition(textarea),
        start = str.lastIndexOf('\n', pos - 1) + 1,
        s = str.slice(start, pos),
        len = s.length;
    s = frRevstring(s);
    var sm = s.match(/(.*?)[\.\?\!] */);
    s = frRevstring((!sm) ? s : sm[1]);
    s = s.replace(/^ */, '');
    if (msgTempl.length > 0) {
      msgTempl.remove();
    } else {
      var param = $('#frm-' + tabId).serializeObject();
      /* jslint camelcase: false */
      param.source_func = param.func;
      /* jslint camelcase: true */
      param.func = 'anstempl.get';
      /* jslint camelcase: false */
      param.source_string = s;
      /* jslint camelcase: true */
      EventMgr.trigger('ajaxRequest', {
        param: param,
        invar: {
          id: id
        },
        type: 'get',
        outtype: 'json',
        trfunc: 'msgTemplResp'
      });
    }
  }

  function closeMsgTemlList(e) {
    var $msgTemlList = $('.tab-content_st_active .b-msg-templ');
    $msgTemlList.remove();
    $body().off('click.msgTempl', closeMsgTemlList);
  }

  function renderMsgTemplList(e, data) {
    var templList = data.savedmessage,
        id = data.id;

    var html = templates.msgTemplList({ templList: templList, id: id });
    $('#b-msg-templ-' + id).append(html);
    setTimeout(function() {
      $body().on('click.msgTempl', closeMsgTemlList);
    }, 1);
  }

  function insertMessage(e) {
    e.preventDefault();
    var ind = this.getAttribute('data-ind'),
        id = this.getAttribute('data-id'),
        textMsg = $('.b-msg-templ__title-content-item_ind_' + ind).text(),
        targetId = $(this).closest('.b-msg-templ').attr('data-target');
    var elem = App.Dom.byId(targetId);
    if (elem) {
      elem.focus();
      App.u.insertStringAfterCaret(elem, textMsg, true);
      EventMgr.trigger('ajaxRequest', {
        param: {
          func: 'anstempl.stat',
          id: id
        },
        type: 'get',
        outtype: 'json',
        trfunc: 'DoNothing'
      });
    }
    var msgTempl = $('#b-msg-templ-' + targetId).find('.b-msg-templ');
    msgTempl.remove();
    $body().off('click.msgTempl', closeMsgTemlList);
  }

  function init() {
    EventMgr.on($content(), msgTemplLink, 'click', getMsgTempl);
    EventMgr.bind('msgTemplResp', renderMsgTemplList);
    EventMgr.on($content(), '.b-msg-templ__title-list-item', 'mouseenter',
        showFullMsg);
    EventMgr.on($content(), '.b-msg-templ__title-list-item', 'mouseleave',
        hideFullMsg);
    EventMgr.on($content(), '.b-msg-templ__title-list-item', 'click',
        insertMessage);
  }

  var api = {
    init: init
  };

  return api;

} (window, $, EventMgr, App);