js-tampermonkey-public-scripts/Oracle Apex 22, asut-clone.erg.kz.user.js
Unkas Amanjolov 42b29defae first commit
2024-10-07 10:25:50 +05:00

277 lines
14 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ==UserScript==
// @name Oracle Apex 22, asut-clone.erg.kz
// @namespace http://tampermonkey.net/
// @version 2024-02-13
// @description try to take over the world!
// @author You
// @match https://lseo.jv.mt-s.kz:4443/service/f?p=4000:4500*
// @match https://lseo.jv.mt-s.kz:4443/service/f?p=4000:8000*
// @match https://online.lse.kz/service/f?p=4000:4500*
// @match https://online.lse.kz/service/f?p=4000:8000*
// @match https://asut-clone.erg.kz/apex/f?p=4000:4500*
// @match https://asut-clone.erg.kz/apex/f?p=4000:8000*
// @icon https://www.google.com/s2/favicons?sz=64&domain=mt-s.kz
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Функция, которая будет вызвана при исчезновении "is-processing"
function handleMutation(mutationsList, observer) {
mutationsList.forEach(mutation => {
if (!mutation.target.classList.contains('is-processing')) {
// "is-processing" убрался, выполнить функцию startSearch()
startSearch();
// После выполнения, прекратить наблюдение
observer.disconnect();
// Снова начать наблюдение после выполнения startSearch()
startObservingWithRetry(targetNode, observer, config);
}
});
}
// Создать новый экземпляр MutationObserver с функцией обратного вызова
var observer = new MutationObserver(handleMutation);
// Наблюдать за изменениями в элементе с id "a_PageDesigner"
var targetNode = null;
try {
targetNode = document.getElementById('a_PageDesigner');
} catch {}
// Настройка на наблюдение за изменениями в классах элемента
var config = { attributes: true, attributeFilter: ['class'] };
// Начать наблюдение
// startObservingWithRetry();
function startSearch(){
// Найти элемент с классом "a-ControlBar-col"
var vLength = $v('pPageItemsProtected').length;
// var mainUrl = window.location.origin + window.location.pathname.slice(0, -1)
var mainUrl = window.location.origin.replace("http:", "https:") + window.location.pathname.slice(0, -1);
var nameLE_pProtected = "LE_pProtected_"+mainUrl;
var nameLE_pSession = "LE_pSession_"+mainUrl;
var nameLE_pSalt = "LE_pSalt_"+mainUrl;
if (localStorage.getItem(nameLE_pProtected) === null) {
localStorage.setItem(nameLE_pProtected, $v('pPageItemsProtected'))
}
if (
(localStorage.getItem(nameLE_pProtected).length === 22 && localStorage.getItem(nameLE_pSession) === apex.item('pInstance').getValue())
| (vLength === 22)
) {
//console.log('Inject')
if (vLength === 22) {
localStorage.setItem(nameLE_pProtected, $v('pPageItemsProtected'))
localStorage.setItem(nameLE_pSession, apex.item('pInstance').getValue())
localStorage.setItem(nameLE_pSalt, $v('pSalt'))
}
var vCurrentPage = $v(document.querySelector("#go_to_page"))
var vSearchString= ":"+vCurrentPage+":&SESSION"
var bodyParams = {
"salt": localStorage.getItem(nameLE_pSalt),
"pageItems": {
"itemsToSubmit": [
{ "n": "P8000_START_SEARCH", "v": "0" },
{ "n": "P8000_SEARCH", "v": vSearchString },
{ "n": "P8000_CASE_SENSITIVE", "v": [] },
{ "n": "P8000_CURRENT_PAGE_ONLY", "v": []},
{ "n": "P0_FLOWPAGE", "v": "101;1|1" }
],
"protected": localStorage.getItem(nameLE_pProtected),
"rowVersion": ""
}
};
var body = "p_json=" + encodeURIComponent(JSON.stringify(bodyParams)) + "&p_flow_id=4000&p_flow_step_id=8000&p_instance="+$v('pInstance')+"&p_page_submission_id="+localStorage.getItem(nameLE_pSalt)+"&p_request=&p_reload_on_submit=A";
fetch("https://" + window.location.hostname + "/service/wwv_flow.accept", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: body,
credentials: "include"
})
.then(response => response.text())
.then(data => {
var tempElement = document.createElement('div');
tempElement.innerHTML = data;
var searchResultsElement = tempElement.querySelector('#search_results');
if (searchResultsElement) {
var tables = searchResultsElement.querySelectorAll('table');
var foundPages = [];
try {
tables.forEach(function (table) {
var tableText = table.textContent || table.innerText;
if (tableText.includes(vSearchString)) {
var tdElements = table.querySelectorAll('td');
var pagePath = tdElements[0].textContent.trim();
var pagePathParts = pagePath.split(' > ');
var combinedElements = pagePathParts.slice(2).join(' > ');
foundPages.push(combinedElements);
}
})
} catch {};
if (foundPages.length > 0) {
// Создать пустой объект для отслеживания добавленных значений
var addedValues = {};
var controlBarCol = document.querySelector('.a-ControlBar-col');
// Проверка наличия элемента
if (controlBarCol) {
// Найти элемент с id "utilitiesMenu" внутри "a-ControlBar-col"
var utilitiesMenu = controlBarCol.querySelector('#utilitiesMenu');
try {
document.querySelector("#P4500_LEMODALPAGEREVERS_MAIN").remove();
} catch {}
//
// Проверка наличия элемента
if (utilitiesMenu) {
// Создать новый элемент select
var newElement = document.createElement('div');
newElement.id = 'P4500_LEMODALPAGEREVERS_MAIN';
newElement.className = 'a-PageSelect';
newElement.style.margin = '-1px;margin-right: 5px;border-width:1px';
newElement.innerHTML = `
<div class="a-Property-fieldContainer" id="P4500_LEMODALPAGEREVERS_CONT">
<select size="1" class="a-Property-field a-Property-field--select" id="P4500_LEMODALPAGEREVERS_SELECT" data-property-id="11">
</select>
</div>
`;
// Вставить новый элемент после "utilitiesMenu"
utilitiesMenu.insertAdjacentElement('afterend', newElement);
document.querySelector("#P4500_LEMODALPAGEREVERS_MAIN").setAttribute("style","margin-right: 5px;border-width:1px")
document.querySelector("#P4500_LEMODALPAGEREVERS_CONT").setAttribute("style","padding:3px")
}
}
// Получить элемент select
var selectElement = document.getElementById('P4500_LEMODALPAGEREVERS_SELECT');
// Проверка наличия элемента
if (selectElement) {
// Очистить содержимое элемента select
selectElement.innerHTML = '';
// Заполнить элементами от pagePathParts
foundPages.forEach(function (page, index) {
// Проверить, было ли уже добавлено значение
if (!addedValues[page]) {
var option = document.createElement('option');
option.value = index + 1;
option.innerHTML = `<a href="#" target="_blank">${page}</a>`;
selectElement.appendChild(option);
// Добавить значение в объект, чтобы избежать дублирования
addedValues[page] = true;
}
});
}
} else {
console.log('No pages found with id ' + vSearchString);
}
} else {
try {
var selectElementTry = document.getElementById('P4500_LEMODALPAGEREVERS_SELECT');
selectElementTry.innerHTML = '';
var option = document.createElement('option');
option.value = 1;
option.innerHTML = `Сессия изменена, попробуйте выполнить поиск, и после обновить страницу`;
selectElementTry.appendChild(option);
} catch {}
console.log('Element with id "search_results" not found');
}
})
.catch(error => console.error("Error:", error));
} else {
console.log('Ошибка'+'\n'+'vLength ||| ' +vLength
+'\n'+'localStorage.getItem(nameLE_pProtected).length ||| ' + localStorage.getItem(nameLE_pProtected).length
+'\n'+'localStorage.getItem(nameLE_pSession) ||| ' + localStorage.getItem(nameLE_pSession)
+'\n'+"apex.item('pInstance').getValue() ||| " + apex.item('pInstance').getValue()
)
var controlBarCol = document.querySelector('.a-ControlBar-col');
// Проверка наличия элемента
if (controlBarCol) {
// Найти элемент с id "utilitiesMenu" внутри "a-ControlBar-col"
var utilitiesMenu = controlBarCol.querySelector('#utilitiesMenu');
try {
document.querySelector("#P4500_LEMODALPAGEREVERS_MAIN").remove();
} catch {}
//
// Проверка наличия элемента
if (utilitiesMenu) {
// Создать новый элемент select
var newElement = document.createElement('div');
newElement.id = 'P4500_LEMODALPAGEREVERS_MAIN';
newElement.className = 'a-PageSelect';
newElement.style.margin = '-1px;margin-right: 5px;border-width:1px';
newElement.innerHTML = `
<div class="a-Property-fieldContainer" id="P4500_LEMODALPAGEREVERS_CONT">
<input class="a-Property-field a-Property-field--readOnly" readonly="true" value="Выполните поиск для запуска функционала" type="text">
</div>
`;
// Вставить новый элемент после "utilitiesMenu"
utilitiesMenu.insertAdjacentElement('afterend', newElement);
document.querySelector("#P4500_LEMODALPAGEREVERS_MAIN").setAttribute("style","margin-right: 5px;border-width:1px")
document.querySelector("#P4500_LEMODALPAGEREVERS_CONT").setAttribute("style","padding:3px; width:260px")
}
}
}};
// Начать наблюдение с возможностью повтора через 5 секунд
// startObservingWithRetry();
startObservingWithRetry(targetNode, observer, config);
// Функция для начала наблюдения с возможностью повтора через 5 секунд
function startObservingWithRetry(targetNode, observer, config) {
try {
if (targetNode === null) {
console.log ('NULL|'+observer)
startSearch()
} else {
targetNode = document.getElementById('a_PageDesigner');
observer.observe(targetNode, config);
}
} catch (error) {
console.error('Error starting observing:', error);
// Повторная попытка через 5 секунд
setTimeout(() => startObservingWithRetry(targetNode, observer, config), 5000);
}
}
})();