// ==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) { // Находим элемент внутри текущего элемента const linkElement = item.querySelector('a.cluster'); if (linkElement) { // Извлекаем href из элемента и разбиваем его по "/" 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 = `
Отоброзить
`; // Добавляем новый элемент в ul settingsMenu.appendChild(newLi); // Добавляем обработчик клика для новой ссылки newLi.querySelector('a').addEventListener('click', function(e) { e.preventDefault(); // Останавливаем переход по ссылке processItems(); // Вызов функции показа уведомления }); } }); })();