您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add possibility to move AAO simply by dragging it
- // ==UserScript==
- // @name script-aaoDraggable
- // @namespace https://github.com/Poul0s/script-aooDraggable
- // @version 2025-03-02.01
- // @description Add possibility to move AAO simply by dragging it
- // @author Thunlos
- // @match https://www.operateur112.fr/
- // @icon https://www.google.com/s2/favicons?sz=64&domain=operateur112.fr
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- const iframeLink = window.location.origin + "/aaos";
- function startAAODrag(event, aao, iframeContentWindow) {
- aao.style.cursor = "grabbing";
- let currentHoveringColumn = null;
- let dummy = null;
- let currentColumn = aao.parentElement;
- function removeHoveringColumn() {
- if (!currentHoveringColumn) return;
- currentHoveringColumn = null;
- dummy.remove();
- }
- function drag(event) {
- if (event.clientX < 0 || event.clientY < 0) {
- return;
- }
- let elements = iframeContentWindow.document.elementsFromPoint(event.clientX, event.clientY);
- let categorySwitcher = elements.find(e => e.href && e.href.startsWith(iframeLink + "#aao_category_"));
- if (categorySwitcher && !categorySwitcher.parentElement.classList.contains("active")) {
- categorySwitcher.click();
- } else {
- let categoryContainer = elements.find(e => e.id && e.id.startsWith("aao_category_"));
- if (categoryContainer) {
- let columns = categoryContainer.querySelectorAll(".col-sm-2.col-xs-4");
- let hoveringColumn = Array.from(columns).find(c => {
- let rect = c.getBoundingClientRect();
- return rect.left < event.clientX && rect.right > event.clientX
- });
- if (hoveringColumn && hoveringColumn != currentColumn) {
- if (hoveringColumn != currentHoveringColumn) {
- removeHoveringColumn();
- currentHoveringColumn = hoveringColumn;
- dummy = aao.cloneNode(true);
- dummy.style.opacity = 0.5;
- currentHoveringColumn.appendChild(dummy);
- }
- } else
- removeHoveringColumn();
- } else
- removeHoveringColumn();
- }
- }
- function dragend(event) {
- if (currentHoveringColumn) {
- let editLink = aao.dataset.editLink;
- let columnNumber = Array.prototype.indexOf.call(currentHoveringColumn.parentNode.children, currentHoveringColumn) + 1;
- let currentCategory = iframeContentWindow.document.querySelector("#aao-tabs li[role='presentation'].active");
- if (!currentCategory) {
- console.error("No active category found");
- return;
- }
- let categoryName = currentCategory.firstElementChild.innerText;
- let iframe = iframeContentWindow.document.createElement("iframe");
- iframe.style.visibility = "hidden";
- iframe.style.position = "absolute";
- iframe.style.width = "1px";
- iframe.style.height = "1px";
- iframeContentWindow.document.body.appendChild(iframe);
- iframe.src = editLink;
- let loaded = false;
- iframe.onload = () => {
- if (loaded) return;
- loaded = true;
- let editContentWindow = iframe.contentWindow;
- let column_nb_select = editContentWindow.document.getElementById("aao_column_number");
- column_nb_select.value = columnNumber.toString();
- let category_select = editContentWindow.document.getElementById("aao_category_id");
- if (category_select === null)
- category_select = editContentWindow.document.getElementById("aao_aao_category_id");
- let option = null
- for (let opt of category_select.options) {
- if (opt.innerText == categoryName) {
- option = opt;
- break;
- }
- }
- if (!option) {
- console.error("No category found");
- return;
- }
- category_select.value = option.value;
- editContentWindow.document.getElementById("save-button").click();
- dummy.style.opacity = 1;
- dummy.addEventListener("dragstart", (event) => startAAODrag(event, dummy, iframeContentWindow));
- if (aao.nextElementSibling && aao.nextElementSibling.nodeName == "BR") {
- aao.nextElementSibling.remove();
- }
- aao.remove();
- setTimeout(() => {
- iframe.remove();
- }, 5000);
- }
- }
- aao.removeEventListener("drag", drag);
- aao.removeEventListener("dragend", dragend);
- }
- aao.addEventListener("drag", drag);
- aao.addEventListener("dragend", dragend);
- }
- function setAAOsDraggables(iframeNode, iframeContentWindow) {
- let aaos = iframeContentWindow.document.getElementsByClassName("aao_btn_group");
- for (let aao of aaos) {
- aao.setAttribute("draggable", "true");
- aao.dataset.editLink = aao.firstElementChild.href;
- aao.firstElementChild.removeAttribute("href");
- aao.firstElementChild.style.cursor = "grab";
- aao.addEventListener("dragstart", (event) => startAAODrag(event, aao, iframeContentWindow));
- }
- }
- let popupPage = document.getElementById("lightbox_box");
- const callback = (mutationList, observer) => {
- for (const mutation of mutationList) {
- if (mutation.type === "childList") {
- for (let node of mutation.addedNodes) {
- if (node.classList.contains("lightbox_iframe")) {
- node.addEventListener("load", () => {
- if (node.src.startsWith(iframeLink)) {
- setAAOsDraggables(node, node.contentWindow);
- }
- })
- }
- }
- }
- }
- };
- const observer = new MutationObserver(callback)
- observer.observe(popupPage, { attributes: false, childList: true, subtree: false });
- })();