Программный интерфейс

Показывать:
/**
 * ### Кнопки авторизации и синхронизации
 * © Evgeniy Malyarov http://www.oknosoft.ru 2014-2016
 *
 * @module  widgets
 * @submodule btn_auth_sync
 * @requires common
 */

/**
 * ### Невизуальный компонент для управления кнопками авторизации и синхронизации на панелях инструментов
 * Изменяет текст, всплывающие подсказки и обработчики нажатий кнопок в зависимости от ...
 *
 * @class OBtnAuthSync
 * @constructor
 * @menuorder 57
 * @tooltip Кнопки авторизации
 */
$p.iface.OBtnAuthSync = function OBtnAuthSync() {

  var bars = [], spin_timer;

  //$(t.tb_nav.buttons.bell).addClass("disabledbutton");

  function btn_click(){

    if($p.wsql.pouch.authorized)
      dhtmlx.confirm({
        title: $p.msg.log_out_title,
        text: $p.msg.logged_in + $p.wsql.pouch.authorized + $p.msg.log_out_break,
        cancel: $p.msg.cancel,
        callback: function(btn) {
          if(btn){
            $p.wsql.pouch.log_out();
          }
        }
      });
    else
      $p.iface.frm_auth({
        modal_dialog: true
        //, try_auto: true
      });
  }

  function set_spin(spin){

    if(spin && spin_timer){
      clearTimeout(spin_timer);

    }else{
      bars.forEach(function (bar) {
        if(spin)
          bar.buttons.sync.innerHTML = '<i class="fa fa-refresh fa-spin md-fa-lg"></i>';
        else{
          if($p.wsql.pouch.authorized)
            bar.buttons.sync.innerHTML = '<i class="fa fa-refresh md-fa-lg"></i>';
          else
            bar.buttons.sync.innerHTML = '<i class="fa fa-ban md-fa-lg"></i>';
        }
      });
    }
    spin_timer = spin ? setTimeout(set_spin, 3000) : 0;
  }

  function set_auth(){

    bars.forEach(function (bar) {

      if($p.wsql.pouch.authorized){
        // bar.buttons.auth.title = $p.msg.logged_in + $p.wsql.pouch.authorized;
        // bar.buttons.auth.innerHTML = '<i class="fa fa-sign-out md-fa-lg"></i>';
        bar.buttons.auth.title = "Отключиться от сервера";
        bar.buttons.auth.innerHTML = '<span class="span_user">' + $p.wsql.pouch.authorized + '</span>';
        bar.buttons.sync.title = "Синхронизация выполняется...";
        bar.buttons.sync.innerHTML = '<i class="fa fa-refresh md-fa-lg"></i>';
      }else{
        bar.buttons.auth.title = "Войти на сервер и включить синхронизацию данных";
        bar.buttons.auth.innerHTML = '&nbsp;<i class="fa fa-sign-in md-fa-lg"></i><span class="span_user">Вход...</span>';
        bar.buttons.sync.title = "Синхронизация не выполняется - пользователь не авторизован на сервере";
        bar.buttons.sync.innerHTML = '<i class="fa fa-ban md-fa-lg"></i>';
          //'<i class="fa fa-refresh fa-stack-1x"></i>' +
          //'<i class="fa fa-ban fa-stack-2x text-danger"></i>' +
          //'</span>';
      }
    })
  }

  /**
   * Привязывает обработчики к кнопке
   * @param btn
   */
  this.bind = function (bar) {
    bar.buttons.auth.onclick = btn_click;
    //bar.buttons.auth.onmouseover = null;
    //bar.buttons.auth.onmouseout = null;
    bar.buttons.sync.onclick = null;
    // bar.buttons.sync.onmouseover = sync_mouseover;
    // bar.buttons.sync.onmouseout = sync_mouseout;
    bars.push(bar);
    setTimeout(set_auth);
    return bar;
  };

  $p.on({
    pouch_load_data_start: function (page) {

      if(!$p.iface.sync)
        $p.iface.wnd_sync();
      $p.iface.sync.create($p.eve.stepper);
      $p.eve.stepper.frm_sync.setItemValue("text_bottom", "Читаем справочники");

      if(page.hasOwnProperty("local_rows") && page.local_rows < 10){
        $p.eve.stepper.wnd_sync.setText("Первый запуск - подготовка данных");
        $p.eve.stepper.frm_sync.setItemValue("text_processed", "Загрузка начального образа");
      }else{
        $p.eve.stepper.wnd_sync.setText("Загрузка данных из IndexedDB");
        $p.eve.stepper.frm_sync.setItemValue("text_processed", "Извлечение начального образа");
      }

      set_spin(true);
    },

    pouch_load_data_page: function (page) {
      set_spin(true);
      if($p.eve.stepper.wnd_sync){
        var docs_written = page.docs_written || page.page * page.limit;
        $p.eve.stepper.frm_sync.setItemValue("text_current", "Обработано элементов: " + docs_written + " из " + page.total_rows);
        $p.eve.stepper.frm_sync.setItemValue("text_bottom", "Текущий запрос: " + page.page + " (" + (100 * docs_written/page.total_rows).toFixed(0) + "%)");
      }
    },

    pouch_change: function (id, page) {
      set_spin(true);
    },

    pouch_load_data_loaded: function (page) {
      if($p.eve.stepper.wnd_sync){
        if(page.docs_written){
          $p.iface.sync.close();
          // setTimeout(function () {
          //   $p.iface.sync.close();
          //   $p.eve.redirect = true;
          //   location.reload(true);
          // }, 2000);
        }else{
          $p.iface.sync.close();
        }
      }
    },

    pouch_load_data_error: function (err) {
      set_spin();
      if($p.eve.stepper.wnd_sync)
        $p.iface.sync.close();
    },

    log_in: function (username) {
      set_auth();
    },

    log_out: function () {
      set_auth();
    }
  });
};