fixed error with FormData constructor

parent b1d5a356
......@@ -198,7 +198,7 @@ ETYPOS.prototype = {
/*Создание формы с данными*/
formData: function() {
if (!FormData()) {
if (! new FormData()) {
throw new Error("FormData() не поддерживается");
return false;
}
......
/* Плагин: сервис опечаток от компании Etersoft
* email: info@etersoft.ru
* автор: barbass@etersoft.ru
* дата: 2012-04-18
*/
function ETYPOS(options) {
/*//время последнего запроса
this.last_query_time = 0;
//сайт обработки опечаток
this.server_url = "http://barbass.pubsandbox.eterhost.ru/typos/server.php";
//текст ошибок
this.error = '';
//язык по умочланияю
this.default_language = 'ru';
//данные для отправки (сайт страницы, текст с ошибкой, комментарий, язык, броузер)
this.userdata = {
'url': '',
'text': '',
'comment': '',
'language': this.default_language,
'old_browser': 0,
};
this.language = [];
this.language['ru'] = {
'error_url': 'Не определен URL сайта',
'error_text': 'Текст не выделен',
'error_text_length': 'Длина текста должна быть от %s до %s символов (сейчас: %s)',
'error_comment': 'Длина комментария должна быть до 30 символов (сейчас: %s)',
'error_time_activity': 'Вы слишком часто отправляете данные',
'error_response': 'Ошибка при получении ответа',
'error_parse_reposnse': 'Ошибка при обработке ответа',
'error_post_data': 'Ошибка отправки данных. Повторите позже',
'error_userdata': 'userdata is not Object',
'text_post_data': 'Идет отправка данных...',
'text_success': 'Спасибо за ваше внимание!',
};*/
this.init(options);
}
ETYPOS.prototype = {
//время последнего запроса
last_query_time: 0,
//сайт обработки опечаток
server_url: "http://barbass.pubsandbox.eterhost.ru/typos/server.php",
//текст ошибок
error: '',
//язык по умочланияю
default_language: 'ru',
//данные для отправки (сайт страницы, текст с ошибкой, комментарий, язык, броузер)
userdata: {
'url': '',
'text': '',
'comment': '',
'language': this.default_language,
'old_browser': 0,
},
language: {
'ru': {
'error_url': 'Не определен URL сайта',
'error_text': 'Текст не выделен',
'error_text_length': 'Длина текста должна быть от %s до %s символов (сейчас: %s)',
'error_comment': 'Длина комментария должна быть до 30 символов (сейчас: %s)',
'error_time_activity': 'Вы слишком часто отправляете данные',
'error_response': 'Ошибка при получении ответа',
'error_parse_reposnse': 'Ошибка при обработке ответа',
'error_post_data': 'Ошибка отправки данных. Повторите позже',
'error_userdata': 'userdata is not Object',
'text_post_data': 'Идет отправка данных...',
'text_success': 'Спасибо за ваше внимание!',
}
},
init: function(options) {
this.options = (options) ? options : {};
if (this.options['server_url']) {
this.server_url = this.options['server_url'];
}
if (this.options['language']) {
if (this.language[this.options['language']]) {
this.default_language = this.options['language'];
this.userdata['language'] = this.default_language;
}
}
this.request = new (window.XDomainRequest || window.XMLHttpRequest);
this.userdata['old_browser'] = (this.request.withCredentials == undefined) ? 1 : 0;
},
/*Получаем выделенный текст*/
getSelectText: function() {
return (window.getSelection()) ? String(window.getSelection()) : '';
},
/*Скрытие/показ окна*/
controlPanel: function() {
(document.querySelector(".e_typos_div").style.display == "block") ? this.closeWindow() : this.openWindow();
},
/*Открытие окна*/
openWindow: function() {
var main_div = document.querySelector(".e_typos_div");
//Определяем на какой позиции X, Y всплывет элемент
var top = window.pageYOffset + window.innerHeight/3;
var left = window.pageXOffset + window.innerWidth/3;
main_div.style.top = top + "px";
main_div.style.left = left + "px";
main_div.style.display = "none";
main_div.querySelector(".e_typos_comment").value = "";
main_div.querySelector(".e_typos_message").innerHTML = "";
main_div.style.display = "block";
},
/*Закрытия окна*/
closeWindow: function() {
document.querySelector(".e_typos_div").style.display = "none";
},
/*Проверка данных перед отправкой*/
validateData: function() {
if (typeof(this.userdata) != 'object') {
throw new Error(this.language[this.default_language]['error_userdata']);
return false;
}
if (this.userdata['url'] == '') {
this.error = this.language[this.default_language]['error_url'];
return false;
}
if (!this.userdata['language']) {
this.userdata['language'] = this.default_language;
}
if (!this.userdata['text']) {
this.error = this.language[this.default_language]['error_text'];
return false;
}
if (this.userdata['text'].length < 5 || this.userdata['text'].length > 30) {
this.error = "Выделенный текст должен быть длиной от 5 до 30 символов (сейчас: "+this.userdata['text'].length+")";
return false;
}
if (this.userdata['comment'].length > 30) {
this.error = "Комментарий должен быть длиной до 30 символов (сейчас: "+this.userdata['comment'].length+")";
return false;
}
return true;
},
/*Сбор данных*/
postData: function() {
this.userdata['url'] = window.location.href;
this.userdata['text'] = this.getSelectText();
this.userdata['comment'] = (document.querySelector(".e_typos_div .e_typos_comment")) ? document.querySelector(".e_typos_div .e_typos_comment").value : '';
try {
if (!this.validateData()) {
this.printMessage('error', this.error);
return false;
}
} catch(error) {alert(error);
this.printMessage('error', error.message);
return false;
}
//Если не поддерживаются кроссдоменные запросы
if (this.userdata['old_browser']) {
this.ajaxQueryOldBrowser();
} else {
this.ajaxQuery();
}
},
/*Создание формы с данными*/
formData: function() {
if (!FormData()) {
throw new Error("FormData() не поддерживается");
return false;
}
var form_data = new FormData();
for(var key in this.userdata) {
form_data.append(key, this.userdata[key]);
}
return form_data;
},
/*Отправка данных на старых броузерах*/
ajaxQueryOldBrowser: function() {
var this_object = this;
window.open(this.server_url+'?old_browser='+encodeURIComponent(this.userdata['old_browser'])+'&url='+encodeURI(this.userdata['url'])+'&comment='+encodeURIComponent(this.userdata['comment'])+'&text='+encodeURIComponent(this.userdata['text']+'&language='+encodeURIComponent(this.userdata['language'])), '_blank');
window.parent.focus();
this.printMessage("success", this.language[this.default_language]['text_success']);
window.setTimeout(function() {this_object.closeWindow();}, 4000);
return true;
},
/*Отправка запроса*/
ajaxQuery: function() {
var this_object = this;
try {
var form_data = this.formData();
} catch (error) {
this.printMessage("error", error.message);
return false;
}
if (!this.checkTime()) {
this.printMessage("error", this.language[this.default_language]['error_time_activity']);
return false;
} else {
this.last_query_time = this.getTime();
this.setStorage("etersoft_typos/"+window.location.hostname+"", this.getTime());
}
this.printMessage("attention", this.language[this.default_language]['text_post_data']);
this.request.open("POST", this.server_url, true);
this.request.onload = function() {
try {
var response = window.JSON.parse(this_object.request.responseText);
if (response['success'] && response['message']) {
if (response['success'] == 'true') {
var success = 'success';
} else {
var success = 'error';
}
this_object.printMessage(success, response['message']);
} else {
this_object.printMessage('attention', this.language[this.default_language]['error_response']);
}
} catch (e) {
this_object.printMessage('error', this.language[this.default_language]['error_response_parse']);
}
};
this.request.onerror = function() {
this_object.printMessage("error", this.language[this.default_language]['error_post_data']);
};
this.request.send(form_data);
},
/*Печатаем сообщение пользователю в окно*/
printMessage: function(status, text) {
document.querySelector(".e_typos_div .e_typos_message").innerHTML = "<span class='"+status+"'>"+text+"</span>";
},
//Вывод текста, выделенного пользователем
printUserText: function(text) {
document.querySelector(".e_typos_div .e_typos_user_text").style.display = "block";
document.querySelector(".e_typos_div .e_typos_user_text").innerHTML = "Ваш текст: "+text;
},
/*Проверяем время, прошедшее с последнего отправления данных*/
checkTime: function() {
var prev_time = (parseInt(this.getStorage("etersoft_typos/"+window.location.hostname))) ? parseInt(this.getStorage("etersoft_typos/"+window.location.hostname)) : parseInt(this.last_query_time);
if (isNaN(prev_time)) {
return true;
}
if ( (this.getTime() - prev_time) < 60000) {
return false;
}
return true;
},
/*Получаем текущее время*/
getTime: function() {
return new Date().getTime();
},
/*Получаем из sessionStorage данные*/
getStorage: function(key) {
if (window['sessionStorage']) {
return (sessionStorage.getItem(key)) ? sessionStorage.getItem(key) : false;
} else {
return false;
}
},
/*Устанавливаем в sessionStorage данные*/
setStorage: function(key, data) {
if (window['sessionStorage']) {
sessionStorage.setItem(key+"", data);
return true;
}
return false;
}
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment