-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathYAPI Helper.user.js
103 lines (100 loc) · 3.75 KB
/
YAPI Helper.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// ==UserScript==
// @name YAPI Helper
// @namespace https://greasyfork.org/zh-CN/scripts/426512
// @version 0.4
// @description 将YAPI的接口返回数据结构复制为typescript的interface类型
// @author zhenhappy<[email protected]>
// @include http://*
// @include https://*
// @require https://unpkg.com/jquery/dist/jquery.slim.min.js
// @require https://unpkg.com/clipboard/dist/clipboard.min.js
// @license MIT
// ==/UserScript==
(function() {
if (!$('#yapi').html()) return
var title = null
var table = null
var url = ''
var clipboard = null
init()
function init () {
setInterval(function () {
if (url !== window.location.href) {
url = window.location.href
title = null
table = null
var t = setInterval(function () {
try {
// 查找"返回数据"节点
if ($('.interface-title') && $('.interface-title').length > 0) {
$.each($('.interface-title'), function () {
if ($(this).text().search('返回数据') > -1) {
$(this).html('返回数据')
title = $(this)
table = $(this).next().find('table')
expandAll(copy)
}
})
} else {
throw(Error('未找到元素'))
}
clearInterval(t)
} catch (e) {
if ((e.message !== '未找到元素')) console.error(e)
}
}, 100)
}
}, 500)
}
function addCopyBtn (text) {
var copy = document.createElement('a')
copy.id = 'copy'
$(copy).attr('id', 'copy')
$(copy).attr('href', '#')
$(copy).attr('data-clipboard-text', text)
$(copy).text('复制数据结构')
title.append(' ').append($(copy));
if (clipboard) clipboard.destroy()
clipboard = new ClipboardJS(copy)
}
function copy () {
var obj = {}
var parent = obj
var parentLevel = 0
try {
$.each(table.find('.ant-table-row'), function () {
var key = $(this).find('td').eq(0).text()
var type = $(this).find('td').eq(1).text()
var level = parseInt($(this).attr('class').replace('ant-table-row ant-table-row-level-', ''))
if (level < parentLevel) parent = obj
parent[key] = typeTranslate(type)
if (typeof parent[key] !== 'string') {
parent = parent[key]
}
parentLevel = level
})
} catch (e) {
console.error(e)
}
addCopyBtn(JSON.stringify(obj, replacer).replace(/"/g, '').replace(/,/g, ';'))
}
function expandAll (cb) {
if (table.find('.ant-table-row-collapsed') && table.find('.ant-table-row-collapsed').length > 0) {
$.each(table.find('.ant-table-row-collapsed'), function () {$(this).trigger('click')})
expandAll(cb)
} else {
cb()
}
}
function typeTranslate (type) {
switch (type) {
case 'integer': return 'number'
case 'object []': return {}
default: return type
}
}
function replacer (key, value) {
if (key !== '' && typeof value === 'object') return 'Array<' + JSON.stringify(value, replacer).replace(/"/g, '').replace(/,/g, ';') + '>'
else return value
}
})();