From e2605e2262676b00fecebd8b60d355417cac6c1f Mon Sep 17 00:00:00 2001 From: Chavy Date: Tue, 18 Aug 2020 01:15:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0[BoxJs]:=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8:=20Surge=20HTTP-API=20=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E4=B8=8B=E6=89=A7=E8=A1=8C=E7=9A=84=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=83=BD=E6=98=BE=E7=A4=BA=E5=93=8D=E5=BA=94=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- box/chavy.boxjs.html | 103 ++++++++++++++++++++++++-------- box/chavy.boxjs.js | 14 +++-- box/release/box.release.tf.json | 13 ++++ 3 files changed, 100 insertions(+), 30 deletions(-) diff --git a/box/chavy.boxjs.html b/box/chavy.boxjs.html index 1534855f1..ae74b1577 100644 --- a/box/chavy.boxjs.html +++ b/box/chavy.boxjs.html @@ -555,9 +555,35 @@

脚本编辑器

- + mdi-play-circle + + + + 执行结果 + + + mdi-close + + + + +
+

+

+
+
+
+
@@ -1166,6 +1192,7 @@

v{{ver.versio searchDialog: { show: false }, versionsheet: { show: false }, updatesheet: { show: false }, + exeScriptSheet: { show: false, resp: null }, naviDrawer: { show: false }, modSessionDialog: { show: false }, editProfileDialog: { show: false }, @@ -1506,32 +1533,53 @@

v{{ver.versio if (newval === '/coding') { require.config({ paths: { vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.20.0/min/vs' } }) require(['vs/editor/editor.main'], () => { + const envjs_demo = [ + '/** ', + ' * 注意: ', + ' * 在这里你可以使用完整的 EnvJs 环境', + ' * ', + ' * 同时: ', + ' * 你`必须`手动调用 $done()', + ' * ', + ' * 因为: ', + ' * BoxJs 不为主动执行的脚本调用 $done()', + ' * 而把 $done 的时机完全交由脚本控制', + ' * ', + ' * 最后: ', + ' * 这段脚本是可以直接运行的!', + ' */ ', + 'const host = $.getdata("boxjs_host")', + '$.json = {', + ' msg: "这段 json 是返回给浏览器的!"', + '}', + '$.msg($.name, host)', + '$.done()', + '// $done() 或 $.done() 都可以' + ] + const surgejs_demo = [ + '/** ', + ' * 注意: ', + ' * 你正在使用 Surge HTTP-API 环境', + ' * ', + ' * 在这里:你不可以使用 EnvJs', + ' * 请确保:你的脚本能被 Surge 独立运行', + ' * ', + ' * 最后: ', + ' * 这段脚本是可以直接运行的!', + ' */ ', + 'const host = $persistentStore.read("boxjs_host")', + 'const msgs = [""]', + '', + 'msgs.push("这是日志的内容")', + 'msgs.push("BoxJs host: " + host)', + '', + 'console.log(msgs.join("\\n"))', + '$done()' + ] this.ui.editor = monaco.editor.create(document.getElementById('container'), { fontSize: 12, tabSize: 2, - value: [ - '/** ', - ' * 注意: ', - ' * 在这里你可以使用完整的 EnvJs 环境', - ' * ', - ' * 同时: ', - ' * 你`必须`手动调用 $done()', - ' * ', - ' * 因为: ', - ' * BoxJs 不为主动执行的脚本调用 $done()', - ' * 而把 $done 的时机完全交由脚本控制', - ' * ', - ' * 最后: ', - ' * 这段脚本是可以直接运行的!', - ' */ ', - 'const host = $.getdata("boxjs_host")', - '$.json = {', - ' msg: "这段 json 是返回给浏览器的!"', - '}', - '$.msg($.name, host)', - '$.done()', - '// $done() 或 $.done() 都可以' - ].join('\n'), + value: this.box.usercfgs.httpapi ? surgejs_demo.join('\n') : envjs_demo.join('\n'), language: 'javascript', minimap: { enabled: false }, theme: this.isDarkMode ? 'vs-dark' : 'vs' @@ -1792,7 +1840,12 @@

v{{ver.versio exeScript() { const script = this.ui.editor.getValue() const opts = { script } - axios.post('/api/runScript', opts) + axios.post('/api/runScript', opts).then((resp) => { + if (this.box.usercfgs.httpapi) { + this.ui.exeScriptSheet.resp = JSON.parse(resp.data) + this.ui.exeScriptSheet.show = true + } + }) }, // 保存用户偏好 saveUserCfgs() { diff --git a/box/chavy.boxjs.js b/box/chavy.boxjs.js index 44c0ebc98..2e05e81fe 100644 --- a/box/chavy.boxjs.js +++ b/box/chavy.boxjs.js @@ -1,6 +1,6 @@ const $ = new Env('BoxJs') -$.version = '0.7.28' +$.version = '0.7.29' $.versionType = 'beta' /** @@ -37,7 +37,6 @@ $.html = $.name // `页面`类请求的响应体 // 页面源码地址 $.web = `https://cdn.jsdelivr.net/gh/chavyleung/scripts@${$.version}/box/chavy.boxjs.html?_=${new Date().getTime()}` - // 版本说明地址 (Release Note) $.ver = 'https://gitee.com/chavyleung/scripts/raw/master/box/release/box.release.tf.json' @@ -524,9 +523,14 @@ async function apiRunScript() { } } else { // 对于手动执行的脚本, 把 $done 的时机交给脚本自主控制 - $.isSkipDone = true - $request = undefined - eval(opts.script) + if ($.isSurge() && ishttpapi) { + const runOpts = { timeout: opts.timeout } + await $.runScript(opts.script, runOpts).then((resp) => ($.json = resp)) + } else { + $.isSkipDone = true + $request = undefined + eval(opts.script) + } } } diff --git a/box/release/box.release.tf.json b/box/release/box.release.tf.json index b824e94f1..c3c1d9b8a 100644 --- a/box/release/box.release.tf.json +++ b/box/release/box.release.tf.json @@ -1,5 +1,18 @@ { "releases": [ + { + "version": "0.7.29", + "tags": ["beta"], + "author": "@chavyleung", + "icon": "https://avatars3.githubusercontent.com/u/29748519", + "repo": "https://github.com/chavyleung", + "notes": [ + { + "name": "代码编辑器", + "descs": ["Surge HTTP-API 环境下执行的代码能显示响应内容"] + } + ] + }, { "version": "0.7.28", "tags": ["beta"],