Chat em abas incompatível com comandos

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

Atendido / Resolvido Chat em abas incompatível com comandos

Mensagem por iScroll em 26.12.18 18:07

Detalhes da questão


Endereço do fórum: http://www.brasilplayultimate.forumeiros.com
Versão do fórum: ModernBB

Descrição


Olá a todos, recentemente tive problemas com este script:
Código:

Código:
/*globals jQuery, _userdata*/
 
/**
 * Adds tabs to the chat in which people can choose to talk separately.
 *
 * @author Kyo Panda
 * @see <a href="https://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: 'General',      // Its label
      },
    
      /**
      * List of tabs labels
      */
      tabs: [
        'General',
        'Suporte',
        '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: {
        'All': 'All',
        'General': 'General',
        'Suporte': 'Suport',
        'Animes': 'Animes',
      },
    
      /**
      * Spanish
      */
      es: {
        'All': 'Todos',
        'General': 'General',
        'Suporte': 'Suporte',
        'Animes': 'Animes',
      },
    
      /**
      * Portuguese
      */
      pt: {
        'All': 'Todos',
        'General': 'Bate-papo',
        'Suporte': 'Dúvidas',
        'Animes': 'Animes',
      },
  };
 
  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_tabs li:hover {',
      'opacity: 0.7;',
      '}',
      '#chatbox_header {',
      '  position: relative;',
      '}',
      '',
      '#chatbox_tabs {',
      '  position: absolute;',
      '  bottom: 0;',
      '  left: 80px;',
      '  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: 3px 3px 0 0;',
      '  cursor: pointer;',
      '  font-family: Arial, sans-serif;',
      '  color: #000;',
      '  border-bottom: none;',
      '}',
      '',
      '#chatbox_tabs li.active {',
      '  background-color: #f5f5f5;',
      '  color: #333;',
      '}',
  ].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));
Que impedia que eu realizasse comandos, /ban, /unban, /clear, etc.

Vejam: http://prntscr.com/lztt9u
Há como proceder ?
iScroll

iScroll
Membro do Fórum

Masculino
Inscrito dia : 08/03/2015
Mensagens : 1698
Pontos Ativos : 2304

Ver perfil do usuário http://ultimatelife.forumeiros.com

Atendido / Resolvido Re: Chat em abas incompatível com comandos

Mensagem por RafaelS. em 27.12.18 23:50

Olá @iScroll,

