From 1d7c2f592c09944b0d7d197b485245f923bc9352 Mon Sep 17 00:00:00 2001
From: muwoo <2424880409@qq.com>
Date: Tue, 8 Jun 2021 18:04:36 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=96=87=E6=A1=A3?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/api.js | 41 +++++++++++++++---
src/main/index.js | 2 +-
src/renderer/pages/plugins/index.vue | 45 +++++++++++++++++--
src/renderer/store/modules/main.js | 14 ++++--
static/doc-tpl.html | 65 ++++++++++++++++++++++++++++
static/doc.js | 28 ++++++++++++
static/index.js | 41 ++++++++++++++++++
static/preload.js | 58 ++++++++++++++++++++++---
8 files changed, 276 insertions(+), 18 deletions(-)
create mode 100644 static/doc-tpl.html
create mode 100644 static/doc.js
create mode 100644 static/index.js
diff --git a/src/main/api.js b/src/main/api.js
index 7cdcec7..6234c93 100644
--- a/src/main/api.js
+++ b/src/main/api.js
@@ -1,6 +1,8 @@
-import {app} from 'electron';
+import {app, BrowserWindow} from 'electron';
import {getlocalDataFile, saveData, getData} from './common/utils';
import path from "path";
+import marked from 'marked';
+const rendererMD = new marked.Renderer();
const appPath = path.join(getlocalDataFile());
const dbPath = path.join(appPath, './db.json');
@@ -10,7 +12,6 @@ export default {
return app.getPath(arg.name);
},
hideMainWindow(arg, mainWindow) {
- console.log(111, mainWindow)
mainWindow.hide();
},
showMainWindow(arg, mainWindow) {
@@ -20,15 +21,13 @@ export default {
return arg
},
setExpendHeight({height}, mainWindow) {
- console.log(height);
- mainWindow.setSize(788, height);
+ mainWindow.setSize(788, height || 60);
},
db: {
put({data}) {
data._rev = '';
let dbData = getData(dbPath) || [];
let target = [];
- console.log(data, dbData);
dbData.some((d, i) => {
if (d._id === data._id) {
target = [d, i]
@@ -102,5 +101,37 @@ export default {
const result = dbData.filter(d => d._id === key);
return result;
}
+ },
+
+ ubrowser: {
+ goto: ({md, title}) => {
+ marked.setOptions({
+ renderer: rendererMD,
+ gfm: true,
+ tables: true,
+ breaks: false,
+ pedantic: false,
+ sanitize: false,
+ smartLists: true,
+ smartypants: false
+ });
+ const htmlContent = marked(md);
+ const win = new BrowserWindow({
+ height: 600,
+ useContentSize: true,
+ width: 788,
+ title,
+ webPreferences: {
+ webSecurity: false,
+ enableRemoteModule: true,
+ backgroundThrottling: false,
+ webviewTag: true,
+ nodeIntegration: true // 在网页中集成Node
+ }
+ });
+ win.loadURL('data:text/html;charset=UTF-8,' + encodeURIComponent(htmlContent))
+ win.once('ready-to-show', () => win.show());
+ return win.id
+ }
}
}
diff --git a/src/main/index.js b/src/main/index.js
index 01fb445..9116cc4 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -39,7 +39,7 @@ function createWindow () {
mainWindow.on('closed', () => {
mainWindow = null
});
- protocol.interceptFileProtocol('file', (req, callback) => {
+ protocol.interceptFileProtocol('image', (req, callback) => {
const url = req.url.substr(8);
callback(decodeURI(url));
}, (error) => {
diff --git a/src/renderer/pages/plugins/index.vue b/src/renderer/pages/plugins/index.vue
index c1d5c43..ca5b86e 100644
--- a/src/renderer/pages/plugins/index.vue
+++ b/src/renderer/pages/plugins/index.vue
@@ -1,6 +1,9 @@
@@ -15,6 +18,9 @@ export default {
path: `File://${this.$route.query.sourceFile}`,
preload: `File://${path.join(__static, './preload.js')}`,
webview: null,
+ query: this.$route.query,
+ config: {},
+ templatePath: `File://${path.join(__static, './doc-tpl.html')}?code=${JSON.parse(this.$route.query.detail).code}&targetFile=${encodeURIComponent(this.$route.query.sourceFile)}`,
}
},
mounted() {
@@ -28,10 +34,40 @@ export default {
if (event.channel === 'setSubInput') {
this.setSubPlaceHolder(event.args[0].placeHolder);
}
+ if (event.channel === 'removeSubInput') {
+ this.commonUpdate({
+ searchValue: '',
+ });
+ }
+ if (event.channel === 'setSubInputValue') {
+ this.commonUpdate({
+ searchValue: event.args[0].text,
+ });
+ this.webview.send('msg-back-setSubInput', this.searchValue);
+ }
+ if (event.channel === 'templateConfig') {
+ this.config = event.args[0].config;
+ }
+ if (event.channel === 'getFeatures') {
+ this.webview.send('msg-back-getFeatures', this.pluginDetail);
+ }
+ if (event.channel === 'setFeature') {
+ this.commonUpdate({
+ devPlugins: this.devPlugins.map(plugin => {
+ if (plugin.name === this.query.name) {
+ return {
+ ...plugin,
+ features: [...plugin.features, event.args[0].feature]
+ }
+ }
+ return plugin;
+ }),
+ });
+ }
})
},
methods: {
- ...mapMutations('main', ['setSubPlaceHolder']),
+ ...mapMutations('main', ['setSubPlaceHolder', 'commonUpdate']),
},
beforeRouteUpdate() {
this.path = `File://${this.$route.query.sourceFile}`
@@ -41,7 +77,10 @@ export default {
webview && webview.send('onPluginOut', this.$route.query)
},
computed: {
- ...mapState('main', ['searchValue'])
+ ...mapState('main', ['searchValue', 'devPlugins']),
+ pluginDetail() {
+ return (this.devPlugins.filter(plugin => plugin.name === this.query.name)[0] || {}).features
+ },
},
watch: {
searchValue() {
diff --git a/src/renderer/store/modules/main.js b/src/renderer/store/modules/main.js
index 45da8e7..516d043 100644
--- a/src/renderer/store/modules/main.js
+++ b/src/renderer/store/modules/main.js
@@ -99,9 +99,15 @@ const actions = {
const pluginConfig = {
...config,
- sourceFile: path.join(fileUrl, `../${config.main}`),
+ sourceFile: path.join(fileUrl, `../${config.main || 'index.html'}`),
name: uuidv4(),
- type: 'dev'
+ type: 'dev',
+ subType: (() => {
+ if (config.main) {
+ return ''
+ }
+ return 'template';
+ })()
};
commit('commonUpdate', {
selected: {
@@ -164,7 +170,7 @@ const actions = {
...cmds.map((cmd) => ({
name: cmd,
value: 'plugin',
- icon: 'file://' + path.join(plugin.sourceFile, `../${plugin.logo}`),
+ icon: 'image://' + path.join(plugin.sourceFile, `../${plugin.logo}`),
desc: fe.explain,
click: (router) => {
actions.openPlugin({commit}, {cmd, plugin, feature: fe, router});
@@ -201,7 +207,7 @@ const actions = {
selected: {
key: 'plugin-container',
name: cmd,
- icon: 'file://' + path.join(plugin.sourceFile, `../${plugin.logo}`),
+ icon: 'image://' + path.join(plugin.sourceFile, `../${plugin.logo}`),
},
searchValue: '',
showMain: true,
diff --git a/static/doc-tpl.html b/static/doc-tpl.html
new file mode 100644
index 0000000..12dce7a
--- /dev/null
+++ b/static/doc-tpl.html
@@ -0,0 +1,65 @@
+
+
+
+
+ Title
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/doc.js b/static/doc.js
new file mode 100644
index 0000000..4668a24
--- /dev/null
+++ b/static/doc.js
@@ -0,0 +1,28 @@
+export default {
+ template: `
+
+
+
+
+ `,
+ data() {
+ return {
+ query: this.$route.query,
+ menu: [],
+ active: 0,
+ }
+ },
+ mounted() {
+ this.menu = JSON.parse(this.query.args).indexes || [];
+ },
+ computed: {
+ path() {
+ return decodeURIComponent(this.query.rootPath) + (this.menu[this.active] || {}).p
+ }
+ }
+}
diff --git a/static/index.js b/static/index.js
new file mode 100644
index 0000000..651b465
--- /dev/null
+++ b/static/index.js
@@ -0,0 +1,41 @@
+import doc from './doc.js';
+function getQueryVariable(variable) {
+ var query = window.location.search.substring(1);
+ var vars = query.split("&");
+ console.log(vars);
+ for (var i=0;i -1) {
+ filePath = decodeURIComponent(getQueryVariable('targetFile'));
+} else {
+ filePath = location.href.replace('file://', '');
+}
const {ipcRenderer, nativeImage, clipboard, remote} = require('electron');
const currentWindow = remote.getCurrentWindow();
@@ -26,19 +42,20 @@ window.utools = window.rubick = {
onPluginEnter(cb) {
ipcRenderer.once('onPluginEnter', (e, message) => {
const feature = JSON.parse(message.detail)
- cb(feature)
+ console.log(feature)
+ cb({...feature, type: 'text'})
})
},
onPluginReady(cb) {
ipcRenderer.once('onPluginReady', (e, message) => {
const feature = JSON.parse(message.detail)
- cb(feature)
+ cb({...feature, type: 'text'})
})
},
onPluginOut(cb) {
ipcRenderer.once('onPluginOut', (e, message) => {
const feature = JSON.parse(message.detail)
- cb(feature)
+ cb({...feature, type: 'text'})
})
},
@@ -69,8 +86,14 @@ window.utools = window.rubick = {
});
},
- setSubInputValue(text) {
+ removeSubInput() {
+ ipcRenderer.sendToHost('removeSubInput');
+ },
+ setSubInputValue(text) {
+ ipcRenderer.sendToHost('setSubInputValue', {
+ text
+ });
},
getPath(name) {
@@ -139,5 +162,30 @@ window.utools = window.rubick = {
isDarkColors() {
return false;
},
+ getFeatures() {
+ ipcRenderer.sendToHost('getFeatures');
+ return new Promise(resolve => {
+ ipcRenderer.on(`msg-back-getFeatures`, (e, result) => {
+ resolve(result);
+ });
+ });
+ },
+ setFeature(feature) {
+ ipcRenderer.sendToHost('setFeature', {feature});
+ },
+ ubrowser: {
+ goto(md, title) {
+ ipcRenderer.send('msg-trigger', {
+ type: 'ubrowser.goto',
+ md, title,
+ });
+ return utools.ubrowser;
+ },
+ run() {
+
+ }
+ }
}
require(path.join(filePath, '../preload.js'));
+window.exports && ipcRenderer.sendToHost('templateConfig', {config: window.exports});
+