Add operation ID, as well as an icon to copy the operation ID, to all API operations on any Swagger UI page
- // ==UserScript==
- // @name Copiable Operation ID For Swagger UI API Docs
- // @name:fr ID opération copiable pour docs API Swagger UI
- // @namespace tomchen.org
- // @include https://*
- // @include http://*
- // @grant GM_setClipboard
- // @version 1.1
- // @author Tom Chen (tomchen.org)
- // @license MIT
- // @description Add operation ID, as well as an icon to copy the operation ID, to all API operations on any Swagger UI page
- // @description:fr Ajoutez l'ID opération, ainsi qu'une icône pour copier l'ID opération, à toutes les opérations d'API sur une page de Swagger UI
- // ==/UserScript==
- const swaggerUi = document.getElementById("swagger-ui");
- if (swaggerUi) {
- const opElId2opId = (opElId) => {
- const slices = opElId.split("-");
- return slices[slices.length - 1];
- };
- const addCopiableOpIdToOpBlock = (opBlock) => {
- const summary = opBlock.querySelector("div.opblock-summary");
- const arrow = opBlock.querySelector("button.opblock-control-arrow");
- const opId = opElId2opId(opBlock.id);
- if (!summary.querySelector(".opblock-summary-operation-id")) {
- const span = document.createElement("span");
- span.innerHTML = opId;
- span.className = "opblock-summary-operation-id";
- summary.insertBefore(span, arrow);
- }
- const span = opBlock.querySelector("span.opblock-summary-operation-id");
- if (!span.querySelector("div.copy-to-clipboard")) {
- const div = document.createElement("div");
- div.className = "view-line-link copy-to-clipboard";
- div.innerHTML =
- '<svg width="15" height="16"><use href="#copy" xlink:href="#copy"></use></svg>';
- div.addEventListener("click", (e) => {
- e.stopPropagation();
- GM_setClipboard(opId);
- });
- span.appendChild(div, arrow);
- }
- };
- const observeOptions = {
- subtree: true,
- childList: true,
- attributes: true,
- };
- const observeCallback = () => {
- const opBlocks = document.querySelectorAll(".opblock");
- if (opBlocks.length === 0) {
- return;
- }
- [...opBlocks].forEach(addCopiableOpIdToOpBlock);
- };
- const observer = new MutationObserver(observeCallback);
- observer.observe(swaggerUi, observeOptions);
- }