Автозаполнение полей выпускника
当前为
// ==UserScript==
// @name Platonus - Autocomplete Graduate
// @namespace scriptomatika
// @author mouse-karaganda
// @description Автозаполнение полей выпускника
// @license MIT
// @match https://platonus.buketov.edu.kz/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=platonus.buketov.edu.kz
// @version 1.0
// @grant none
// ==/UserScript==
(function() {
console.log('Userscript run at == ', location.href);
let $ = window.jQuery;
let studentList = [
'1;Абилова;Далила;Руслановна;Abilova;Dalila;970570;87087747738;980429450553;01-02-1995'
];
let item = {
number: 0,
surname: 1,
name: 2,
fatherName: 3,
surnameEng: 4,
nameEng: 5,
phone: 6,
phoneMobile: 7,
numIin: 8,
birthday: 9
};
let tabs = {
personalData: 'Личные данные',
education: 'Образование',
employment: 'Трудоустройство',
graduateData: 'Данные о выпускнике',
benefits: 'Льготы'
};
let completer = {
maxLoadTime: 120000,
oneStepTime: 400,
globalIndex: 0,
insertStyle: function() {
let styleText = [
'.completer_button { margin-right: 20px; }',
'.completer_button.btn-success, .completer_button.btn-success:hover { background-color: #0033cc !important; border-color: #0033cc !important; }'
];
$('<style type="text/css">').appendTo(document.head)
.text(styleText.join('\n'));
},
createButton: function(allButtons) {
let saveButton = allButtons[0];
$('<button>').addClass('btn btn-success completer_button').insertBefore(saveButton)
.text('Заполнить из Лотус')
.on('click', completer.clickToButton);
$(saveButton).on('click', completer.clickToSave)
.attr({ title: 'Сохранить [' + (++completer.globalIndex) + ']' });
//console.log('completer :: create saveButton [%o] = ', ++completer.globalIndex, saveButton);
},
setValueToInput: function(oneInput, value) {
oneInput.value = value;
oneInput.dispatchEvent(new Event('input'));
oneInput.dispatchEvent(new Event('blur'));
},
clickToButton: async function() {
let pik = $('#dativeFIOru').get(0);
//completer.setValueToTextbox(pik, "Бокижанова");
let stud = completer.findStudent();
completer.currentStudent = stud;
// Переходим на вкладку
if (completer.activateTab(tabs.personalData)) {
setTimeout(completer.setTabPersonalData, completer.oneStepTime);
}
},
setTabPersonalData: function() {
let findTab = completer.findTab(tabs.personalData);
if (findTab.length == 0) {
return;
}
let stud = completer.currentStudent;
let getInput = completer.findInput('Фамилия транслитом');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.surnameEng]);
}
getInput = completer.findInput('Имя транслитом');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.nameEng]);
}
getInput = completer.findInput('Домашний телефон');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.phone]);
}
getInput = completer.findInput('Мобильный телефон');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], completer.getPhoneMobile(stud[item.phoneMobile]));
}
getInput = completer.findInput('ИИН');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], completer.getIin(stud[item.numIin]));
}
getInput = completer.findDatepicker('Дата рождения');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.birthday]);
}
},
findStudent: function() {
let findItem = studentList[0];
let result = findItem.split(';');
return result;
},
activateTab: function(tabText) {
let findTab = completer.findTab(tabText);
if (findTab.length > 0) {
findTab.eq(0).trigger('click');
return true;
}
return false;
},
findTab: function(tabText) {
let tabList = $('ul.nav-tabs button.nav-link');
//console.log('completer :: tabList = ', tabList);
let oneTab = tabList.filter((index, tab) => $(tab).text().trim() == tabText);
console.log('completer :: findTab [%o] = ', tabText, oneTab);
return oneTab;
},
findLabel: function(labelText) {
let labelList = $('.tab-content label.form-label');
//console.log('completer :: labelList = ', labelList);
let oneLabel = labelList.filter((index, label) => $(label).text().trim() == labelText);
console.log('completer :: findLabel [%o] = ', labelText, oneLabel);
return oneLabel;
},
findInput: function(labelText) {
// Ищем метку и следующий после неё элемент
let oneLabel = completer.findLabel(labelText);
let oneInput = oneLabel.next('input[type="text"]');
console.log('completer :: findInput [%o] = ', labelText, oneInput);
return oneInput;
},
findDatepicker: function(labelText) {
let oneLabel = completer.findLabel(labelText);
let oneDatepicker = oneLabel.next('.input-group').find('input[datepicker]');
console.log('completer :: findDatepicker [%o] = ', labelText, oneDatepicker);
return oneDatepicker;
},
getPhoneMobile: function(value) {
return value;
},
getIin: function(value) {
return value;
},
clickToSave: function(event) {
completer.saveStart = new Date();
completer.saveTimer = setInterval(completer.saveHandler, completer.oneStepTime);
},
saveHandler: function() {
console.log('completer :: step saveTimer');
// Ждем появления алерта
let saveAlert = $('plt-notification div.alert');
if (saveAlert.length == 0) {
let pause = new Date() - completer.saveStart;
if (pause > completer.maxLoadTime) {
clearInterval(completer.saveTimer);
return;
}
} else {
clearInterval(completer.saveTimer);
// Возвращаем кнопку Лотуса после сохранения
completer.runPopstate();
}
},
popstateHandler: function() {
// Ждем кнопку сохранения
let allButtons = $('.tab-content button.btn.btn-success');
console.log('completer :: popstateHandler [%o] = ', allButtons.length, allButtons);
if (allButtons.length == 0) {
let pause = new Date() - completer.popstateStart;
if (pause > completer.maxLoadTime) {
clearInterval(completer.popstateTimer);
return;
}
} else {
clearInterval(completer.popstateTimer);
// Создаем новую кнопку
completer.createButton(allButtons);
}
},
runPopstate: function(event) {
let isGraduate = /graduate\/\d+/.test(location.href);
console.log('completer :: runPopstate [%o] = ', isGraduate, location.href);
if (!isGraduate) {
return;
}
completer.popstateStart = new Date();
completer.popstateTimer = setInterval(completer.popstateHandler, completer.oneStepTime);
},
start: function() {
completer.insertStyle();
completer.runPopstate();
//window.addEventListener("popstate", completer.runPopstate);
$(window).on("popstate", completer.runPopstate);
}
};
completer.start();
console.log('Platonus - Autocomplete Graduate 💬 1.0');
})();