Chatbox em Abas não notifica conexão ou desconexão do usuário

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Atendido / Resolvido Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por zHugh em 31.08.17 17:44

Detalhes da questão


Endereço do fórum: http://etherias.forumeiros.com/
Versão do fórum: phpBB3

Descrição


Estou a utilizar um código que altera o chatbox do meu fórum e permite que ele possua abas. Entretanto, este chat apresenta duas falhas.

A primeira é que quando um usuário se conecta ao chat, ou desconecta, não aparecem mensagens informativas. De modo que ao menos que você esteja prestando atenção nas mudanças que ocorrem em "usuários conectados" você não consegue notar quando um usuário entra ou sai.

As mensagens em questão são:
Usuário foi desconectado em Qui 31 Ago 2017 - 13:32 (tempo limite sem atividade atingido)
Usuário se juntou ao chat de Qui 31 Ago 2017 - 13:34

A segunda é que quando clico no link "Chatbox" para abrir ele por inteiro, o problema em que as mensagens de conexão e desconectar, esse problema some. Porém as abas não aparecem não sendo possível troca-las.

A priori eu gostaria que solucionassem o problema em que a mensagem não aparece, sendo esse a primeira falha. A segunda não é incomodo para mim, mas caso saibam como solucionar, seria de grande ajuda.

@EDIT: Percebi um terceiro problema. Mensagens enviadas no chat expandido, não aparecem no chat normal do fórum.


Codigo que utilizo
Código:

/*globals jQuery, _userdata*/
 
/**
 * Adds tabs to the chat in which people can choose to talk separately.
 *
 * @author Kyo Panda
 * @see <a href="http://ajuda.forumeiros.com">Fórum dos Fóruns</a>
 * @license MIT
 */