Tente trocar por este código:
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
 */
 
 FA = window.FA || {};
 
 FA.Chatbox = FA.Chatbox || {};
 
 FA.Chatbox.Tabs = (function($, config, i18n, style) {
  /**
    * Object initialization
    */
  function Tabs() {
      /**
      * Language variable
      */
      this.lang = {};
    
      /**
      * Regex for translating tab tags in messages
      */
      this.regex = new RegExp('\\[(' + $.map(config.tabs, function(tab) {
        return tab.label;
      }).join('|') + ')\\]');
    
      /**
      * Tabs initialization
      */    
      $.each(config.tabs, function() {
        /**
          * Regex for removing the tags on messages
          */
        this.regex = new RegExp('\\[' + this.label + '\\](\s?)', 'gi');
      
        /**
          * Last message tab, for new messages notification
          */
        this.lastMessage = 0;
      });
    
      /**
      * Override chatbox
      */
      this.overrideChatbox();
  };
 
  /**
    * Translation function
    */
  Tabs.prototype.t = function(text) {
      return this.lang[text] ? this.lang[text] : text;
  };
 
  /**
    * Initialization function
    */
  Tabs.prototype.init = function() {
      /**
      * User language definition
      */
      this.lang = window._userdata && i18n[_userdata.user_lang] ?
        i18n[_userdata.user_lang] : {}
      ;
    
      /**
      * Tabs creation
      */
      this.build();
    
      /**
      * Override chatbox refresh
      */
      this.overrideChatboxRefresh();
    
      /**
      * Override chatbox send
      */
      this.overrideChatboxSend();
    
      /**
      * Initial refresh
      */
      this.refresh();
  };
 
  /**
    * Refresh data
    */
  Tabs.prototype.refresh = function() {
      if (!this.source) {
        return this.context.chatbox.refresh(this.context.chatbox);
      }
    
      return this.context.chatbox.refresh(this.source);
  };
 
  /**
    * Tabs creation
    */
  Tabs.prototype.build = function() {
      var self = this;
    
      /**
      * Style creation
      */
      $('head', this.context.document)
        .append($('<style>', { text: style }))
      ;
    
      /**
      * Parent HTML creation
      */
      this.$tabs = $('<ul>', { id: 'chatbox_tabs' })
        /**
          * Tab change function
          */
        .on('click', 'li', function() {
            self.change($(this));
        })
        .appendTo($('#chatbox_header', this.context.document))
      ;
    
      /**
      * Tabs HTML creation
      */
      $.each(config.tabs, function(index, item) {
        /**
          * Don't create hidden tabs
          */
        if (item.hidden) {
            return;
        }
      
        /**
          * Tab creation
          */
        var $elem = $('<li>', {
            'text': self.t(item.label),
            'data-index': index,
        });
      
        /**
          * Make tab active
          */
        if (item.active) {
            self.active = item;
            $elem.addClass('active');
        }
      
        /**
          * Hide properties of "all" tab
          */
        if (item.all) {
            $elem.addClass('all');
        }
      
        self.$tabs.append($elem);
      });
  };
 
  /**
    * Tab change function
    */
  Tabs.prototype.change = function($elem) {
      /**
      * Set the active tab
      */
      this.active = config.tabs[~~$elem.data('index')];
    
      /**
      * Display the active tab
      */
      this.$tabs.children('.active').removeClass('active');
      $elem.addClass('active').removeClass('new-message');
 
      this.refresh();
  };
 
  /**
    * Notification
    */
  Tabs.prototype.notify = function(message) {
      var date = new Date();
    
      this.source.messages.push({
        userId: -10,
        action: 'msg',
        msgColor: 'green',
        date: date.toLocaleDateString(),
        datetime: date.toLocaleTimeString(),
        time: date.getTime(),
        msg: (this.active.all ? '' : '[' + this.active.label + '] ')
            +  message.replace(/^\/sm\s/i, '')
        ,
      });
  };
 
  /**
    * Mark tab with new messages
    */
  Tabs.prototype.setNewMessageStatus = function(tab) {
      var self = this;
    
      this.$tabs.children().each(function() {
        var $this = $(this);
        var text = $this.text();
      
        if (
            tab.label === text
            || self.t(tab.label) === text
        ) {
            $this.addClass('new-message');
            return false;
        }
      });
  };
 
  /**
    * Chatbox override
    */
  Tabs.prototype.overrideChatbox = function() {
      var self = this;
      var insertChatBoxNew = window.insertChatBoxNew;
 
      window.insertChatBox = window.insertChatBoxNew = function() {
        insertChatBoxNew.apply(this, arguments);
      
        var chatbox = $('#frame_chatbox').get(0);      
      
        if (chatbox.readyState === 'complete') {
            self.context = chatbox.contentWindow;
            return self.init();
        }
      
        var onload = chatbox.onload;
      
        chatbox.onload = function(event) {      
            if (onload) {
              onload.apply(this, arguments);
            }
          
            self.context = event.target.contentWindow;
          
            self.init();
        };
      };
  };
 
  /**
    * Override chatbox refresh
    */
  Tabs.prototype.overrideChatboxRefresh = function() {
      var self = this;
      var refresh = this.context.Chatbox.prototype.refresh;
 
      this.context.Chatbox.prototype.refresh = function(data) {
      
        /**
          * Return if no new messages
          */
        if (!data || !data.messages) {
            return refresh.call(this, data);
        }
      
        /**
          * Store the source data
          */
        self.source = JSON.parse(JSON.stringify(data));
      
        /**
          * Remove hidden messages
          */
        data.messages = $.grep(data.messages, function(message) {
            return !config.hidden[message.action];
        });
      
        /**
          * Capture new messages from other tabs
          */
        var hasNewMessages = [];
        var notifyNewMessages = true;
      
        $.each(data.messages, function() {
            var message = this;
          
            $.each(config.tabs, function() {
              if (message.msg.indexOf('[' + this.label + ']') === -1) {
                  return;
              }
            
              if (this.lastMessage < message.time) {
                  if (this.lastMessage === 0) {
                    notifyNewMessages = false;
                  }
                
                  if (notifyNewMessages) {
                    hasNewMessages.push(this);
                  }
                
                  this.lastMessage = message.time;                
              }
            });
        });
      
        /**
          * Display the all tab
          */
        if (self.active.all) {
            $.each(data.messages, function(index, message) {
              message.msg = message.msg.replace(self.regex, function(text, match) {
                  return '[' + self.t(match) + ']';
              });
            });
          
            return refresh.call(this, data);
        }
      
        /**
          * Display the tab messages
          */
        data.messages = $.grep(data.messages, function(message) {
            if (message.action !== 'msg') {
              return true;
            }
          
            if (message.msg.indexOf('[' + self.active.label + ']') !== -1) {
              /**
                * Remove tag from active and translate others
                */
              message.msg = message.msg
                  .replace(self.active.regex, '$1')
                  .replace(self.regex, function(text, match) {
                    return '[' + self.t(match) + ']';
                  })
              ;
            
              self.active.lastMessage = message.time;
              return true;
            }
          
            return false;
        });
      
        /**
          * Notify new messages from other tabs
          */
        $.each($.unique(hasNewMessages), function() {
            if (this.label === self.active.label) {
              return;
            }
          
            self.setNewMessageStatus(this);
        });
      
        refresh.call(this, data);
      };
  };
 
  /**
    * Override chatbox send
    */
  Tabs.prototype.overrideChatboxSend = function() {
      var self = this;
      var send = this.context.Chatbox.prototype.send;
    
      this.context.Chatbox.prototype.send = function() {
        /**
          * Store the send input
          */
        if (!self.$message) {
            self.$message = $('#message', self.context.document);
        }
      
        var value = self.$message.val();      
      
        /**
          * Change tab
          */
        if (value.indexOf('/ct ') === 0) {
            value = $.trim(value.replace(/^\/ct\s/i, ''));
          
            var tabFound = false;
          
            $.each(config.tabs, function(index) {
            
              if (
                  this.label.toLowerCase() === value.toLowerCase()
                  || self.t(this.label).toLowerCase() === value.toLowerCase()
              ) {
                  tabFound = true;
                
                  var $elem = self.$tabs
                    .children('[data-index="' + index + '"]')
                  ;
                
                  if ($elem.length) {
                    self.change($elem);                  
                    return false;
                  }
                
                  self.$tabs.children('.active').removeClass('active');
                  self.active = this;
                  self.refresh();
                
                  return false;
              }
            });
          
            if (!tabFound) {
              self.notify(self.t('The tab "%s" doesn\'t exists.').replace('%s', value));
            }
 
            return self.refresh();
        }
      
        /**
          * Notification command
          */
        if (value.indexOf('/sm ') === 0) {
            self.notify(value);
            return self.refresh();
        }
      
        /**
          * Add the tab tag to the input
          */
        if (!self.active.all && value.indexOf('/') !== 0) {
            value = '[' + self.active.label + '] ' + value;
        }
      
        self.$message.val(value);
      
        send.apply(this, arguments);
      };
  };
 
  return new Tabs();
 } (jQuery,
  /**
    * Configuration
    */
  {
      /**
      * Tabs configuration
      *  label  : the tab label
      *  all    : if the tab should show all the messages
      *  active : if the tab is active when first opening the chat
      *  hidden : if the tab is hidden
      */
      tabs: [{
        label: 'All',
        all: true,
      }, {
        label: 'General',
        active: true,
      }, {
        label: 'Animes',
      }, {
        label: 'Games',
      }, {
        label: 'Illuminati',
        hidden: true,
      }],
    
      /**
      * Hidden system messages
      *  connect    : hide connection messages
      *  disconnect : hide disconnect messages
      *  timeout    : hide timeout messages
      */
      hidden: {
        connect: true,
        disconnect: true,
        timeout: true,
      },
  },
    
  /**
    * Internationalization settings
    */
  {
      /**
      * Portuguese
      */
      pt: {
        'All': 'Todos',
        'General': 'Geral',
        'Animes': 'Animes',
        'Games': 'Jogos',
        'Illuminati': 'Illuminati',
        'The tab "%s" doesn\'t exists.': 'A aba "%s" não existe.',
      },
  },
 
  /**
    * 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 0 20px;',
      '  border: 1px #fff solid;',
      '  border-radius: 3px 3px 0 0;',
      '  cursor: pointer;',
      '  font-family: Arial, sans-serif;',
      '  color: #fff;',
      '  border-bottom: none;',
      '  position: relative;',
      '}',
      '',
      '#chatbox_tabs li:before {',
      '  content: " ";',
      '  position: absolute;',
      '  top: 50%;',
      '  left: 5px;',
      '  transform: translate(0, -50%);',
      '  background-color: #999;',
      '  width: 10px;',
      '  height: 10px;',
      '  border-radius: 50%;',
      '}',
      '',
      '#chatbox_tabs li.new-message:before {',
      '  background-color: green;',
      '}',
      '',
      '#chatbox_tabs li.all {',
      '  padding-left: 5px;',
      '}',
      '#chatbox_tabs li.all:before {',
      '  display: none;',
      '}',
      '',
      '#chatbox_tabs li.active {',
      '  background-color: #fff;',
      '  color: #333;',
      '}',
  ].join('\n')
));

Até mais. Feliz

PS: Já atualizei o tutorial com este novo código, obrigado. Piscada




Eu sou o RafaelS.,
Eu aconselho-lhe ler os seguintes tópicos:

Seta Para evitar ser punido é importante que leia  o regulamento geral do Fórum dos fóruns.
Seta Antes de criar o seu pedido de suporte certifique-se de ler o regulamento da seção de suporte.
Seta Quando for criar o seu tópico tente ser o mais específico possível, para que nós possámos entender!

"Suba na vida, mas não faça de seus amigos os degraus de sua escada, vença pela sua capacidade sempre com Honestidade,Caráter e Amor!"

Chat em abas incompatível com comandos 2169
Chat em abas incompatível com comandos 15074
RafaelS.

RafaelS.
Moderadeiro
Moderadeiro

Masculino
Inscrito dia : 26/04/2014
Mensagens : 4695
Pontos Ativos : 5747

Ver perfil do usuário http://techmais.forumeiros.com/

Atendido / Resolvido Re: Chat em abas incompatível com comandos

Mensagem por iScroll em 28.12.18 2:07

Muito bom @RafaelS., mas há possibilidade do /clear limpar apenas o chat em que o comando for executado ?
Se não, podes fechar o tópico.
iScroll

iScroll
Membro do Fórum

Masculino
Inscrito dia : 08/03/2015
Mensagens : 1698
Pontos Ativos : 2304

Ver perfil do usuário http://ultimatelife.forumeiros.com

Atendido / Resolvido Re: Chat em abas incompatível com comandos

Mensagem por RafaelS. em 31.12.18 16:32

@iScroll,

Infelizmente não tenho a possibilidade de realizar o que pediu.
A sua dúvida encontra-se resolvida?

Até mais. Feliz




Eu sou o RafaelS.,
Eu aconselho-lhe ler os seguintes tópicos:

Seta Para evitar ser punido é importante que leia  o regulamento geral do Fórum dos fóruns.
Seta Antes de criar o seu pedido de suporte certifique-se de ler o regulamento da seção de suporte.
Seta Quando for criar o seu tópico tente ser o mais específico possível, para que nós possámos entender!

"Suba na vida, mas não faça de seus amigos os degraus de sua escada, vença pela sua capacidade sempre com Honestidade,Caráter e Amor!"

Chat em abas incompatível com comandos 2169
Chat em abas incompatível com comandos 15074
RafaelS.

RafaelS.
Moderadeiro
Moderadeiro

Masculino
Inscrito dia : 26/04/2014
Mensagens : 4695
Pontos Ativos : 5747

Ver perfil do usuário http://techmais.forumeiros.com/

Atendido / Resolvido Re: Chat em abas incompatível com comandos

Mensagem por iScroll em 02.01.19 16:59

Sim, pode fechar obrigado.
iScroll

iScroll
Membro do Fórum

Masculino
Inscrito dia : 08/03/2015
Mensagens : 1698
Pontos Ativos : 2304

Ver perfil do usuário http://ultimatelife.forumeiros.com

Atendido / Resolvido Re: Chat em abas incompatível com comandos

Mensagem por Pedxz em 02.01.19 17:01

Tópico resolvido


Movido para "Questões resolvidas".
Pedxz

Pedxz
Moderadeiro
Moderadeiro

Masculino
Inscrito dia : 13/01/2017
Mensagens : 2809
Pontos Ativos : 3561

Ver perfil do usuário https://pedxz.forumeiros.com

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