From 2fce46951496f95a69b1a0c27ebea7f5cd79d2f1 Mon Sep 17 00:00:00 2001 From: shaoying Date: Tue, 15 Sep 2020 21:18:43 +0800 Subject: [PATCH] add inner.split --- frame.js | 15 ++++- lib/page.js | 11 ++-- plugin/local/code/inner.js | 25 ++++----- plugin/story/spide.js | 111 +++++++++++++++++++++++++++++-------- 4 files changed, 116 insertions(+), 46 deletions(-) diff --git a/frame.js b/frame.js index ec418b1a..5afde4a0 100644 --- a/frame.js +++ b/frame.js @@ -323,7 +323,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, sub.onimport && sub.onimport._init(sub, sub.Conf(meta), list, function() {}, field) meta.inputs && sub.onappend._option(sub, meta, list, cb) - sub.onaction && sub.onappend._action(sub, sub._action, sub.onaction.list) + sub.onaction && sub.onappend._action(sub, sub._action, meta.button || sub.onaction.list) sub.onexport && sub.onappend._status(sub, sub._status, sub.onexport.list) }) return sub @@ -528,6 +528,19 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, board: function(can, target, type, msg, text) { text = text || can.page.Display(msg.Result()) return text && can.page.Append(can, target, [{view: ["code", "div", text]}]).code }, + + plugin: function(can, value, cb, target) { value = value || {} + can.run({}, ["action", "command", value.index], function(msg) { + value.name = value.name || msg.name && msg.name[0] || "plugin" + value.help = value.help || msg.help && msg.help[0] || "plugin" + value.inputs = can.base.Obj(msg.list && msg.list[0] || "[]", []) + value.feature = can.base.Obj(msg.meta && msg.meta[0] || "{}", {}) + + var plugin = can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) { + typeof cb == "function" && cb(sub, value) + }, target || document.body) + }, true) + }, }, [], function(can) {}) Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, meta, list, cb, target) { if (can.user.Search(can, "share")) { return typeof cb == "function" && cb() } diff --git a/lib/page.js b/lib/page.js index e65cbf46..99ebdd41 100644 --- a/lib/page.js +++ b/lib/page.js @@ -30,13 +30,10 @@ var page = Volcanos("page", {help: "网页模块", typeof value == "string"? (target.innerHTML = value): can.core.Item(value, function(key, value) { typeof value != "object"? (target[key] = value): can.core.Item(value, function(sub, value) { var size = { - "width": true, "height": true, - "max-height": true, - "min-height": true, - "margin-left": true, - "margin-top": true, - "left": true, "right": true, - "top": true, "bottom": true, + "width": true, "max-width": true, "min-width": true, + "height": true, "max-height": true, "min-height": true, + "left": true, "right": true, "top": true, "bottom": true, + "margin-top": true, "margin-left": true, } if (size[sub] && (typeof value == "number" || !value.endsWith("px"))) { value += "px" diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 0ac6a155..1274d60f 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -1,4 +1,6 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { + can.Conf("content") && (msg = can.request({}), msg.result = [can.Conf("content")]) + can.ui = can.page.Appends(can, target, [ {view: "project", style: {display: "none"}}, {view: "profile", list: [ @@ -27,13 +29,6 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, ]}, {view: "tags"}, ]}, ]) - if (can.Conf("content")) { - msg = can.request({}) - msg.result = [can.Conf("content")] - } - - can.user.isMobile || can.page.Modify(can, can.ui.content, {style: {"min-width": document.body.innerWidth-200+"px"}}) - can.user.isMobile || can.page.Modify(can, can.ui.profile, {style: {"min-width": document.body.innerWidth-100+"px"}}) can.tabview = {}, can.history = [] can.tabview[can.Option("path")+can.Option("file")] = msg @@ -169,14 +164,6 @@ Volcanos("onaction", {help: "控件交互", list: [], var last = can.history.pop(); last = can.history.pop() last && can.onimport.tabview(can, last.path, last.file, last.line) }, - "运行": function(event, can) { - can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "none"}}) - can.run(event, ["action", "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) { - (msg.Result() || msg.append && msg.append.length > 0) && can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "block"}}) - can.onappend.table(can, can.ui.display, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) - }, true) - }, "项目": function(event, can) { var hide = can.ui.project.style.display == "none" can.page.Modify(can, can.ui.project, {style: {display: hide? "": "none"}}) var width = can._target.offsetWidth - can.ui.project.offsetWidth - can.ui.preview.offsetWidth - 120 @@ -188,6 +175,14 @@ Volcanos("onaction", {help: "控件交互", list: [], can.page.Modify(can, can.ui.search, {style: {display: hide? "": "none"}}) hide && can.onaction.searchLine(event, can, "") }, + "运行": function(event, can) { + can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "none"}}) + can.run(event, ["action", "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) { + (msg.Result() || msg.append && msg.append.length > 0) && can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "block"}}) + can.onappend.table(can, can.ui.display, "table", msg) + can.onappend.board(can, can.ui.display, "board", msg) + }, true) + }, appendLine: function(can, value) { var index = ++can.max can.page.Append(can, can.ui.preview, [{view: ["item", "div", index], onclick: function(event) { diff --git a/plugin/story/spide.js b/plugin/story/spide.js index 76cf6cb7..8b2fcf4d 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -108,28 +108,12 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "横向", return } - tree.inner = can.onappend._init(can, {name: "inner", help: "源码", inputs: [ - {type: "text", name: "path", value: can.Option("path")}, - {type: "text", name: "file", value: tree.file}, - {type: "text", name: "line", value: tree.line}, - {type: "button", name: "查看", value: "auto"}, - {type: "button", name: "关闭"}, - ], index: "web.code.inner", feature: { - display: "/plugin/local/code/inner.js", style: "editor", width: 800, height: 600, - }}, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) { - sub.run = function(event, cmds, cb, silent) { var msg = can.request(event) - if (msg.Option("_action") == "关闭") { - can.page.Remove(can, tree.inner._target) - return - } - can.run(event, ["inner"].concat(cmds), cb, true) - } - }, document.body) - - can.page.Modify(can, tree.inner._target, {style: {position: "fixed", + can.onaction._show(can, [can.Option("path"), tree.file, tree.line], { + position: "fixed", left: event.x-(event.x>600? 400: 100), top: event.y-(event.y>600? 400: 0), - }}) + width: 600, height: 600, + }) } tree.view.onmouseenter = function(event) { can.page.Remove(can, can.pos) @@ -163,6 +147,90 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "横向", offset += item.height*30 }) }, + _resize: function(can, layout) { + can.page.Modify(can, can._target, {style: layout}) + can.page.Select(can, can._output, "div.profile", function(item) { + can.page.Modify(can, item, {style: { + "max-height": layout.height, + "width": layout.width, + }}) + }) + can.page.Select(can, can._output, "div.content", function(item) { + can.page.Modify(can, item, {style: { + "max-width": layout.width - 120, + }}) + }) + }, + _show: function(can, args, layout) { + can.onappend.plugin(can, {index: "web.code.inner", args: args, _action: ["最大", "上下", "左右", "复制", "重围", "关闭"], width: layout.width, height: layout.height}, function(sub, value) { + can.onaction._resize(sub, layout) + + var begin + sub._target.onmousedown = function(event) { + begin = {left: layout.left, top: layout.top, x: event.x, y: event.y} + console.log(begin) + } + sub._target.onmousemove = function(event) { + if (event.target == sub._target && begin) { + layout.left= begin.left + event.x - begin.x + layout.top= begin.top + event.y - begin.y + sub.page.Modify(sub, sub._target, {style: {left: layout.left, top: layout.top}}) + console.log(layout) + } + } + sub._target.onmouseup = function(event) { + begin = null + } + + sub.run = function(event, cmds, cb, silent) { + switch (cmds[1]) { + case "复制": + can.onaction._show(can, args, { + position: "fixed", + left: layout.left+100, top: layout.top+100, + width: layout.width, height: layout.height, + }) + break + case "重围": + can.onaction._resize(sub, layout) + break + case "上下": + layout.height = layout.height/2-20 + can.onaction._resize(sub, layout) + + can.onaction._show(can, args, { + position: "fixed", + left: layout.left, top: layout.top+layout.height+70, + width: layout.width, height: layout.height, + }) + break + case "左右": + layout.width = layout.width/2 + can.onaction._resize(sub, layout) + + can.onaction._show(can, args, { + position: "fixed", + left: layout.left+layout.width+10, top: layout.top, + width: layout.width-10, height: layout.height, + }) + break + case "最大": + layout.left = 0, layout.top = 0 + layout.width = window.innerWidth-40 + layout.height = window.innerHeight-60 + can.onaction._resize(sub, layout) + break + case "关闭": + can.page.Remove(can, sub._target) + break + default: + can.run(event, ["inner"].concat(cmds), function(msg) { + cb(msg), can.onaction._resize(sub, layout) + }, true) + } + } + }) + }, "横向": function(event, can) { var sub = can.sub can.width = 0 @@ -176,7 +244,4 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "横向", "纵向": function(event, can) { }, }) -Volcanos("onchoice", {help: "组件交互", list: []}) -Volcanos("ondetail", {help: "组件详情", list: []}) -Volcanos("onexport", {help: "导出数据", list: ["date", "begin", "add", "del", "close", "note"]})