(function($) {
  'use strict';
 
  /**
    * Configuration
    */
  var config = {
      /**
      * Settings for the 'all' tab
      */
      all: {
        enable: false,      // If it is active or not
        label: 'All',      // Its label
      },
     
      /**
      * List of tabs labels
      */
      tabs: [
        'General',
        'Games',
        'Animes',
      ],
     
      /**
      * The default active tab
      */
      default: 'General',
     
      /**
      * Choose the types of messages you want to disable.
      */
      hide: {
        connect: true,      // Member connect
        disconnect: true,  // Member disconnect
        timeout: true,      // Member disconnect by timeout
      },
  };
 
  /**
    * Internationalization settings
    */
  var i18n = {     
      /**
      * English
      */
      en: {
        'General': 'General',
        'Games': 'Games',
        'Animes': 'Animes',
      },
     
      /**
      * Spanish
      */
      es: {
        'General': 'General',
        'Games': 'Juegos',
        'Animes': 'Animes',
      },
     
      /**
      * Portuguese
      */
      pt: {
        'General': 'Geral',
        'Games': 'RPG',
        'Animes': 'Dúvidas',
      },
  };
 
  var lang = {};
 
  var t = function(text, reverse) {
      if (reverse) {
        for (var key in lang) {
            if (lang[key] === text) {
              return key;
            }
        }
       
        return text;
      }
     
      return lang[text] ? lang[text] : text;
  };

  /**
    * Style
    */
  config.style = [
      '#chatbox_header {',
      '  position: relative;',
      '}',
      '',
      '#chatbox_tabs {',
      '  position: absolute;',
      '  bottom: 0;',
      '  left: 180px;',
      '  list-style: none;',
      '  padding: 0 0 0 10px;',
      '  margin: 0;',
      '  overflow: hidden;',
      '}',
      '',
      '#chatbox_tabs li {',
      '  float: left;',
      '  height: 24px;',
      '  line-height: 24px;',
      '  margin-right: 10px;',
      '  padding: 0 5px;',
      '  border: 1px #fff solid;',
      '  border-radius: 5px 5px 0 0;',
      '  cursor: pointer;',
  '  font-size: 13px;',
      '  font-family: verdana;',
      '  color: #fff;',
      '  border-bottom: none;',
 '  text-transform: uppercase;',
' letter-spacing:2px;',
      '}',
      '',
      '#chatbox_tabs li.active {',
      '  background-color: #fff;',
      '  color: #333;',
 'transition: 0.6s;',
      '}',
  ].join('\n');
     
  /**
    * Chatbox override
    */
  var insertChatBoxNew = window.insertChatBoxNew;
 
  window.insertChatBox = window.insertChatBoxNew = function() {
      insertChatBoxNew.apply(this, arguments);
     
      var chatbox = $('#frame_chatbox').get(0);
     
      if (chatbox.readyState === 'complete') {
        return run(event.target.contentWindow);
      }
     
      var onload = chatbox.onload;
     
      chatbox.onload = function(event) {       
        if (onload) {
            onload.apply(this, arguments);
        }
       
        run(event.target.contentWindow);
      };
  };

  /**
    * Script initialization
    */
  var run = function(context) {     
      /**
      * Initial variables
      */
      lang = window._userdata && i18n[_userdata.user_lang] ?
        i18n[_userdata.user_lang] : {}
      ;
     
      if (
        config.all.enable
        && config.tabs.indexOf(config.all.label) === -1
      ) {
        config.tabs.unshift(config.all.label);
      }
       
      var tabs = {
        html: [],
        stored: [],
        visible: config.tabs.indexOf(config.default),
        regex: new RegExp(
            '\\[(' + config.tabs.join('|') + ')\\]', 'gi'
        ),
        tregex: (function() {
            var values = [];
           
            values = $.map(config.tabs, function(text) {
              return t(text);
            });
           
            return new RegExp(
              '\\[(' + values.join('|') + ')\\]\\s?', 'gi'
            );
        }()),
        all: function(label) {
            return config.all.enable && label === config.all.label;
        },
      };
     
      if (tabs.visible === -1) {
        tabs.visible = 0;
      }

      $.each(config.tabs, function() {
        tabs.html.push('<li>' + t(this) + '</li>');
      });
     
      var $message = null;
     
      /**
      * Tabs creation
      */
      $('<style>', { text: config.style }).appendTo(context.document.head);
     
      var $tabs = $('<ul>', { id: 'chatbox_tabs' })
        .html(tabs.html.join(''))
        .find('li:nth-child(' + (tabs.visible + 1) + ')')
            .addClass('active')
        .end()           
        .on('click', 'li', function() {
            var $this = $(this);
           
            if ($this.index() === tabs.visible) {
              return;
            }
           
            tabs.visible = $this.index();
           
            $tabs.find('.active').removeClass('active');
            $this.addClass('active');
                       
            context.chatbox.refresh({ messages: tabs.stored });
        })
        .appendTo($('#chatbox_header', context.document))
      ;
     
      /**
      * Chatbox refresh
      */
      var refresh = context.Chatbox.prototype.refresh;
     
      context.Chatbox.prototype.refresh = function(data) {
        if (!data.messages || !data.messages.length) {
            return refresh.call(this, data);
        }
       
        tabs.stored = data.messages;
       
        data = JSON.parse(JSON.stringify(data));
       
        data.messages = $.grep(data.messages, function(message) {
            if (config.hide[message.action]) {
              return false;
            }
           
            return true;
        });
       
        var label = config.tabs[tabs.visible];
       
        if (tabs.all(label)) { 
            $.each(data.messages, function() {
              this.msg = this.msg.replace(tabs.regex, function(text, match) {
                  return '[' + t(match) + ']';
              });
            });
           
            return refresh.call(this, data);
        }
       
        data.messages = $.grep(data.messages, function(message) {
            if (
              message.action === 'msg'
              && message.msg.indexOf('[' + label + ']') === -1
            ) {
              return false;
            }
           
            message.msg = message.msg.replace(tabs.regex, '');
           
            return true;           
        });
       
        refresh.call(this, data);
      }; 
     
      /**
      * Chatbox send
      */
      var send = context.Chatbox.prototype.send;
     
      context.Chatbox.prototype.send = function() {
        if (!$message) {
            $message = $('#message', context.document);
        }
       
        var label = config.tabs[tabs.visible];
       
        var value = $message
            .val()
            .replace(tabs.tregex, function(text, match) {
              console.log(match, t(match, true));
              return '[' + t(match, true) + ']';
            })
        ;
       
        if (!tabs.all(label)) {
            value = '[' + label + '] ' + value;
        }
       
        $message.val(value);
       
        send.apply(this, arguments);
      };
     
      /**
      * Chatbox initial refresh
      */
      context.chatbox.refresh(context.chatbox);
  }
}(jQuery));


Última edição por zHugh em 05.09.17 15:49, editado 1 vez(es)
zHugh

zHugh
Usuário destaque

Masculino
Inscrito dia : 30/03/2010
Mensagens : 736
Pontos Ativos : 1190

Ver perfil do usuário http://superonzerpg.forumeiros.net/

Atendido / Resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por Shek em 02.09.17 0:23

Olá!

Vou explicar o motivo que a mensagem não aparece. O código gera uma espécie de Prefixo para as mensagens que são enviadas a partir do usuário. A mensagem de "Conexão e Desconexão" é fixa e não pode ser alterada, por isso ela não aparece.

