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

2 participantes

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

Tópico resolvido Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por zHugh 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
Membro

Membro desde : 30/03/2010
Mensagens : 751
Pontos : 1215

http://superonzerpg.forumeiros.net/

Ir para o topo Ir para baixo

Principal Contribuidor

Tópico resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por Shek 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.
Shek

Shek
Principal Contribuidor
Principal Contribuidor

Membro desde : 11/04/2009
Mensagens : 18897
Pontos : 22794

https://shiftactive.blogspot.com/ https://www.facebook.com/ShiftActif https://twitter.com/ShiftActif

Ir para o topo Ir para baixo

Tópico resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por zHugh 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
Membro

Membro desde : 30/03/2010
Mensagens : 751
Pontos : 1215

http://superonzerpg.forumeiros.net/

Ir para o topo Ir para baixo

Principal Contribuidor

Tópico resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por Shek 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.
Shek

Shek
Principal Contribuidor
Principal Contribuidor

Membro desde : 11/04/2009
Mensagens : 18897
Pontos : 22794

https://shiftactive.blogspot.com/ https://www.facebook.com/ShiftActif https://twitter.com/ShiftActif

Ir para o topo Ir para baixo

Tópico resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por zHugh 03.09.17 20:59

Certo, Obrigado pela atenção @Shek
zHugh

zHugh
Membro

Membro desde : 30/03/2010
Mensagens : 751
Pontos : 1215

http://superonzerpg.forumeiros.net/

Ir para o topo Ir para baixo

Principal Contribuidor

Tópico resolvido Re: Chatbox em Abas não notifica conexão ou desconexão do usuário

Mensagem por Shek 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.
Shek

Shek
Principal Contribuidor
Principal Contribuidor

Membro desde : 11/04/2009
Mensagens : 18897
Pontos : 22794

https://shiftactive.blogspot.com/ https://www.facebook.com/ShiftActif https://twitter.com/ShiftActif

Ir para o topo Ir para baixo

Ver o tópico anterior Ver o tópico seguinte Ir para o topo

- Tópicos semelhantes

Permissões neste sub-fórum
Não podes responder a tópicos