first commit
This commit is contained in:
commit
42b29defae
1
Ali Get Track Number.options.json
Normal file
1
Ali Get Track Number.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://aliexpress.ru/order-list?*ilterName=active"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1711513302652},"settings":{"enabled":false,"position":18},"meta":{"name":"Ali Get Track Number","uuid":"7b2679e7-5cd7-45ce-8e3e-e78d7ad64cee","modified":1711513302650}}
|
||||||
1
Ali Get Track Number.storage.json
Normal file
1
Ali Get Track Number.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1709396799973,"data":{}}
|
||||||
143
Ali Get Track Number.user.js
Normal file
143
Ali Get Track Number.user.js
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Ali Get Track Number
|
||||||
|
// @version 0.3
|
||||||
|
// @description Extracts order IDs and adds corresponding spans to divs on AliExpress order list page
|
||||||
|
// @match https://aliexpress.ru/order-list?*ilterName=active
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliexpress.ru
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function addOrderIdSpansToDivs(targetElement) {
|
||||||
|
let orderItemDivs = targetElement.querySelectorAll('div[class^="SnowOrderList_OrderItem__wrappe"]');
|
||||||
|
|
||||||
|
orderItemDivs.forEach((orderItemDiv) => {
|
||||||
|
let linkElement = orderItemDiv.querySelector('a');
|
||||||
|
if (linkElement) {
|
||||||
|
let linkHref = linkElement.getAttribute('href');
|
||||||
|
let orderId = linkHref.match(/(\d+)/);
|
||||||
|
if (orderId) {
|
||||||
|
orderId = orderId[0];
|
||||||
|
|
||||||
|
// Создаем новый span-элемент
|
||||||
|
let spanElement = document.createElement('span');
|
||||||
|
spanElement.className = `item${orderId}`;
|
||||||
|
|
||||||
|
// Создаем ссылку на страницу заказа AliExpress
|
||||||
|
let aliExpressLink = document.createElement('a');
|
||||||
|
aliExpressLink.href = linkHref;
|
||||||
|
aliExpressLink.innerHTML = ` ${orderId}`;
|
||||||
|
spanElement.appendChild(aliExpressLink);
|
||||||
|
|
||||||
|
// Создаем ссылку на страницу отслеживания на GdePos
|
||||||
|
// let gdePosLink = document.createElement('a');
|
||||||
|
// gdePosLink.href = `https://gdeposylka.ru/courier/omniva/tracking/${orderId}`;
|
||||||
|
// gdePosLink.innerHTML = ` GdePos`;
|
||||||
|
// spanElement.appendChild(gdePosLink);
|
||||||
|
|
||||||
|
// Добавляем созданный span-элемент в конец div-элемента
|
||||||
|
orderItemDiv.appendChild(spanElement);
|
||||||
|
|
||||||
|
// Выполняем дополнительные действия с каждым orderItemDiv
|
||||||
|
processOrderItemDiv(orderId, orderItemDiv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function processOrderItemDiv(orderId, orderItemDiv) {
|
||||||
|
let aliExpressLink = `https://aliexpress.ru/order-list/${orderId}?filterName=active`;
|
||||||
|
|
||||||
|
makeAsyncGetRequest(aliExpressLink)
|
||||||
|
.then(response => {
|
||||||
|
let dataMatch = /<script id="__AER_DATA__" type="application\/json">(.*?)<\/script>/s;
|
||||||
|
let dataMatchResult = response.match(dataMatch);
|
||||||
|
|
||||||
|
if (dataMatchResult && dataMatchResult[1]) {
|
||||||
|
let dataBlockJson = dataMatchResult[1];
|
||||||
|
let dataObject;
|
||||||
|
|
||||||
|
try {
|
||||||
|
dataObject = JSON.parse(dataBlockJson);
|
||||||
|
// console.log(dataBlockJson);
|
||||||
|
// Находим "packages" в объекте и выводим его
|
||||||
|
findAndPrintPackages(dataObject, orderId, orderItemDiv);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error parsing JSON:', error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error('Could not find JSON data in the response.');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => console.error(error));
|
||||||
|
}
|
||||||
|
|
||||||
|
function findAndPrintPackages(obj, orderId, orderItemDiv) {
|
||||||
|
// Рекурсивно ищем блок "packages" и обновляем текст элемента
|
||||||
|
if (typeof obj === 'object') {
|
||||||
|
for (let key in obj) {
|
||||||
|
if (key === 'packages') {
|
||||||
|
let packages = obj[key];
|
||||||
|
for (let packageInfo of packages) {
|
||||||
|
updateTextForOrderItem(packageInfo, orderId, orderItemDiv);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
findAndPrintPackages(obj[key], orderId, orderItemDiv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateTextForOrderItem(packageInfo, orderId, orderItemDiv) {
|
||||||
|
if (packageInfo.trackNumber && packageInfo.originalTrackNumber) {
|
||||||
|
let itemSelector = `.item${orderId}`;
|
||||||
|
let itemElement = orderItemDiv.querySelector(itemSelector);
|
||||||
|
|
||||||
|
if (itemElement) {
|
||||||
|
let isOrderIdPresent = itemElement.querySelector(`a[href*="${orderId}"]`);
|
||||||
|
// let textDecoration = isOrderIdPresent ? 'background-color: lightpink;' : '';
|
||||||
|
|
||||||
|
let newContent = `<span class="${itemSelector}"><a href="https://aliexpress.ru/order-list/${orderId}?filterName=active" target="_blank" style="background-color:#b6f2ff"> ${packageInfo.originalTrackNumber}</a>`;
|
||||||
|
newContent += `<a href="https://gdeposylka.ru/detect/${packageInfo.originalTrackNumber}" target="_blank" style="background-color:#b6ffbb"> GdePos</a></br>`;
|
||||||
|
if (packageInfo.trackNumber != packageInfo.originalTrackNumber) {
|
||||||
|
newContent += `<a href="https://aliexpress.ru/order-list/${orderId}?filterName=active" target="_blank" style="background-color:#ffb6c1;"> ${packageInfo.trackNumber}</a>`;
|
||||||
|
newContent += `<a href="https://gdeposylka.ru/detect/${packageInfo.trackNumber}" target="_blank" style="background-color:#c7b6ff"> GdePosNEW</a></span></br>`;
|
||||||
|
};
|
||||||
|
itemElement.innerHTML = newContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function makeAsyncGetRequest(aliExpressLink) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', aliExpressLink, true);
|
||||||
|
|
||||||
|
xhr.onload = function () {
|
||||||
|
if (xhr.status >= 200 && xhr.status < 300) {
|
||||||
|
resolve(xhr.responseText);
|
||||||
|
} else {
|
||||||
|
reject(`Error: ${xhr.status}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.onerror = function () {
|
||||||
|
reject('Network error');
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Слушаем событие завершения загрузки страницы
|
||||||
|
window.addEventListener('load', () => {
|
||||||
|
let targetElement = document.querySelector('.SnowOrderList_Wrapper__wrapper__12ov3'); // Замените на ваш реальный селектор
|
||||||
|
if (targetElement) {
|
||||||
|
addOrderIdSpansToDivs(targetElement);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
1
AliExpress-Order-List-Modifier.options.json
Normal file
1
AliExpress-Order-List-Modifier.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728274985873,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://aliexpress.ru/order-list?*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":false,"position":29},"meta":{"name":"AliExpress-Order-List-Modifier","uuid":"588406f4-1e94-4bea-ad79-dab1030109d7","modified":1728274985870}}
|
||||||
1
AliExpress-Order-List-Modifier.storage.json
Normal file
1
AliExpress-Order-List-Modifier.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1724845620961,"data":{}}
|
||||||
264
AliExpress-Order-List-Modifier.user.js
Normal file
264
AliExpress-Order-List-Modifier.user.js
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name AliExpress-Order-List-Modifier
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-08-28
|
||||||
|
// @description Скрипт, который модифицирует список заказов на странице AliExpress: добавляет таблицу с номерами заказов, отслеживает изменения URL, извлекает данные по каждому заказу и добавляет ссылки на трекинг посылок.
|
||||||
|
// @author You
|
||||||
|
// @match https://aliexpress.ru/order-list?*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliexpress.ru
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Запускать скрипт только после полной загрузки страницы
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
modifyOrderList();
|
||||||
|
setupURLObserver();
|
||||||
|
});
|
||||||
|
|
||||||
|
function modifyOrderList() {
|
||||||
|
// Получаем контейнер с заказами
|
||||||
|
const container = document.querySelector('.RedOrderList_RedOrderList__container__eukpr');
|
||||||
|
if (!container) return;
|
||||||
|
|
||||||
|
// Создаем новую таблицу
|
||||||
|
const table = document.createElement('table');
|
||||||
|
table.style.width = '100%';
|
||||||
|
table.style.borderSpacing = '0 6px'; // Добавляем расстояние между строками
|
||||||
|
|
||||||
|
// Проходим по каждому элементу с классом "RedOrderList_OrderList__item__1utr0 RedOrderList_OrderList__withBackground__1utr0"
|
||||||
|
const items = Array.from(container.querySelectorAll('.RedOrderList_OrderList__item__1utr0.RedOrderList_OrderList__withBackground__1utr0'));
|
||||||
|
const spm = extractSPMParameter(); // Извлекаем параметр SPM из текущего URL
|
||||||
|
|
||||||
|
items.forEach(item => {
|
||||||
|
const orderLink = item.querySelector('a');
|
||||||
|
if (!orderLink) return;
|
||||||
|
|
||||||
|
// Извлекаем номер заказа из href
|
||||||
|
const orderNumberMatch = orderLink.href.match(/order-list\/(\d+)\?/);
|
||||||
|
if (!orderNumberMatch) return;
|
||||||
|
const orderNumber = orderNumberMatch[1];
|
||||||
|
|
||||||
|
// Меняем класс элемента
|
||||||
|
const originalClass = item.className;
|
||||||
|
item.className = 'BlueOrderList_OrderList__item__' + orderNumber;
|
||||||
|
|
||||||
|
// Создаем строку таблицы
|
||||||
|
const row = document.createElement('tr');
|
||||||
|
|
||||||
|
// Первая колонка (оригинальный элемент)
|
||||||
|
const cell1 = document.createElement('td');
|
||||||
|
cell1.style.width = '80%';
|
||||||
|
cell1.style.padding = '5px';
|
||||||
|
cell1.appendChild(item);
|
||||||
|
|
||||||
|
// Вторая колонка (новый элемент с div)
|
||||||
|
const cell2 = document.createElement('td');
|
||||||
|
cell2.style.width = '20%';
|
||||||
|
cell2.style.padding = '5px';
|
||||||
|
cell2.style.position = 'relative';
|
||||||
|
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = 'BlueOrderList_OrderList__item__' + orderNumber;
|
||||||
|
div.style.position = 'absolute';
|
||||||
|
div.style.top = '0';
|
||||||
|
div.style.left = '0';
|
||||||
|
div.style.right = '0';
|
||||||
|
div.style.bottom = '0';
|
||||||
|
div.style.padding = '5px';
|
||||||
|
div.style.width = '100%';
|
||||||
|
div.style.height = '100%';
|
||||||
|
div.style.border = '1px solid #e6eaf0';
|
||||||
|
div.style.borderRadius = '6px';
|
||||||
|
div.style.padding = '3px';
|
||||||
|
|
||||||
|
// Создаем и добавляем элементы <p> с помощью функции
|
||||||
|
const pID = createParagraph('ID', orderNumber);
|
||||||
|
const pDate = createParagraph('Date', 'Дата'); // Замените на актуальную дату
|
||||||
|
const pPosilka = createParagraph('Posilka', 'Посылка'); // Placeholder, будет обновлено позже
|
||||||
|
|
||||||
|
div.appendChild(pID);
|
||||||
|
div.appendChild(pDate);
|
||||||
|
div.appendChild(pPosilka);
|
||||||
|
|
||||||
|
// Вызов функции для получения данных заказа и обновления pPosilka.textContent
|
||||||
|
fetchOrderDetails(orderNumber, pPosilka, pDate, spm);
|
||||||
|
|
||||||
|
// Создаем и добавляем ссылки под pPosilka
|
||||||
|
const pLinks = createTrackingLinks(pPosilka);
|
||||||
|
div.appendChild(pLinks);
|
||||||
|
|
||||||
|
// Добавляем <div> в ячейку таблицы
|
||||||
|
cell2.appendChild(div);
|
||||||
|
|
||||||
|
// Добавляем колонки в строку
|
||||||
|
row.appendChild(cell1);
|
||||||
|
row.appendChild(cell2);
|
||||||
|
|
||||||
|
// Добавляем строку в таблицу
|
||||||
|
table.appendChild(row);
|
||||||
|
|
||||||
|
// Восстанавливаем оригинальный класс после добавления
|
||||||
|
item.className = originalClass;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Заменяем содержимое контейнера новой таблицей
|
||||||
|
container.innerHTML = '';
|
||||||
|
container.appendChild(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для создания элемента <p>
|
||||||
|
function createParagraph(className, textContent) {
|
||||||
|
const p = document.createElement('p');
|
||||||
|
p.className = className;
|
||||||
|
p.textContent = textContent;
|
||||||
|
p.style.margin = '3px 0px';
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для создания ссылок на "Казпочта" и "Где посылка"
|
||||||
|
function createTrackingLinks(pPosilka) {
|
||||||
|
const container = document.createElement('div');
|
||||||
|
container.style.marginTop = '5px';
|
||||||
|
|
||||||
|
// Создаем ссылку для "Казпочта"
|
||||||
|
const kazPostLink = document.createElement('a');
|
||||||
|
kazPostLink.href = `https://qazpost.kz/ru/tracking?trackNumber=${pPosilka.textContent}`;
|
||||||
|
kazPostLink.target = '_blank';
|
||||||
|
kazPostLink.style.padding = '5px 0px 6px 0px';
|
||||||
|
|
||||||
|
// Создаем изображение для "Казпочта"
|
||||||
|
const kazPostImg = document.createElement('img');
|
||||||
|
kazPostImg.src = 'https://qazpost.kz/favicon/favicon-16x16.png';
|
||||||
|
kazPostImg.alt = 'Казпочта';
|
||||||
|
kazPostImg.style.verticalAlign = 'middle';
|
||||||
|
kazPostImg.style.marginRight = '5px';
|
||||||
|
|
||||||
|
kazPostLink.appendChild(kazPostImg); // Добавляем изображение в ссылку
|
||||||
|
kazPostLink.appendChild(document.createTextNode('Казпочта')); // Добавляем текст
|
||||||
|
|
||||||
|
const br = document.createElement('br'); // Создаем элемент <br> для разрыва строки
|
||||||
|
|
||||||
|
// Создаем ссылку для "Где посылка"
|
||||||
|
const gdePosylkaLink = document.createElement('a');
|
||||||
|
gdePosylkaLink.href = `https://gdeposylka.ru/detect/${pPosilka.textContent}`;
|
||||||
|
gdePosylkaLink.target = '_blank';
|
||||||
|
gdePosylkaLink.style.padding = '5px 0px 6px 0px';
|
||||||
|
|
||||||
|
// Создаем изображение для "Где посылка"
|
||||||
|
const gdePosylkaImg = document.createElement('img');
|
||||||
|
gdePosylkaImg.src = 'https://gdeposylka.ru/favicon.ico';
|
||||||
|
gdePosylkaImg.alt = 'Где посылка';
|
||||||
|
gdePosylkaImg.style.verticalAlign = 'middle';
|
||||||
|
gdePosylkaImg.style.marginRight = '5px';
|
||||||
|
|
||||||
|
gdePosylkaLink.appendChild(gdePosylkaImg); // Добавляем изображение в ссылку
|
||||||
|
gdePosylkaLink.appendChild(document.createTextNode('Где посылка')); // Добавляем текст
|
||||||
|
|
||||||
|
container.appendChild(kazPostLink);
|
||||||
|
container.appendChild(br); // Добавляем разрыв строки между ссылками
|
||||||
|
container.appendChild(gdePosylkaLink);
|
||||||
|
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для получения данных заказа по order_id с учетом параметра spm
|
||||||
|
function fetchOrderDetails(p_order_id, pPosilka, pDate, pSpm) {
|
||||||
|
const url = `https://aliexpress.ru/order-list/${p_order_id}${pSpm ? pSpm : ''}`;
|
||||||
|
|
||||||
|
fetch(url)
|
||||||
|
.then(response => response.text())
|
||||||
|
.then(html => {
|
||||||
|
// Создаем DOMParser для анализа полученной HTML страницы
|
||||||
|
const parser = new DOMParser();
|
||||||
|
const doc = parser.parseFromString(html, 'text/html');
|
||||||
|
|
||||||
|
// Извлекаем содержимое скрипта с id "__AER_DATA__"
|
||||||
|
const scriptTag = doc.querySelector('#__AER_DATA__');
|
||||||
|
if (scriptTag) {
|
||||||
|
const jsonData = scriptTag.textContent;
|
||||||
|
|
||||||
|
// Поиск значения originalTrackNumber и обновление текста в pPosilka
|
||||||
|
const originalTrackNumber = findOriginalTrackNumber(jsonData);
|
||||||
|
if (originalTrackNumber) {
|
||||||
|
pPosilka.textContent = originalTrackNumber;
|
||||||
|
pPosilka.style.backgroundColor = "#90ee90";
|
||||||
|
} else {
|
||||||
|
pPosilka.textContent = 'Информация недоступна';
|
||||||
|
pPosilka.style.backgroundColor = "#f08080"; // Добавляем цвет для недоступной информации
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновление ссылок в pLinks
|
||||||
|
const pLinks = pPosilka.nextElementSibling;
|
||||||
|
if (pLinks) {
|
||||||
|
pLinks.querySelector('a[href^="https://qazpost.kz"]').href = `https://qazpost.kz/ru/tracking?trackNumber=${originalTrackNumber}`;
|
||||||
|
pLinks.querySelector('a[href^="https://gdeposylka.ru"]').href = `https://gdeposylka.ru/detect/${originalTrackNumber}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Поиск значения даты и обновление текста в pDate
|
||||||
|
const orderDate = findOrderDate(jsonData);
|
||||||
|
if (orderDate) {
|
||||||
|
pDate.textContent = orderDate;
|
||||||
|
} else {
|
||||||
|
pDate.textContent = 'Дата недоступна';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error(`JSON данные для заказа ${p_order_id} не найдены.`);
|
||||||
|
pPosilka.textContent = 'Ошибка загрузки';
|
||||||
|
pDate.textContent = 'Ошибка загрузки';
|
||||||
|
pPosilka.style.backgroundColor = "#f08080"; // Добавляем цвет для ошибки
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Ошибка при запросе данных:', error);
|
||||||
|
pPosilka.textContent = 'Ошибка запроса';
|
||||||
|
pDate.textContent = 'Ошибка запроса';
|
||||||
|
pPosilka.style.backgroundColor = "#f08080"; // Добавляем цвет для ошибки
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для поиска originalTrackNumber в текстовом представлении JSON
|
||||||
|
function findOriginalTrackNumber(jsonText) {
|
||||||
|
const match = jsonText.match(/"originalTrackNumber":"(.*?)"/);
|
||||||
|
if (match && match[1]) {
|
||||||
|
return match[1];
|
||||||
|
} else {
|
||||||
|
console.error('originalTrackNumber не найден в JSON');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для поиска даты заказа в текстовом представлении JSON
|
||||||
|
function findOrderDate(jsonText) {
|
||||||
|
const match = jsonText.match(/"header":\{"ordersTitle":"Заказы","date":"от\s(.*?)"/);
|
||||||
|
if (match && match[1]) {
|
||||||
|
return match[1];
|
||||||
|
} else {
|
||||||
|
console.error('Дата заказа не найдена в JSON');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для извлечения параметра SPM из текущего URL
|
||||||
|
function extractSPMParameter() {
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
const spm = urlParams.get('spm');
|
||||||
|
return spm ? `?spm=${spm}` : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupURLObserver() {
|
||||||
|
// Наблюдаем за изменением URL и обновляем страницу, если она не совпадает с текущей
|
||||||
|
let lastUrl = location.href;
|
||||||
|
new MutationObserver(() => {
|
||||||
|
const currentUrl = location.href;
|
||||||
|
if (currentUrl !== lastUrl) {
|
||||||
|
lastUrl = currentUrl;
|
||||||
|
if (currentUrl.startsWith('https://aliexpress.ru/order-list')) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).observe(document, { subtree: true, childList: true });
|
||||||
|
}
|
||||||
|
})();
|
||||||
1
Get Order Count.options.json
Normal file
1
Get Order Count.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://aliexpress.ru/order-list?*ilterName=active"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1709396558803},"settings":{"enabled":false,"position":10},"meta":{"name":"Get Order Count","uuid":"89585fe7-77e4-4dc5-ae5f-c9ca471ac552","modified":1709396558802}}
|
||||||
1
Get Order Count.storage.json
Normal file
1
Get Order Count.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388970,"data":{}}
|
||||||
31
Get Order Count.user.js
Normal file
31
Get Order Count.user.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Get Order Count
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 1.0.1
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://aliexpress.ru/order-list?*ilterName=active
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliexpress.ru
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
function onPageLoad() {
|
||||||
|
var elements = document.querySelectorAll("div[class^='SnowOrderList_Wrapper'] > div:nth-child(1) > div");
|
||||||
|
var elementCount = elements.length;
|
||||||
|
// console.log("Количество элементов:", elementCount);
|
||||||
|
var activeButton = document.querySelector("div[class^='SnowOrderListTabs'] > div:nth-child(1) button[class*='_buttonActive_']");
|
||||||
|
var activeButtonClass = activeButton.className;
|
||||||
|
var classesArray = activeButtonClass.split(' ');
|
||||||
|
var secondClass = classesArray[1]
|
||||||
|
//console.log("Элемент с классом secondClass:", secondClass);
|
||||||
|
var elementWithActiveClass = document.querySelector("." + secondClass);
|
||||||
|
//console.log("Элемент с классом:", elementWithActiveClass);
|
||||||
|
if (elementWithActiveClass.innerText == 'Активные') {elementWithActiveClass.innerText = ('Активные (' + elementCount + ')')}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window.addEventListener('load', onPageLoad);
|
||||||
|
|
||||||
|
})();
|
||||||
1
Git_Replace-Default-Create-Gitea-MD-Text.options.json
Normal file
1
Git_Replace-Default-Create-Gitea-MD-Text.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728275937346,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://*.lkaz.ru/*"],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":33},"meta":{"name":"Git:Replace-Default-Create-Gitea-MD-Text","uuid":"7d3664f6-4475-46c4-a2be-82305aa96e5d","modified":1728275937345}}
|
||||||
1
Git_Replace-Default-Create-Gitea-MD-Text.storage.json
Normal file
1
Git_Replace-Default-Create-Gitea-MD-Text.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1728015916432,"data":{}}
|
||||||
28
Git_Replace-Default-Create-Gitea-MD-Text.user.js
Normal file
28
Git_Replace-Default-Create-Gitea-MD-Text.user.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Git:Replace-Default-Create-Gitea-MD-Text
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-10-04
|
||||||
|
// @description Скрипт, который изменяет инструкции по созданию нового репозитория на странице: добавляет настройку email, удаляет команду создания README.md и заменяет добавление одного файла на добавление всех файлов в репозиторий.
|
||||||
|
// @author You
|
||||||
|
// @match https://*.lkaz.ru/*
|
||||||
|
// @icon https://docs.gitea.com/img/favicon.png
|
||||||
|
// @grant none
|
||||||
|
// @run-at document-end
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Проверяем, находится ли пользователь на нужном URL
|
||||||
|
if (window.location.href.includes("git.lkaz.ru")) {
|
||||||
|
if (document.querySelector("div.ui.container > div > div > div > div:nth-child(3) > h3")?.innerText === 'Создать новый репозиторий из командной строки') {
|
||||||
|
let defaultMarkup = document.querySelector(".markup");
|
||||||
|
let userName = document.querySelector("a.muted.tw-font-normal")?.innerText || "default@example.com"; // Обработка случая, если имя пользователя не найдено
|
||||||
|
let newMarkup0 = defaultMarkup.innerHTML;
|
||||||
|
let newMarkup1 = newMarkup0.replace("git init\n", `git init\ngit config --global user.email "${userName}"\n`);
|
||||||
|
let newMarkup2 = newMarkup1.replace("touch README.md\n", "");
|
||||||
|
let newMarkup3 = newMarkup2.replace("git add README.md", "git add .");
|
||||||
|
defaultMarkup.innerHTML = newMarkup3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
1
Git_Replace-Default-Create-Gitlab-MD-Text.options.json
Normal file
1
Git_Replace-Default-Create-Gitlab-MD-Text.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728276086329,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://gitlabserver.skynet.kz/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":31},"meta":{"name":"Git:Replace-Default-Create-Gitlab-MD-Text","uuid":"b226632b-5c4a-421a-bf62-26c5d4eeceea","modified":1728276086325}}
|
||||||
1
Git_Replace-Default-Create-Gitlab-MD-Text.storage.json
Normal file
1
Git_Replace-Default-Create-Gitlab-MD-Text.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1726118229739,"data":{}}
|
||||||
67
Git_Replace-Default-Create-Gitlab-MD-Text.user.js
Normal file
67
Git_Replace-Default-Create-Gitlab-MD-Text.user.js
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Git:Replace-Default-Create-Gitlab-MD-Text
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-09-12
|
||||||
|
// @description Скрипт, который модифицирует инструкцию по созданию нового репозитория на странице: добавляет к URL суффикс `.git`, настраивает имя и email пользователя, а также изменяет команды в блоке <pre> для корректного создания и пуша нового репозитория.
|
||||||
|
// @author You
|
||||||
|
// @match https://gitlabserver.skynet.kz/*
|
||||||
|
// @icon https://about.gitlab.com/nuxt-images/ico/favicon.ico
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
// Поиск нужного элемента
|
||||||
|
const emptyWrapper = document.querySelector(".git-empty.js-git-empty");
|
||||||
|
if (emptyWrapper) {
|
||||||
|
const createNew = Array.from(emptyWrapper.querySelectorAll('h5'))
|
||||||
|
.find(h5 => h5.textContent.includes("Create a new repository"));
|
||||||
|
if (createNew) {
|
||||||
|
// Модификация URL
|
||||||
|
const currentURL = window.location.href;
|
||||||
|
const newURL = currentURL.endsWith('/') ? currentURL.slice(0, -1) + '.git' : currentURL + '.git';
|
||||||
|
|
||||||
|
// Замена содержимого первого элемента <pre>
|
||||||
|
const pres = emptyWrapper.querySelectorAll('pre');
|
||||||
|
if (pres.length > 0) {
|
||||||
|
// Находим элемент <li> с классом "current-user"
|
||||||
|
const currentUserElement = document.querySelector('li.current-user');
|
||||||
|
// Инициализируем переменные
|
||||||
|
let vCurrentUser, vCurrentName;
|
||||||
|
// Проверяем, найден ли элемент
|
||||||
|
if (currentUserElement) {
|
||||||
|
// Получаем элемент <a> внутри <li>
|
||||||
|
const userLink = currentUserElement.querySelector('a[data-user]');
|
||||||
|
// Проверяем, найден ли элемент <a>
|
||||||
|
if (userLink) {
|
||||||
|
// Извлекаем username и добавляем домен
|
||||||
|
vCurrentUser = userLink.getAttribute('data-user') + '@skynet.kz';
|
||||||
|
// Извлекаем полное имя пользователя
|
||||||
|
vCurrentName = userLink.querySelector('.gl-font-weight-bold').textContent.trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Заменяем текст первого элемента <pre>
|
||||||
|
pres[0].innerHTML = `cd ${newURL.split('/').pop().replace('.git', '')}
|
||||||
|
git init
|
||||||
|
git config --global user.name "${vCurrentName}"
|
||||||
|
git config --global user.email "${vCurrentUser}"
|
||||||
|
git checkout -b master
|
||||||
|
git add .
|
||||||
|
git commit -m "first commit"
|
||||||
|
git remote add origin ${newURL}
|
||||||
|
git push -u origin master
|
||||||
|
</pre>`;
|
||||||
|
console.log('Updated pre element');
|
||||||
|
}
|
||||||
|
console.log('Script executed');
|
||||||
|
} else {
|
||||||
|
console.log('Create new repository section not found');
|
||||||
|
}
|
||||||
|
console.log('Empty wrapper found');
|
||||||
|
} else {
|
||||||
|
console.log('Empty wrapper not found');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
1
Hamsterkombat on web Telegram.options.json
Normal file
1
Hamsterkombat on web Telegram.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://hamsterkombatgame.io/*"],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1721557956684},"settings":{"enabled":true,"position":25},"meta":{"name":"Hamsterkombat on web Telegram","uuid":"aeead360-357c-4147-9980-f5534d1ce9f2","modified":1721557956683}}
|
||||||
1
Hamsterkombat on web Telegram.storage.json
Normal file
1
Hamsterkombat on web Telegram.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1721557552463,"data":{}}
|
||||||
25
Hamsterkombat on web Telegram.user.js
Normal file
25
Hamsterkombat on web Telegram.user.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Hamsterkombat on web Telegram
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-07-21
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://hamsterkombatgame.io/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=telegram.org
|
||||||
|
// @run-at document-start
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
const orig_indexof = Array.prototype.indexOf
|
||||||
|
Array.prototype.indexOf = function (...args) {
|
||||||
|
if (JSON.stringify(this) === JSON.stringify(["android", "android_x", "ios"])) {
|
||||||
|
setTimeout (() => {
|
||||||
|
Array.prototype.indexOf = orig_indexof
|
||||||
|
})
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return orig_indexof.apply(this, args)
|
||||||
|
}
|
||||||
|
})();
|
||||||
1
Hoster DOMAIN INFO.options.json
Normal file
1
Hoster DOMAIN INFO.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://hoster.kz/cabinet/"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1704277166681},"settings":{"enabled":true,"position":15},"meta":{"name":"Hoster DOMAIN INFO","uuid":"11aeff23-0466-435e-8dbc-f9d6bc2b7e74","modified":1704277166680}}
|
||||||
1
Hoster DOMAIN INFO.storage.json
Normal file
1
Hoster DOMAIN INFO.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388975,"data":{}}
|
||||||
22
Hoster DOMAIN INFO.user.js
Normal file
22
Hoster DOMAIN INFO.user.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Hoster DOMAIN INFO
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-01-03
|
||||||
|
// @description All serviceinfo__title add "white-space: pre-line"
|
||||||
|
// @author You
|
||||||
|
// @match https://hoster.kz/cabinet/
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=hoster.kz
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
// Находим все элементы с классом serviceinfo__title
|
||||||
|
var titles = document.querySelectorAll('.serviceinfo__title');
|
||||||
|
|
||||||
|
// Проходим по каждому найденному элементу
|
||||||
|
titles.forEach(function(title) {
|
||||||
|
// Применяем стиль с использованием атрибута style
|
||||||
|
title.setAttribute("style", "white-space: pre-line;");
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
1
Intra - Меню.options.json
Normal file
1
Intra - Меню.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["http://online.inter-s.kz/apex/f?p=109*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1709396486735},"settings":{"enabled":true,"position":7},"meta":{"name":"Intra - Меню","uuid":"b9abd534-0c9d-4773-8a59-97a2e6a97ad0","modified":1690279943178}}
|
||||||
1
Intra - Меню.storage.json
Normal file
1
Intra - Меню.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388957,"data":{}}
|
||||||
59
Intra - Меню.user.js
Normal file
59
Intra - Меню.user.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Intra - Меню
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.1
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match http://online.inter-s.kz/apex/f?p=109*
|
||||||
|
// @icon https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://online.lse.kz&size=128
|
||||||
|
// @grant GM_registerMenuCommand
|
||||||
|
// @grant GM_setClipboard
|
||||||
|
// @grant GM.setClipboard
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
console.log ("Меню интегрирован");
|
||||||
|
|
||||||
|
GM_registerMenuCommand ("Копировать в буфер", start_to_clipboard);
|
||||||
|
|
||||||
|
function start_to_clipboard () {
|
||||||
|
console.log("Начало");
|
||||||
|
|
||||||
|
var elements = document.querySelectorAll('[id^="P2_EMP_BIRTHDAY_DISPLAY"]');
|
||||||
|
|
||||||
|
var default_ipenl_text = elements[0];
|
||||||
|
var textToCopy = default_ipenl_text.textContent.trim();
|
||||||
|
|
||||||
|
var targetId = "_hiddenCopyText_";
|
||||||
|
var target = document.getElementById(targetId);
|
||||||
|
if (!target) {
|
||||||
|
target = document.createElement("textarea");
|
||||||
|
target.style.position = "absolute";
|
||||||
|
target.style.left = "-9999px";
|
||||||
|
target.style.top = "0";
|
||||||
|
target.id = targetId;
|
||||||
|
document.body.appendChild(target);
|
||||||
|
}
|
||||||
|
target.textContent = textToCopy;
|
||||||
|
|
||||||
|
// select the content
|
||||||
|
var currentFocus = document.activeElement;
|
||||||
|
target.focus();
|
||||||
|
target.setSelectionRange(0, target.value.length);
|
||||||
|
|
||||||
|
// copy the selection
|
||||||
|
var succeed;
|
||||||
|
try {
|
||||||
|
succeed = document.execCommand("copy");
|
||||||
|
} catch(e) {
|
||||||
|
succeed = false;
|
||||||
|
}
|
||||||
|
// restore original focus
|
||||||
|
if (currentFocus && typeof currentFocus.focus === "function") {
|
||||||
|
currentFocus.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear temporary content
|
||||||
|
target.textContent = "";
|
||||||
|
|
||||||
|
console.log("Конец");
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728278524821,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://jira.skynet.kz/browse/*","https://jira2.erg.kz/browse/*","https://jira.skynet.kz/secure/RapidBoard.jspa?*","https://jira2.erg.kz/secure/RapidBoard.jspa?*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":false,"position":34},"meta":{"name":"Jira:Extension-For-Jira.Skynet.KZ-and-Jira2.ERG.KZ","uuid":"53fbf15d-219c-426e-baa8-2942f7ccc58a","modified":1728278524820}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"ts":1708071088812,"data":{}}
|
||||||
383
Jira_Extension-For-Jira.Skynet.KZ-and-Jira2.ERG.KZ.user.js
Normal file
383
Jira_Extension-For-Jira.Skynet.KZ-and-Jira2.ERG.KZ.user.js
Normal file
@ -0,0 +1,383 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Jira:Extension-For-Jira.Skynet.KZ-and-Jira2.ERG.KZ
|
||||||
|
// @namespace https://github.com/le91
|
||||||
|
// @version 1.6_by_01.03.2024
|
||||||
|
// @description Make GET request after page is fully loaded for a specific host - Element Creation for Jira
|
||||||
|
// @author LukasEndigo
|
||||||
|
// @match https://jira.skynet.kz/browse/*
|
||||||
|
// @match https://jira2.erg.kz/browse/*
|
||||||
|
// @match https://jira.skynet.kz/secure/RapidBoard.jspa?*
|
||||||
|
// @match https://jira2.erg.kz/secure/RapidBoard.jspa?*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=jira.com
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
`use strict`;
|
||||||
|
|
||||||
|
async function MakeGetRequest(url) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(url);
|
||||||
|
return await response.json();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка выполнения GET запроса:`, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function MakePostRequest(url, data) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(url, {
|
||||||
|
method: `POST`,
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
});
|
||||||
|
|
||||||
|
return await response.json();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка выполнения POST запроса:`, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function CreateTokenElements() {
|
||||||
|
const toolbar2_secondary = document.querySelector(`div.aui-toolbar2-secondary > div`);
|
||||||
|
if (toolbar2_secondary) {
|
||||||
|
|
||||||
|
const skynetTokenClass = `<a id="skynet_token_class" style="margin: 15px 4px 4px;"><input class="skynet_token_input" placeholder="Input Token" spellcheck="true" type="password" value="" autocomplete="one-time-code"></a>`;
|
||||||
|
const skynetTokenButton = `<a id="skynet_token_button" role="button" class="aui-button toolbar-trigger" href="#" resolved=""><span class="icon aui-icon aui-icon-small aui-iconfont-task"></span></a>`;
|
||||||
|
|
||||||
|
toolbar2_secondary.insertAdjacentHTML(`afterbegin`, skynetTokenButton);
|
||||||
|
toolbar2_secondary.insertAdjacentHTML(`afterbegin`, skynetTokenClass);
|
||||||
|
|
||||||
|
const skynetTokenButtonClass = document.querySelector(`#skynet_token_button`);
|
||||||
|
|
||||||
|
skynetTokenButtonClass.addEventListener(`click`, async function () {
|
||||||
|
skynetTokenButtonClass.setAttribute(`disabled`, ``);
|
||||||
|
const inputTokenValue = document.querySelector(`.skynet_token_input`).value;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const tokenResponse = await MakeGetRequest(`https://extension-ojzdnx5uk6ayq2keje.skynet.kz/api/get_actual_token?v_token=${encodeURIComponent(inputTokenValue)}`);
|
||||||
|
|
||||||
|
if (tokenResponse === `OK`) {
|
||||||
|
localStorage.setItem(`skynet_key_token`, inputTokenValue);
|
||||||
|
alert(`Ключ успешно проверен`);
|
||||||
|
AfterClickAction(`Ключ успешно проверен`);
|
||||||
|
} else if (tokenResponse === `ERROR`) {
|
||||||
|
alert(`Ответ от сервера: ` + tokenResponse);
|
||||||
|
} else {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_Проверка Токена_\n ???`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_Проверка Токена_\nError fetching token. Check the console for details`);
|
||||||
|
}
|
||||||
|
skynetTokenButtonClass.removeAttribute(`disabled`);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function CreateStatusElements() {
|
||||||
|
const toolbar2_secondary = document.querySelector(`div.aui-toolbar2-secondary > div`);
|
||||||
|
console.log('CreateStatusElements');
|
||||||
|
if (toolbar2_secondary) {
|
||||||
|
try {
|
||||||
|
if (localStorage.getItem(`skynet_key_token`)) {
|
||||||
|
const curPageURLOrigin = window.location.href.replace("#","");
|
||||||
|
const curPageURL = encodeURIComponent(curPageURLOrigin);
|
||||||
|
const apiResponse = await MakeGetRequest(`https://extension-ojzdnx5uk6ayq2keje.skynet.kz/api/get_actual_status?v_id=`+ curPageURL + `&v_token=` + localStorage.getItem(`skynet_key_token`));
|
||||||
|
|
||||||
|
apiResponse.result.forEach((status) => {
|
||||||
|
const actionButton = document.createElement(`div`);
|
||||||
|
actionButton.innerHTML = status.html;
|
||||||
|
|
||||||
|
const id = actionButton.firstChild.id;
|
||||||
|
const role = actionButton.firstChild.role;
|
||||||
|
|
||||||
|
actionButton.firstChild.href = `#`;
|
||||||
|
actionButton.firstChild.addEventListener(`click`, async function () {
|
||||||
|
actionButton.setAttribute(`disabled`, ``);
|
||||||
|
try {
|
||||||
|
let module = ``;
|
||||||
|
try {
|
||||||
|
const epicLinkLabel = document.querySelector(`.name[title="Epic Link"]`);
|
||||||
|
if (epicLinkLabel) {
|
||||||
|
const wrapDiv = epicLinkLabel.closest(`.wrap`);
|
||||||
|
if (wrapDiv) {
|
||||||
|
const valueText = wrapDiv.querySelector(`.value`).textContent.trim();
|
||||||
|
module = valueText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {};
|
||||||
|
|
||||||
|
let submodule = ``;
|
||||||
|
try {
|
||||||
|
const linkingModuleLabel = document.getElementById(`linkingmodule-label`);
|
||||||
|
if (linkingModuleLabel && linkingModuleLabel.textContent.trim() === `Issue Links`) {
|
||||||
|
const toggleWrap = linkingModuleLabel.closest(`.toggle-wrap`);
|
||||||
|
if (toggleWrap) {
|
||||||
|
const linkContents = toggleWrap.querySelectorAll(`.link-content`);
|
||||||
|
const concatenatedText = Array.from(linkContents, linkContent => {
|
||||||
|
const linkSummaryElement = linkContent.querySelector(`.link-summary`);
|
||||||
|
return linkSummaryElement ? linkSummaryElement.textContent.trim() : ``;
|
||||||
|
}).join(`, `);
|
||||||
|
submodule = concatenatedText.trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {};
|
||||||
|
|
||||||
|
let project_name = ``;
|
||||||
|
try {
|
||||||
|
project_name = document.querySelector(`#project-name-val`).innerText;
|
||||||
|
} catch (error) {};
|
||||||
|
|
||||||
|
let desc = ``;
|
||||||
|
try {
|
||||||
|
desc = document.querySelector(`#summary-val`).innerText;
|
||||||
|
} catch (error) {};
|
||||||
|
|
||||||
|
const postData = {
|
||||||
|
id: curPageURLOrigin,
|
||||||
|
project_name: project_name,
|
||||||
|
desc: desc,
|
||||||
|
status: status.dic_id,
|
||||||
|
token: localStorage.getItem(`skynet_key_token`),
|
||||||
|
module: module,
|
||||||
|
submodule: submodule
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = await MakePostRequest(status.api, postData);
|
||||||
|
var parsedData;
|
||||||
|
try {
|
||||||
|
parsedData = typeof data === `string` ? JSON.parse(data) : data;
|
||||||
|
// console.log(parsedData);
|
||||||
|
const detailValue = parsedData.detail;
|
||||||
|
if (detailValue.includes(`OK Status`)) {
|
||||||
|
AfterClickAction(data);
|
||||||
|
} else if (detailValue.includes(`NO ACTUAL TOKEN`)) {
|
||||||
|
await ResponseCustomDialog(detailValue);
|
||||||
|
} else {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_DB_ERROR_\n` + detailValue);
|
||||||
|
// console.log(`Другое значение в detail:`, parsedData.detail);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_Ошибка при парсинге JSON_\n` + error);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_Error performing POST request_\n` + error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
toolbar2_secondary.insertBefore(actionButton.firstChild, toolbar2_secondary.firstChild);
|
||||||
|
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
location.reload();
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка "fetching API" данных на запросе GET по статусам`, error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error(`Невозможно найти нужный элемент на странице, попробуйте выполнить команду:\n document.querySelector("div.aui-toolbar2-secondary > div");`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function AfterClickAction(TextMessage) {
|
||||||
|
const existingElements = document.querySelectorAll(`#skynet_token_class, #skynet_token_button`);
|
||||||
|
existingElements.forEach(element => element.remove());
|
||||||
|
|
||||||
|
var skynetElements = document.querySelectorAll(`[id^="skynet"]`);
|
||||||
|
skynetElements.forEach(function(element) {
|
||||||
|
element.remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('AfterClickAction || CLICK');
|
||||||
|
|
||||||
|
if (window.location.href.indexOf("/browse/") != -1) {
|
||||||
|
console.log('AfterClickAction || browse');
|
||||||
|
if (localStorage.getItem(`skynet_key_token`)) {
|
||||||
|
CreateStatusElements();
|
||||||
|
} else {
|
||||||
|
CreateTokenElements();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window.location.href.indexOf("/secure/") != -1) {
|
||||||
|
console.log('AfterClickAction || secure');
|
||||||
|
if (localStorage.getItem(`skynet_key_token`)) {
|
||||||
|
lastHref = null;
|
||||||
|
CreateStatusElements2();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function CreateStatusElements2() {
|
||||||
|
var currentHref = window.location.origin + document.querySelector("#issuekey-val a, #issuekey-val h3 a").href;
|
||||||
|
if (currentHref !== lastHref) {
|
||||||
|
const toolbar2_secondary = document.querySelector('#ghx-detail-head > header > div.ghx-controls');
|
||||||
|
if ( toolbar2_secondary) {
|
||||||
|
lastHref = currentHref;
|
||||||
|
try {
|
||||||
|
if (localStorage.getItem(`skynet_key_token`)) {
|
||||||
|
const curPageURLOrigin = document.querySelector("#issuekey-val a, #issuekey-val h3 a").href.replace("#","");
|
||||||
|
const curPageURL = encodeURIComponent(curPageURLOrigin);
|
||||||
|
const apiResponse = await MakeGetRequest(`https://extension-ojzdnx5uk6ayq2keje.skynet.kz/api/get_actual_status?v_id=`+ curPageURL + `&v_token=` + localStorage.getItem(`skynet_key_token`));
|
||||||
|
|
||||||
|
apiResponse.result.forEach((status) => {
|
||||||
|
const actionButton = document.createElement(`div`);
|
||||||
|
actionButton.innerHTML = status.html;
|
||||||
|
|
||||||
|
const id = actionButton.firstChild.id;
|
||||||
|
const role = actionButton.firstChild.role;
|
||||||
|
|
||||||
|
actionButton.firstChild.href = `#`;
|
||||||
|
actionButton.firstChild.addEventListener(`click`, async function () {
|
||||||
|
actionButton.setAttribute(`disabled`, ``);
|
||||||
|
try {
|
||||||
|
let module = ``;
|
||||||
|
try {
|
||||||
|
const epicLinkLabel = document.querySelector(`.name[title="Epic Link"]`);
|
||||||
|
if (epicLinkLabel) {
|
||||||
|
const wrapDiv = epicLinkLabel.closest(`.wrap`);
|
||||||
|
if (wrapDiv) {
|
||||||
|
const valueText = wrapDiv.querySelector(`.value`).textContent.trim();
|
||||||
|
module = valueText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {};
|
||||||
|
|
||||||
|
let submodule = ``
|
||||||
|
try {
|
||||||
|
const linkingModuleLabel = document.getElementById(`linkingmodule-label`);
|
||||||
|
if (linkingModuleLabel && linkingModuleLabel.textContent.trim() === `Issue Links`) {
|
||||||
|
const toggleWrap = linkingModuleLabel.closest(`.toggle-wrap`);
|
||||||
|
if (toggleWrap) {
|
||||||
|
const linkContents = toggleWrap.querySelectorAll(`.link-content`);
|
||||||
|
const concatenatedText = Array.from(linkContents, linkContent => {
|
||||||
|
const linkSummaryElement = linkContent.querySelector(`.link-summary`);
|
||||||
|
return linkSummaryElement ? linkSummaryElement.textContent.trim() : ``;
|
||||||
|
}).join(`, `);
|
||||||
|
submodule = concatenatedText.trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {};
|
||||||
|
|
||||||
|
const postData = {
|
||||||
|
id: curPageURLOrigin,
|
||||||
|
project_name: document.querySelector("div.ghx-project").innerText,
|
||||||
|
desc: document.querySelector("#summary-val").innerText,
|
||||||
|
status: status.dic_id,
|
||||||
|
token: localStorage.getItem(`skynet_key_token`),
|
||||||
|
module: module,
|
||||||
|
submodule: submodule
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = await MakePostRequest(status.api, postData);
|
||||||
|
var parsedData;
|
||||||
|
try {
|
||||||
|
parsedData = typeof data === `string` ? JSON.parse(data) : data;
|
||||||
|
// console.log(parsedData);
|
||||||
|
const detailValue = parsedData.detail;
|
||||||
|
if (detailValue.includes(`OK Status`)) {
|
||||||
|
AfterClickAction(data);
|
||||||
|
} else if (detailValue.includes(`NO ACTUAL TOKEN`)) {
|
||||||
|
await ResponseCustomDialog(detailValue);
|
||||||
|
} else {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_DB_ERROR_\n` + detailValue);
|
||||||
|
// console.log(`Другое значение в detail:`, parsedData.detail);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_Ошибка при парсинге JSON_\n` + error);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
await ResponseCustomDialog(`Глобальная ошибка\n_Error performing POST request_\n` + error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
toolbar2_secondary.insertBefore(actionButton.firstChild, toolbar2_secondary.firstChild);
|
||||||
|
document.querySelector("#skynet-status-12 > span.dropdown-text").remove();
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
location.reload();
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка "fetching API" данных на запросе GET по статусам`, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.error(`Невозможно найти нужный элемент на странице, попробуйте выполнить команду:\n document.querySelector("div.aui-toolbar2-secondary > div");`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновляем значение lastHref
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function ResponseCustomDialog(response) {
|
||||||
|
localStorage.removeItem(`skynet_key_token`);
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const resultDialog = document.createElement(`div`);
|
||||||
|
|
||||||
|
resultDialog.innerHTML = `
|
||||||
|
<div style="position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgb(0 0 0 / 70%);z-index: 9998;"></div>
|
||||||
|
<div style="position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);background: white;padding: 20px;border: 2px solid #333;border-radius: 2px;box-shadow: 0 0 50px rgb(255 255 255 / 85%);z-index: 9999;">
|
||||||
|
<button id="closeButton" style="position: absolute; top: 0; right: 0; background: none; border: none; font-size: 20px; cursor: pointer;">❌</button>
|
||||||
|
<h2>Response Result</h2>
|
||||||
|
<pre>${response}</pre>
|
||||||
|
</div>`
|
||||||
|
;
|
||||||
|
|
||||||
|
document.body.appendChild(resultDialog);
|
||||||
|
|
||||||
|
const closeButton = document.getElementById(`closeButton`);
|
||||||
|
|
||||||
|
closeButton.addEventListener(`click`, () => {
|
||||||
|
resultDialog.remove();
|
||||||
|
resolve();
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let lastHref = null;
|
||||||
|
console.info(`Skynet Code: Injected`);
|
||||||
|
|
||||||
|
if (window.location.href.indexOf(`/browse/`) != -1) {
|
||||||
|
// console.info(`browse`);
|
||||||
|
const handlePLSidebarChanges = () => {
|
||||||
|
const contentSection = document.querySelector(`#content > section`);
|
||||||
|
if (contentSection && !contentSection.classList.contains(`sidebar-placeholder`)) {
|
||||||
|
console.info(`Skynet Code: Page Load`);
|
||||||
|
if (localStorage.getItem(`skynet_key_token`)) {
|
||||||
|
CreateStatusElements();
|
||||||
|
} else {
|
||||||
|
CreateTokenElements();
|
||||||
|
}
|
||||||
|
observerBrowser.disconnect();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const observerBrowser = new MutationObserver(handlePLSidebarChanges);
|
||||||
|
observerBrowser.observe(document.getElementById(`content`), { childList: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window.location.href.indexOf(`/secure/`) != -1) {
|
||||||
|
// console.info(`secure`);
|
||||||
|
|
||||||
|
const targetElement = document.querySelector(`#gh`);
|
||||||
|
const observerRapidBoard = new MutationObserver((mutationsList, observer) => {
|
||||||
|
mutationsList.forEach((mutation) => {
|
||||||
|
if (mutation.type === `attributes` && mutation.attributeName === `class` && mutation.target === document.querySelector(`#attachmentmodule`)
|
||||||
|
) {
|
||||||
|
if (targetElement.classList.contains(`js-ghx-detail-loaded`)) {
|
||||||
|
setTimeout(CreateStatusElements2(), 500)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
observerRapidBoard.observe(targetElement, { attributes: true, subtree: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
();
|
||||||
1
Joplin_Copy-Code-And-Fix-CSS.options.json
Normal file
1
Joplin_Copy-Code-And-Fix-CSS.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":null,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://*.lkaz.ru/shares/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":14},"meta":{"name":"Joplin:Copy-Code-And-Fix-CSS","uuid":"003cc7d9-4b78-44d7-b58c-55e49f608ac8","modified":1728277729150}}
|
||||||
1
Joplin_Copy-Code-And-Fix-CSS.storage.json
Normal file
1
Joplin_Copy-Code-And-Fix-CSS.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1708679118027,"data":{}}
|
||||||
73
Joplin_Copy-Code-And-Fix-CSS.user.js
Normal file
73
Joplin_Copy-Code-And-Fix-CSS.user.js
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Joplin:Copy-Code-And-Fix-CSS
|
||||||
|
// @namespace https://github.com/le91
|
||||||
|
// @version 1.0.0
|
||||||
|
// @description Добавляет кнопку копирования кода с SVG-иконкой и уведомление о успешном копировании к элементам с классами "hljs" в Joplin иконка создается с помощью https://yqnn.github.io/svg-path-editor/
|
||||||
|
// @author Lukas Endigo
|
||||||
|
// @match https://*.lkaz.ru/shares/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=joplinapp.org
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Функция для копирования текста в буфер обмена
|
||||||
|
function copyToClipboard(text) {
|
||||||
|
const textarea = document.createElement('textarea');
|
||||||
|
textarea.value = text;
|
||||||
|
document.body.appendChild(textarea);
|
||||||
|
textarea.select();
|
||||||
|
document.execCommand('copy');
|
||||||
|
document.body.removeChild(textarea);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для отображения уведомления
|
||||||
|
function showNotification(pMessage, pTimer) {
|
||||||
|
const notification = document.createElement('div');
|
||||||
|
notification.textContent = pMessage;
|
||||||
|
notification.style.position = 'fixed';
|
||||||
|
notification.style.top = '10px';
|
||||||
|
notification.style.right = '10px';
|
||||||
|
notification.style.background = 'rgba(76, 175, 80, 0.8)';
|
||||||
|
notification.style.color = 'white';
|
||||||
|
notification.style.padding = '10px';
|
||||||
|
notification.style.borderRadius = '5px';
|
||||||
|
notification.style.whiteSpace = 'pre-wrap';
|
||||||
|
document.body.appendChild(notification);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
document.body.removeChild(notification);
|
||||||
|
}, pTimer); // Убираем уведомление через 2 секунды
|
||||||
|
}
|
||||||
|
|
||||||
|
// Выбираем все элементы с классами "joplin-editable" и "hljs"
|
||||||
|
const elements = document.querySelectorAll('.hljs');
|
||||||
|
|
||||||
|
// Для каждого элемента добавляем кнопку "Копировать код" с SVG-иконкой и уведомлением
|
||||||
|
elements.forEach(element => {
|
||||||
|
element.style.border = 'solid 1px #767676';
|
||||||
|
element.style.borderRadius = '5px';
|
||||||
|
|
||||||
|
const copyButton = document.createElement('button');
|
||||||
|
copyButton.innerHTML = `<svg class="svg-icon" viewBox="0 -4 14 26" style="height: 14px;width: 30px;">
|
||||||
|
<path d="M0 0V19q0 2 2 2L13 21q2 0 2-2L15 6Q15 4 13 4L2 4Q0 4 0 6M3 6 12 6q1 0 1 1L13 18q0 1-1 1L3 19Q2 19 2 18L2 7Q2 6 3 6M4 0 17 0Q19 0 19 2L19 16C19 17 17 17 17 16L17 3Q17 2 16 2L4 2C3 2 3 0 4 0">
|
||||||
|
</path></svg>
|
||||||
|
<span style="padding-left: 10px;padding-right: 16px;">Копировать</span>`;
|
||||||
|
copyButton.style.position = 'absolute';
|
||||||
|
copyButton.style.top = '0';
|
||||||
|
copyButton.style.right = '0';
|
||||||
|
// copyButton.style.marginTop = '-10px';
|
||||||
|
copyButton.addEventListener('click', () => {
|
||||||
|
const code = element.textContent;
|
||||||
|
const isCopied = copyToClipboard(code);
|
||||||
|
//if (isCopied) {
|
||||||
|
showNotification('Код скопирован в буфер обмена!\n\n'+code, 1500);
|
||||||
|
//}
|
||||||
|
});
|
||||||
|
element.parentNode.style.position = 'relative'; // Устанавливаем позицию родительского элемента как относительную
|
||||||
|
element.parentNode.appendChild(copyButton); // Добавляем кнопку в родительский элемент
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("body > main > div > div.note-main").style.maxWidth = "1400px";
|
||||||
|
})();
|
||||||
1
Nextcloud_Show-Original-DB-User-ID.options.json
Normal file
1
Nextcloud_Show-Original-DB-User-ID.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728276330303,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://*.lkaz.ru/apps/memories/facerecognition"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":32},"meta":{"name":"Nextcloud:Show-Original-DB-User-ID","uuid":"3a6e0c90-1c88-426e-b870-7570f3a3880e","modified":1728276330300}}
|
||||||
1
Nextcloud_Show-Original-DB-User-ID.storage.json
Normal file
1
Nextcloud_Show-Original-DB-User-ID.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1727325805987,"data":{}}
|
||||||
91
Nextcloud_Show-Original-DB-User-ID.user.js
Normal file
91
Nextcloud_Show-Original-DB-User-ID.user.js
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Nextcloud:Show-Original-DB-User-ID
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-09-26
|
||||||
|
// @description Скрипт который добавляет кнопку в меню сайта, позволяющую извлекать и отображать ID элементов из списка, обновляя текстовые значения счетчиков на странице и выводя все ID в консоль.
|
||||||
|
// @author LukasEndigo
|
||||||
|
// @match https://*.lkaz.ru/apps/memories/facerecognition
|
||||||
|
// @icon https://nextcloud.com/c/uploads/2022/03/favicon.png
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Функция для обработки элементов
|
||||||
|
function processItems() {
|
||||||
|
// Ищем все элементы с классом vue-recycle-scroller__item-view
|
||||||
|
const items = document.querySelectorAll('.vue-recycle-scroller__item-view');
|
||||||
|
|
||||||
|
// Создаем массив для хранения всех lastPart
|
||||||
|
const ids = [];
|
||||||
|
|
||||||
|
items.forEach(function(item) {
|
||||||
|
// Находим элемент <a> внутри текущего элемента
|
||||||
|
const linkElement = item.querySelector('a.cluster');
|
||||||
|
if (linkElement) {
|
||||||
|
// Извлекаем href из элемента <a> и разбиваем его по "/"
|
||||||
|
const href = linkElement.getAttribute('href');
|
||||||
|
const parts = href.split('/');
|
||||||
|
const lastPart = parts[parts.length - 1]; // Последняя часть URL, то есть ID
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Находим элемент с классом counter-bubble__counter
|
||||||
|
const counterElement = item.querySelector('.counter-bubble__counter');
|
||||||
|
if (counterElement) {
|
||||||
|
// Получаем текущий текст (число)
|
||||||
|
const currentCount = counterElement.textContent.trim();
|
||||||
|
|
||||||
|
// Проверяем, является ли currentCount числом
|
||||||
|
if (!isNaN(currentCount) && currentCount !== '' && (lastPart/1)) {
|
||||||
|
// Вставляем текст " / ID=#ID" к числу
|
||||||
|
counterElement.textContent = `${currentCount} / ID=#${lastPart}`;
|
||||||
|
// Сохраняем lastPart в массив
|
||||||
|
ids.push(lastPart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Выводим все lastPart в консоль в одну строку, разделяя их запятыми
|
||||||
|
console.info(ids.join(','));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Ожидаем загрузки страницы
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
// Ищем элемент ul с классом app-navigation__settings
|
||||||
|
const settingsMenu = document.querySelector('.app-navigation__settings');
|
||||||
|
if (settingsMenu) {
|
||||||
|
// Создаем новый элемент li
|
||||||
|
const newLi = document.createElement('li');
|
||||||
|
newLi.className = 'app-navigation-entry-wrapper'; // Добавляем класс как у других элементов
|
||||||
|
|
||||||
|
// Создаем содержимое li с flex-контейнером
|
||||||
|
newLi.innerHTML = `
|
||||||
|
<div class="app-navigation-entry" style="display: flex; align-items: center; padding: 5px;">
|
||||||
|
<a href="#" title="Отоброзить PERSON ID" class="app-navigation-entry-link" style="display: flex; align-items: center;">
|
||||||
|
<div class="app-navigation-entry-icon" style="margin-right: 8px;">
|
||||||
|
<span aria-hidden="true" role="img" class="material-design-icon bell-icon">
|
||||||
|
<svg fill="currentColor" width="20" height="20" viewBox="0 0 24 24" class="material-design-icon__svg">
|
||||||
|
<path d="M12,22A2,2 0 0,0 14,20H10A2,2 0 0,0 12,22M18,16V11A6,6 0 0,0 12,5V4A1,1 0 0,0 11,3A1,1 0 0,0 10,4V5A6,6 0 0,0 6,11V16L4,18V19H20V18L18,16Z"></path>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span class="app-navigation-entry__name">Отоброзить</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
// Добавляем новый элемент в ul
|
||||||
|
settingsMenu.appendChild(newLi);
|
||||||
|
|
||||||
|
// Добавляем обработчик клика для новой ссылки
|
||||||
|
newLi.querySelector('a').addEventListener('click', function(e) {
|
||||||
|
e.preventDefault(); // Останавливаем переход по ссылке
|
||||||
|
processItems(); // Вызов функции показа уведомления
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
1
Oracle Apex 22, asut-clone.erg.kz.options.json
Normal file
1
Oracle Apex 22, asut-clone.erg.kz.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://lseo.jv.mt-s.kz:4443/service/f?p=4000:4500*","https://lseo.jv.mt-s.kz:4443/service/f?p=4000:8000*","https://online.lse.kz/service/f?p=4000:4500*","https://online.lse.kz/service/f?p=4000:8000*","https://asut-clone.erg.kz/apex/f?p=4000:4500*","https://asut-clone.erg.kz/apex/f?p=4000:8000*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":false,"position":21},"meta":{"name":"Oracle Apex 22, asut-clone.erg.kz","uuid":"bf21d4c0-e4c2-45b8-a01e-4cc1aafb4f4f","modified":1709614216895}}
|
||||||
1
Oracle Apex 22, asut-clone.erg.kz.storage.json
Normal file
1
Oracle Apex 22, asut-clone.erg.kz.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1709614216898,"data":{}}
|
||||||
276
Oracle Apex 22, asut-clone.erg.kz.user.js
Normal file
276
Oracle Apex 22, asut-clone.erg.kz.user.js
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
// ==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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
1
Oracle Apex Buttons - русский.options.json
Normal file
1
Oracle Apex Buttons - русский.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["http://online.intercom.kz/apex/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":true,"position":1},"meta":{"name":"Oracle Apex Buttons - русский","uuid":"45ec050e-986b-4db9-bfed-39d116c208eb","modified":1684828951831,"file_url":"https://gitlabappserver.lkaz.ru/lukas91/js-tampermonkey-public-scripts/raw/branch/main/Oracle%20Apex%20Buttons%20-%20%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9.user.js"}}
|
||||||
1
Oracle Apex Buttons - русский.storage.json
Normal file
1
Oracle Apex Buttons - русский.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388949,"data":{}}
|
||||||
73
Oracle Apex Buttons - русский.user.js
Normal file
73
Oracle Apex Buttons - русский.user.js
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Oracle Apex Buttons - русский
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.1
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match http://online.intercom.kz/apex/*
|
||||||
|
// @icon http://anpsthemes.com/constructo/wp-content/uploads/2014/12/favicon.png
|
||||||
|
// @grant GM_registerMenuCommand
|
||||||
|
|
||||||
|
// ==/UserScript==
|
||||||
|
console.log ("Меню интегрирован");
|
||||||
|
|
||||||
|
GM_registerMenuCommand ("Запуск", start);
|
||||||
|
GM_registerMenuCommand ("Изменить размер формы", form_fix);
|
||||||
|
GM_registerMenuCommand ("Выбрать все Items", select_all_items);
|
||||||
|
|
||||||
|
function sleep(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
function start () {
|
||||||
|
const tree_main = document.querySelector("#PDrenderingTree");
|
||||||
|
const all_li1 = tree_main.querySelectorAll("li");
|
||||||
|
|
||||||
|
const region_li = Array.from(all_li1).filter(li => li.outerText.includes("Region Buttons"));
|
||||||
|
|
||||||
|
//const region_lis = region_li.map(li => li.id);
|
||||||
|
const last_region_li = region_li[region_li.length - 1];
|
||||||
|
const last_region_id = last_region_li.id;
|
||||||
|
|
||||||
|
//console.log(last_region_id); // Выводим идентификатор последнего элемента
|
||||||
|
|
||||||
|
const all_buttoms = document.querySelector('#'+last_region_id);
|
||||||
|
const all_li2 = all_buttoms.querySelectorAll("li");
|
||||||
|
|
||||||
|
// Фильтруем элементы списка <li>, содержащие текст "SAVE"
|
||||||
|
const save_li = Array.from(all_li2).filter(li => li.outerText.includes("SAVE"));
|
||||||
|
|
||||||
|
// Создаем массив, содержащий идентификаторы элементов <li>, соответствующих отфильтрованным записям
|
||||||
|
const save_id = save_li.map(li => li.id)[0];
|
||||||
|
|
||||||
|
//console.log(save_ids); // Выводим массив идентификаторов
|
||||||
|
document.querySelector('#'+save_id).click();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
document.querySelector("#peMain_2").value = "Применить";
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function form_fix () {
|
||||||
|
document.querySelector("body > div.ui-dialog.ui-corner-all.ui-widget.ui-widget-content.ui-front.ui-dialog--apex.a-Dialog--wizard.ui-draggable.ui-resizable").setAttribute("style","position: fixed; height: 850px; width: 800px; top: 30px; left: 498.5px; z-index: 903;")
|
||||||
|
document.querySelector("#apex_dialog_1").setAttribute("style","width: auto;min-height: 0px;max-height: none;height: auto;")
|
||||||
|
document.querySelector("#wwvFlowForm > div.a-Dialog.a-Dialog--wizard > div > div.a-Dialog-body").setAttribute("style","top: 58px;bottom: 64px;height: auto;paddinf:0px;")
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_all_items () {
|
||||||
|
const selectedElement = document.querySelector("div.a-TreeView-content.is-selected");
|
||||||
|
|
||||||
|
if (selectedElement) {
|
||||||
|
const nextElement = selectedElement.nextElementSibling;
|
||||||
|
|
||||||
|
if (nextElement) {
|
||||||
|
console.log(nextElement);
|
||||||
|
} else {
|
||||||
|
console.log("Следующий элемент не найден.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log("Выбранный элемент не найден.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728276682236,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://lseo.jv.mt-s.kz:4443/service/f?p=4000:4500*","https://lseo.jv.mt-s.kz:4443/service/f?p=4000:8000*","https://online.lse.kz/service/f?p=4000:4500*","https://online.lse.kz/service/f?p=4000:8000*","https://asut-clone.erg.kz/apex/f?p=4000:4500*","https://asut-clone.erg.kz/apex/f?p=4000:8000*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":12},"meta":{"name":"OracleApex5:Get-External-Internal-Url-From-Page-Use-Search","uuid":"726b753c-c2a0-4048-94c3-592702b1ff97","modified":1728276682234,"file_url":"https://gitlabappserver.lkaz.ru/lukas91/js-tampermonkey-public-scripts/raw/branch/main/Oracle%20Apex%205%2C%20lseo.jv.mt-s.kz.user.js"}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707812523929,"data":{}}
|
||||||
@ -0,0 +1,271 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name OracleApex5:Get-External-Internal-Url-From-Page-Use-Search
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-02-13
|
||||||
|
// @description Скрипт, который отслеживает изменения в элементе страницы с помощью MutationObserver, извлекает данные с сервера, добавляет их в выпадающий список и обновляет информацию в зависимости от полученных результатов поиска.
|
||||||
|
// @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://docs.oracle.com/favicon.ico
|
||||||
|
// @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.host + "/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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://lseo.jv.mt-s.kz:4443/service/f?p=4000:4500*","https://lseo.jv.mt-s.kz:4443/service/f?p=4000:8000*","https://online.lse.kz/service/f?p=4000:4500*","https://online.lse.kz/service/f?p=4000:8000*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":false,"position":20},"meta":{"name":"Search Menu - Oracle Apex 5, lseo.jv.mt-s.kz","uuid":"41ebf64f-b1a5-434f-802e-4df4f9d7f294","modified":1709396709447}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"ts":1709396799975,"data":{}}
|
||||||
274
Search Menu - Oracle Apex 5, lseo.jv.mt-s.kz.user.js
Normal file
274
Search Menu - Oracle Apex 5, lseo.jv.mt-s.kz.user.js
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Search Menu - Oracle Apex 5, lseo.jv.mt-s.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*
|
||||||
|
// @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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
1
Sync_Extension-For-app.huawei.com-Actual.options.json
Normal file
1
Sync_Extension-For-app.huawei.com-Actual.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728276962016,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://app.huawei.com/iscp/esupplier/portal*"],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":false,"position":28},"meta":{"name":"Sync:Extension-For-app.huawei.com-Actual","uuid":"eec3fe7b-1732-4770-a17b-f5a48904180b","modified":1728276962011}}
|
||||||
1
Sync_Extension-For-app.huawei.com-Actual.storage.json
Normal file
1
Sync_Extension-For-app.huawei.com-Actual.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1723457560544,"data":{}}
|
||||||
197
Sync_Extension-For-app.huawei.com-Actual.user.js
Normal file
197
Sync_Extension-For-app.huawei.com-Actual.user.js
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Sync:Extension-For-app.huawei.com-Actual
|
||||||
|
// @namespace https://github.com/le91
|
||||||
|
// @version 1.14--12.08.2024
|
||||||
|
// @description Перехватываем XMLHttpRequest и обновляем глобальные переменные для кнопки "Синхронизация"
|
||||||
|
// @author LukasEndigo
|
||||||
|
// @match https://app.huawei.com/iscp/esupplier/portal*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=app.huawei.com
|
||||||
|
// @run-at document-end
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Глобальные переменные
|
||||||
|
let Global_poHeaderId, Global_instanceId, Global_poReleaseId;
|
||||||
|
|
||||||
|
// Перехват XMLHttpRequest
|
||||||
|
(function() {
|
||||||
|
console.log('*************** ЛОГ function');
|
||||||
|
// Сохранение оригинальных методов XMLHttpRequest
|
||||||
|
const originalOpen = XMLHttpRequest.prototype.open;
|
||||||
|
const originalSend = XMLHttpRequest.prototype.send;
|
||||||
|
console.log('*************** ЛОГ originalOpen и originalSend');
|
||||||
|
// Переопределение метода open
|
||||||
|
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
|
||||||
|
this._url = url; // Сохраняем URL запроса
|
||||||
|
return originalOpen.apply(this, arguments);
|
||||||
|
};
|
||||||
|
console.log('*************** ЛОГ originalOpen и originalSend');
|
||||||
|
// Переопределение метода send
|
||||||
|
XMLHttpRequest.prototype.send = function(body) {
|
||||||
|
console.log('*************** ЛОГ XMLHttpRequest.prototype.send = function(body)');
|
||||||
|
// Проверка URL с использованием includes для поиска части пути
|
||||||
|
if (this._url && this._url.includes('/iscp/esupplier/po/services/poList/findPoLineList/20/1')) {
|
||||||
|
console.log('*************** ЛОГ','XMLHttpRequest.prototype.send = function(body)');
|
||||||
|
try {
|
||||||
|
console.log('*************** ЛОГ','JSON.parse(body)');
|
||||||
|
const requestPayload = JSON.parse(body); // Пытаемся распарсить Request Payload
|
||||||
|
// Обновление глобальных переменных из requestPayload
|
||||||
|
if (requestPayload.poHeaderId) Global_poHeaderId = requestPayload.poHeaderId;
|
||||||
|
if (requestPayload.instanceId) Global_instanceId = requestPayload.instanceId;
|
||||||
|
if (requestPayload.poReleaseId) Global_poReleaseId = requestPayload.poReleaseId;
|
||||||
|
console.log('*************** ЛОГ','if Global_poHeaderId');
|
||||||
|
|
||||||
|
console.log('Перехваченный запрос на URL:', this._url);
|
||||||
|
console.log('Request Payload:', requestPayload); // Здесь requestPayload - это содержимое запроса
|
||||||
|
console.log('Request Payload, Global_poHeaderId:', Global_poHeaderId); // Здесь requestPayload - это содержимое запроса
|
||||||
|
console.log('Request Payload, Global_instanceId:', Global_instanceId); // Здесь requestPayload - это содержимое запроса
|
||||||
|
console.log('Request Payload, Global_poReleaseId:', Global_poReleaseId); // Здесь requestPayload - это содержимое запроса
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Ошибка при парсинге Request Payload:', e);
|
||||||
|
console.log('*************** ЛОГ','Request Payload:');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (1 == 1) {
|
||||||
|
console.log('*************** ЛОГ','1 == 1 ');
|
||||||
|
try {
|
||||||
|
console.log('*************** ЛОГ',' TRY 1 ');
|
||||||
|
const requestPayload = JSON.parse(body); // Пытаемся распарсить Request Payload
|
||||||
|
// Обновление глобальных переменных из requestPayload
|
||||||
|
if (requestPayload.poHeaderId) Global_poHeaderId = requestPayload.poHeaderId;
|
||||||
|
if (requestPayload.instanceId) Global_instanceId = requestPayload.instanceId;
|
||||||
|
if (requestPayload.poReleaseId) Global_poReleaseId = requestPayload.poReleaseId;
|
||||||
|
console.log('*************** ЛОГ','Global_poHeaderId 2222 ');
|
||||||
|
|
||||||
|
console.log('Перехваченный запрос на URL:', this._url);
|
||||||
|
console.log('Request Payload:', requestPayload); // Здесь requestPayload - это содержимое запроса
|
||||||
|
console.log('Request Payload, Global_poHeaderId:', Global_poHeaderId); // Здесь requestPayload - это содержимое запроса
|
||||||
|
console.log('Request Payload, Global_instanceId:', Global_instanceId); // Здесь requestPayload - это содержимое запроса
|
||||||
|
console.log('Request Payload, Global_poReleaseId:', Global_poReleaseId); // Здесь requestPayload - это содержимое запроса
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Ошибка при парсинге Request Payload:', e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('*************** ЛОГ','END END END');
|
||||||
|
return originalSend.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
console.log('*************** ЛОГ','FREEE 82');
|
||||||
|
|
||||||
|
// Наблюдатель для отслеживания изменений в DOM
|
||||||
|
const observer = new MutationObserver(mutations => {
|
||||||
|
mutations.forEach(mutation => {
|
||||||
|
if (mutation.addedNodes) {
|
||||||
|
mutation.addedNodes.forEach(node => {
|
||||||
|
if (node.nodeType === 1) { // элемент
|
||||||
|
checkAndAddSyncButton(node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Запуск наблюдателя
|
||||||
|
observer.observe(document.body, { childList: true, subtree: true });
|
||||||
|
|
||||||
|
// Проверка и добавление кнопки "Синхронизация"
|
||||||
|
function checkAndAddSyncButton(node) {
|
||||||
|
const targetClass = "webix_view webix_hwFlextableV2_toolbar webix_layout_line";
|
||||||
|
if (node.classList && node.classList.contains(targetClass)) {
|
||||||
|
addSyncButton(node);
|
||||||
|
}
|
||||||
|
node.querySelectorAll(`.${targetClass.split(" ").join(".")}`).forEach(addSyncButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSyncButton(container) {
|
||||||
|
console.log('ЗАПУСК Перехвачено 84 paramsNew:');
|
||||||
|
const exportTemplateButton = Array.from(container.querySelectorAll('button.webixtype_default'))
|
||||||
|
.find(button => button.textContent.trim() === 'Export Acceptance Template');
|
||||||
|
|
||||||
|
if (exportTemplateButton) {
|
||||||
|
// Создаем кнопку, если она еще не добавлена
|
||||||
|
if (!container.querySelector('.le-skynet-sync-button')) {
|
||||||
|
const syncButton = document.createElement('div');
|
||||||
|
syncButton.className = 'webix_view webix_control webix_el_button hwButtonV2 webix_hwFlextableV2_customBtn le-skynet-sync-button';
|
||||||
|
syncButton.style.cssText = 'display: inline-block; vertical-align: top; border-width: 0px; margin-top: 0px; margin-left: -1px; width: 188px; height: 34px;';
|
||||||
|
|
||||||
|
syncButton.innerHTML = '<div class="webix_el_box" style="width:188px; height:34px"><button type="button" class="webixtype_default" style="">Синхронизация</button></div>';
|
||||||
|
|
||||||
|
syncButton.querySelector('button').addEventListener('click', () => executeSyncRequest(syncButton));
|
||||||
|
|
||||||
|
exportTemplateButton.parentElement.parentElement.insertAdjacentElement('afterend', syncButton);
|
||||||
|
console.log('Добавлена кнопка "Синхронизация", Global_poHeaderId:', Global_poHeaderId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to execute sync request on button click
|
||||||
|
function executeSyncRequest(buttonContainer) {
|
||||||
|
const button = buttonContainer.querySelector('button');
|
||||||
|
button.disabled = true;
|
||||||
|
button.textContent = 'В процессе синхронизации';
|
||||||
|
button.style.cssText = 'border: 1px solid #ffffff; background-color: rgb(170 230 255); cursor: wait;';
|
||||||
|
console.log('ЗАПУСК Перехвачено 112 paramsNew:');
|
||||||
|
fetch("https://app.huawei.com/iscp/esupplier/po/services/poList/findPoLineList/20/1", {
|
||||||
|
headers: {
|
||||||
|
"Accept": "*/*",
|
||||||
|
"Accept-Language": "ru,en;q=0.9",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
referrer: "https://app.huawei.com/iscp/esupplier/portal/",
|
||||||
|
referrerPolicy: "strict-origin-when-cross-origin",
|
||||||
|
body: JSON.stringify({
|
||||||
|
instanceId: Global_instanceId,
|
||||||
|
poHeaderId: Global_poHeaderId,
|
||||||
|
poReleaseId: Global_poReleaseId,
|
||||||
|
poSubType: "E",
|
||||||
|
calculateOrderAmount: true
|
||||||
|
}),
|
||||||
|
method: "POST",
|
||||||
|
mode: "cors",
|
||||||
|
credentials: "include"
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
// console.log('Синхронизация данные:', JSON.stringify(data, null, 2)); // Форматирование JSON для удобного просмотра
|
||||||
|
console.log('ЗАПУСК Перехвачено 135 paramsNew:');
|
||||||
|
return fetch("https://huawei-po-5m2hn5f7q75izgid.lse.kz/api/app_huawei_po", {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(data)
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(result => {
|
||||||
|
console.log('Отправка запросом poHeaderId как:', Global_poHeaderId, '| ответ:', JSON.stringify(result));
|
||||||
|
// console.log('Ответ от API:', JSON.stringify(result, null, 2));
|
||||||
|
if (result.detail !== "OK Status") {
|
||||||
|
throw new Error('Ошибка от API');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
button.style.backgroundColor = 'rgb(255 200 200)';
|
||||||
|
console.error('Error:', error);
|
||||||
|
button.textContent = 'ОШИБКА';
|
||||||
|
button.disabled = true;
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
button.disabled = false;
|
||||||
|
if (button.textContent !== 'ОШИБКА') {
|
||||||
|
button.textContent = 'Успешно';
|
||||||
|
button.style.backgroundColor = 'rgb(200 245 200)';
|
||||||
|
button.style.cursor = '';
|
||||||
|
button.style.border = '1px solid #d9d9d9';
|
||||||
|
button.disabled = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log('ЗАПУСК Перехвачено 168 paramsNew:');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('=======================================Успешно внедрен==============================================');
|
||||||
1
Synology_Update-FileStation-Tree-File-Lists.options.json
Normal file
1
Synology_Update-FileStation-Tree-File-Lists.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":null,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["http://10.10.5.118:5000/","https://10.10.5.118:5001/","http://10.10.1.17:5000/"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":22},"meta":{"name":"Synology:Update-FileStation-Tree-File-Lists","uuid":"c6d3a9b2-acf1-4506-93fd-fcc3d1559379","modified":1728277454393}}
|
||||||
1
Synology_Update-FileStation-Tree-File-Lists.storage.json
Normal file
1
Synology_Update-FileStation-Tree-File-Lists.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1716178023696,"data":{}}
|
||||||
40
Synology_Update-FileStation-Tree-File-Lists.user.js
Normal file
40
Synology_Update-FileStation-Tree-File-Lists.user.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Synology:Update-FileStation-Tree-File-Lists
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-05-20
|
||||||
|
// @description Скрипт, который добавляет новые CSS стили для элементов дерева на странице, изменяя их отображение, размеры и отступы.
|
||||||
|
// @author LukasEndigo
|
||||||
|
// @match http://10.10.5.118:5000/
|
||||||
|
// @match https://10.10.5.118:5001/
|
||||||
|
// @match http://10.10.1.17:5000/
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=demo.synology.com
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
// Создаем новый элемент <style>
|
||||||
|
var style = document.createElement('style');
|
||||||
|
style.type = 'text/css';
|
||||||
|
|
||||||
|
// Добавляем CSS правила в элемент <style>
|
||||||
|
style.innerHTML = '.syno-ux-treepanel .x-tree-node-el {' +
|
||||||
|
'display: table;' +
|
||||||
|
'width: 100%;' +
|
||||||
|
'line-height: 14px;' +
|
||||||
|
'height: 14px;' +
|
||||||
|
'overflow: hidden;' +
|
||||||
|
'}' +
|
||||||
|
'' +
|
||||||
|
'.syno-ux-treepanel .x-tree-node .x-tree-ec-icon {' +
|
||||||
|
'height: 14px;' +
|
||||||
|
'width: 14px;' +
|
||||||
|
'margin: -2px 4px 0px 0px' +
|
||||||
|
'}'
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
// Находим элемент <head> и добавляем туда наш новый элемент <style>
|
||||||
|
document.head.appendChild(style);
|
||||||
|
|
||||||
|
})();
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["http://online.intercom.kz/apex/f?p=4000:4008*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":true,"position":2},"meta":{"name":"Tampermonkey Example - GET request with jQuery","uuid":"febc225d-a8a3-4252-a5d7-5b1a745ca858","modified":1684828911422}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388950,"data":{}}
|
||||||
129
Tampermonkey Example - GET request with jQuery.user.js
Normal file
129
Tampermonkey Example - GET request with jQuery.user.js
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Tampermonkey Example - GET request with jQuery
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.1
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match http://online.intercom.kz/apex/f?p=4000:4008*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=intercom.kz
|
||||||
|
// @grant GM_xmlhttpRequest
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Make GET request with jQuery
|
||||||
|
var text = ""
|
||||||
|
var str = ""
|
||||||
|
var arr = ""
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
var link = window.location.href.split(":")
|
||||||
|
var session = link[3];
|
||||||
|
|
||||||
|
$.get("http://online.intercom.kz/apex/f?p=4000:4070:"+session+":::::", function(data) {
|
||||||
|
var response = data;
|
||||||
|
var parser = new DOMParser();
|
||||||
|
var htmlDoc = parser.parseFromString(response, 'text/html');
|
||||||
|
var table = htmlDoc.querySelector('#R47949307778486335_data_panel');
|
||||||
|
var rows = table.querySelectorAll('tr');
|
||||||
|
//console.log(rows);
|
||||||
|
var cur_link = window.location.href.split(":")
|
||||||
|
var old_url = window.location.href.split("/");
|
||||||
|
var url_header = old_url[old_url.length - 1];
|
||||||
|
var v_parts = url_header.split(':');
|
||||||
|
v_parts.pop();
|
||||||
|
var new_url = v_parts.join(':') + ':';
|
||||||
|
//console.log(new_url);
|
||||||
|
|
||||||
|
var id_curr = cur_link[8];
|
||||||
|
var id_curr_text = ''
|
||||||
|
var id_next = ''
|
||||||
|
var id_next_text = ''
|
||||||
|
var id_prev = ''
|
||||||
|
var id_prev_text = ''
|
||||||
|
var my_id = 0;
|
||||||
|
|
||||||
|
// Loop through each row to find the index of the row with the specified selector
|
||||||
|
for (var i = 0; i < rows.length; i++) {
|
||||||
|
|
||||||
|
if (rows[i].innerHTML.includes(id_curr)) {
|
||||||
|
my_id = i
|
||||||
|
//console.log('my_id:'+my_id + ' or ' + i);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
for (var i2 = 0; i2 < rows.length; i2++) {
|
||||||
|
try {
|
||||||
|
if ((my_id-1) == i2) {
|
||||||
|
//console.log("Моя предыщая запись:" + i2);
|
||||||
|
text = rows[i2].innerHTML.split(":")[7]
|
||||||
|
str = text.split("<")[0]
|
||||||
|
arr = str.split('">');
|
||||||
|
id_prev = arr[0];
|
||||||
|
id_prev_text = arr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
id_prev = '';
|
||||||
|
id_prev_text = '.';
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
if (my_id==i2) {
|
||||||
|
//console.log("Моя текущая запись:" + my_id + ' | это: '+ id_curr);
|
||||||
|
text = rows[i2].innerHTML.split(":")[7]
|
||||||
|
str = text.split("<")[0]
|
||||||
|
arr = str.split('">');
|
||||||
|
id_curr = arr[0];
|
||||||
|
id_curr_text = arr[1];
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
id_prev = '';
|
||||||
|
id_prev_text = '.';
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (my_id+1==i2) {
|
||||||
|
//console.log("Моя следующая запись:" + i2);
|
||||||
|
text = rows[i2].innerHTML.split(":")[7]
|
||||||
|
str = text.split("<")[0]
|
||||||
|
arr = str.split('">');
|
||||||
|
id_next = arr[0];
|
||||||
|
id_next_text = arr[1];
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
id_prev = '';
|
||||||
|
id_prev_text = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var old_buttons = document.querySelector("#R91255107460444101 > div > div.a-ButtonRegion-col.a-ButtonRegion-col--right > div").innerHTML
|
||||||
|
|
||||||
|
var rows_length = rows.length - 1
|
||||||
|
var v_counter = '<button class="a-Button " id="button_curr_text" disabled>('+ rows_length +') '+my_id +' </button>'
|
||||||
|
|
||||||
|
if (id_prev_text != '.') {id_prev_text = '<button onclick="apex.navigation.redirect(\''+ new_url+id_prev +'\');" class="a-Button " type="button" id="button_prev_text">'+id_prev_text+'</button>'} else {id_prev_text = ''}
|
||||||
|
id_curr_text = '<button onclick="apex.navigation.redirect(\''+ new_url+id_curr +'\');" class="a-Button a-Button--hot" type="button" id="button_curr_text" disabled>'+id_curr_text+'</button>'
|
||||||
|
if (id_next_text != '.') {id_next_text = '<button onclick="apex.navigation.redirect(\''+ new_url+id_next +'\');" class="a-Button " type="button" id="button_next_text">'+id_next_text+'</button>'} else {id_next_text = ''}
|
||||||
|
|
||||||
|
old_buttons = v_counter + id_prev_text + id_curr_text + id_next_text + '<span style="margin-right: 80px;"></span>' + old_buttons
|
||||||
|
document.querySelector(".a-ButtonRegion-col--right > div").innerHTML = old_buttons
|
||||||
|
|
||||||
|
//console.log(id_prev);
|
||||||
|
//console.log(id_prev_text);
|
||||||
|
//console.log(id_curr);
|
||||||
|
//console.log(id_curr_text);
|
||||||
|
//console.log(id_next);
|
||||||
|
//console.log(id_next_text);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
1
Test 01 go link.options.json
Normal file
1
Test 01 go link.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://traefik-sdsdcrsoita9e6uknkyn.skynet.kz/dashboard/"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":false,"position":26},"meta":{"name":"Test 01 go link","uuid":"057f272d-20db-46c7-b457-eedbdf1c2c28","modified":1721713910449}}
|
||||||
1
Test 01 go link.storage.json
Normal file
1
Test 01 go link.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1721713910453,"data":{}}
|
||||||
53
Test 01 go link.user.js
Normal file
53
Test 01 go link.user.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Test 01 go link
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-07-23
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://traefik-sdsdcrsoita9e6uknkyn.skynet.kz/dashboard/
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=skynet.kz
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Функция для добавления ссылки
|
||||||
|
function addLink(element, url) {
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.target = '_blank';
|
||||||
|
link.textContent = 'Open Link';
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.style.marginBottom = '10px'; // Добавляем отступ для красоты
|
||||||
|
div.appendChild(link);
|
||||||
|
element.parentNode.insertBefore(div, element);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для обработки каждой строки таблицы
|
||||||
|
function processTableRows() {
|
||||||
|
const rows = document.querySelectorAll('tbody > tr');
|
||||||
|
rows.forEach(row => {
|
||||||
|
const hostCell = row.querySelector('.app-chip-rule');
|
||||||
|
if (hostCell && hostCell.textContent.includes('Host(`oraclexe.skynet.kz`)')) {
|
||||||
|
const entryPointCell = row.querySelector('.app-chip-entry-points');
|
||||||
|
if (entryPointCell) {
|
||||||
|
const entryPoint = entryPointCell.textContent.trim();
|
||||||
|
const hostText = hostCell.textContent.replace('Host(', '').replace(')', '').trim();
|
||||||
|
let url;
|
||||||
|
if (entryPoint === 'http') {
|
||||||
|
url = `http://${hostText}`;
|
||||||
|
} else if (entryPoint === 'https') {
|
||||||
|
url = `https://${hostText}`;
|
||||||
|
}
|
||||||
|
if (url) {
|
||||||
|
addLink(hostCell, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запускаем обработку после загрузки страницы
|
||||||
|
window.addEventListener('load', processTableRows);
|
||||||
|
})();
|
||||||
1
Test Go link 2.options.json
Normal file
1
Test Go link 2.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://traefik-sdsdcrsoita9e6uknkyn.skynet.kz/dashboard/"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1721714266531},"settings":{"enabled":true,"position":27},"meta":{"name":"Test Go link 2","uuid":"e2d7a86a-5250-469a-887f-d6a9fce089d5","modified":1721714266530}}
|
||||||
1
Test Go link 2.storage.json
Normal file
1
Test Go link 2.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1721713943952,"data":{}}
|
||||||
60
Test Go link 2.user.js
Normal file
60
Test Go link 2.user.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Test Go link 2
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-07-23
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://traefik-sdsdcrsoita9e6uknkyn.skynet.kz/dashboard/
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=skynet.kz
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
console.log('Start 15')
|
||||||
|
// Utility function to select elements by attribute pattern
|
||||||
|
function querySelectorAllByAttrPattern(attributePattern) {
|
||||||
|
const allElements = document.getElementsByTagName('*');
|
||||||
|
const matchingElements = [];
|
||||||
|
for (let el of allElements) {
|
||||||
|
for (let attr of el.attributes) {
|
||||||
|
if (attributePattern.test(attr.name)) {
|
||||||
|
matchingElements.push(el);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matchingElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Utility function to create and insert the link
|
||||||
|
function createAndInsertLink(hostElem, protocol) {
|
||||||
|
const hostName = hostElem.textContent.match(/Host\(`([^`]+)`\)/)[1];
|
||||||
|
const url = `${protocol}://${hostName}`;
|
||||||
|
const linkDiv = document.createElement('div');
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.target = '_blank';
|
||||||
|
link.textContent = `Open ${hostName}`;
|
||||||
|
linkDiv.appendChild(link);
|
||||||
|
hostElem.parentNode.insertBefore(linkDiv, hostElem);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select all elements with the specified attribute pattern
|
||||||
|
const elements = querySelectorAllByAttrPattern(/^data-v-.*/);
|
||||||
|
console.log('Start 46')
|
||||||
|
elements.forEach(element => {
|
||||||
|
const hostElem = element.querySelector('.q-chip.app-chip-rule .q-chip__content');
|
||||||
|
const protocolElem = element.querySelector('.q-chip.app-chip-entry-points .q-chip__content');
|
||||||
|
|
||||||
|
if (hostElem && protocolElem) {
|
||||||
|
const protocol = protocolElem.textContent.trim();
|
||||||
|
if (protocol === 'http' || protocol === 'https') {
|
||||||
|
createAndInsertLink(hostElem, protocol);
|
||||||
|
console.log('Start 55')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
1
Treafik_Update-Dashboard-Style.options.json
Normal file
1
Treafik_Update-Dashboard-Style.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728276998333,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://*.skynet.kz/dashboard/*","https://*.lkaz.ru/dashboard/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":24},"meta":{"name":"Treafik:Update-Dashboard-Style","uuid":"88cfb989-65ad-4375-8857-338e3338b3c2","modified":1728276998332}}
|
||||||
1
Treafik_Update-Dashboard-Style.storage.json
Normal file
1
Treafik_Update-Dashboard-Style.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1721190583352,"data":{}}
|
||||||
40
Treafik_Update-Dashboard-Style.user.js
Normal file
40
Treafik_Update-Dashboard-Style.user.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Treafik:Update-Dashboard-Style
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-07-17
|
||||||
|
// @description Скрипт, который отслеживает изменения на странице и изменяет стили всех элементов с классом `.q-card__section`, добавляя отступы, рамку и скругление углов.
|
||||||
|
// @author LukasEndigo
|
||||||
|
// @match https://*.skynet.kz/dashboard/*
|
||||||
|
// @match https://*.lkaz.ru/dashboard/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=https://traefik.io
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Функция для изменения стилей элементов
|
||||||
|
function changeStyles(element) {
|
||||||
|
element.style.margin = '1px 0px 1px 0px';
|
||||||
|
element.style.padding = '2px';
|
||||||
|
element.style.border = 'solid 1px #dfdfdf';
|
||||||
|
element.style.borderRadius = '6px';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создаем MutationObserver для отслеживания изменений на странице
|
||||||
|
const observer = new MutationObserver(() => {
|
||||||
|
// Находим все элементы, соответствующие селектору
|
||||||
|
document.querySelectorAll('.q-card__section').forEach(element => {
|
||||||
|
changeStyles(element);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Наблюдаем за всем телом документа на предмет изменений
|
||||||
|
observer.observe(document.body, { childList: true, subtree: true });
|
||||||
|
|
||||||
|
// Первоначальное изменение стилей при загрузке страницы
|
||||||
|
document.querySelectorAll('.q-card__section').forEach(element => {
|
||||||
|
changeStyles(element);
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
1
TryShowDockerFileTag.options.json
Normal file
1
TryShowDockerFileTag.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://hub.docker.com/r/*","https://hub.docker.com/u/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":"document-idle","sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1709395690332},"settings":{"enabled":true,"position":6},"meta":{"name":"TryShowDockerFileTag","uuid":"670cded8-896d-43d8-9de5-1b98c4dfec18","modified":1708921255741}}
|
||||||
1
TryShowDockerFileTag.storage.json
Normal file
1
TryShowDockerFileTag.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388956,"data":{}}
|
||||||
30
TryShowDockerFileTag.user.js
Normal file
30
TryShowDockerFileTag.user.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name TryShowDockerFileTag
|
||||||
|
// @namespace https://github.com/le91
|
||||||
|
// @version 1.0.0
|
||||||
|
// @description Попробовать показать вкладку DockerFile
|
||||||
|
// @author You
|
||||||
|
// @match https://hub.docker.com/r/*
|
||||||
|
// @match https://hub.docker.com/u/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=docker.com
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
window.onload = setTimeout(function() {
|
||||||
|
// Ваш код скрипта здесь
|
||||||
|
const v_default = document.querySelector(".MuiTabs-flexContainer").innerHTML
|
||||||
|
const parts = window.location.href.split('/');
|
||||||
|
const baseUrl = parts.slice(0, 6).join('/') + '/DockerFile';
|
||||||
|
|
||||||
|
var v_dockerfile = document.querySelector(".MuiTabs-flexContainer > a:nth-child(2)").outerHTML
|
||||||
|
|
||||||
|
v_dockerfile = v_dockerfile.replace('tabindex="-1"','tabindex="-2"').replace('>Tags<','>DockerFile<')
|
||||||
|
var replacedText = v_dockerfile.replace(/href="[^"]*"/, 'href="' + baseUrl + '"');
|
||||||
|
|
||||||
|
document.querySelector(".MuiTabs-flexContainer").innerHTML = v_default + replacedText
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://mail.yandex.kz/?uid=*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":true,"position":17},"meta":{"name":"Yandex.Mail - Убрать лишнее рекламы на почте","uuid":"e5600f9b-d02d-4416-b5b0-a808cc4fe1dc","modified":1709396592798}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"ts":1709396799973,"data":{}}
|
||||||
46
Yandex.Mail - Убрать лишнее рекламы на почте (1).user.js
Normal file
46
Yandex.Mail - Убрать лишнее рекламы на почте (1).user.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Yandex.Mail - Убрать лишнее рекламы на почте
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-02-12
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author LukasEndigo™
|
||||||
|
// @match https://mail.yandex.kz/?uid=*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=yandex.kz
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
const elementsToRemove = document.querySelectorAll('div[style="width: 100%;"]');
|
||||||
|
elementsToRemove.forEach(element => {
|
||||||
|
let parent = element;
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
parent = parent.parentNode;
|
||||||
|
if (!parent) break; // Проверка на случай, если уровень родителя не существует
|
||||||
|
}
|
||||||
|
if (parent) {
|
||||||
|
parent.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch {}
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
const elementsToRemove = document.querySelectorAll('div[style="width: 100%;"]');
|
||||||
|
elementsToRemove.forEach(element => {
|
||||||
|
let parent = element;
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
parent = parent.parentNode;
|
||||||
|
if (!parent) break; // Проверка на случай, если уровень родителя не существует
|
||||||
|
}
|
||||||
|
if (parent) {
|
||||||
|
parent.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch { console.log('блок уже удален') }
|
||||||
|
}, 9000);
|
||||||
|
|
||||||
|
})();
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://mail.yandex.kz/?uid=*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1707712860862},"settings":{"enabled":true,"position":11},"meta":{"name":"Yandex.Mail - Убрать лишнее рекламы на почте","uuid":"6d20eb11-f5be-4383-a66d-fbfc7402d485","modified":1707712860860}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707712744631,"data":{}}
|
||||||
46
Yandex.Mail - Убрать лишнее рекламы на почте.user.js
Normal file
46
Yandex.Mail - Убрать лишнее рекламы на почте.user.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Yandex.Mail - Убрать лишнее рекламы на почте
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-02-12
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author LukasEndigo™
|
||||||
|
// @match https://mail.yandex.kz/?uid=*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=yandex.kz
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
const elementsToRemove = document.querySelectorAll('div[style="width: 100%;"]');
|
||||||
|
elementsToRemove.forEach(element => {
|
||||||
|
let parent = element;
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
parent = parent.parentNode;
|
||||||
|
if (!parent) break; // Проверка на случай, если уровень родителя не существует
|
||||||
|
}
|
||||||
|
if (parent) {
|
||||||
|
parent.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch {}
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
const elementsToRemove = document.querySelectorAll('div[style="width: 100%;"]');
|
||||||
|
elementsToRemove.forEach(element => {
|
||||||
|
let parent = element;
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
parent = parent.parentNode;
|
||||||
|
if (!parent) break; // Проверка на случай, если уровень родителя не существует
|
||||||
|
}
|
||||||
|
if (parent) {
|
||||||
|
parent.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch { console.log('блок уже удален') }
|
||||||
|
}, 9000);
|
||||||
|
|
||||||
|
})();
|
||||||
1
Yandex_Hide-Fast-Data-Results-With-Toggle.options.json
Normal file
1
Yandex_Hide-Fast-Data-Results-With-Toggle.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"user_modified":1728276793468,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://yandex.kz/search/?text=*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":30},"meta":{"name":"Yandex:Hide-Fast-Data-Results-With-Toggle","uuid":"5331d60b-4051-40fb-92ad-7790cae5f1ed","modified":1728276793466,"file_url":"https://mygit.lkaz.ru/lukas91/js-tampermonkey-public-scripts/raw/branch/main/Hide%20Fast%20Data%20Results%20with%20Toggle.user.js"}}
|
||||||
1
Yandex_Hide-Fast-Data-Results-With-Toggle.storage.json
Normal file
1
Yandex_Hide-Fast-Data-Results-With-Toggle.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1725424593326,"data":{}}
|
||||||
74
Yandex_Hide-Fast-Data-Results-With-Toggle.user.js
Normal file
74
Yandex_Hide-Fast-Data-Results-With-Toggle.user.js
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Yandex:Hide-Fast-Data-Results-With-Toggle
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 1.2
|
||||||
|
// @description Скрывает элементы с data-fast="2" на странице результатов поиска и добавляет меню для их отображения
|
||||||
|
// @author Lukas Endigo
|
||||||
|
// @match https://yandex.kz/search/?text=*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=yandex.kz
|
||||||
|
// @grant GM_registerMenuCommand
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Функция для скрытия элементов с data-fast="2"
|
||||||
|
function hideFastDataElements() {
|
||||||
|
const searchResult = document.querySelector('#search-result');
|
||||||
|
if (searchResult) {
|
||||||
|
const items = searchResult.querySelectorAll('li[data-fast="2"]');
|
||||||
|
items.forEach(item => {
|
||||||
|
item.style.display = 'none';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для отображения всех скрытых элементов с data-fast="2"
|
||||||
|
function showFastDataElements() {
|
||||||
|
const searchResult = document.querySelector('#search-result');
|
||||||
|
if (searchResult) {
|
||||||
|
const items = searchResult.querySelectorAll('li[data-fast="2"]');
|
||||||
|
items.forEach(item => {
|
||||||
|
item.style.display = '';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Настройка MutationObserver для отслеживания изменений в UL с id="search-result"
|
||||||
|
const observer = new MutationObserver((mutations) => {
|
||||||
|
mutations.forEach(mutation => {
|
||||||
|
if (mutation.type === 'childList') {
|
||||||
|
hideFastDataElements();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Опции для MutationObserver
|
||||||
|
const config = { childList: true, subtree: true };
|
||||||
|
|
||||||
|
// Инициализация наблюдения за изменениями в UL с id="search-result"
|
||||||
|
const searchResultContainer = document.querySelector('#search-result');
|
||||||
|
if (searchResultContainer) {
|
||||||
|
observer.observe(searchResultContainer, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Первоначальный вызов функции для скрытия элементов сразу после загрузки страницы
|
||||||
|
hideFastDataElements();
|
||||||
|
|
||||||
|
// Наблюдение за изменением количества результатов в #search-result
|
||||||
|
const bodyObserver = new MutationObserver(() => {
|
||||||
|
const newSearchResultContainer = document.querySelector('#search-result');
|
||||||
|
if (newSearchResultContainer && newSearchResultContainer !== searchResultContainer) {
|
||||||
|
observer.disconnect(); // Отключаем старый observer
|
||||||
|
observer.observe(newSearchResultContainer, config); // Запускаем новый observer
|
||||||
|
hideFastDataElements();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Запускаем наблюдение за изменением DOM, чтобы отследить появление нового #search-result
|
||||||
|
bodyObserver.observe(document.body, { childList: true, subtree: true });
|
||||||
|
|
||||||
|
// Добавление пункта в меню Tampermonkey для отображения скрытых элементов
|
||||||
|
GM_registerMenuCommand("Отобразить все", showFastDataElements);
|
||||||
|
|
||||||
|
})();
|
||||||
1
gitlabserver.skynet.kz копировать данные.options.json
Normal file
1
gitlabserver.skynet.kz копировать данные.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://gitlabserver.skynet.kz/*/ci_cd"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1721190315322},"settings":{"enabled":true,"position":23},"meta":{"name":"gitlabserver.skynet.kz копировать данные","uuid":"b77102e8-c80c-4724-8b70-5d1dbeca4be7","modified":1721190315321}}
|
||||||
1
gitlabserver.skynet.kz копировать данные.storage.json
Normal file
1
gitlabserver.skynet.kz копировать данные.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1719903016343,"data":{}}
|
||||||
31
gitlabserver.skynet.kz копировать данные.user.js
Normal file
31
gitlabserver.skynet.kz копировать данные.user.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name gitlabserver.skynet.kz копировать данные
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 2024-07-02
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://gitlabserver.skynet.kz/*/ci_cd
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=skynet.kz
|
||||||
|
// @grant GM_registerMenuCommand
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
console.log ("Меню интегрирован");
|
||||||
|
|
||||||
|
GM_registerMenuCommand ("Копировать в буфер", start_to_menu);
|
||||||
|
|
||||||
|
function start_to_menu () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Настройка стилей модального окна
|
||||||
|
let modalDialog = document.querySelector('.modal-dialog.modal-md');
|
||||||
|
if (modalDialog) {
|
||||||
|
modalDialog.style.minWidth = '1600px';
|
||||||
|
modalDialog.style.minHeight = '930px';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Настройка высоты текстового поля ввода
|
||||||
|
let textarea = document.getElementById('ci-variable-value');
|
||||||
|
if (textarea) {
|
||||||
|
textarea.style.height = '300px';
|
||||||
|
}
|
||||||
|
}
|
||||||
1
noVNC_Paste-For-Proxmox.options.json
Normal file
1
noVNC_Paste-For-Proxmox.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"user_modified":1728278648957,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"tab_types":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://*.mynetname.net/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"settings":{"enabled":true,"position":9},"meta":{"name":"noVNC:Paste-For-Proxmox","uuid":"7392bda3-1675-43d8-9799-dd4eae68c20a","modified":1728278648955,"file_url":"https://gist.github.com/amunchet/4cfaf0274f3d238946f9f8f94fa9ee02/raw/0b84970f89e1f282f09b86d46227eda71178c040/noVNCCopyPasteProxmox.user.js"}}
|
||||||
1
noVNC_Paste-For-Proxmox.storage.json
Normal file
1
noVNC_Paste-For-Proxmox.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388969,"data":{}}
|
||||||
58
noVNC_Paste-For-Proxmox.user.js
Normal file
58
noVNC_Paste-For-Proxmox.user.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name noVNC:Paste-For-Proxmox
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.3a
|
||||||
|
// @description Pastes text into a noVNC window (for use with Proxmox specifically)
|
||||||
|
// @author LukasEndigo
|
||||||
|
// @match https://*.mynetname.net/*
|
||||||
|
// @require http://code.jquery.com/jquery-3.3.1.min.js
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=proxmox.com
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
const delay = 500;
|
||||||
|
(function () {
|
||||||
|
'use strict'
|
||||||
|
window.sendString = function(text) {
|
||||||
|
|
||||||
|
var el = document.getElementById("canvas-id")
|
||||||
|
text.split("").forEach(x=>{
|
||||||
|
setTimeout(()=>{
|
||||||
|
var needs_shift = x.match(/[A-Z!@#$%^&*()_+{}:\"<>?~|]/)
|
||||||
|
let evt
|
||||||
|
if (needs_shift) {
|
||||||
|
|
||||||
|
evt = new KeyboardEvent("keydown", {keyCode: 16})
|
||||||
|
el.dispatchEvent(evt)
|
||||||
|
evt = new KeyboardEvent("keydown", {key: x, shiftKey: true})
|
||||||
|
el.dispatchEvent(evt)
|
||||||
|
evt = new KeyboardEvent("keyup", {keyCode: 16})
|
||||||
|
el.dispatchEvent(evt)
|
||||||
|
|
||||||
|
}else{
|
||||||
|
evt = new KeyboardEvent("keydown", {key: x})
|
||||||
|
}
|
||||||
|
el.dispatchEvent(evt)
|
||||||
|
}, delay)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
setTimeout(()=>{
|
||||||
|
console.log("Starting up noVNC Copy/Paste (for Proxmox)")
|
||||||
|
|
||||||
|
$("canvas").attr("id", "canvas-id")
|
||||||
|
|
||||||
|
$("canvas").on("mousedown", (e)=>{
|
||||||
|
if(e.button == 2){ // Right Click
|
||||||
|
navigator.clipboard.readText().then(text =>{
|
||||||
|
window.sendString(text)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, 1000);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
})()
|
||||||
2
noVNC_Paste-For-Proxmox.user.js-6f31fea8cb949037c22a237aeae7d8e8-jquery-3.3.1.min.js
vendored
Normal file
2
noVNC_Paste-For-Proxmox.user.js-6f31fea8cb949037c22a237aeae7d8e8-jquery-3.3.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
|||||||
|
{"name":"jquery-3.3.1.min.js","url":"http://code.jquery.com/jquery-3.3.1.min.js","ts":1728278633835,"mimetype":"text/javascript"}
|
||||||
1
setupObserver MutationObserver exapmle.options.json
Normal file
1
setupObserver MutationObserver exapmle.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://trello.com3/*"],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1704340185601},"settings":{"enabled":true,"position":13},"meta":{"name":"setupObserver MutationObserver exapmle","uuid":"e2574f59-3279-44e4-ab95-48655b4b22f3","modified":1704340185598}}
|
||||||
1
setupObserver MutationObserver exapmle.storage.json
Normal file
1
setupObserver MutationObserver exapmle.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388974,"data":{}}
|
||||||
46
setupObserver MutationObserver exapmle.user.js
Normal file
46
setupObserver MutationObserver exapmle.user.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name setupObserver MutationObserver exapmle
|
||||||
|
// @namespace http://your.namespace.here/
|
||||||
|
// @version 0.1
|
||||||
|
// @description Your description here
|
||||||
|
// @author You
|
||||||
|
// @run-at document-end
|
||||||
|
// @match https://trello.com3/*
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
async function setupObserver() {
|
||||||
|
const observer = new MutationObserver((mutations) => {
|
||||||
|
mutations.forEach((mutation) => {
|
||||||
|
if (mutation.target.matches('#chrome-container > div.window-overlay > div')) {
|
||||||
|
const hasWindowClass = mutation.target.classList.contains('window');
|
||||||
|
if (hasWindowClass) {
|
||||||
|
console.log('ЕСТЬ!');
|
||||||
|
} else {
|
||||||
|
console.log('Ничего не изменилось');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const targetElement = document.querySelector('#chrome-container > div.window-overlay > div');
|
||||||
|
|
||||||
|
if (targetElement) {
|
||||||
|
observer.observe(targetElement, {
|
||||||
|
attributes: true,
|
||||||
|
subtree: true,
|
||||||
|
attributeFilter: ['class'],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Если элемент еще не существует, повторно вызываем setupObserver через некоторое время
|
||||||
|
setTimeout(setupObserver, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupObserver();
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
1
Вывод в дооларах к Тенге.options.json
Normal file
1
Вывод в дооларах к Тенге.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://aliexpress.ru/item/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":"document-end","sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":true,"position":8},"meta":{"name":"Вывод в дооларах к Тенге","uuid":"409d6884-9375-4251-a447-78e62a29a0af","modified":1711516699839,"file_url":"https://gitlabappserver.lkaz.ru/lukas91/js-tampermonkey-public-scripts/raw/branch/main/Withdrawal%20in%20dollars%20to%20tenge.js"}}
|
||||||
1
Вывод в дооларах к Тенге.storage.json
Normal file
1
Вывод в дооларах к Тенге.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388960,"data":{}}
|
||||||
44
Вывод в дооларах к Тенге.user.js
Normal file
44
Вывод в дооларах к Тенге.user.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Вывод в дооларах к Тенге
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.3
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://aliexpress.ru/item/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliexpress.ru
|
||||||
|
// @downloadURL https://gitlabappserver.lkaz.ru/lukas91/js-tampermonkey-public-scripts/raw/branch/main/Withdrawal%20in%20dollars%20to%20tenge.js
|
||||||
|
// @updateURL https://gitlabappserver.lkaz.ru/lukas91/js-tampermonkey-public-scripts/raw/branch/main/Withdrawal%20in%20dollars%20to%20tenge.js
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
// Функция для ожидания загрузки страницы
|
||||||
|
console.log('start');
|
||||||
|
|
||||||
|
function waitForPageLoad(callback) {
|
||||||
|
if (document.readyState === "complete") {
|
||||||
|
callback();
|
||||||
|
console.log('complete');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
window.addEventListener("load", callback);
|
||||||
|
console.log('load');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для выполнения вычислений и обновления страницы
|
||||||
|
function performCalculations() {
|
||||||
|
const priceElement = document.querySelector('[class^="snow-price_SnowPrice__mainS__"]');
|
||||||
|
if (priceElement) {
|
||||||
|
const priceText = priceElement.innerText;
|
||||||
|
const priceInKZT = parseFloat(priceText.replace(/\s/g, '').replace('₸', '').replace(',', '.'));
|
||||||
|
const priceInUSD = (priceInKZT / 462.105).toFixed(2);
|
||||||
|
|
||||||
|
// Обновление страницы с новыми данными
|
||||||
|
priceElement.innerHTML = `${priceText} / (${priceInUSD}$)`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Ожидание загрузки страницы и выполнение вычислений
|
||||||
|
waitForPageLoad(performCalculations);
|
||||||
1
Отоброжать проценты по Ипотеке.options.json
Normal file
1
Отоброжать проценты по Ипотеке.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://m.bcc.kz/home"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":true,"position":3},"meta":{"name":"Отоброжать проценты по Ипотеке","uuid":"10f09243-54f3-4eec-94fc-5cfadd6fe409","modified":1694982251893}}
|
||||||
1
Отоброжать проценты по Ипотеке.storage.json
Normal file
1
Отоброжать проценты по Ипотеке.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388952,"data":{}}
|
||||||
77
Отоброжать проценты по Ипотеке.user.js
Normal file
77
Отоброжать проценты по Ипотеке.user.js
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Отоброжать проценты по Ипотеке
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.1
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://m.bcc.kz/home
|
||||||
|
// @icon https://m.bcc.kz/favicon.ico
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
(function() {
|
||||||
|
function decimalAdjust(type, value, exp) {
|
||||||
|
// Если степень не определена, либо равна нулю...
|
||||||
|
if (typeof exp === 'undefined' || +exp === 0) {
|
||||||
|
return Math[type](value);
|
||||||
|
}
|
||||||
|
value = +value;
|
||||||
|
exp = +exp;
|
||||||
|
// Если значение не является числом, либо степень не является целым числом...
|
||||||
|
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
|
||||||
|
return NaN;
|
||||||
|
}
|
||||||
|
// Сдвиг разрядов
|
||||||
|
value = value.toString().split('e');
|
||||||
|
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
|
||||||
|
// Обратный сдвиг
|
||||||
|
value = value.toString().split('e');
|
||||||
|
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Десятичное округление к ближайшему
|
||||||
|
if (!Math.round10) {
|
||||||
|
Math.round10 = function(value, exp) {
|
||||||
|
return decimalAdjust('round', value, exp);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Десятичное округление вниз
|
||||||
|
if (!Math.floor10) {
|
||||||
|
Math.floor10 = function(value, exp) {
|
||||||
|
return decimalAdjust('floor', value, exp);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Десятичное округление вверх
|
||||||
|
if (!Math.ceil10) {
|
||||||
|
Math.ceil10 = function(value, exp) {
|
||||||
|
return decimalAdjust('ceil', value, exp);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
|
||||||
|
var v1, v2, v3, v4, v5, v6;
|
||||||
|
v1 = parseFloat(getComputedStyle(document.querySelector("div.service__progress.ng-star-inserted")).width)
|
||||||
|
v1 = v1 / 70 * 100
|
||||||
|
v2 = parseFloat(getComputedStyle(document.querySelector('div.service__progress-done')).width)
|
||||||
|
v2 = v2 / 70 * 100
|
||||||
|
//v3 = v1 - v2
|
||||||
|
v4 = v2 / v1 * 100
|
||||||
|
v5 = Math.floor10(v4, -4)
|
||||||
|
//v6 = document.querySelector("#content-container > div.flex-grow-1 > app-home > div > div.col-12.col-lg-7.col-xl-8.pr-0 > div > div:nth-child(4) > app-home-banking-service > div > div.services__list > app-home-banking-service-item > div > div.d-flex.flex-grow-1.flex-wrap.flex-xl-nowrap.fw-min-width-0 > div.col-12.pl-2.col-xl-8 > div > div.fw-text-600")
|
||||||
|
v6 = document.querySelector("app-home-banking-service-item > div > div.d-flex.flex-grow-1.flex-wrap.flex-xl-nowrap.fw-min-width-0 > div.col-12.pl-2.col-xl-8 > div > div.fw-text-600")
|
||||||
|
// v6.innerHTML = v6.innerText + " | оплачено: "+ v5 + "%" + " ( 1 948 092.84 )"
|
||||||
|
v6.innerHTML = v6.innerText + " | оплачено: "+ v5 + "%"
|
||||||
|
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
1
Убрать 3-ий блок новостей в просмотре писем.options.json
Normal file
1
Убрать 3-ий блок новостей в просмотре писем.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://e.mail.ru/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1709395674846},"settings":{"enabled":true,"position":4},"meta":{"name":"Убрать 3-ий блок новостей в просмотре писем","uuid":"5214871f-45bd-4bf2-a6a6-c2490cb0b8af","modified":1708921106317}}
|
||||||
1
Убрать 3-ий блок новостей в просмотре писем.storage.json
Normal file
1
Убрать 3-ий блок новостей в просмотре писем.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1707563388953,"data":{}}
|
||||||
67
Убрать 3-ий блок новостей в просмотре писем.user.js
Normal file
67
Убрать 3-ий блок новостей в просмотре писем.user.js
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Убрать 3-ий блок новостей в просмотре писем
|
||||||
|
// @namespace https://github.com/le91
|
||||||
|
// @version 1.0.1
|
||||||
|
// @description try to take over the world!
|
||||||
|
// @author You
|
||||||
|
// @match https://e.mail.ru/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=mail.ru
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function startRemove(){
|
||||||
|
var main = document.querySelector("#app-canvas > div > div.application-mail > div.application-mail__overlay > div > div.application-mail__layout.application-mail__layout_main > span")
|
||||||
|
main.children[2].remove();
|
||||||
|
console.log('блок уже удален первый эпат')
|
||||||
|
// Находим элемент
|
||||||
|
const targetElement = document.querySelector(".ReactVirtualized__Grid__innerScrollContainer");
|
||||||
|
|
||||||
|
// Получаем все div элементы внутри него
|
||||||
|
const divElements = targetElement.querySelectorAll('div');
|
||||||
|
let firstDivHeight = '';
|
||||||
|
// Проходимся по каждому div элементу
|
||||||
|
divElements.forEach(divElement => {
|
||||||
|
// Проверяем, если у div элемента высота больше 0px
|
||||||
|
|
||||||
|
if (divElement.style.height && parseInt(divElement.style.height) > 0) {
|
||||||
|
if (firstDivHeight === '') {
|
||||||
|
firstDivHeight = divElement.style.height;
|
||||||
|
}
|
||||||
|
// Удаляем все div элементы до данного элемента
|
||||||
|
let previousElement = divElement.previousElementSibling;
|
||||||
|
while (previousElement && previousElement.tagName === 'DIV' && firstDivHeight != '') {
|
||||||
|
const toRemove = previousElement;
|
||||||
|
previousElement = previousElement.previousElementSibling;
|
||||||
|
// toRemove.remove();
|
||||||
|
var cssStyle = document.querySelector(".ReactVirtualized__Grid__innerScrollContainer").getAttribute("style")
|
||||||
|
cssStyle = cssStyle + "margin-top: -"+firstDivHeight+";"
|
||||||
|
document.querySelector(".ReactVirtualized__Grid__innerScrollContainer").setAttribute("style",cssStyle)
|
||||||
|
}
|
||||||
|
// Выходим из цикла после удаления
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// удалить новости с правой части экрана
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
startRemove()
|
||||||
|
} catch { console.log('блок уже удален первый эпат') }
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
startRemove()
|
||||||
|
} catch { console.log('блок уже удален второй эпат') }
|
||||||
|
|
||||||
|
}, 13000);
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
1
Удалить блок Рекомендации (1).options.json
Normal file
1
Удалить блок Рекомендации (1).options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.youtube.com/results?search_query=irDA+windows+software"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":null},"settings":{"enabled":true,"position":19},"meta":{"name":"Удалить блок Рекомендации","uuid":"66dbe732-dfa6-4661-a6fc-8924a33ef810","modified":1709396614232}}
|
||||||
1
Удалить блок Рекомендации (1).storage.json
Normal file
1
Удалить блок Рекомендации (1).storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1709396799974,"data":{}}
|
||||||
49
Удалить блок Рекомендации (1).user.js
Normal file
49
Удалить блок Рекомендации (1).user.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name Удалить блок Рекомендации
|
||||||
|
// @namespace https://github.com/le91
|
||||||
|
// @version 1.0
|
||||||
|
// @description Удалить блок Рекомендации где выводиться всякая хуйня!!!
|
||||||
|
// @author Lukas Endigo
|
||||||
|
// @match https://www.youtube.com/results?search_query=irDA+windows+software
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function startRemove(){
|
||||||
|
//============================================================
|
||||||
|
var contentsElement = document.getElementById('contents');
|
||||||
|
|
||||||
|
if (contentsElement) {
|
||||||
|
var spans = contentsElement.querySelectorAll('.style-scope.ytd-item-section-renderer');
|
||||||
|
|
||||||
|
spans.forEach(function(span) {
|
||||||
|
// Проверить, начинается ли текст span с "Рекомендации"
|
||||||
|
if (span.innerText.trim().startsWith('Рекомендации')) {
|
||||||
|
//console.log(span.innerText);
|
||||||
|
span.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//============================================================
|
||||||
|
}
|
||||||
|
|
||||||
|
// удалить новости с правой части экрана
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
startRemove()
|
||||||
|
} catch { console.log('блок уже удален первый эпат') }
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
startRemove()
|
||||||
|
} catch { console.log('блок уже удален второй эпат') }
|
||||||
|
|
||||||
|
}, 13000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
1
Удалить блок Рекомендации.options.json
Normal file
1
Удалить блок Рекомендации.options.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_powerful_this":null,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.youtube.com/results?search_query=irDA+windows+software"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"sandbox":null,"tab_types":null,"unwrap":null,"user_modified":1709010046136},"settings":{"enabled":true,"position":16},"meta":{"name":"Удалить блок Рекомендации","uuid":"19770608-adcc-46bc-a90e-d348a5ecd1a2","modified":1709010046135}}
|
||||||
1
Удалить блок Рекомендации.storage.json
Normal file
1
Удалить блок Рекомендации.storage.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"ts":1709009758342,"data":{}}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user