Postar mensagem com ajax
3 participantes
Fórum dos Fóruns :: Ajuda e atendimento ao utilizador :: Questões sobre códigos :: Questões resolvidas sobre códigos Javascript e jQuery
Página 1 de 1 • Compartilhe
Postar mensagem com ajax
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á.
Re: Postar mensagem com ajax
Olá, bom dia. Bom, veja se esse javascript surte algum efeito desejado:
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"!
- 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"!
Re: Postar mensagem com ajax
Tópico resolvidoTópico arquivado por inatividade por parte do autor, marcado como resolvido por ter solução apropriada à questão. |
Tópicos semelhantes
» Postar em AJAX com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
» Postar em ajax com avisos
Fórum dos Fóruns :: Ajuda e atendimento ao utilizador :: Questões sobre códigos :: Questões resolvidas sobre códigos Javascript e jQuery
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos