Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stage('Обработка и отправка постов на сервер', 'postsumbit', Stage.DOMREADY, function(){
- if(!window.thread.board) return; //не запускаем на главной
- var request;
- var busy = false;
- var valid = false;
- var $qr = $('#qr');
- var $forms = $('#postform,#qr-postform');
- var $submit_buttons = $('#qr-submit,#submit');
- //todo просмотреть, можно ли ускорить кешируя ссылки на $("qr-blabla") в переменную
- var sendForm = function(form) {
- //@сафаридауны
- if(FormFiles.vip) $('.filer__input').val('');
- var formData = new FormData(form);
- busy = true;
- //эта пипка для подмены пикч, если из мультиселекта было что-то удалено
- if(FormFiles.vip) {
- if (typeof formData.delete === "function") formData.delete('formimages[]');
- for(var i=0, len=FormFiles.filtered.length; i<len; i++) {
- formData.append('formimages[]', FormFiles.filtered[i]);
- }
- }
- // var keys = [], vals = [];
- // for (var value of formData.values()) {
- // vals.push(value);
- // }
- // for (var key of formData.keys()) {
- // keys.push(key) ;
- // }
- // for(let i = 0; i < keys.length; i++) {
- // console.log(keys[i] + ': ' + vals[i]);
- // }
- request = $.ajax({
- url: '/makaba/posting.fcgi?json=1', //Server script to process data
- type: 'POST',
- dataType: 'json',
- xhr: function() { // Custom XMLHttpRequest
- var myXhr = $.ajaxSettings.xhr();
- if(myXhr.upload){ // Check if upload property exists
- myXhr.upload.addEventListener('progress', progressHandling, false); // For handling the progress of the upload
- }
- return myXhr;
- },
- //Ajax events
- success: on_send_success,
- error: on_send_error,
- // Form data
- data: formData,
- //Options to tell jQuery not to process data or worry about content-type.
- cache: false,
- contentType: false,
- processData: false
- });
- renderSending();
- };
- window.sendForm = sendForm;
- var renderSending = function(){
- /*var inputs = forms.find('input,select,textarea').not('[type=submit]');
- inputs.attr('disabled','disabled');*/
- $submit_buttons.attr('value', 'Отправка...');
- };
- var renderSendingDone = function(){
- /*var inputs = forms.find('input,select,textarea').not('[type=submit]');
- inputs.removeAttr('disabled');*/
- $submit_buttons.attr('value', 'Отправить');
- };
- var progressHandling = function(e) {
- var percent = 100/e.total*e.loaded;
- if(percent >= 99) return $submit_buttons.attr('value', 'Обработка...');
- var bpercent = ( (Math.round(percent*100))/100 ).toString().split('.');
- if(!bpercent[1]) bpercent[1] = 0;
- bpercent = (bpercent[0].length==1?'0'+bpercent[0]:bpercent[0]) + '.' + (bpercent[1].length==1?bpercent[1]+'0':bpercent[1]);
- $('#qr-progress-bar').attr('value', e.loaded).attr('max', e.total);
- $submit_buttons.attr('value', bpercent + '%');
- };
- var on_send_error = function(request) {
- if(request.statusText == 'abort') {
- $alert('Отправка сообщения отменена');
- }else{
- $alert('Ошибка постинга: ' + request.statusText);
- }
- on_complete();
- };
- var on_send_success = function(data) {
- if(data.Error) {
- if(data.Id) {
- $alert(data.Reason + '<br><a href="/ban?Id=' + data.Id + '" target="_blank">Подробнее</a>', 'wait');
- }else{
- $alert('Ошибка постинга: ' + (data.Reason || data.Error));
- }
- }else if(data.Status && data.Status == 'OK') {
- $alert('Сообщение успешно отправлено');
- var current_posts;
- var num;
- //Favorites если тред && other.autowatchmyposts, то авто-подпись на пост
- if(Store.get('other.autowatchmyposts', true) && window.thread.id) {
- num = window.thread.id;
- if(!Favorites.isFavorited(window.thread.id)) {
- Favorites.add(num);
- }
- current_posts = Store.get('favorites.' + num + '.posts', false);
- if(current_posts) {
- Store.set('favorites.' + num + '.posts', current_posts.concat(data.Num));
- } else {
- Store.set('favorites.' + num + '.posts', [data.Num]);
- }
- }
- //сохранить номер поста и тред, если включа настройка higlight_myposts
- if(Store.get('other.higlight_myposts',true)) {
- num = window.thread.id; //по хорошему это не сработает если постилось в тред с нулевой при включенной опции "не перенаправлять в тред"
- current_posts = Store.get('myposts.' + window.thread.board + '.' + num, []);
- Store.set('myposts.' + window.thread.board + '.' + num, current_posts.concat(data.Num));
- }
- if(Store.get('other.qr_close_on_send', true)) $('#qr').hide();
- if(!window.thread.id) { //костыль
- var behavior = Store.get('other.on_reply_from_main', 1);
- if(behavior == 1) {
- window.location.href = '/' + window.board + '/res/' + $('#qr-thread').val() + '.html#' + data.Num;
- }
- }else{
- var highlight_num = data.Num;
- PostF.updatePosts(function(data){
- if(Favorites.isFavorited(window.thread.id)) Favorites.setLastPost(data.data, window.thread.id);
- Post(highlight_num).highlight();
- //higlight_myposts
- //if(Store.get('other.higlight_myposts', true)) Post(highlight_num).highlight_myposts();
- });
- }
- resetInputs();
- }else if(data.Status && data.Status == 'Redirect') {
- var num = data.Target;
- $alert('Тред №' + num + ' успешно создан');
- //костылик, при создании треда для автодобавления в избранное, если есть настройка autowatchmythreads
- if(Store.get('other.autowatchmythreads', false)) Store.set('other.mythread_justcreated', true);
- window.location.href = '/' + window.board + '/res/' + num + '.html';
- }else{
- $alert('Ошибка постинга');
- }
- on_complete();
- };
- var on_complete = function() {
- busy = false;
- renderSendingDone();
- };
- var resetInputs = function() {
- $('#subject').val('');
- $('#shampoo, #qr-shampoo').val('');
- $('.postform__len').html(window.thread.max_comment);
- if(window.FormFiles) window.FormFiles.reset();
- $('.oekaki-image').val(''); //очистка оекаки
- $('.oekaki-metadata').val(''); //очистка оекаки
- $('.oekaki-clear').prop('disabled', true);
- $('.message-sticker-preview').html(''); // sticker
- $('.sticker-input').remove();
- };
- var saveToStorage = function() {
- Store.set('thread.postform.name', $('#name').val());
- Store.set('thread.postform.email', $('#e-mail').val());
- var icon = $('.anoniconsselectlist').val();
- if(icon) Store.set('thread.postform.icon.' + window.thread.board, icon);
- };
- var validator_error = window.postform_validator_error = function(id, msg) {
- var $el = $('#' + id);
- var $qr_el = $('#qr-' + id);
- if(msg) $alert(msg);
- $el.addClass('error');
- $qr_el.addClass('error');
- (activeForm.attr('id') == 'qr-shampoo') ? $qr_el.focus() : $el.focus();
- };
- var validateForm = function(is_qr) {
- var $c_id = $('.captcha__key');
- var len = unescape(encodeURIComponent($('#shampoo').val())).length;
- var max_len = parseInt(window.thread.max_comment);
- if($('input[name=thread]').val()=='0' && window.FormFiles && window.FormFiles.max && !window.FormFiles.count && !is_qr && !window.thread.enable_oekaki) return $alert('Для создания треда загрузите картинку');
- if($('input[name=thread]').val()=='0' && $('input[name=subject]').val()=='' && board == 'news') return $alert('Для создания треда заполните поле "Тема"'); //вкл. обязательное поле "тема" в news
- if($('input[name=thread]').val()=='0' && $('input[name=tags]').val()=='' && ( board == 'vg' || board == 'tv' )) return $alert('Для создания треда заполните поле "Теги"'); //вкл. обязательное поле "теги" в vg
- if(!len && window.FormFiles && window.FormFiles.max && !window.FormFiles.count && !FormFiles.oekaki && !FormFiles.sticker) return validator_error('shampoo', 'Вы ничего не ввели в сообщении'); //не проверять оекаки
- if(len > max_len) return validator_error('shampoo', 'Максимальная длина сообщения ' + max_len + ' <b>байт</b>, вы ввели ' + len);
- return true;
- };
- var renderCaptchaResolve = function(){
- /*var inputs = forms.find('input,select,textarea').not('[type=submit]');
- inputs.attr('disabled','disabled');*/
- $submit_buttons.attr('value', 'Капча...');
- };
- $forms.on('submit', function(){
- if(typeof FormData == 'undefined') return; //старый браузер
- if(busy) {
- request.abort();
- return false;
- }
- window.FormFiles.appendToForm(this);
- var form = $(this);
- saveToStorage();
- //if(validateForm(form.attr('id') == 'qr-postform')) sendForm(form[0]);
- //@todo
- //господи Иисуси это надо поправить как-нибудь...
- var widgetQr;
- var renderCaptcha = function() {
- var key = window.config.captchaKey;
- if(key == -1 || key == -2) {
- try {
- if(validateForm(form.attr('id') == 'qr-postform')) sendForm(form[0]);
- //sendForm(form[0]);
- } catch(e) {
- console.log(e);
- $alert('При отправке поста с пасскодом возникла ошибка, проверьте консоль на наличие лога; key - ' + key);
- return false;
- }
- }else{
- $('.captcha__key').val(key);
- if ( $('#captcha-widget').html()=='' ) {
- //проверка капчи до отправки файлов
- //@todo
- renderCaptchaResolve();
- widgetQr = grecaptcha.render('captcha-widget', {
- 'sitekey' : key,
- 'theme' : 'light',
- 'size' : 'invisible',
- 'callback': function(r) {
- //var r = grecaptcha.getResponse();
- var e = document.getElementById('captcha-widget-main');
- e.innerHTML = '';
- var input = document.createElement("input");
- input.type = 'hidden';
- input.name = 'g-recaptcha-response';
- input.value = r;
- e.appendChild(input);
- //sendForm(form[0]);
- if(validateForm(form.attr('id') == 'qr-postform')) sendForm(form[0]);
- },
- });
- grecaptcha.execute(widgetQr);
- } else {
- renderCaptchaResolve();
- grecaptcha.reset(widgetQr);
- grecaptcha.execute(widgetQr);
- }
- }
- }
- //if(Store.get('other.captcha_provider','google') == '2chaptcha') {
- // sendForm(form[0]);
- //} else if(validateForm(form.attr('id') == 'qr-postform')) {
- renderCaptcha();
- //}
- return false;
- });
- $('#qr-cancel-upload').click(function(){
- request.abort();
- });
- resetInputs();
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement