您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Provide a panel with JSON for dnscontrol on the TransIP DNS mangement page.
// ==UserScript== // @name Convert TransIP DNS to dnscontrol JSON // @namespace http://peschar.net/ // @version 1.0 // @description Provide a panel with JSON for dnscontrol on the TransIP DNS mangement page. // @author Albert Peschar // @match https://www.transip.nl/cp/domein-hosting/* // @match https://www.transip.eu/cp/domain-hosting/* // @grant none // ==/UserScript== 'use strict'; const RECORD_LIST_SELECTOR = '#dnsEntries'; let reentrant = false; let existingPanel; (new MutationObserver(function (mutations) { if (reentrant) { return; } mutations.forEach(mutation => { const recordList = mutation.target.querySelector(RECORD_LIST_SELECTOR) || mutation.target.closest(RECORD_LIST_SELECTOR); if (recordList) { reentrant = true; try { updateExport(recordList); } finally { Promise.resolve().then(() => {reentrant = false}); } } }); })).observe(document.documentElement, { subtree: true, childList: true }); function updateExport(recordList) { const result = []; recordList.querySelectorAll(':scope > .dns-form-panels > .form-panel').forEach(record => { const name = record.querySelector('input.name').value; if (name == '') { return; } const type = record.querySelector('select.type').value; const content = record.querySelector('input.content').value; let match, args; if (type == 'MX' && (match = /^(\d+)\s+(.+)$/.exec(content))) { args = [name, parseInt(match[1]), match[2]]; } else { args = [name, content]; } result.push(` ${type}(${args.map(JSON.stringify).join(', ')}),\n`); }); const panel = document.createElement('div'); panel.className = 'overview-panel ocp-text'; const pre = document.createElement('pre'); pre.innerText = `[\n${result.join('')}]`; panel.appendChild(pre); if (existingPanel) { existingPanel.remove(); } const afterPanel = recordList.closest('.overview-panel'); afterPanel.parentNode.insertBefore(panel, afterPanel.nextSibling); existingPanel = panel; }