Postar em ajax com avisos

5 participantes

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

Tópico resolvido Postar em ajax com avisos

Mensagem por Eduardo Lima 08.03.18 17:50

Detalhes da questão


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

Descrição


Seguinte, tenho este código que funciona na versão atual do meu fórum (phpBB3)
--
Mas ele não funciona na versão ModernBB... no console aparece o seguinte erro: Uncaught TypeError: Cannot read property 'toLowerCase' of undefined

Teria como fazer alguma modificação para que ele resultasse na versão ModernBB?


Última edição por Eduardo Lima em 09.03.18 23:28, editado 1 vez(es)
avatar

Eduardo Lima
****

Membro desde : 07/03/2016
Mensagens : 243
Pontos : 380

http://www.brasilplayforever.com/forum

Ir para o topo Ir para baixo

Admineiro

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por tikky 08.03.18 17:57

Olá,
tente usar este JS, editado pelo @Kyo Panda

Código:
/* globals jQuery*/
 
/**
 * Código: Postar mensagem sem refresh
 * Versão: 1.0
 * Autor: Daemon
 * Data: 17/09/2016
 */
 
(function($) {
  'use strict';
 
  var bg = function() {
    $('div.postbody').each(function() {
      var node;
      var $post = $('.post-entry', this);
      var $content = $('.content', this);
 
      if ($post.length) {
        node = $post[0];
      } else if ($content.length) {
        node = $content[0];
      }
 
      while (node.nodeType !== 3 && node.hasChildNodes()) {
        node = node.childNodes[0];
      }
 
      if (node.nodeType !== 3) {
        return;
      }
 
      if (node.nodeValue.substr(0, 8) !== '[postbg=') {
        return;
      }
 
      var matches = node.nodeValue.match(/^\[postbg=([^\]]*)\]/);
 
      if (!matches) return;
 
      $(this)
        .closest('div.post-container, div.post, td.row1, td.row2,div.postmain')
        .addClass('postbg')
        .css('background-image', 'url(' + matches[1] + ')');
 
      node.nodeValue = node.nodeValue.replace(/^\[postbg=[^\[]*\]\n?/, '');
 
      if (
        !node.nodeValue
        && node.nextSibling
        && node.nextSibling.nodeType === 1
        && node.nextSibling.tagName === 'BR'
      ) {
        $(node.nextSibling).remove();
      }
    });
  };
 
  $(function() {
    $('body').append([
      '<style>' +
      '.alert-success, .alert-error {',
      '    -moz-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;',
      '    -webkit-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;',
      '    background: url(http://imgur.com/J3aqwYE.png) repeat-x 0 0;',
      '    box-shadow: rgba(0,0,0,0.1) 0 1px 3px;',
      '    display: block;',
      '    font-size: 12px;',
      '    line-height: 1.6;',
      '    padding: 10px;',
      '    text-shadow: 0 1px 0 rgba(255,255,255,0.5);',
      '}',
      '.alert-success {',
      '    background-color: #cde3a4;',
      '    border: 1px solid #a8c471;',
      '    color: #436500;',
      '}',
      '.alert-error {',
      '    background-color: #ffbdbd;',
      '    border: 1px solid #d8aba7;',
      '    color: #92463f;',
      '}',
      '</style>',
    ].join('\n'));
 
    var hrefResposta = $('a[href^="/post?t="]').attr('href');
    var $form = $('#quick_reply');
 
    $form.prepend('<div id="resultados_ajax"></div>');
 
    $form.on('submit', function(event) {
      event.preventDefault();
 
      var resAjax = $('#resultados_ajax'); // Elemento resultados_ajax
      var textEditorVal = $('textarea').sceditor('instance').val(); // Valor do editor
      var min = 10; // Mínimo de caracteres para o post
      var max = 15000; // Máximo de caracteres para o post (Não ultrapasse o valor limite estipulado pela forumeiros)
 
      if (textEditorVal.length < min) {
        resAjax
          .html('Digite pelo menos ' + min + ' caracteres para enviar o post')
          .attr('class', 'alert-error');
 
        return;
      }
 
      if (textEditorVal.length > max) {
        resAjax
          .html('Seu post ultrapassou o limite de ' + max + ' caracteres')
          .attr('class', 'alert-error');
 
        return;
      }
 
      /** BEGIN Fix background image */
 
      var image = $('#quick_reply .sceditor-container')
        .css('background-image')
        .match(/url\(('|")?([^'"]+)('|")?\)/i);
 
      if (image && image.length === 4) {
        textEditorVal = '[postbg=' + image[2] + ']' + textEditorVal;
      }
 
      /** END Fix background image */
 
      $('input[type="submit"]').attr('disabled', true);
 
      var parametros = $form.serialize();
 
      $.ajax({
        type: 'POST',
        url: hrefResposta,
        data: parametros + '&message=' + textEditorVal + '&post=1',
        beforeSend: function(objeto) {
          resAjax.html('Carregando...').attr('class', false);
        },
        success: function(dados) {
          var href = $('a[href^="/viewtopic"]', dados).attr('href');
 
          $.get(href, function(e) {
            $('.post:last', e).hide().insertAfter('.post:last').slideDown('fast', function() {
              $('html, body').animate({
                scrollTop: $('.post:last').offset().top,
              }, 500);
              bg();
            });
          });
 
          resAjax.html('Postado com sucesso!').attr('class', 'alert-success');
 
          $('input[type="submit"]').attr('disabled', false);
          $('textarea').sceditor('instance').val('');
        },
      });
    });
  });
}(jQuery));
tikky

tikky
Admineiro
Admineiro

Membro desde : 13/01/2017
Mensagens : 7828
Pontos : 9068

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Eduardo Lima 08.03.18 17:59

Não resultou, indica o mesmo erro ainda.
avatar

Eduardo Lima
****

Membro desde : 07/03/2016
Mensagens : 243
Pontos : 380

http://www.brasilplayforever.com/forum

Ir para o topo Ir para baixo

Membro Entusiasta

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Luiz 08.03.18 22:31

Boa noite,

[...] Mas ele não funciona na versão ModernBB... no console aparece o seguinte erro: Uncaught TypeError: Cannot read property 'toLowerCase' of undefined [...]

O código em questão não apresenta nenhum erro relacionado a esse método, tanto é que o método .toLowerCase() não é usado nenhuma vez no código. Provavelmente é erro de outro JavaScript.

Queira checar, por gentileza. Feliz

o/
Luiz

Luiz
Membro Entusiasta
Membro Entusiasta

Membro desde : 23/04/2016
Mensagens : 6645
Pontos : 7451

https://luizfelipe.dev

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Eduardo Lima 08.03.18 22:54

Código:
/**
 * Melhorar o botão CODE no SCEditor.
 *
 * @author: Luiz~
 * @see: <a href="http://ajuda.forumeiros.com/">Fórum dos Fóruns</a>
 * @licence: MIT
 */
(function ($) {
  'use strict';
 
  $(window).on('load', function () {
 
    $('.sceditor-button-code').css('display', 'none');
    var $faCode = $([
      '<a class="sceditor-button sceditor-button-c0de" data-sceditor-command="fa-code" ' +
      '  unselectable="on" title="Code">',
      '  <div unselectable="on" style="background-position: 0 -544px; filter: none!important; ' +
      '  opacity: 1!important;">Code</div>',
      '</a>',
    ].join('\n'))
      .on('click', function () {
        $('.sceditor-fa-code-drop')
          .css({
            left: $faCode.offset().left + 'px',
            top: $faCode.offset().top + 'px'
          })
            .toggle();
      })
        .insertAfter('.sceditor-button-code')
    ;
 
    $([
      '<div class="sceditor-dropdown sceditor-fa-code-drop">',
      '  <div>',
      '    <label for="txt" unselectable="on">Cole o código:</label>',
      '    <textarea id="fa-code-content" value="" cols="20" rows="7" ' +
      '    style="min-width: 160px; width: 160px;"></textarea>',
      '  </div>',
      '  <div>',
      '    <input type="button" class="button" id="fa-code-btn" value="Inserir código">',
      '  </div>',
      '</div>',
    ].join('\n'))
      .css({
        marginTop: '28px',
        display: 'none'
      })
        .appendTo('body')
    ;
 
    var $sceditor = $("#text_editor_textarea");
    $('#fa-code-btn').on('click', function () {
      $sceditor
        .sceditor('instance')
          .insertText('[code]' + $('#fa-code-content').val() + '[/code]')
      ;
      $('.sceditor-fa-code-drop').toggle();
      $('#fa-code-content').val('');
    });
  });
}(jQuery));
É este código aqui que peguei deste tópico: https://ajuda.forumeiros.com/t108903-tutorial-melhoria-da-tag-code-no-sceditor

Eu desativo ele e o post em ajax volta a funcionar... há algo de errado nele?
avatar

