if (!('eRegistratorLib' in window)) {window['eRegistratorLib'] = {};}
window.eRegistratorLib.scrPhoneCodes = {
tpl: {
code: `
`,
},
url: 'https://www.srv4you.ru/api/v1/phone_codes/ajax/ajax.php',
init: function(targetId, data, module){
},
getCodes: function(par, callback, callbackError){
let formData = new FormData();
formData.append('action', 'getCodes');
formData.append('code', par['code'].replace(/[^0-9]/gim, ''));
this.go(formData, (result) => {
if (
('code' in result)
&& (result.code == '200')
){
if (callback) {callback(result);}
} else {
if (callbackError) {callbackError(result);}
}
},
(error) => {
if (
(error)
&& ('ERRORS' in error)
&& ('length' in error.ERRORS)
&& (error.ERRORS.length > 0)
) {
showWrapWin.show({
content: 'Ошибка!
',
error: '' + error.ERRORS.join('') + '',
}, 'middle');
}
console.log(error);
});
},
verifyCode: function(par, callback, callbackError){
let formData = new FormData();
formData.append('action', 'verifyCode');
formData.append('code', par['code'].replace(/[^0-9]/gim, ''));
this.go(formData, (result) => {
if (
('code' in result)
&& (result.code == '200')
){
if (callback) {callback(result);}
} else {
if (callbackError) {callbackError(result);}
}
},
(error) => {
if (
(error)
&& ('ERRORS' in error)
&& ('length' in error.ERRORS)
&& (error.ERRORS.length > 0)
) {
showWrapWin.show({
content: 'Ошибка!
',
error: '' + error.ERRORS.join('') + '',
}, 'middle');
}
console.log(error);
});
},
binding: function(element) {
let that = window.eRegistratorLib.scrPhoneCodes;
if (!element) return false;
if (document.getElementById('list_' + element.id)) return false;
element.insertAdjacentHTML('afterend', that.tpl.code
.replace(/#id#/gim, element.id)
);
let elementList = document.getElementById('list_' + element.id);
if (!elementList) return false;
element.addEventListener('input', (ev) => {
let code = element.value;
if (
(code.length > 0)
&&(code.replace(/[^0-9]/gim, '') == code)
) {
that.getCodes({code: code}, (res) => {
console.log(res);
if (
(!('result' in res))
||(res.result.length < 1)
) {
elementList.style.display = 'none';
return false;
}
elementList.style.display = 'block';
elementList.innerHTML = ``
+ res.result.reduce((akk, cur) => {
return akk
+ '- '
+ cur.code
+ ' - '
+ cur.citi
+ '
';
}, '')
+ '
'
;
});
} else {
elementList.style.display = 'none';
}
});
element.addEventListener('keydown', (ev) => {
let key = ev.keyCode;
if (elementList) {
if (key) {
if (key == 38) {
let iSelected = elementList.querySelector('li.iselect');
console.log('iSelected = ');
console.log(iSelected);
if (iSelected) {
let prevElement = iSelected.previousElementSibling;
if (prevElement && prevElement.tagName == 'LI') {
prevElement.classList.add('iselect');
iSelected.classList.remove('iselect');
}
} else {
let first = elementList.querySelector('li');
if (first) {
first.classList.add('iselect');
}
}
}
if (key == 40) {
let iSelected = elementList.querySelector('li.iselect');
if (iSelected) {
let afterElement = iSelected.nextElementSibling;
if (afterElement && afterElement.tagName == 'LI') {
afterElement.classList.add('iselect');
iSelected.classList.remove('iselect');
}
} else {
let first = elementList.querySelector('li');
if (first) {
first.classList.add('iselect');
}
}
}
if (key == 13) {
let iSelected = elementList.querySelector('li.iselect');
if (iSelected) {
iSelected.click();
}
}
}
}
});
element.addEventListener('blur', (ev) => {
if (elementList) {
window.setTimeout(()=>{
elementList.style.display = 'none';
}, 300);
}
});
},
clickList: function(ev, t) {
let that = window.eRegistratorLib.scrPhoneCodes;
let element = ev.srcElement;
if (element.tagName == 'LI') {
let code = element.dataset.code;
let forElement = t.dataset.forElement;
if (forElement && code) {
let forElementDom = document.getElementById(forElement);
if (forElementDom) {
forElementDom.value = code;
let listElementDom = document.getElementById('list_' + forElement);
if (listElementDom) {
listElementDom.style.display = 'none';
}
}
}
}
},
go: async function(formData, callback, callbackError){
let url = this.url;
try {
const res = await fetch(url,
{
method: 'POST',
body: formData,
cache: 'no-cache',
}
);
const contentType = res.headers.get('content-type');
if (!contentType || !contentType.includes('application/json')) {
throw new TypeError("Ошибка JSON!");
}
if (!res.ok) {
throw new TypeError("Запрос завершился с ошибкой!");
}
let data = await res.json();
if ((callback) && (typeof callback == 'function')){
callback(data);
}
} catch (error) {
console.log('Ошибка:' + error);
if ((callbackError) && (typeof callbackError == 'function')){
callbackError({
"ERRORS": [error],
"STATUS": 400
});
}
}
},
};