Postar mensagem com ajax

3 participantes

Ir para baixo

Tópico resolvido Postar mensagem com ajax

Mensagem por luquinhasda10 17.01.21 8:53

Detalhes da questão


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

Descrição


Olá! Meu javascript informativo ao postar mensagem não funciona.

Código:

Código:
function(userConfig){var self=this;self.defaults={loading:'Postando sua mensagem...',success:'Mensagem postada com sucesso!',sceditorError:'O SCEditor não está disponível nessa página.',min:'Você deve postar uma mensagem com no mínimo 5 caracteres.',max:'Você deve postar uma mensagem com no máximo 50000 caracteres.',postAjax:'Não foi possível postar a sua mensagem, tendo em vista que um erro AJAX ocorreu.',getAjax:'A sua mensagem foi postada com sucesso, no entanto, não foi possível carregá-la aqui.'};self.config=$.extend({},self.defaults,userConfig)};Post.prototype.init=function(){var self=this;if(!self.isTopic()){return}self.styles();self.$form=$('#quick_reply');var $div=$(['<fieldset class="fa-posting-options">','  <label>','    <input type="checkbox" name="disable_bbcode" id="fa-disable_bbcode" class="fa-custom-input" />','    <span>Desabilitar BBCode</span>','  </label>','  <label>','    <input type="checkbox" name="disable_smilies" id="fa-disable_smilies" class="fa-custom-input" />','    <span>Desabilitar Smileys</span>','  </label>','  <label class="fa-only-mod">','    <input type="checkbox" name="attach_sig" id="fa-attach_sig" checked="checked" class="fa-custom-input" />','    <span>Anexar assinatura</span>','  </label>','  <label>','    <input type="checkbox" name="notify" id="fa-notify" checked="checked" class="fa-custom-input" />','    <span>Notificar respostas</span>','  </label>','</fieldset>'].join('\n')).hide().css('padding','15px').css('margin','10px 0').insertAfter(self.$form.find('input[type="submit"][name="post"]'));$div.find('label').each(function(){var $this=$(this);if(_userdata.user_level===1||_userdata.user_level===2)return;if($this.is('.fa-only-mod'))$this.remove()});$('<button>',{'class':'button2','text':'Opções de Postagem','type':'button'}).insertBefore($div).on('click',function(event){event.preventDefault();$div.stop().slideToggle(250)});self.$form.find('input[type="submit"][name="post"]').on('click',function(event){event.preventDefault();var $link=$(this);var data=self.getData();if(!data.status){self.alert(data.response,'error');return}if($link.is('.is-disabled')){return}$link.addClass('is-disabled').prop('disabled',true);self.alert(self.config.loading,'info');self.post(data,function(err){if(err){self.alert(err,'error');return}self.get(function(err,post){if(err){self.alert(err,'error');return}self.alert(self.config.success,'success');self.removeValue();self.border();$link.removeClass('is-disabled').prop('disabled',false);var $img=$('.post:last').find('.topic-title > img');$('.post').not(':last').each(function(){var $this=$(this);$this.find('.topic-title > img').attr('src',$img.attr('src'))})})})})};Post.prototype.isTopic=function(){return/^\/t(\d+)(p\d+-|-).*$/i.test(location.pathname)};Post.prototype.getData=function(){var self=this;if(!$.sceditor){return{status:false,response:self.config.sceditorError}}var $sceditor=$('#text_editor_textarea').sceditor('instance');if($sceditor.val().length<5){return{status:false,response:self.config.min}}if($sceditor.val().length>50000){return{status:false,response:self.config.max}}var $tid=$('[name="tid"]');var $icon=self.$form.find('[name="post_icon"]');var val=$icon.serialize().replace(/^.*=(\d+)$/i,'$1');var data={t:location.pathname.replace(/^\/t(\d+)(p\d+-|-).*$/i,'$1'),message:$sceditor.val(),tid:$tid.val()||'',mode:'reply',status:true,post:1};self.$form.find('.fa-custom-input').each(function(){var $this=$(this);if(!$this.prop('checked'))return;if(!$this.attr('name'))return;data[$this.attr('name')]=1});if($icon.length!==0){if(val!==''){console.log('[FQR] Ícone encontrado e incluído.');data.post_icon=val}else{console.log('[FQR] ͍cone encontrado e NÃO incluído.')}}else{console.log('[FQR] Não foi encontrado ícone.')}return data};Post.prototype.post=function(data,callback){var self=this;$.post('/post',data).done(function(){callback.apply(self)}).fail(function(){callback.apply(self,[self.config.postAjax])})};Post.prototype.get=function(callback){var self=this;var topic=location.pathname.replace(/^\/t(\d+)(p\d+-|-).*$/i,'$1');$.get('/viewtopic',{t:topic,view:'newest'}).done(function(context){var $post=$('.post:last',context);$post.hide().insertAfter('.post:last').slideDown();$('html, body').stop().animate({scrollTop:$post.offset().top-120});callback.apply(self)}).fail(function(){callback.apply(self,[self.config.getAjax])})};Post.prototype.border=function(){var $post=$('.post:last');var $user=$post.find('.postprofile strong > a > span[style]');if(!$user.length)return;if(!$user.css('color').length)return;$post.find('.inner').css('border-top-color',$user.css('color'))};Post.prototype.removeValue=function(){$('#text_editor_textarea').sceditor('instance').val('')};Post.prototype.alert=function(content,type){if(!type){type='success'}$('.fa-post-alert').remove();$('<div>',{'class':'fa-post-alert '+type,'html':content}).insertBefore('#textarea_content')};Post.prototype.styles=function(){$('<style>').text(['.fa-post-alert {','  width: 100%;','  margin: 10px auto 20px auto;','  background-color: #ddd;','  border: solid 1px #d0d0d0;','  color: #555;','  padding: 20px;','  border-radius: 3px;','  font-size: 16px;','  font-style: normal !important;','  box-sizing: border-box;','}','','.fa-post-alert.error {','  background-color: #d32f2f;','  border-color: #d32f2f;','  color: #fff;','}','','.fa-post-alert.success {','  background-color: #80c25e;','  border-color: #80c25e;','  color: #fff;','}','','.fa-post-alert.info {','  background-color: #00bcd4;','  border-color: #00bcd4;','  color: #fff;','}'].join('\n')).appendTo('head')};$(function(){(new window.FA.Ajax.Post(config)).init()})}(jQuery));

Agradeço desde já.
luquinhasda10
luquinhasda10
***

Membro desde : 04/07/2020
Mensagens : 167
Pontos : 236

https://ajuda.forumeiros.com/register?step=2&agreement=1&

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar mensagem com ajax

Mensagem por Strilk 17.01.21 9:10

Olá, bom dia. Bom, veja se esse javascript surte algum efeito desejado:
Código:
(function ($) {
  'use strict';
 
  var ajaxPostingConfig = {
    'minForPost': 15,
    'maxForPost': 15000
  };
 
  var ajaxPostingStyles = [
    '.ajax-alert {',
    '  width: 70%;',
    '  text-align: center;',
    '  margin: 20px auto;',
    '  color: #555;',
    '  background-color: transparent;',
    '  border: solid 1px #ddd;',
    '  border-bottom-width: 2px;',
    '  border-radius: 3px;',
    '  padding: 12px;',
    '  font-weight: 600;',
    '}',
    '',
    '.ajax-alert.ajax-alert-sucess {',
    '  border-color: #71be47!important;',
    '  color: #71be47!important;',
    '  box-shadow: inset 0 0 80px rgba(113, 190, 71, 0.3);',
    '}',
    '',
    '.ajax-alert.ajax-alert-danger {',
    '  color: #e6594c!important;',
    '  border-color: #e6594c!important;',
    '  box-shadow: inset 0 0 0 80px rgba(226, 99, 88, 0.15);',
    '}',
  ].join('\n');
 
  $(function () {
 
    var $postingResult = $([
      '<div class="posting-results">',
      '</div>',
    ].join('\n'))
      .insertBefore('.quick-reply')
    ;
 
    $('<style>', {
      type: 'text/css',
      text: ajaxPostingStyles
    }).appendTo('head');
 
    $('form#quick_reply')
      .on('submit', function (event) {
 
        if ($('textarea').val().length < ajaxPostingConfig.minForPost) {
          $postingResult
            .html([
              '<div class="ajax-alert ajax-alert-danger">',
              '  <div class="fa fa-exclamation-circle"></div>',
              '  <span>Para postar, sua mensagem deve ter no mínimo ' + ajaxPostingConfig.minForPost + ' caracteres.</span>',
              '</div>',
            ].join('\n'))
          ;
          return false;
        }
 
        if ($('textarea').val().length > ajaxPostingConfig.maxForPost) {
          $postingResult
            .html([
              '<div class="ajax-alert ajax-alert-danger">',
              '  <div class="fa fa-exclamation-circle"></div>',
              '  <span>Sua mensagem possui mais que o limite de caracteres (' + ajaxPostingConfig.maxForPost + ') para a postagem.</span>',
              '</div>',
            ].join('\n'))
          ;
          return false;
        }
 
        $.ajax({
 
          type: 'POST',
          url: '/post',
 
          data: {
            t: location.pathname.replace(/^\/t(\d+)-.*/gi, '$1'),
            mode: 'reply',
            tid: $('[name="tid"]').val(),
            post: 1,
            message: $('textarea').val(),
          },
 
          beforeSendo: function(context) {
            $postingResult
              .html([
              '<div class="ajax-alert ajax-alert-loading">',
                '  <div class="fa fa-circle-o-notch fa-spin"></div>',
                '  <span>Carregando...</span>',
                '</div>',
              ].join('\n'))
            ;
          },
 
          success: function(context) {
 
            var $link = $('a[href*="/viewtopic"]');
 
            $.get($link.attr('href'), function(context) {
              var $post = $('.post-wrap:last', context);
              $post
                .hide()
                  .insertAfter('.post-wrap:last')
                    .slideDown('fast', function() {
                      $('html, body').animate({
                          scrollTop: $('.post-wrap:last').offset().top
                      }, 500);
              });
            });
 
            // Adicionar alerta:
            $postingResult
              .html([
              '<div class="ajax-alert ajax-alert-sucess">',
                '  <div class="fa fa-check"></div>',
                '  <span>Mensagem postada com sucesso!</span>',
                '</div>',
              ].join('\n'))
            ;
 
            // Remover conteúdo do SCEditor:
            $('textarea').val('');
 
            console.info('[Postar em Ajax] {SUCESSO} ID do tópico onde fora postado o novo tópico: ' + location.pathname.replace(/^\/t(\d+)-.*/gi, '$1'));
 
          },
 
          fail: function(context) {
            $postingResult
              .html([
              '<div class="ajax-alert ajax-alert-danger">',
                '  <div class="fa fa-exclamation-circle"></div>',
                '  <span>Ocorreu um erro ao tentar postar sua mensagem. Tente esperar 10 segundos.</span>',
                '  <br />',
                '  <span>Caso o problema persista, acesse o Fórum dos Fóruns, e solicite ajuda.</span>',
                '</div>',
              ].join('\n'))
            ;
          },
        });
 
        event.preventDefault();
 
      })
    ;
  });
}(jQuery));

Observação: Marque ele em todos os tópicos e não se esqueça de fazer o seguinte: Entre no Painel de controle > Geral > Fórum > Segurança na opção "Desautorizar formulários não oficiais de postarem no fórum e enviar mensagens privadas" marque como "Não"!
Strilk
Strilk
****

Membro desde : 23/01/2018
Mensagens : 265
Pontos : 386

http://portal-grm.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Postar mensagem com ajax

Mensagem por RafaelS. 21.01.21 13:51

Tópico resolvido


Tópico arquivado por inatividade por parte do autor, marcado como resolvido por ter solução apropriada à questão.
avatar
RafaelS.
Membro Entusiasta

Membro desde : 26/04/2014
Mensagens : 5746
Pontos : 7156

http://techmais.forumeiros.com/

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

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