Eduardo Lima
****

Membro desde : 07/03/2016
Mensagens : 243
Pontos : 380

http://www.brasilplayforever.com/forum

Ir para o topo Ir para baixo

Membro Entusiasta

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Luiz 08.03.18 23:34

Esse código também não usa o método .toLowerCase().

Tente trocá-lo por este e veja se resolve:
Código:
/**
 * Melhorar o botão CODE no SCEditor.
 *
 * @author: Luiz~
 * @see: <a href="http://ajuda.forumeiros.com/">Fórum dos Fóruns</a>
 * @licence: MIT
 */
(function ($) {
  'use strict';
 
  $(window).on('load', function () {
    if (! $.sceditor) return;
 
    $('.sceditor-button-code').css('display', 'none');
    var $faCode = $([
      '<a class="sceditor-button sceditor-button-c0de" data-sceditor-command="fa-code" ' +
      '  unselectable="on" title="Code">',
      '  <div unselectable="on" style="background-position: 0 -544px; filter: none!important; ' +
      '  opacity: 1!important;">Code</div>',
      '</a>',
    ].join('\n'))
      .on('click', function () {
        $('.sceditor-fa-code-drop')
          .css({
            left: $faCode.offset().left + 'px',
            top: $faCode.offset().top + 'px'
          })
            .toggle();
      })
        .insertAfter('.sceditor-button-code')
    ;
 
    $([
      '<div class="sceditor-dropdown sceditor-fa-code-drop">',
      '  <div>',
      '    <label for="txt" unselectable="on">Cole o código:</label>',
      '    <textarea id="fa-code-content" value="" cols="20" rows="7" ' +
      '    style="min-width: 160px; width: 160px;"></textarea>',
      '  </div>',
      '  <div>',
      '    <input type="button" class="button" id="fa-code-btn" value="Inserir código">',
      '  </div>',
      '</div>',
    ].join('\n'))
      .css({
        marginTop: '28px',
        display: 'none'
      })
        .appendTo('body')
    ;
 
    var $sceditor = $("#text_editor_textarea");
    $('#fa-code-btn').on('click', function () {
      $sceditor
        .sceditor('instance')
          .insertText('[code]' + $('#fa-code-content').val() + '[/code]')
      ;
      $('.sceditor-fa-code-drop').toggle();
      $('#fa-code-content').val('');
    });
  });
}(jQuery));

Pensativo
Luiz

Luiz
Membro Entusiasta
Membro Entusiasta

Membro desde : 23/04/2016
Mensagens : 6645
Pontos : 7451

https://luizfelipe.dev

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Eduardo Lima 08.03.18 23:46

Dei uma pesquisada nos códigos que utilizam este método e achei um, mas mesmo eu desativando-o, o código do post em ajax não funciona... só funciona se desativo o outro código da tag CODE.

Vou te passar por MP o fórum onde estou fazendo os testes, então você pode ver se encontra algo.


Obs: O código que você passou não resolveu o problema.


Última edição por Eduardo Lima em 09.03.18 17:53, editado 1 vez(es)
avatar

Eduardo Lima
****

Membro desde : 07/03/2016
Mensagens : 243
Pontos : 380

http://www.brasilplayforever.com/forum

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Chanp 09.03.18 3:29

Olá,
Vamos tentar da seguinte forma.

Aceda à:

Painel de Controle Seta Geral Seta Segurança

Procure pela opção:
"Desautorizar formulários não oficiais de postarem no fórum e enviar mensagens privadas :"

Opte pela opção Não.
Em seguida, salve as novas configurações.

Resulta?
o/
Chanp

Chanp
Super Membro

Membro desde : 04/01/2018
Mensagens : 1072
Pontos : 1191

https://2forum2.forumeiros.com/

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Eduardo Lima 09.03.18 23:28

Pode fechar o tópico.


Obs: O botão de resolvido não está funcionado, apertei mais de 10x e não troca o ícone.
avatar

Eduardo Lima
****

Membro desde : 07/03/2016
Mensagens : 243
Pontos : 380

http://www.brasilplayforever.com/forum

Ir para o topo Ir para baixo

Ajudeiro

Tópico resolvido Re: Postar em ajax com avisos

Mensagem por Fraise 09.03.18 23:29

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

Fraise
Ajudeiro
Ajudeiro

Membro desde : 26/06/2015
Mensagens : 6566
Pontos : 8050

https://ajuda.forumeiros.com/ https://twitter.com/@FraiseFdF

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