No caso, você vai localizar no código essa parte que está logo no começo, provavelmente na linha 43 à 47:
Código:
      hide: {
        connect: true,      // Member connect
        disconnect: true,  // Member disconnect
        timeout: true,      // Member disconnect by timeout
      },
Ao localizar, troque o true por false e salve.

Já o terceiro problema eu não entendi. Poderia explicar, por favor?

Até mais.


Bem-vindo ao Fórum dos Fóruns!
Leia as regras do Fórum dos Fóruns e as regras do setor de suporte.
Antes de criar um tópico, verifique se sua questão já não foi respondida.
Se sua questão foi resolvida, marque-a clicando no botão resolvido para organizar o fórum.
Shek Crowley
Shek

Shek
Admineiro
Admineiro

Masculino
Inscrito dia : 11/04/2009
Mensagens : 18137
Pontos Ativos : 22143

Ver perfil do usuário https://shiftactive.blogspot.com https://go.topicit.net/ZosT/61pMt1mPsG https://www.facebook.com/ShiftActif https://twitter.com/ShiftActif

Atendido / Resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por zHugh em 03.09.17 5:19

Olá @Shek a troca do true por false resultou.

Em relação ao terceiro problema. Quando uma mensagem é enviada no chatbox "maior" ou seja o http://etherias.forumeiros.com/chatbox/index.forum no meu forum, ela apenas aparece nele. De modo que os membros que estão utilizando o chat normal, aquele que aparece pagina principal do forum, eles não conseguem visualizar as mensagens.

Por exemplo:

Se eu enviar a mensagem "Olá" no chatbox normal, e for visualiza-la no /chatbox. A mensagem irá aparecer da seguinte forma: [general] Olá.

Entretanto, se eu enviar a mensagem "Olá" no /chatbox, e for visualiza-la no chat normal. A mensagem não aparece de forma alguma.

Pelo que eu pude entender dos meus testes, a unica forma se fazer a mensagem aparecer no chatbox normal seria "atribuindo um caminho a ela". Ou seja, para fazer a mensagem aparecer na aba geral, ao invés de simplesmente digitar a mensagem eu precisaria colocar "[General] Olá"
zHugh

zHugh
Usuário destaque

Masculino
Inscrito dia : 30/03/2010
Mensagens : 736
Pontos Ativos : 1190

Ver perfil do usuário http://superonzerpg.forumeiros.net/

Atendido / Resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por Shek em 03.09.17 12:46

A página separada do Chatbox não recebe investimento de script. O único motivo pelo qual o chatbox está divido em abas na página inicial, é porque na página inicial o investimento das páginas script funcionam. Desta forma, será impossível modificar a página externa do Chatbox, e as mensagens enviadas por lá sempre ficam fora do chat da página inicial por causa do script.

Até mais.


Bem-vindo ao Fórum dos Fóruns!
Leia as regras do Fórum dos Fóruns e as regras do setor de suporte.
Antes de criar um tópico, verifique se sua questão já não foi respondida.
Se sua questão foi resolvida, marque-a clicando no botão resolvido para organizar o fórum.
Shek Crowley
Shek

Shek
Admineiro
Admineiro

Masculino
Inscrito dia : 11/04/2009
Mensagens : 18137
Pontos Ativos : 22143

Ver perfil do usuário https://shiftactive.blogspot.com https://go.topicit.net/ZosT/61pMt1mPsG https://www.facebook.com/ShiftActif https://twitter.com/ShiftActif

Atendido / Resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por zHugh em 03.09.17 20:59

Certo, Obrigado pela atenção @Shek
zHugh

zHugh
Usuário destaque

Masculino
Inscrito dia : 30/03/2010
Mensagens : 736
Pontos Ativos : 1190

Ver perfil do usuário http://superonzerpg.forumeiros.net/

Atendido / Resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por Shek em 06.09.17 1:15

Questão marcada como Resolvida ou o Autor solicitou que ela fosse arquivada.
Tópico marcado como Resolvido e movido para Questões resolvidas.


Bem-vindo ao Fórum dos Fóruns!
Leia as regras do Fórum dos Fóruns e as regras do setor de suporte.
Antes de criar um tópico, verifique se sua questão já não foi respondida.
Se sua questão foi resolvida, marque-a clicando no botão resolvido para organizar o fórum.
Shek Crowley
Shek

Shek
Admineiro
Admineiro

Masculino
Inscrito dia : 11/04/2009
Mensagens : 18137
Pontos Ativos : 22143

Ver perfil do usuário https://shiftactive.blogspot.com https://go.topicit.net/ZosT/61pMt1mPsG https://www.facebook.com/ShiftActif https://twitter.com/ShiftActif

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


Permissão deste fórum:
Você não pode responder aos tópicos neste fórum