| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // ==UserScript==
- // @name E360 Table Transformer
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description try to take over the world!
- // @author You
- // @match https://open.e.360.cn/*
- // @grant GM_setClipboard
- // ==/UserScript==
- (function() {
- 'use strict';
- const regexpGeneric = /^(?:List|Set)<([^>]+)>$/i
- const convertType = (type) => {
- let isList = false
- if (type.endsWith('[]')) {
- isList = true
- type = type.substring(0, type.length - 2)
- } else if (regexpGeneric.test(type)) {
- isList = true
- type = regexpGeneric.exec(type)[1]
- }
- switch (type.toLowerCase()) {
- case 'long':
- case 'float':
- case 'double':
- case 'int':
- case 'number':
- case 'integer': type = 'number'; break
- case 'boolean': type = 'boolean'; break
- case 'string': type = 'string'; break
- }
- if (isList) type += '[]'
- return type
- }
- const parseRow = (row) => {
- const tds = row.querySelectorAll('td')
- const tdl = tds.length;
- const hasOptional = tdl === 4
- if (tdl < 3) return ''
- const name = tds[0].innerText.trim()
- if (!name) return ''
- const type = tds[1].innerText.trim()
- const optional = hasOptional && tds[2].innerText.trim().toLowerCase().includes('no')
- const comment = tds[hasOptional ? 3 : 2].innerText.trim()
- return ` ${name.replace(/\n/g, '')}${optional ? '?' : ''}: ${convertType(type)} // ${comment.replace(/\n/g, ' ')}\n`
- }
- const parseRows = (rows) => {
- if (!rows.length) return
- let content = ''
- rows.forEach(row => {
- content += parseRow(row)
- })
- GM_setClipboard(content)
- return content
- }
- const parseTable = (tableDiv) => {
- const result = document.createElement('pre')
- result.append(document.createTextNode(parseRows(tableDiv.querySelectorAll('tr:nth-child(n+1)'))))
- tableDiv.parentElement.insertBefore(result, tableDiv)
- }
- const createButton = (container) => {
- if (container?.dataset?.dump) return
- container.dataset.dump = true
- container.style.position = 'relative'
- const btn = document.createElement('button')
- btn.append(document.createTextNode('Dump'))
- btn.addEventListener('click', () => {
- parseTable(container)
- btn.remove()
- })
- btn.style.position = 'absolute'
- btn.style.top = '0'
- btn.style.right = '2em'
- btn.style.zIndex = 10000
- container.prepend(btn)
- }
- const ob = new MutationObserver(mutations => {
- mutations.forEach(({ target }) => {
- if (target?.tagName === 'BODY') {
- setTimeout(() => {
- document.querySelectorAll(".markdown-section table").forEach(createButton)
- }, 1000)
- }
- })
- })
- ob.observe(document.body, { subtree: true, childList: true })
- })();
|