├── .gitignore
├── language
├── zh.js
├── en.js
└── index.js
├── package.json
├── README.md
└── index.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_*
2 |
--------------------------------------------------------------------------------
/language/zh.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | title: "乱码恢复",
3 | success: "操作成功",
4 | error: "操作失败",
5 | cell: {
6 | cella: '输入',
7 | cellb: '转换结果',
8 | },
9 | form: {
10 | inputtext: '乱码文本',
11 | },
12 | grid: {
13 | encoding: '字符编码',
14 | result: '结果',
15 | },
16 | toolbar: {
17 | start: "自动恢复",
18 | reset: "重置",
19 | online: "在线工具",
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/language/en.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | title: "MessyCodeRecover",
3 | success: "success",
4 | error: "fail",
5 | cell: {
6 | cella: 'Input',
7 | cellb: 'Recover Result',
8 | },
9 | form: {
10 | inputtext: 'Messy Text',
11 | },
12 | grid: {
13 | encoding: 'Encoding',
14 | result: 'Result',
15 | },
16 | toolbar: {
17 | start: "Recover",
18 | reset: "Reset",
19 | online: "Online Tools",
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/language/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const languages = {
4 | 'en': 'English',
5 | 'zh': '简体中文'
6 | }
7 |
8 | // 获取本地设置语言(如若没有,则获取浏览器语言
9 | let lang = antSword['storage']('language',
10 | false,
11 | navigator.language.substr(0,2)
12 | );
13 |
14 | // 判断本地设置语言是否符合语言模板
15 | lang = languages[lang] ? lang : 'en';
16 |
17 | // 返回语言模板
18 | let langModule = require(`./${lang}`);
19 | langModule.__languages__ = languages;
20 |
21 | module.exports = langModule;
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "乱码恢复",
3 | "name_en": "MessyCodeRecover",
4 | "main": "index.js",
5 | "icon": "text-width",
6 | "version": "0.2",
7 | "description": "尝试恢复乱码",
8 | "description_en": "Trying to recover the garbled text",
9 | "author": {
10 | "name": "Medicean",
11 | "email": "Medici.Yan@gmail.com"
12 | },
13 | "category": "辅助工具",
14 | "category_en": "Support",
15 | "multiple": false,
16 | "scripts": [
17 | "*",
18 | "php",
19 | "php4",
20 | "asp",
21 | "aspx",
22 | "jsp",
23 | "custom"
24 | ]
25 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AntSword Messy Code Recover
2 |
3 | 尝试恢复乱码, 并非所有乱码都可以被完美恢复,乱码中的问号说明该字符已经丢失,是无法恢复的
4 |
5 | 如果本工具使用效果不理想, 可以尝试使用「[在线工具](http://www.mytju.com/classCode/tools/messyCodeRecover.asp)」
6 |
7 | ## 安装
8 |
9 | ### 商店安装
10 |
11 | 进入 AntSword 插件中心,选择「乱码恢复」,点击安装
12 |
13 | ### 手动安装
14 |
15 | 1.获取源代码
16 |
17 | ```bash
18 | $ git clone https://github.com/Medicean/as_messycoderecover.git
19 | ```
20 |
21 | 或者
22 |
23 | 点击 [这里](https://github.com/Medicean/as_messycoderecover/archive/master.zip) 下载源代码,并解压。
24 |
25 | 2.拷贝源代码至插件目录
26 |
27 | 将插件目录拷贝至 `antSword/antData/plugins/` 目录下即安装成功
28 |
29 | ## 演示图
30 |
31 | 
32 |
33 | ## 相关链接
34 |
35 | * [AntSword 文档](http://doc.u0u.us)
36 | * [dhtmlx 文档](http://docs.dhtmlx.com/)
37 | * [messyCodeRecover](http://www.mytju.com/classCode/tools/messyCodeRecover.asp)
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 |
2 | 'use strict';
3 |
4 | const LANG_T = antSword['language']['toastr']; // 通用通知提示
5 | const LANG = require('./language/'); // 插件语言库
6 |
7 | const iconv = require('iconv-lite')
8 | /**
9 | * 插件类
10 | */
11 | class Plugin {
12 | constructor(opt) {
13 | let self = this;
14 | let hash = String(Math.random()).substr(2, 10);
15 | antSword.tabbar.addTab(
16 | `tab_messycoderecover_${hash}`,
17 | ` ${LANG['title']}`,
18 | null, null, true, true
19 | );
20 | let cell = antSword.tabbar.cells(`tab_messycoderecover_${hash}`);
21 | self.cell = cell;
22 | self.support_encoding = [
23 | 'GBK',
24 | 'GB2312',
25 | 'UTF8',
26 | 'BIG5',
27 | 'Euc-KR',
28 | 'Euc-JP',
29 | 'Shift_JIS',
30 | 'ISO-8859-1',
31 | 'Windows-874',
32 | 'Windows-1251'
33 | ];
34 | self.createMainLayout();
35 | self.bindToolbarClickHandler();
36 | }
37 |
38 | createMainLayout() {
39 | let self = this;
40 | let layout = self.cell.attachLayout('2E');
41 | layout.cells('a').hideHeader();
42 | layout.cells('a').setText(` ${LANG['cell']['cella']}`);
43 | layout.cells('b').setText(` ${LANG['cell']['cellb']}`);
44 | layout.cells('b').collapse();
45 | // 创建toolbar
46 | this.createToolbar(layout.cells('a'));
47 | // 创建form
48 | this.createForm(layout.cells('a'));
49 | // 创建grid
50 | this.createGrid(layout.cells('b'));
51 |
52 | this.layout = layout;
53 | }
54 |
55 | createToolbar(cell) {
56 | let toolbar = cell.attachToolbar();
57 | toolbar.loadStruct([
58 | { id: 'start', type: 'button', text: LANG['toolbar']['start'], icon: 'play' },
59 | { id: 'reset', type: 'button', text: LANG['toolbar']['reset'], icon: 'undo' },
60 | { id: 'online', type: 'button', text: LANG['toolbar']['online'], icon: 'chrome' },
61 | ]);
62 | this.toolbar = toolbar;
63 | }
64 |
65 | createForm(cell) {
66 | let formdata = [{
67 | type: 'settings', position: 'label-left',
68 | labelWidth: 150, inputWidth: 500
69 | }, {
70 | type: 'block', inputWidth: 'auto',
71 | offsetTop: 12,
72 | list: [{
73 | type: 'input', label: LANG['form']['inputtext'], name: 'inputtext', rows: "20",
74 | required: true, validate:"NotEmpty", value: "锘挎槬鐪犱笉瑙夋檽锛屽澶勯椈鍟奸笩",
75 | }],
76 | }];
77 | let form = cell.attachForm(formdata, true);
78 | form.enableLiveValidation(true);
79 | this.form = form;
80 | }
81 |
82 | createGrid(cell) {
83 | let grid = cell.attachGrid();
84 | grid.setHeader(`
85 | ${LANG['grid']['encoding']},
86 | ${LANG['grid']['result']}
87 | `);
88 | grid.setColTypes("ro,edtxt");
89 | grid.setColSorting('str,str');
90 | grid.setInitWidths("200,*");
91 | grid.setColAlign("center,left");
92 | grid.init();
93 |
94 | this.grid = grid;
95 | }
96 | bindToolbarClickHandler() {
97 | let self = this;
98 | let form = self.form;
99 | self.toolbar.attachEvent('onClick', (id)=>{
100 | switch (id) {
101 | case 'start':
102 | if(form.validate()) {
103 | var _formvals = form.getValues();
104 | let inputtext = _formvals['inputtext'];
105 | let griddata = [];
106 | self.support_encoding.map((encoding, i) => {
107 | let text = '';
108 | try {
109 | text = iconv.encode(Buffer.from(inputtext), encoding).toString();
110 | }catch (err) {
111 | text = '??????';
112 | }
113 | griddata.push({
114 | id: i + 1,
115 | data: [encoding, antSword.noxss(text)],
116 | });
117 | });
118 | self.grid.clearAll();
119 | self.grid.parse({
120 | rows: griddata,
121 | }, 'json');
122 | self.layout.cells('b').expand();
123 | toastr.success(LANG['success'], LANG_T['success']);
124 | }
125 | break;
126 | case 'reset':
127 | self.grid.clearAll();
128 | self.layout.cells('b').collapse();
129 | form.setItemValue('inputtext', '锘挎槬鐪犱笉瑙夋檽锛屽澶勯椈鍟奸笩');
130 | break;
131 | case 'online':
132 | antSword.shell.openExternal("http://www.mytju.com/classCode/tools/messyCodeRecover.asp");
133 | break;
134 | }
135 | });
136 | }
137 | }
138 |
139 | module.exports = Plugin;
--------------------------------------------------------------------------------