diff --git a/demo/order.js b/demo/order.js
deleted file mode 100644
index 40709b19..00000000
--- a/demo/order.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var Config = {name: "demo", volcano: "frame.js", iceberg: "/chat/", intshell: "plug.sh",
- libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"], panes: [
- {type: "pane", name: "Header", help: "标题栏", pos: "head", list: ["pane/Header.js", "pane/Header.css"], state: ["time"]},
- {type: "pane", name: "River", help: "群聊组", pos: "left", list: ["pane/River.js", "pane/River.css"]},
- {type: "pane", name: "Storm", help: "应用流", pos: "right", list: ["pane/Storm.js", "pane/Storm.css"]},
- {type: "pane", name: "Action", help: "工作台", pos: "middle", list: ["pane/Action.js", "pane/Action.css"]},
- {type: "pane", name: "Footer", help: "状态条", pos: "foot", list: ["pane/Footer.js", "pane/Footer.css"]},
- ], main: {name: "Header", engine: "remote", list: []},
- list: ["plugin/state.js", "plugin/input.js", "plugin/table.js"],
-}
-
-var Preload = Config.libs; Config.panes.forEach(function(pane) {
- Preload = Preload.concat(pane.list);
-}); Preload = Preload.concat(Config.list)
-
-Volcanos(Config.name, { _target: document.body,
- _head: document.head, _body: document.body,
- _width: window.innerWidth, _height: window.innerHeight,
-}, Preload.concat(Config.volcano), function(can) { // 程序入口
- can.onimport._init(can, can.Conf(Config), [], function(msg) {
- console.log(can._root, can._name, "start", can, msg);
- can.Footer.onaction._init(can.Footer, msg);
- }, can._target)
-})
-
diff --git a/demo/pane/Action.css b/demo/pane/Action.css
deleted file mode 100644
index 24920f53..00000000
--- a/demo/pane/Action.css
+++ /dev/null
@@ -1,10 +0,0 @@
-fieldset.Action {
- min-width:160px;
- min-height:160px;
- padding-left:10px;
- padding-right:10px;
-}
-fieldset.Action>div.output>div.item:hover {
- background-color:lightblue;
-}
-
diff --git a/demo/pane/Action.js b/demo/pane/Action.js
deleted file mode 100644
index 967a5e86..00000000
--- a/demo/pane/Action.js
+++ /dev/null
@@ -1,40 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, target) {
- },
-})
-Volcanos("onaction", {help: "交互操作", list: [],
- _init: function(can, msg, list, cb, target) {
- can.onexport._init(can, msg, list, cb, target)
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- _init: function(can, msg, list, cb, target) { var key = "action";
- if (Volcanos.meta.follow[can._root]) { debugger }
- can.run(msg._event, ["search", "Storm.onaction._init"], function(msg) {
- if (Volcanos.meta.follow[can._root]) { debugger }
- can.Cache(can.Conf("river")+can.Conf("storm"), can._output, can.Conf(key));
- var river = can.Conf("river", msg.Option("river"));
- var storm = can.Conf("storm", msg.Option("storm"));
- console.log(can._root, can._name, "show", river, storm);
- if (can.Conf(key, msg.Option(key, can.Cache(river+"."+storm, can._output)))) {
- typeof cb == "function" && cb(msg); return
- }
-
- can.run(msg._event, [river, storm], function(msg) { can._output.innerHTML = "";
- if (Volcanos.meta.follow[can._root]) { debugger }
- msg.Table(function(value, index, array) {
- // 添加列表
- can.onappend._init(can, value, Config.libs.concat([value.display||"plugin/state.js"]), function(sub) {
- sub.run = function(event, cmds, cb, silent) {
- can.run(event, [river, storm, index].concat(cmds), cb, silent)
- }
- }, can._output)
- can.Conf(key, "which")
- });
- msg.Option(key, can.Conf(key))
- typeof cb == "function" && cb(msg)
- })
- })
- },
-})
-
diff --git a/demo/pane/Footer.css b/demo/pane/Footer.css
deleted file mode 100644
index 307e3b3f..00000000
--- a/demo/pane/Footer.css
+++ /dev/null
@@ -1,19 +0,0 @@
-fieldset.Footer {
- height:32px;
- clear:both;
-}
-fieldset.Footer>div {
- margin:7px 0;
-}
-fieldset.Footer>div.output div.title {
- margin-left:5px;
- float:left;
-}
-fieldset.Footer>div.output div.state {
- float:right;
-}
-fieldset.Footer>div.output div.state>div {
- margin-right:5px;
- float:right;
-}
-
diff --git a/demo/pane/Footer.js b/demo/pane/Footer.js
deleted file mode 100644
index 7edf4125..00000000
--- a/demo/pane/Footer.js
+++ /dev/null
@@ -1,25 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, target) {
- },
-})
-Volcanos("onaction", {help: "交互数据", list: [],
- _init: function(can, msg, list, cb, target) {
- can.onexport._init(can, msg, list, cb, target)
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
- can.run(msg._event, [], function(msg) {
- console.log(can._root, can._name, "show", msg.result)
- can.core.List(msg.result, function(title) {
- can.page.Append(can, can._output, [{view: ["title", "div", title]}])
- })
-
- console.log(can._root, can._name, "show", can.Conf("state"))
- can.ui = can.page.Append(can, can._output, [{view: "state", list: can.core.List(can.Conf("state"), function(item) {
- return {text: can.Conf(item)||"", className: item, click: function(event) {can.onaction[item](event, can, item)}};
- })}])
- })
- },
-})
-
diff --git a/demo/pane/Header.js b/demo/pane/Header.js
deleted file mode 100644
index 9521f1b2..00000000
--- a/demo/pane/Header.js
+++ /dev/null
@@ -1,39 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, target) {
- },
-})
-Volcanos("onaction", {help: "交互数据", list: [],
- _init: function(can, msg, list, cb, target) {
- can.onexport._init(can, msg, list, cb, target)
- can.run(msg._event, ["search", "Footer.onaction._init"], function(msg) {
- })
- can.run(msg._event, ["search", "Action.onaction._init"], function(msg) {
- })
- },
- title: function(event, can, key) {
- },
- time: function(event, can, key) {
- can.ui[key].innerHTML = can.base.Time().split(" ")[1]
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
- can.run(msg._event, [], function(msg) {
- console.log(can._root, can._name, "show", msg.result)
- can.core.List(msg.result, function(title) {
- can.page.Append(can, can._output, [{view: ["title", "div", title],
- click: function(event) {can.onaction["title"](event, can, "title")},
- }])
- })
-
- console.log(can._root, can._name, "show", can.Conf("state"))
- can.ui = can.page.Append(can, can._output, [{view: "state", list: can.core.List(can.Conf("state"), function(item) {
- return {text: can.Conf(item)||"", className: item, click: function(event) {can.onaction[item](event, can, item)}};
- })}])
-
- can.timer = can.Timer({interval: 1000, length: -1}, function(event) {
- can.onaction.time(event, can, "time")
- })
- })
- },
-})
diff --git a/demo/pane/River.js b/demo/pane/River.js
deleted file mode 100644
index d8915b25..00000000
--- a/demo/pane/River.js
+++ /dev/null
@@ -1,37 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, target) {
- },
-})
-Volcanos("onaction", {help: "交互数据", list: [],
- _init: function(can, msg, list, cb, target) {
- can.onexport._init(can, msg, list, cb, target)
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- _init: function(can, msg, list, cb, target) { var key = "river";
- if (Volcanos.meta.follow[can._root]) { debugger }
- if (msg.Option(key, can.Conf(key))) {
- typeof cb == "function" && cb (msg); return
- }
-
- can.run(msg._event, [], function(msg) { can._output.innerHTML = "";
- if (Volcanos.meta.follow[can._root]) { debugger }
- var select; msg.Table(function(value, index, array) {
- // 添加列表
- var view = can.onappend.item(can, can._output, "item", value, function(event, item) {
- // 左键点击
- can.Conf(key, value.key); can.run(event, ["search", "Storm.onaction._init"], function(action) {
- // 切换群组
- });
- }, function(event) {
- // 右键点击
- });
- if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
- select = view
- }
- }); select.click();
- typeof cb == "function" && cb(msg)
- })
- },
-})
-
diff --git a/demo/pane/Storm.css b/demo/pane/Storm.css
deleted file mode 100644
index df64ac18..00000000
--- a/demo/pane/Storm.css
+++ /dev/null
@@ -1,21 +0,0 @@
-fieldset.Storm {
- min-width:80px;
- min-height:160px;
- float:right;
-}
-fieldset.Storm>div.output {
- padding:0;
-}
-fieldset.Storm>div.output>div.item {
- padding-left:6px;
-}
-fieldset.Storm>div.output>div.item:hover {
- cursor:pointer;
- background-color:red;
- border:ridge 2px yellow;
-}
-fieldset.Storm>div.output>div.item.select {
- background-color:red;
- border:ridge 2px yellow;
-}
-
diff --git a/demo/pane/Storm.js b/demo/pane/Storm.js
deleted file mode 100644
index aed0854f..00000000
--- a/demo/pane/Storm.js
+++ /dev/null
@@ -1,41 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, target) {
- },
-})
-Volcanos("onaction", {help: "交互数据", list: [],
- _init: function(can, msg, list, cb, target) {
- can.onexport._init(can, msg, list, cb, target)
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- _init: function(can, msg, list, cb, target) { var key = "storm";
- if (Volcanos.meta.follow[can._root]) { debugger }
- can.run(msg._event, ["search", "River.onaction._init"], function(msg) {
- if (Volcanos.meta.follow[can._root]) { debugger }
- can.Cache(can.Conf("river"), can._output, can.Conf(key));
- var river = can.Conf("river", msg.Option("river"));
- console.log(can._root, can._name, "show", river);
- if (can.Conf(key, msg.Option(key, can.Cache(river, can._output)))) {
- typeof cb == "function" && cb (msg); return
- }
-
- can.run(msg._event, [river], function(msg) { can._output.innerHTML = "";
- if (Volcanos.meta.follow[can._root]) { debugger }
- var select; msg.Table(function(value, index, array) {
- // 添加列表
- var view = can.onappend.item(can, can._output, "item", value, function(event, item) {
- // 左键点击
- can.Conf(key, value.key); can.run(event, ["search", "Action.onaction._init"], function(msg) {
- })
- }, function(event, item) {
- // 右键点击
- });
- if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
- select = view
- }
- }); select.click();
- typeof cb == "function" && cb(msg)
- })
- })
- },
-})
diff --git a/demo/plugin/input.js b/demo/plugin/input.js
deleted file mode 100644
index f37c07e4..00000000
--- a/demo/plugin/input.js
+++ /dev/null
@@ -1,27 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, output, action, option, field) { output.innerHTML = "";
- },
-})
-Volcanos("onaction", {help: "控件交互", list: [],
- onclick: function(event, can) {
- switch (can.Conf("type")) {
- case "button":
- can.run(event, [], function() {})
- break
- }
- },
- onkeydown: function(event, can) {
- switch (event.key) {
- case "Enter":
- can.run(event, [], function() {})
- break
- }
- },
- onkeyup: function(event, can) {
- switch (event.key) {
- case "Enter":
- can.run(event, [], function() {})
- break
- }
- },
-})
diff --git a/demo/plugin/state.js b/demo/plugin/state.js
deleted file mode 100644
index 8caf88e6..00000000
--- a/demo/plugin/state.js
+++ /dev/null
@@ -1,5 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, target) {
- },
-})
-
diff --git a/demo/plugin/table.js b/demo/plugin/table.js
deleted file mode 100644
index f76c9cb2..00000000
--- a/demo/plugin/table.js
+++ /dev/null
@@ -1,19 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, msg, list, cb, output, action, option, field) { output.innerHTML = "";
- var table = can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
- can.page.Select(can, option, "input.args", function(input) { if (input.name == key) {
- input.value = value
- } })
- }, function(event, value, key, index, tr, td) {
- });
- msg.result && can.page.AppendBoard(can, output, msg.result.join(""))
- },
-})
-Volcanos("onaction", {help: "控件交互", list: [],
- onclick: function(event, can) {
- can.run(event, [], function() {})
- },
-})
-
-
-
diff --git a/demo/style.css b/demo/style.css
deleted file mode 100644
index aceec56f..00000000
--- a/demo/style.css
+++ /dev/null
@@ -1,156 +0,0 @@
-* {
- background:black;
-}
-body {
- padding:0;
- margin:0;
-}
-fieldset {
- color:cyan;
- padding:2px;
- margin:0px;
-}
-legend {
- margin-left:10px;
-}
-
-fieldset>form.option {
- padding:0 5px;
-}
-fieldset>form.option>br {
- clear:both;
-}
-fieldset>form.option>div.item {
- margin-right:3px;
- float:left;
-}
-fieldset>form.option>div.item label {
- margin-right:3px;
-}
-fieldset>form.option>div.item input.args.char {
- width:20px;
-}
-fieldset>form.option>div.item input.args.tiny {
- width:40px;
-}
-fieldset>form.option>div.item input.args {
- width:80px;
-}
-fieldset>form.option>div.item input.args.cmd {
- background-color:black;
- color:white;
- width:160px;
-}
-fieldset>form.option>div.item input.args.long {
- width:240px;
-}
-fieldset>form.option>div.item input.args.full {
- width:480px;
-}
-fieldset>form.option>div.item input.opts {
- width:80px;
-}
-fieldset>form.option>div.item textarea.args {
- width:300px;
- height:50px;
- background-color:cyan;
-}
-
-fieldset>form.option>div.item.text>input {
- background-color:cyan;
-}
-fieldset>form.option>div.item.button>input {
- color:cyan;
-}
-fieldset>form.option>div.item.select>select {
- color:cyan;
-}
-fieldset>form.option>div.item.textarea {
- margin-top:4px;
- clear:both;
-}
-
-fieldset.Action>div.output {
- overflow:auto;
-}
-fieldset>div.output {
- margin-top:4px;
- clear:both;
- overflow:auto;
-}
-
-fieldset table {
- font-size:14px;
- overflow: auto;
-}
-fieldset table caption {
- font-size:18px;
- font-style:italic;
- border:solid 1px green;
-}
-fieldset table tbody {
- overflow:auto;
-}
-fieldset table td sup.more {
- color:red;
-}
-
-fieldset table {
- border:solid 1px green;
- cursor:pointer;
-}
-fieldset table tr:hover {
- background-color:#0fbd45;
-}
-fieldset table tr.over {
- background:red;
-}
-fieldset table tr.select {
- background-color:#0fbd45;
-}
-fieldset table th {
- font-family:monospace;
- background-color:#0fbd45;
- cursor:pointer;
- padding: 0 6px;
-}
-fieldset table td {
- max-width:1200px;
- font-family:monospace;
- padding: 0 6px;
- white-space: pre;
-}
-fieldset table td:hover {
- background-color:red;
-}
-fieldset table td.select {
- background-color:red;
-}
-
-fieldset div.code {
- color:white;
- font-size:14px;
- font-family:monospace;
- background-color:#343a34f2;
- white-space:pre;
- padding:10px;
- overflow:auto;
- border:solid 3px green;
- max-height:640px;
-}
-fieldset div.hidden {
- display:none;
-}
-
-fieldset div.code {
- color:white;
- font-size:14px;
- font-family:monospace;
- background-color:#343a34f2;
- white-space:pre;
- padding:10px;
- overflow:auto;
- border:solid 3px green;
- max-height:640px;
-}
-
diff --git a/demo/frame.js b/frame.js
similarity index 98%
rename from demo/frame.js
rename to frame.js
index aa484826..2281f210 100644
--- a/demo/frame.js
+++ b/frame.js
@@ -44,6 +44,7 @@ Volcanos("onappend", {
var option = can.page.Select(can, field, "form.option")[0];
var action = can.page.Select(can, field, "div.action")[0];
var output = can.page.Select(can, field, "div.output")[0];
+ var feature = JSON.parse(meta.feature||"{}")||{}
// 添加插件
if (Volcanos.meta.follow[can._root]) { debugger }
@@ -85,10 +86,10 @@ Volcanos("onappend", {
if (silent) { typeof cb == "function" && cb(msg); return }
// 添加组件
- var display = msg.Option("display")||meta.display||"table"
+ var display = msg.Option("display")||feature.display||"plugin/table"
sub[display] = Volcanos(display, { _target: output,
_option: option, _action: action, _output: output,
- }, Config.libs.concat(["plugin/"+display]), function(table) {
+ }, Config.libs.concat([display]), function(table) {
table.onimport._init(table, msg, msg.append||[], function() {
}, output)
})
diff --git a/frame_old.js b/old/frame_old.js
similarity index 100%
rename from frame_old.js
rename to old/frame_old.js
diff --git a/page/chat.js b/old/page/chat.js
similarity index 100%
rename from page/chat.js
rename to old/page/chat.js
diff --git a/page/demo.html b/old/page/demo.html
similarity index 100%
rename from page/demo.html
rename to old/page/demo.html
diff --git a/page/demo.js b/old/page/demo.js
similarity index 100%
rename from page/demo.js
rename to old/page/demo.js
diff --git a/old/page/frame_old.js b/old/page/frame_old.js
new file mode 120000
index 00000000..f8b9cc53
--- /dev/null
+++ b/old/page/frame_old.js
@@ -0,0 +1 @@
+../frame_old.js
\ No newline at end of file
diff --git a/demo/index.html b/old/page/index.html
similarity index 58%
rename from demo/index.html
rename to old/page/index.html
index 657607a7..a9d7642a 100644
--- a/demo/index.html
+++ b/old/page/index.html
@@ -5,11 +5,12 @@
volcanos
-
+
-
-
+
+
+
diff --git a/old/page/index.js b/old/page/index.js
new file mode 100644
index 00000000..dde63d82
--- /dev/null
+++ b/old/page/index.js
@@ -0,0 +1,46 @@
+var Config = {iceberg: "/chat/", volcano: "",
+ libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"],
+ main: "chat", list: [
+ "page/chat",
+ "pane/float/Toast", "pane/float/Carte",
+ "pane/float/Tutor", "pane/float/Debug",
+ "pane/float/Login", "pane/float/Favor",
+
+ "pane/Header",
+ "pane/River", "pane/Storm",
+ "pane/Target", "pane/Source", "pane/Action",
+ "pane/Ocean", "pane/Steam",
+ "pane/Footer",
+
+ "plugin/state", "plugin/table", "plugin/input",
+ "plugin/input/date", "plugin/input/key",
+ ], pane: [
+ {group: "index", name: "Toast", path: "float/", pos: "dialog", duration: 3000},
+ {group: "index", name: "Carte", path: "float/", pos: "dialog"},
+ {group: "index", name: "Tutor", path: "float/", pos: "dialog"},
+ {group: "index", name: "Debug", path: "float/", pos: "dialog"},
+ {group: "index", name: "Login", path: "float/", pos: "dialog"},
+ {group: "index", name: "Favor", path: "float/", pos: "dialog"},
+
+ {group: "index", name: "Header", pos: "head", state: ["time", "user", "link"]},
+ {group: "index", name: "River", pos: "left"},
+ {group: "index", name: "Storm", pos: "right"},
+
+ {group: "index", name: "Target", pos: "top"},
+ {group: "index", name: "Source", pos: "center"},
+ {group: "index", name: "Action", pos: "bottom"},
+
+ {group: "index", name: "Ocean", pos: "dialog", def_name: "meet"},
+ {group: "index", name: "Steam", pos: "dialog", def_name: "miss"},
+ {group: "index", name: "Footer", pos: "foot", state: ["ntxt", "ncmd"]},
+
+ ], title: "volcanos", topic: "black", layout: {def: "工作", list: ["工作", "办公", "聊天"], size: {
+ "最大": {head: 0, foot: 0, left: 0, right: 0, bottom: -1, center: 0, top: 0},
+ "工作": {head: 30, foot: 30, left: 0, right: 100, bottom: -1, center: 0, top: 0},
+ "办公": {head: 30, foot: 30, left: 100, right: 100, bottom: -1, center: 0, top: 0},
+ "聊天": {head: 30, foot: 30, left: 100, right: 100, bottom: 300, center: 40, top: -2},
+ "最长": {head: 30, foot: 30, left: 0, right: 0, bottom: -2, center: 0, top: 0},
+ "全屏": {head: 0, foot: 0, left: 0, right: 0, bottom: -1, center: 0, top: 0},
+ }, border: 4,
+ }, scroll: {line: 100},
+}
diff --git a/old/page/lib b/old/page/lib
new file mode 120000
index 00000000..58677ddb
--- /dev/null
+++ b/old/page/lib
@@ -0,0 +1 @@
+../../lib
\ No newline at end of file
diff --git a/page/open.sh b/old/page/open.sh
similarity index 100%
rename from page/open.sh
rename to old/page/open.sh
diff --git a/page/page b/old/page/page
similarity index 100%
rename from page/page
rename to old/page/page
diff --git a/old/page/pane b/old/page/pane
new file mode 120000
index 00000000..cabd17f1
--- /dev/null
+++ b/old/page/pane
@@ -0,0 +1 @@
+../pane
\ No newline at end of file
diff --git a/page/plugin b/old/page/plugin
similarity index 100%
rename from page/plugin
rename to old/page/plugin
diff --git a/old/page/proto_old.js b/old/page/proto_old.js
new file mode 120000
index 00000000..1e3a533c
--- /dev/null
+++ b/old/page/proto_old.js
@@ -0,0 +1 @@
+../proto_old.js
\ No newline at end of file
diff --git a/page/share.html b/old/page/share.html
similarity index 100%
rename from page/share.html
rename to old/page/share.html
diff --git a/page/share.js b/old/page/share.js
similarity index 100%
rename from page/share.js
rename to old/page/share.js
diff --git a/old/page/style_old.css b/old/page/style_old.css
new file mode 120000
index 00000000..81f38473
--- /dev/null
+++ b/old/page/style_old.css
@@ -0,0 +1 @@
+../style_old.css
\ No newline at end of file
diff --git a/page/topic/black.css b/old/page/topic/black.css
similarity index 100%
rename from page/topic/black.css
rename to old/page/topic/black.css
diff --git a/page/topic/gray.css b/old/page/topic/gray.css
similarity index 100%
rename from page/topic/gray.css
rename to old/page/topic/gray.css
diff --git a/page/topic/miss.css b/old/page/topic/miss.css
similarity index 100%
rename from page/topic/miss.css
rename to old/page/topic/miss.css
diff --git a/page/topic/miss.svg b/old/page/topic/miss.svg
similarity index 100%
rename from page/topic/miss.svg
rename to old/page/topic/miss.svg
diff --git a/old/pane/Action.css b/old/pane/Action.css
new file mode 100644
index 00000000..bb16ee50
--- /dev/null
+++ b/old/pane/Action.css
@@ -0,0 +1,4 @@
+fieldset.Action div.output div.item:hover {
+ background-color:lightblue;
+}
+
diff --git a/old/pane/Action.js b/old/pane/Action.js
new file mode 100644
index 00000000..c30f888e
--- /dev/null
+++ b/old/pane/Action.js
@@ -0,0 +1,218 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ _begin: function(can) {},
+ _start: function(can) {
+ can.page.Select(can, can.action, "input,select", function(input) {
+ input.value = can.user.Search(can, input.name) || input.value || ""
+ })
+ },
+
+ init: function(event, can, msg, cmd, field) {can.output.innerHTML = "";
+ can._local[msg.cmds[0]] = can._local[msg.cmds[0]] || {}
+ can._local[msg.cmds[0]][msg.cmds[1]] = msg.Table(function(item, index) {if (!item.name) {return}
+ // 添加插件
+ var plugin = can[item.name] = can.Plugin(can, item.name, item, function(event, cmds, cbs) {
+ can.run(event, [item.river, item.storm, item.action].concat(cmds), cbs)
+ }, can.page.AppendField(can, can.output, "item "+item.name, item))
+ return can._plugins.push(plugin), plugin
+ })
+ },
+ river: function(event, can, value, cmd, field) {if (value == "update") {return}
+ can.Conf("temp_river", value)
+ },
+ storm: function(event, can, value, cmd, field) {if (value == "update") {return}
+ // 保存界面
+ can.Cache(can.Conf("river")+"."+can.Conf("storm"), can.output, "some");
+ if (can.Cache(can.Conf("river", can.Conf("temp_river"))+"."+can.Conf("storm", value), can.output)) {
+ // 恢复界面
+ return
+ }
+ // 刷新界面
+ can.run(event, [can.Conf("river"), can.Conf("storm")], function(msg) {
+ can.onimport.init(event, can, msg, cmd, can.output)
+ })
+ },
+ pod: function(event, can, value, cmd, field) {
+ can.user.title(value)
+ },
+ you: function(event, can, value, cmd, field) {
+ can.user.title(value)
+ },
+
+ layout: function(event, can, value, cmd, field) {value},
+ scroll: function(event, can, value, cmd, field) {can.layout = value;
+ can.output.parentElement.scrollBy(value.x, value.y)
+ },
+ favor: function(event, can, msg, cmd, field) {if (msg._hand) {return}
+ var cmds = msg.detail, key = cmds[0];
+ if (key == can.Name()) {key = cmds[1], cmds = cmds.slice(1)}
+
+ // 下发数据
+ can.core.Item(can._local, function(river, list) {
+ can.core.Item(list, function(storm, list) {
+ can.core.List(list, function(sub) {
+ if (sub._name == key) {
+ sub.Select(event), msg._hand = true;
+ msg.Echo(can._name, " ", key)
+ }
+ })
+ })
+ })
+ },
+})
+Volcanos("onaction", {help: "组件交互", list: [
+ ["layout"].concat(Config.layout.list), "清屏", "刷新", "并行","串行",
+ ["action", "正常", "竖排", "编排", "定位", "定形"],
+ {input: "pod"}, {input: "you"},
+ {input: "hot"}, {input: "top"},
+ {input: "grp"}, {input: "lab"},
+],
+ layout: function(event, can, value, cmd, field) {can.Export(event, cmd, value)},
+
+ "清屏": function(event, can, msg, cmd, field) {
+ can.page.Select(can, can.output, "fieldset.item>div.output", function(item) {
+ item.innerHTML = "";
+ })
+ },
+ "刷新": function(event, can, msg, cmd, field) {
+ can.page.Select(can, can.output, "fieldset.item>div.output", function(item) {
+ item.innerHTML = "";
+ })
+ can.run(event, [can.Conf("river"), can.Conf("storm")], function(msg) {
+ can.onimport.init(event, can, msg, cmd, can.output)
+ })
+ },
+ "并行": function(event, can, msg, cmd, field) {
+ can.page.Select(can, field, "fieldset.item", function(field) {
+ can.page.Select(can, field, "input[type=button]", function(input, index) {
+ index == 0 && input.click()
+ })
+ })
+ },
+ "串行": function(event, can, msg, cmd, field) {
+ can.core.Next(can.page.Select(can, field, "fieldset.item", function(field) {
+ return field
+ }), function(field, cb) {
+ can.page.Select(can, field, "input[type=button]", function(input, index) {
+ index == 0 && field.Check(event, input, cb)
+ })
+ })
+ },
+
+ "正常": function(event, can, value, cmd, field) {
+ can.page.Select(can, can.output, "fieldset.item", function(item) {
+ item.setAttribute("draggable", false)
+ item.style.position = ""
+ item.style.cursor = ""
+ item.style.clear = ""
+ item.style.left = ""
+ item.style.top = ""
+ })
+ },
+ "竖排": function(event, can, value, cmd, field) {
+ can.page.Select(can, can.output, "fieldset.item", function(item) {
+ item.style.clear = "both"
+ })
+ },
+ "编排": function(event, can, value, cmd, field) {
+ can.page.Select(can, can.target, "fieldset.item", function(item) {
+ item.setAttribute("draggable", true)
+ item.ondragstart = function(event) {can.drag = event.target}
+ item.ondragover = function(event) {event.preventDefault()}
+ item.ondrop = function(event) {event.preventDefault()
+ item.parentNode.insertBefore(can.drag, item)
+ }
+ })
+ },
+ "定位": function(event, can, value, cmd, field) {
+ can.page.Select(can, can.output, "fieldset.item", function(item) {
+ item.style.left = item.offsetLeft + "px"
+ item.style.top = item.offsetTop + "px"
+ })
+
+ var max, current, begin;
+ can.page.Select(can, can.output, "fieldset.item", function(item) {
+ item.style.position = "absolute"
+
+ item.onmousedown = function(event) {if (can.Action("action") != "定位") {return}
+ if (current) {
+ // 更新位置
+ current.style.left = begin.left + event.clientX - begin.x + "px"
+ current.style.top = begin.top + event.clientY - begin.y + "px"
+ current = null;
+ return
+ }
+ // 记录位置
+ current = item;
+ current.style["z-index"] = max = max + 1
+ begin = {x: event.clientX, y: event.clientY, left: item.offsetLeft, top: item.offsetTop}
+ };
+
+ can.output.onmousemove = item.onmousemove = function(event) {if (!current) {return}
+ // 移动位置
+ current.style.left = begin.left + event.clientX - begin.x + "px"
+ current.style.top = begin.top + event.clientY - begin.y + "px"
+ }
+ })
+ },
+ "定形": function(event, can, value, cmd, field) {
+ can.page.Select(can, can.output, "fieldset.item", function(item) {
+ item.style.top = item.offsetTop + "px"
+ item.style.left = item.offsetLeft + "px"
+ item.style.width = item.offsetWidth + "px"
+ item.style.height = item.offsetHeight + "px"
+ })
+
+ var max, pos, current, begin;
+ can.page.Select(can, can.output, "fieldset.item", function(item) {
+ item.style.position = "absolute"
+
+ item.onmousedown = function(event) {
+ if (can.Action("action") != "定形") {return}
+ if (current) {current = null; return}
+
+ // 记录位置
+ current = item;
+ current.style["z-index"] = max = max + 1
+ begin = {
+ x: event.clientX, y: event.clientY,
+ left: item.offsetLeft, top: item.offsetTop,
+ width: item.offsetWidth, height: item.offsetHeight,
+ }
+ };
+
+ item.onmousemove = function(event) {
+ if (can.Action("action") != "定形") {return}
+ var pos = can.page.Prepos(event, item)
+ if (!current) {return}
+ can.page.Resize(event, current, begin, pos)
+ }
+ })
+ },
+})
+Volcanos("onchoice", {help: "组件菜单", list: ["共享", "保存", "刷新"],
+ "共享": function(event, can, msg, cmd, field) {
+ can.user.input(event, can, ["name", "text"], function(event, cmd, meta, list) {
+ var msg = can.Event(event);
+ msg.Option("name", meta.name)
+ msg.Option("text", meta.key)
+ cmd == "提交" && can.Export(event, can.Name(), "share")
+ return true
+ })
+ },
+ "保存": function(event, can, msg, cmd, field) {
+ var list = []
+ can.page.Select(can, field, "fieldset.item", function(item) {var meta = item.Meta
+ can.page.Select(can, item, "form.option", function(option) {
+ if (option.parentNode != item) {return}
+ meta.args = can.page.Select(can, option, ".args", function(item) {return item.value})
+ })
+ list.push(meta.node||"", meta.group, meta.index, meta.help, JSON.stringify(meta.args||[]))
+ })
+ can.run(event, [can.Conf("river"), can.Conf("storm"), "save"].concat(list), function(msg) {
+ can.user.toast("保存成功")
+ })
+ },
+})
+Volcanos("ondetail", {help: "组件详情", list: []})
+Volcanos("onexport", {help: "导出数据", list: []})
+
diff --git a/old/pane/Footer.css b/old/pane/Footer.css
new file mode 100644
index 00000000..aa2f2117
--- /dev/null
+++ b/old/pane/Footer.css
@@ -0,0 +1,29 @@
+fieldset.Footer {
+ clear:both;
+ overflow:hidden;
+ height:32px;
+}
+fieldset.Footer>div.action {
+ padding:0;
+}
+fieldset.Footer>div.output div.title {
+ float:left;
+}
+fieldset.Footer>div.output div.magic {
+ float:right;
+ margin-top:-6px;
+}
+fieldset.Footer>div.output div.magic>label {
+ margin-right:2px;
+}
+fieldset.Footer>div.output div.magic>input {
+ background-color:black;
+ color:lightgreen;;
+}
+fieldset.Footer>div.output div.state {
+ float:right;
+}
+fieldset.Footer>div.output div.state div {
+ float:right;
+}
+
diff --git a/old/pane/Footer.js b/old/pane/Footer.js
new file mode 100644
index 00000000..c60e58b1
--- /dev/null
+++ b/old/pane/Footer.js
@@ -0,0 +1,31 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ _init: function(can, meta, list, cb, output, action, option, field) {output.innerHTML = "";
+ can._init = function() {
+ can.run({}, [], function(msg) {
+ can.core.List(msg.result, function(title) {
+ can.page.Append(can, output, [{view: "title", list: [{text: title, className: "title"}]}])
+ })
+
+ can.ui = can.page.Append(can, output, [{view: "state", list: can.core.List(meta.state, function(item) {
+ return {text: meta[item]||"", className: item, click: function(event) {can.Export(event, meta[item], item)}};
+ })}])
+ })
+ }
+ },
+ username: function(event, can, value, cmd, field) {can._init()},
+
+ email: function(event, can, value, cmd, field) {
+ can.ui[cmd].innerHTML = value
+ },
+ ntxt: function(event, can, value, cmd, field) {var state = can.Conf(cmd);
+ can.ui[cmd].innerHTML = cmd+":"+ can.Conf(cmd, can.base.Int(value)+can.base.Int(state))
+ },
+ ncmd: function(event, can, value, cmd, field) {var state = can.Conf(cmd);
+ can.ui && (can.ui[cmd].innerHTML = cmd+":"+ can.Conf(cmd, can.base.Int(value)+can.base.Int(state)))
+ },
+})
+Volcanos("onaction", {help: "组件交互", list: []})
+Volcanos("onchoice", {help: "组件菜单", list: []})
+Volcanos("ondetail", {help: "组件详情", list: []})
+Volcanos("onexport", {help: "导出数据", list: []})
+
diff --git a/demo/pane/Header.css b/old/pane/Header.css
similarity index 75%
rename from demo/pane/Header.css
rename to old/pane/Header.css
index bb6b95ea..a59bdd90 100644
--- a/demo/pane/Header.css
+++ b/old/pane/Header.css
@@ -1,27 +1,29 @@
fieldset.Header {
height:32px;
+ min-width:640px;
clear:both;
}
-fieldset.Header>div {
- margin:7px 0;
+fieldset.Header>div.action {
+ padding:0;
}
fieldset.Header>div.output>div.title {
- margin-left:5px;
cursor:pointer;
float:left;
}
fieldset.Header>div.output>div.title:hover {
+ cursor:pointer;
background-color:red;
border:ridge 2px yellow;
}
-
fieldset.Header>div.output>div.state {
- margin-right:5px;
float:right;
}
+fieldset.Header>div.output>div.state div.item {
+ padding:0;
+}
fieldset.Header>div.output>div.state>div {
cursor:pointer;
- margin-right:5px;
+ margin-left:5px;
float:right;
}
fieldset.Header>div.output>div.state>div:hover {
diff --git a/old/pane/Header.js b/old/pane/Header.js
new file mode 100644
index 00000000..79a2d94b
--- /dev/null
+++ b/old/pane/Header.js
@@ -0,0 +1,59 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ _init: function(can, meta, list, cb, output, action, option, field) {output.innerHTML = "";
+ can._init = function() {
+ can.run({}, [], function(msg) {
+ can.core.List(msg.result, function(title) {
+ can.page.Append(can, output, [{view: "title", list: [{text: title, className: "title"}],
+ click: function(event) {can.Export(event, meta.title, "title")},
+ }])
+ })
+
+ can.ui = can.page.Append(can, output, [{view: "state", list: can.core.List(meta.state, function(item) {
+ return {text: meta[item]||"", className: item, click: function(event) {can.Export(event, meta[item], item)}};
+ })}])
+
+ can.timer = can.Timer({interval: 1000, length: -1}, function(event) {
+ can.onimport.time(event, can, can.base.Time().split(" ")[1], "time")
+ })
+ })
+ }
+ },
+ username: function(event, can, value, cmd, field) {can.Conf("user", value), can._init()},
+
+ title: function(event, can, value, cmd, field) {
+ can.ui[cmd].innerHTML = value
+ },
+ time: function(event, can, value, cmd, field) {
+ can.ui[cmd].innerHTML = value
+ },
+
+ river: function(event, can, value, cmd, field) {if (value == "update") {return}
+ can.Conf("river", value)
+ },
+ storm: function(event, can, value, cmd, field) {if (value == "update") {return}
+ can.Conf("storm", value)
+ },
+ layout: function(event, can, value, cmd, field) {if (value == "update") {return}
+ can.Conf("layout", value)
+ },
+})
+Volcanos("onaction", {help: "组件交互", list: []})
+Volcanos("onchoice", {help: "组件菜单", list: []})
+Volcanos("ondetail", {help: "组件详情", list: []})
+Volcanos("onexport", {help: "导出数据", list: [],
+ title: function(event, can, value, cmd, field) {
+ var args = {river: can.Conf("river"), storm: can.Conf("storm"), layout: can.Conf("layout")}
+
+ can.page.Select(can, document.body, "fieldset.Action>div.action input", function(input) {
+ input.name && input.value && (args[input.name] = input.value)
+ })
+ can.user.Search(can, args)
+ },
+ user: function(event, can, value, cmd, field) {
+ if (can.user.confirm("logout?")) {
+ can.user.Cookie(can, "sessid", "")
+ can.user.reload()
+ }
+ },
+})
+
diff --git a/pane/Ocean.css b/old/pane/Ocean.css
similarity index 100%
rename from pane/Ocean.css
rename to old/pane/Ocean.css
diff --git a/pane/Ocean.js b/old/pane/Ocean.js
similarity index 100%
rename from pane/Ocean.js
rename to old/pane/Ocean.js
diff --git a/demo/pane/River.css b/old/pane/River.css
similarity index 63%
rename from demo/pane/River.css
rename to old/pane/River.css
index 49111b54..5dec11b0 100644
--- a/demo/pane/River.css
+++ b/old/pane/River.css
@@ -1,6 +1,4 @@
fieldset.River {
- min-width:80px;
- min-height:160px;
float:left;
}
fieldset.River>div.output {
@@ -9,10 +7,6 @@ fieldset.River>div.output {
fieldset.River>div.output>div.item {
padding-left:6px;
}
-fieldset.River>div.output>div.item:hover {
- background-color:red;
- border:ridge 2px yellow;
-}
fieldset.River>div.output>div.item.select {
background-color:red;
border:ridge 2px yellow;
diff --git a/old/pane/River.js b/old/pane/River.js
new file mode 100644
index 00000000..e49eea33
--- /dev/null
+++ b/old/pane/River.js
@@ -0,0 +1,79 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ init: function(event, can, msg, cmd, field) {can.output.innerHTML = "";
+ can.page.AppendItem(can, can.output, msg.Table(), can.user.Search(can, can.Name()), function(event, line, item) {
+ can.Export(event, line.key, can.Name())
+ })
+ },
+ river: function(event, can, value, cmd, field) {if (value == "update") {
+ can.run(event, [], function(msg) {
+ can.onimport.init(event, can, msg, cmd, field)
+ })
+ }},
+ favor: function(event, can, msg, cmd, field) {if (msg._hand) {return}
+ var cmds = msg.detail, key = cmds[0];
+ if (key == can.Name()) {key = cmds[1], cmds = cmds.slice(1)}
+
+ can.page.Select(can, field, "div.item>span", function(item) {
+ if (item.innerText == key) {
+ item.click(), msg._hand = true;
+ msg.Echo(can._name, " ", key)
+ }
+ })
+ },
+})
+Volcanos("onaction", {help: "组件交互", list: ["创建", "刷新"],
+ "创建": function(event, can, meta, cmd, field) {
+ can.Export(event, "create", "ocean")
+ },
+ "刷新": function(event, can, meta, cmd, field) {
+ can.Import(event, "update", can.Name())
+ },
+})
+Volcanos("onchoice", {help: "组件菜单", list: ["创建", "刷新", "宽度"],
+ "宽度": function(event, can, meta, cmd, field) {
+ var begin;
+ function end() {
+ field.onmousedown = null;
+ field.onmousemove = null;
+ field.style.cursor = "";
+ begin = null;
+ }
+
+ field.style.cursor = "e-resize"
+ field.onmousedown = function(event) {if (begin) {return end()}
+ begin = {x: event.clientX, width: field.offsetWidth}
+ }
+ field.onmousemove = function(event) {if (!begin) {return}
+ field.dataset.width = field.style.width = begin.width + event.clientX - begin.x + "px";
+ can.Export(event, "", "layout");
+ }
+
+ can.user.prompt("输入宽度", function(width) {
+ field.dataset.width = field.style.width = width + "px"
+ can.Export(event, "", "layout")
+ end()
+ }, field.offsetWidth)
+ },
+})
+Volcanos("ondetail", {help: "组件详情", list: ["共享", "重命名", "删除"],
+ "共享": function(event, can, line, value, cmd, item) {
+ var msg = can.Event(event);
+ msg.Option("name", line.name)
+ msg.Option("text", line.key)
+ can.Export(event, can.Name(), "share")
+ },
+ "重命名": function(event, can, line, value, cmd, item) {
+ can.user.prompt("输入新名:", function(name) {
+ can.run(event, [value, "rename", name], function(msg) {
+ can.Import(event, "update", can.Name())
+ })
+ }, line.name)
+ },
+ "删除": function(event, can, line, value, cmd, item) {
+ can.run(event, [value, "remove"], function(msg) {
+ can.Import(event, "update", can.Name())
+ })
+ },
+})
+Volcanos("onexport", {help: "导出数据", list: []})
+
diff --git a/pane/Source.css b/old/pane/Source.css
similarity index 100%
rename from pane/Source.css
rename to old/pane/Source.css
diff --git a/pane/Source.js b/old/pane/Source.js
similarity index 100%
rename from pane/Source.js
rename to old/pane/Source.js
diff --git a/pane/Steam.css b/old/pane/Steam.css
similarity index 100%
rename from pane/Steam.css
rename to old/pane/Steam.css
diff --git a/pane/Steam.js b/old/pane/Steam.js
similarity index 100%
rename from pane/Steam.js
rename to old/pane/Steam.js
diff --git a/old/pane/Storm.css b/old/pane/Storm.css
new file mode 100644
index 00000000..b72d830c
--- /dev/null
+++ b/old/pane/Storm.css
@@ -0,0 +1,10 @@
+fieldset.Storm {
+ float:right;
+}
+fieldset.Storm>div.output {
+ padding:0;
+}
+fieldset.Storm>div.output>div.item {
+ padding-left:6px;
+}
+
diff --git a/old/pane/Storm.js b/old/pane/Storm.js
new file mode 100644
index 00000000..f23ab8ea
--- /dev/null
+++ b/old/pane/Storm.js
@@ -0,0 +1,89 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ init: function(event, can, msg, cmd, field) {can.output.innerHTML = "";
+ can.page.AppendItem(can, can.output, msg.Table(), can.user.Search(can, can.Name()), function(event, line, item) {
+ can.Export(event, line.key, can.Name())
+ })
+ },
+ river: function(event, can, value, cmd, field) {if (value == "update") {return}
+ can.run(event, [can.Conf("river", value)], function(msg) {
+ can.onimport.init(event, can, msg, cmd, field)
+ })
+ },
+ storm: function(event, can, value, cmd, field) {
+ if (value == "update") {
+ can.run(event, [can.Conf("river")], function(msg) {
+ can.onimport.init(event, can, msg, cmd, field)
+ })
+ } else {
+ can.Conf(can.Name(), value)
+ }
+ },
+ favor: function(event, can, msg, cmd, field) {if (msg._hand) {return}
+ var cmds = msg.detail, key = cmds[0];
+ if (key == "river") {key = cmds[1], cmds = cmds.slice(1)}
+
+ can.page.Select(can, field, "div.item>span", function(item) {
+ if (item.innerText == key) {
+ item.click(), msg._hand = true;
+ msg.Echo(can._name, " ", key)
+ }
+ })
+ },
+})
+Volcanos("onaction", {help: "组件交互", list: ["创建", "刷新"],
+ "创建": function(event, can, meta, cmd, field) {
+ can.Export(event, "create", "steam")
+ },
+ "刷新": function(event, can, meta, cmd, field) {
+ can.Import(event, "update", can.Name())
+ },
+})
+Volcanos("onchoice", {help: "组件菜单", list: ["创建", "刷新", "宽度"],
+ "宽度": function(event, can, meta, cmd, field) {
+ var begin;
+ function end() {
+ field.onmousedown = null;
+ field.onmousemove = null;
+ field.style.cursor = "";
+ begin = null;
+ }
+
+ field.style.cursor = "w-resize"
+ field.onmousedown = function(event) {if (begin) {return end()}
+ begin = {x: event.clientX, width: field.offsetWidth}
+ }
+ field.onmousemove = function(event) {if (!begin) {return}
+ field.dataset.width = field.style.width = begin.width - event.clientX + begin.x + "px";
+ can.Export(event, "", "layout");
+ }
+
+ can.user.prompt("输入宽度", function(width) {
+ field.dataset.width = field.style.width = width + "px"
+ can.Export(event, "", "layout")
+ end()
+ }, field.offsetWidth)
+ },
+})
+Volcanos("ondetail", {help: "组件详情", list: ["共享", "重命名", "删除"],
+ "共享": function(event, can, line, value, cmd, item) {can.share || (can.share = {});
+ var msg = can.Event(event);
+ msg.Option("name", line.name)
+ msg.Option("text", line.key)
+ can.Export(event, can.Name(), "share")
+ },
+ "重命名": function(event, can, line, value, cmd, item) {
+ can.user.prompt("输入新名:", function(name) {
+ can.run(event, [can.Conf("river"), value, "rename", name], function(msg) {
+ can.Import(event, "update", can.Name())
+ })
+ }, line.name)
+ },
+ "删除": function(event, can, line, value, cmd, item) {
+ can.run(event, [can.Conf("river"), value, "remove"], function(msg) {
+ can.Import(event, "update", can.Name())
+ })
+ },
+})
+Volcanos("onexport", {help: "导出数据", list: [],
+})
+
diff --git a/pane/Target.css b/old/pane/Target.css
similarity index 100%
rename from pane/Target.css
rename to old/pane/Target.css
diff --git a/pane/Target.js b/old/pane/Target.js
similarity index 100%
rename from pane/Target.js
rename to old/pane/Target.js
diff --git a/pane/float/Carte.css b/old/pane/float/Carte.css
similarity index 100%
rename from pane/float/Carte.css
rename to old/pane/float/Carte.css
diff --git a/pane/float/Carte.js b/old/pane/float/Carte.js
similarity index 100%
rename from pane/float/Carte.js
rename to old/pane/float/Carte.js
diff --git a/pane/float/Debug.css b/old/pane/float/Debug.css
similarity index 100%
rename from pane/float/Debug.css
rename to old/pane/float/Debug.css
diff --git a/pane/float/Debug.js b/old/pane/float/Debug.js
similarity index 100%
rename from pane/float/Debug.js
rename to old/pane/float/Debug.js
diff --git a/pane/float/Favor.css b/old/pane/float/Favor.css
similarity index 100%
rename from pane/float/Favor.css
rename to old/pane/float/Favor.css
diff --git a/pane/float/Favor.js b/old/pane/float/Favor.js
similarity index 100%
rename from pane/float/Favor.js
rename to old/pane/float/Favor.js
diff --git a/pane/float/Login.css b/old/pane/float/Login.css
similarity index 100%
rename from pane/float/Login.css
rename to old/pane/float/Login.css
diff --git a/pane/float/Login.js b/old/pane/float/Login.js
similarity index 100%
rename from pane/float/Login.js
rename to old/pane/float/Login.js
diff --git a/pane/float/Toast.css b/old/pane/float/Toast.css
similarity index 100%
rename from pane/float/Toast.css
rename to old/pane/float/Toast.css
diff --git a/pane/float/Toast.js b/old/pane/float/Toast.js
similarity index 100%
rename from pane/float/Toast.js
rename to old/pane/float/Toast.js
diff --git a/pane/float/Tutor.css b/old/pane/float/Tutor.css
similarity index 100%
rename from pane/float/Tutor.css
rename to old/pane/float/Tutor.css
diff --git a/pane/float/Tutor.js b/old/pane/float/Tutor.js
similarity index 100%
rename from pane/float/Tutor.js
rename to old/pane/float/Tutor.js
diff --git a/plugin/chrome/chrome.html b/old/plugin/chrome/chrome.html
similarity index 100%
rename from plugin/chrome/chrome.html
rename to old/plugin/chrome/chrome.html
diff --git a/plugin/chrome/chrome.js b/old/plugin/chrome/chrome.js
similarity index 100%
rename from plugin/chrome/chrome.js
rename to old/plugin/chrome/chrome.js
diff --git a/plugin/chrome/config.js b/old/plugin/chrome/config.js
similarity index 100%
rename from plugin/chrome/config.js
rename to old/plugin/chrome/config.js
diff --git a/plugin/chrome/popup.html b/old/plugin/chrome/popup.html
similarity index 100%
rename from plugin/chrome/popup.html
rename to old/plugin/chrome/popup.html
diff --git a/plugin/chrome/popup.js b/old/plugin/chrome/popup.js
similarity index 100%
rename from plugin/chrome/popup.js
rename to old/plugin/chrome/popup.js
diff --git a/old/plugin/github.com/shylinux/echarts b/old/plugin/github.com/shylinux/echarts
new file mode 160000
index 00000000..7a692891
--- /dev/null
+++ b/old/plugin/github.com/shylinux/echarts
@@ -0,0 +1 @@
+Subproject commit 7a6928917468fdc44c879de55baeaf933c052fc5
diff --git a/plugin/inner.js b/old/plugin/inner.js
similarity index 100%
rename from plugin/inner.js
rename to old/plugin/inner.js
diff --git a/old/plugin/input.js b/old/plugin/input.js
new file mode 100644
index 00000000..b084acc4
--- /dev/null
+++ b/old/plugin/input.js
@@ -0,0 +1,117 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ init: shy("添加控件", function(can, item, name, value, option) {
+ var input = {type: "input", name: name, data: item};
+ item.action = item.action || item.value || "";
+ item.figure = item.figure || item.value || "";
+ item.cb = item.cb || item.value || "";
+ item.name && item.name.indexOf("@") == 0 && (item.name = item.name.slice(1)) && (item.position = item.position || "opts")
+
+ switch (item.type = item.type || item._type || item._input || "text") {
+ case "upfile": item.type = "file"; break
+ case "button":
+ item.value = item.name || item.value;
+ break
+ case "select":
+ item.values = typeof item.values == "string"? item.values.split(" "): item.values;
+ if (!item.values && item.value) {
+ item.values = item.value.split("|")
+ item.value = item.values[0]
+ }
+ input.type = "select", input.list = item.values.map(function(value) {
+ return {type: "option", value: value, inner: value};
+ })
+ item.className || can.page.ClassList.add(can, item, item.position||"args");
+ break
+ case "textarea":
+ input.type = "textarea"
+ // no break
+ case "password":
+ // no break
+ case "text":
+ item.className || can.page.ClassList.add(can, item, item.position||"args");
+ item.value = value || item.value || "";
+ item.autocomplete = "off";
+ break
+ }
+
+ if (item.value == "auto") {item.value = ""}
+ item.figure && item.figure.indexOf("@") == 0 && (item.figure = item.figure.slice(1)) && can.require(["plugin/input/"+item.figure], function() {
+ target.type != "button" && (target.value = "")
+ })
+
+ var target = can.Dream(option, "input", input)[input.name];
+ item.type == "text" && !target.placeholder && (target.placeholder = item.name || "");
+ item.type != "button" && !target.title && (target.title = item.placeholder || item.name || "");
+ item.type == "textarea" && can.page.Append(can, option, [{type: "br"}])
+ item.type == "select" && (target.value = value || item.value || item.values[item.index||0])
+ item.type == "button" && item.action == "auto" && can.run && can.run({});
+ return target;
+ }),
+ path: function(event, can, value, cmd, target) {
+ return target.value + (target.value == "" || target.value.endsWith("/")? "": "/") + value
+ },
+})
+Volcanos("onfigure", {help: "控件交互", list: []})
+Volcanos("onaction", {help: "控件交互", list: [],
+ onclick: function(event, can) {can.Select(event);
+ var figure = can.onfigure[can.item.cb] || can.onfigure[can.item.figure]
+ figure? can.page.AppendFigure(event, can, can.item.figure, can._name) && figure.click(event, can, can.item, can.item.name, event.target, can.figure):
+ can.item.type == "button" && can.run(event)
+ },
+ onchange: function(event, can) {
+ can.item.type == "select" && can.item.action == "auto" && can.Runs(event)
+ },
+ onkeydown: function(event, can) {
+ if (event.target.tagName == "TEXTAREA") {return}
+
+ can.page.oninput(event, can, function(event) {
+ switch (event.key) {
+ case "b":
+ can.Append(event)
+ return true
+ case "m":
+ can.Clone(event)
+ return true
+ }
+ })
+
+ switch (event.key) {
+ case "Enter": can.run(event, []); break
+ case "Escape": event.target.blur(); break
+ default:
+ if (event.target.value.endsWith("j") && event.key == "k") {
+ can.page.DelText(event.target, event.target.selectionStart-1, 2);
+ event.target.blur();
+ break
+ }
+ return false
+ }
+ event.stopPropagation()
+ event.preventDefault()
+ return true
+ },
+ onkeyup: function(event, can) {
+ if (event.target.tagName == "TEXTAREA") {return}
+
+ switch (event.key) {
+ default: return false
+ }
+ event.stopPropagation()
+ event.preventDefault()
+ return true
+ },
+})
+Volcanos("onchoice", {help: "控件菜单", list: ["全选", "复制", "清空"],
+ "全选": function(event, can, msg, value, target) {
+ can.target.focus(), can.target.setSelectionRange(0, can.target.value.length);
+ },
+ "复制": function(event, can, msg, value, target) {
+ can.user.toast(can.page.CopyText(can, can.target.value), "复制成功")
+ },
+ "清空": function(event, can, msg, value, target) {
+ can.target.value = "";
+ },
+})
+Volcanos("ondetail", {help: "控件详情", list: []})
+Volcanos("onexport", {help: "导出数据", list: []})
+
diff --git a/plugin/input/city.js b/old/plugin/input/city.js
similarity index 100%
rename from plugin/input/city.js
rename to old/plugin/input/city.js
diff --git a/plugin/input/date.js b/old/plugin/input/date.js
similarity index 100%
rename from plugin/input/date.js
rename to old/plugin/input/date.js
diff --git a/plugin/input/key.js b/old/plugin/input/key.js
similarity index 100%
rename from plugin/input/key.js
rename to old/plugin/input/key.js
diff --git a/plugin/input/province.js b/old/plugin/input/province.js
similarity index 100%
rename from plugin/input/province.js
rename to old/plugin/input/province.js
diff --git a/plugin/input/upload.js b/old/plugin/input/upload.js
similarity index 100%
rename from plugin/input/upload.js
rename to old/plugin/input/upload.js
diff --git a/plugin/local/mall/input.js b/old/plugin/local/mall/input.js
similarity index 100%
rename from plugin/local/mall/input.js
rename to old/plugin/local/mall/input.js
diff --git a/plugin/local/team/plan.css b/old/plugin/local/team/plan.css
similarity index 100%
rename from plugin/local/team/plan.css
rename to old/plugin/local/team/plan.css
diff --git a/plugin/local/team/plan.js b/old/plugin/local/team/plan.js
similarity index 100%
rename from plugin/local/team/plan.js
rename to old/plugin/local/team/plan.js
diff --git a/plugin/local/wiki/data.js b/old/plugin/local/wiki/data.js
similarity index 100%
rename from plugin/local/wiki/data.js
rename to old/plugin/local/wiki/data.js
diff --git a/plugin/local/wiki/draw.css b/old/plugin/local/wiki/draw.css
similarity index 100%
rename from plugin/local/wiki/draw.css
rename to old/plugin/local/wiki/draw.css
diff --git a/plugin/local/wiki/draw.js b/old/plugin/local/wiki/draw.js
similarity index 100%
rename from plugin/local/wiki/draw.js
rename to old/plugin/local/wiki/draw.js
diff --git a/plugin/local/wiki/draw/heart.js b/old/plugin/local/wiki/draw/heart.js
similarity index 100%
rename from plugin/local/wiki/draw/heart.js
rename to old/plugin/local/wiki/draw/heart.js
diff --git a/plugin/local/wiki/feel.js b/old/plugin/local/wiki/feel.js
similarity index 100%
rename from plugin/local/wiki/feel.js
rename to old/plugin/local/wiki/feel.js
diff --git a/plugin/local/wiki/walk.js b/old/plugin/local/wiki/walk.js
similarity index 100%
rename from plugin/local/wiki/walk.js
rename to old/plugin/local/wiki/walk.js
diff --git a/plugin/local/wiki/word.css b/old/plugin/local/wiki/word.css
similarity index 100%
rename from plugin/local/wiki/word.css
rename to old/plugin/local/wiki/word.css
diff --git a/plugin/local/wiki/word.js b/old/plugin/local/wiki/word.js
similarity index 100%
rename from plugin/local/wiki/word.js
rename to old/plugin/local/wiki/word.js
diff --git a/old/plugin/state.js b/old/plugin/state.js
new file mode 100644
index 00000000..f909207a
--- /dev/null
+++ b/old/plugin/state.js
@@ -0,0 +1,41 @@
+Volcanos("onimport", {help: "导入数据", list: []})
+Volcanos("onaction", {help: "组件交互", list: []})
+Volcanos("onchoice", {help: "组件菜单", list: ["执行", "返回", "共享", "重命名", "选项", "加参", "减参", "克隆", "删除"],
+ "执行": function(event, can, msg, cmd, field) {can.Runs(event)},
+ "返回": function(event, can, msg, cmd, field) {can.Last(event)},
+ "共享": function(event, can, msg, cmd, field) {
+ can.user.input(event, can, ["name", "text"], function(event, cmd, meta, list) {
+ var msg = can.Event(event);
+ msg.Option("name", meta.name)
+ msg.Option("text", meta.text)
+ can.Conf("args", JSON.stringify(can.Option()))
+ can.core.List(["node", "group", "index", "args"], function(key) {
+ msg.Option(key, can.Conf(key))
+ })
+ can.Export(event, "action", "share")
+ return true
+ })
+ },
+ "重命名": function(event, can, msg, cmd, field) {var meta = field.Meta;
+ meta.help = can.user.prompt("", function(help) {
+ meta.help = help
+ }, meta.help)
+ },
+ "选项": function(event, can, msg, cmd, field) {
+ can.user.input(event, can, ["name", "value"], function(event, cmd, meta, list) {
+ var data = {type: "text", value: meta.value||""}
+ can.page.ClassList.add(can, data, "opts");
+
+ var input = {type: "input", name: meta.name, data: data};
+ var target = can.Dream(can.option, "option", input)[input.name];
+ return true
+ })
+ },
+ "加参": function(event, can, msg, cmd, field) {can.Append()},
+ "减参": function(event, can, msg, cmd, field) {can.Remove(event)},
+ "克隆": function(event, can, msg, cmd, field) {can.Clone(event)},
+ "删除": function(event, can, msg, cmd, field) {can.Delete(event)},
+})
+Volcanos("ondetail", {help: "组件详情", list: []})
+Volcanos("onexport", {help: "导出数据", list: []})
+
diff --git a/plugin/story/trend.js b/old/plugin/story/trend.js
similarity index 100%
rename from plugin/story/trend.js
rename to old/plugin/story/trend.js
diff --git a/old/plugin/table.js b/old/plugin/table.js
new file mode 100644
index 00000000..d0d1ad50
--- /dev/null
+++ b/old/plugin/table.js
@@ -0,0 +1,143 @@
+Volcanos("onimport", {help: "导入数据", list: [],
+ init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
+ var table = can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
+ can.ondetail["复制"](event, can, msg, value, index, key, td);
+ can.Export(event, value.trim(), key, index)
+ }, function(event, value, key, index, tr, td) {
+ can.user.carte(event, shy("上下文菜单", can.ondetail, msg["field.detail"] || can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
+ var sub = can.Event(event);
+ msg.append.forEach(function(key) {sub.Option(key, msg[key][index].trim())})
+
+ typeof cb == "function"? cb(event, can, msg, index, key, cmd, td):
+ can.run(event, ["action", typeof cb == "string"? cb: cmd, key, value.trim(), msg.Ids(index)], function(msg) {
+ can.user.toast(msg.Result())
+ if (msg.Option("field.reload") == "true") {
+ can.run(event)
+ }
+ }, true)
+ }))
+ });
+
+ if (msg.Option("render") != "" && msg.result) {
+ var story = can.page.Append(can, output, [{view: [msg.Option("render"), "div", msg.Result()]}]).first;
+ can.page.Select(can, story, ".story", function(item) {var data = item.dataset;
+ switch (item.tagName) {
+ case "FIELDSET":
+ can.Plugin(can, data.name, JSON.parse(data.meta||"{}"), function(event, cmds, cb, silent) {
+ can.run(event, ["action", "story", data.type, data.name, data.text].concat(cmds), cb, true)
+ }, item, function(sub) {
+
+ })
+ break
+ }
+ })
+ } else {
+ switch (msg._xhr.getResponseHeader("content-type")) {
+ case "image/png":
+ if (msg._xhr.responseType != "blob") {
+ break
+ }
+ var str = URL.createObjectURL(new Blob([msg._xhr.response], {type: "image/png"}));
+ can.page.Append(can, output, [{img: [str]}])
+ break
+
+ default:
+ msg.result && can.page.Append(can, output, [{view: ["code", "div"], list: [
+ {view: ["code", "pre", can.page.Display(msg.Result())]},
+ ]}]).code;
+ }
+ }
+ return typeof cb == "function" && cb(msg);
+ },
+})
+Volcanos("onaction", {help: "组件交互", list: []})
+Volcanos("onchoice", {help: "组件菜单", list: ["返回", "清空", "复制", "下载"],
+ "返回": function(event, can, msg, cmd, target) {
+ can.run(event, ["", "Last"])
+ },
+ "清空": function(event, can, msg, cmd, target) {
+ can.target.innerHTML = "";
+ },
+ "复制": function(event, can, msg, cmd, target) {
+ var list = can.onexport.Format(can, msg, "data");
+ can.user.toast(can.page.CopyText(can, list[2]), "复制成功")
+ },
+ "下载": function(event, can, msg, cmd, target) {msg = msg || can.msg;
+ var list = can.onexport.Format(can, msg, msg._plugin_name||"data");
+ can.page.Download(can, list[0]+list[1], list[2]);
+ },
+})
+Volcanos("ondetail", {help: "组件详情", list: ["渲染", "选择", "编辑", "删除", "复制", "下载", "收藏"],
+ "渲染": function(event, can, msg, index, key, cmd, td) {
+ can._story = can._story || can.Plugin(can, msg.name[index], {inputs: [
+ {_input: "button", name: "喜欢"},
+ {_input: "button", name: "讨厌"},
+ {_input: "button", name: "查看"},
+ {_input: "button", name: "关闭"},
+ ]}, function(event, cmds, cb, silent) {
+ var req = can.Event(event)
+ switch (req.Option("_action")) {
+ case "关闭":
+ can.page.Remove(can, can._story.target)
+ delete(can._story)
+ break
+ default:
+ req.Option("pod", "");
+ can.run(event, ["set", msg.pod[index], msg.engine[index], msg.favor[index], msg.id[index],
+ msg.type[index], msg.name[index], msg.text[index]], function(res) {
+ can._story.Show(res.Option("display")||"table", res, cb)
+ }, true)
+ }
+ }, can.page.AppendField(can, document.body, "story", {name: msg.type[index], help: msg.name[index]}), function(plugin) {
+ can.page.Modify(can, plugin.target, {style: {position: "absolute", left: "10px", top: "100px"}})
+ })
+ can._story.Runs(event)
+ },
+ "选择": "select",
+ "删除": "delete",
+ "编辑": function(event, can, msg, index, key, cmd, td) {
+ var text = td.innerHTML;
+ var input = can.page.Appends(can, td, [{type: "input", value: text, style: {width: td.clientWidth+"px"}, data: {onkeydown: function(event) {
+ if (event.key != "Enter") {return}
+ if (key == "value" && msg.key) {key = msg.key[index]}
+
+ var sub = can.Event(event);
+ can.core.List(msg.append, function(key) {sub.Option(key, msg[key][index])})
+ can.run(event, ["action", "modify", key, event.target.value, text, can.Option("id")||msg.Ids(index)], function(msg) {
+ td.innerHTML = event.target.value;
+ can.user.toast(msg.Result()||"修改成功")
+ }, true)
+ }}}]).first;
+ input.focus();
+ input.setSelectionRange(0, input.value.length);
+ },
+ "复制": function(event, can, msg, index, key, cmd, target) {
+ can.user.toast(can.page.CopyText(can, target.innerHTML), "复制成功")
+ },
+ "下载": function(event, can, msg, index, key, cmd, target) {
+ can.page.Download(can, key, target.innerHTML);
+ },
+ "收藏": function(event, can, msg, index, key, cmd, target) {
+ can.user.input(event, can, [
+ {_input: "text", name: "favor", value: can._last_favor||""},
+ {_input: "text", name: "type", value: msg.type && msg.type[index] || ""},
+ {_input: "text", name: "name", value: msg.name && msg.name[index] || ""},
+ {_input: "text", name: "text", value: msg.text && msg.text[index] || ""},
+ ], function(event, cmd, meta, list) {can._last_favor = meta.favor;
+ can.run(event, ["action", "favor", meta.favor, meta.type, meta.name, meta.text], function(msg) {
+ can.user.toast(msg.Result()||"收藏成功");
+ }, true)
+ })
+ },
+})
+Volcanos("onexport", {help: "导出数据", list: [],
+ Format: function(can, msg, name) {
+ var ext = ".csv", txt = can.page.Select(can, can.target, "tr", function(tr) {
+ return can.page.Select(can, tr, "td,th", function(td) {return td.innerText}).join(",")
+ }).join("\n");
+
+ !txt && (ext = ".txt", txt = msg.result && msg.result.join("") || "");
+ return [name, ext, txt]
+ },
+})
+
diff --git a/proto_old.js b/old/proto_old.js
similarity index 100%
rename from proto_old.js
rename to old/proto_old.js
diff --git a/style_old.css b/old/style_old.css
similarity index 100%
rename from style_old.css
rename to old/style_old.css
diff --git a/page/index.html b/page/index.html
index a9d7642a..99c68d07 100644
--- a/page/index.html
+++ b/page/index.html
@@ -5,12 +5,11 @@
volcanos
-
+
+
-
-
diff --git a/page/index.js b/page/index.js
index dde63d82..40709b19 100644
--- a/page/index.js
+++ b/page/index.js
@@ -1,46 +1,25 @@
-var Config = {iceberg: "/chat/", volcano: "",
- libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"],
- main: "chat", list: [
- "page/chat",
- "pane/float/Toast", "pane/float/Carte",
- "pane/float/Tutor", "pane/float/Debug",
- "pane/float/Login", "pane/float/Favor",
-
- "pane/Header",
- "pane/River", "pane/Storm",
- "pane/Target", "pane/Source", "pane/Action",
- "pane/Ocean", "pane/Steam",
- "pane/Footer",
-
- "plugin/state", "plugin/table", "plugin/input",
- "plugin/input/date", "plugin/input/key",
- ], pane: [
- {group: "index", name: "Toast", path: "float/", pos: "dialog", duration: 3000},
- {group: "index", name: "Carte", path: "float/", pos: "dialog"},
- {group: "index", name: "Tutor", path: "float/", pos: "dialog"},
- {group: "index", name: "Debug", path: "float/", pos: "dialog"},
- {group: "index", name: "Login", path: "float/", pos: "dialog"},
- {group: "index", name: "Favor", path: "float/", pos: "dialog"},
-
- {group: "index", name: "Header", pos: "head", state: ["time", "user", "link"]},
- {group: "index", name: "River", pos: "left"},
- {group: "index", name: "Storm", pos: "right"},
-
- {group: "index", name: "Target", pos: "top"},
- {group: "index", name: "Source", pos: "center"},
- {group: "index", name: "Action", pos: "bottom"},
-
- {group: "index", name: "Ocean", pos: "dialog", def_name: "meet"},
- {group: "index", name: "Steam", pos: "dialog", def_name: "miss"},
- {group: "index", name: "Footer", pos: "foot", state: ["ntxt", "ncmd"]},
-
- ], title: "volcanos", topic: "black", layout: {def: "工作", list: ["工作", "办公", "聊天"], size: {
- "最大": {head: 0, foot: 0, left: 0, right: 0, bottom: -1, center: 0, top: 0},
- "工作": {head: 30, foot: 30, left: 0, right: 100, bottom: -1, center: 0, top: 0},
- "办公": {head: 30, foot: 30, left: 100, right: 100, bottom: -1, center: 0, top: 0},
- "聊天": {head: 30, foot: 30, left: 100, right: 100, bottom: 300, center: 40, top: -2},
- "最长": {head: 30, foot: 30, left: 0, right: 0, bottom: -2, center: 0, top: 0},
- "全屏": {head: 0, foot: 0, left: 0, right: 0, bottom: -1, center: 0, top: 0},
- }, border: 4,
- }, scroll: {line: 100},
+var Config = {name: "demo", volcano: "frame.js", iceberg: "/chat/", intshell: "plug.sh",
+ libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"], panes: [
+ {type: "pane", name: "Header", help: "标题栏", pos: "head", list: ["pane/Header.js", "pane/Header.css"], state: ["time"]},
+ {type: "pane", name: "River", help: "群聊组", pos: "left", list: ["pane/River.js", "pane/River.css"]},
+ {type: "pane", name: "Storm", help: "应用流", pos: "right", list: ["pane/Storm.js", "pane/Storm.css"]},
+ {type: "pane", name: "Action", help: "工作台", pos: "middle", list: ["pane/Action.js", "pane/Action.css"]},
+ {type: "pane", name: "Footer", help: "状态条", pos: "foot", list: ["pane/Footer.js", "pane/Footer.css"]},
+ ], main: {name: "Header", engine: "remote", list: []},
+ list: ["plugin/state.js", "plugin/input.js", "plugin/table.js"],
}
+
+var Preload = Config.libs; Config.panes.forEach(function(pane) {
+ Preload = Preload.concat(pane.list);
+}); Preload = Preload.concat(Config.list)
+
+Volcanos(Config.name, { _target: document.body,
+ _head: document.head, _body: document.body,
+ _width: window.innerWidth, _height: window.innerHeight,
+}, Preload.concat(Config.volcano), function(can) { // 程序入口
+ can.onimport._init(can, can.Conf(Config), [], function(msg) {
+ console.log(can._root, can._name, "start", can, msg);
+ can.Footer.onaction._init(can.Footer, msg);
+ }, can._target)
+})
+
diff --git a/page/lib b/page/lib
deleted file mode 120000
index dc598c56..00000000
--- a/page/lib
+++ /dev/null
@@ -1 +0,0 @@
-../lib
\ No newline at end of file
diff --git a/pane/Action.css b/pane/Action.css
index bb16ee50..24920f53 100644
--- a/pane/Action.css
+++ b/pane/Action.css
@@ -1,4 +1,10 @@
-fieldset.Action div.output div.item:hover {
+fieldset.Action {
+ min-width:160px;
+ min-height:160px;
+ padding-left:10px;
+ padding-right:10px;
+}
+fieldset.Action>div.output>div.item:hover {
background-color:lightblue;
}
diff --git a/pane/Action.js b/pane/Action.js
index c30f888e..897ae038 100644
--- a/pane/Action.js
+++ b/pane/Action.js
@@ -1,218 +1,41 @@
Volcanos("onimport", {help: "导入数据", list: [],
- _begin: function(can) {},
- _start: function(can) {
- can.page.Select(can, can.action, "input,select", function(input) {
- input.value = can.user.Search(can, input.name) || input.value || ""
- })
+ _init: function(can, meta, list, cb, target) {
},
+})
+Volcanos("onaction", {help: "交互操作", list: [],
+ _init: function(can, msg, list, cb, target) {
+ can.onexport._init(can, msg, list, cb, target)
+ },
+})
+Volcanos("onexport", {help: "导出数据", list: [],
+ _init: function(can, msg, list, cb, target) { var key = "action";
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ can.run(msg._event, ["search", "Storm.onaction._init"], function(msg) {
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ can.Cache(can.Conf("river")+can.Conf("storm"), can._output, can.Conf(key));
+ var river = can.Conf("river", msg.Option("river"));
+ var storm = can.Conf("storm", msg.Option("storm"));
+ console.log(can._root, can._name, "show", river, storm);
+ if (can.Conf(key, msg.Option(key, can.Cache(river+"."+storm, can._output)))) {
+ typeof cb == "function" && cb(msg); return
+ }
- init: function(event, can, msg, cmd, field) {can.output.innerHTML = "";
- can._local[msg.cmds[0]] = can._local[msg.cmds[0]] || {}
- can._local[msg.cmds[0]][msg.cmds[1]] = msg.Table(function(item, index) {if (!item.name) {return}
- // 添加插件
- var plugin = can[item.name] = can.Plugin(can, item.name, item, function(event, cmds, cbs) {
- can.run(event, [item.river, item.storm, item.action].concat(cmds), cbs)
- }, can.page.AppendField(can, can.output, "item "+item.name, item))
- return can._plugins.push(plugin), plugin
- })
- },
- river: function(event, can, value, cmd, field) {if (value == "update") {return}
- can.Conf("temp_river", value)
- },
- storm: function(event, can, value, cmd, field) {if (value == "update") {return}
- // 保存界面
- can.Cache(can.Conf("river")+"."+can.Conf("storm"), can.output, "some");
- if (can.Cache(can.Conf("river", can.Conf("temp_river"))+"."+can.Conf("storm", value), can.output)) {
- // 恢复界面
- return
- }
- // 刷新界面
- can.run(event, [can.Conf("river"), can.Conf("storm")], function(msg) {
- can.onimport.init(event, can, msg, cmd, can.output)
- })
- },
- pod: function(event, can, value, cmd, field) {
- can.user.title(value)
- },
- you: function(event, can, value, cmd, field) {
- can.user.title(value)
- },
-
- layout: function(event, can, value, cmd, field) {value},
- scroll: function(event, can, value, cmd, field) {can.layout = value;
- can.output.parentElement.scrollBy(value.x, value.y)
- },
- favor: function(event, can, msg, cmd, field) {if (msg._hand) {return}
- var cmds = msg.detail, key = cmds[0];
- if (key == can.Name()) {key = cmds[1], cmds = cmds.slice(1)}
-
- // 下发数据
- can.core.Item(can._local, function(river, list) {
- can.core.Item(list, function(storm, list) {
- can.core.List(list, function(sub) {
- if (sub._name == key) {
- sub.Select(event), msg._hand = true;
- msg.Echo(can._name, " ", key)
- }
- })
+ can.run(msg._event, [river, storm], function(msg) { can._output.innerHTML = "";
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ msg.Table(function(value, index, array) {
+ // 添加列表
+ //
+ can.onappend._init(can, value, Config.libs.concat(["plugin/state.js"]), function(sub) {
+ sub.run = function(event, cmds, cb, silent) {
+ can.run(event, [river, storm, index].concat(cmds), cb, silent)
+ }
+ }, can._output)
+ can.Conf(key, "which")
+ });
+ msg.Option(key, can.Conf(key))
+ typeof cb == "function" && cb(msg)
})
})
},
})
-Volcanos("onaction", {help: "组件交互", list: [
- ["layout"].concat(Config.layout.list), "清屏", "刷新", "并行","串行",
- ["action", "正常", "竖排", "编排", "定位", "定形"],
- {input: "pod"}, {input: "you"},
- {input: "hot"}, {input: "top"},
- {input: "grp"}, {input: "lab"},
-],
- layout: function(event, can, value, cmd, field) {can.Export(event, cmd, value)},
-
- "清屏": function(event, can, msg, cmd, field) {
- can.page.Select(can, can.output, "fieldset.item>div.output", function(item) {
- item.innerHTML = "";
- })
- },
- "刷新": function(event, can, msg, cmd, field) {
- can.page.Select(can, can.output, "fieldset.item>div.output", function(item) {
- item.innerHTML = "";
- })
- can.run(event, [can.Conf("river"), can.Conf("storm")], function(msg) {
- can.onimport.init(event, can, msg, cmd, can.output)
- })
- },
- "并行": function(event, can, msg, cmd, field) {
- can.page.Select(can, field, "fieldset.item", function(field) {
- can.page.Select(can, field, "input[type=button]", function(input, index) {
- index == 0 && input.click()
- })
- })
- },
- "串行": function(event, can, msg, cmd, field) {
- can.core.Next(can.page.Select(can, field, "fieldset.item", function(field) {
- return field
- }), function(field, cb) {
- can.page.Select(can, field, "input[type=button]", function(input, index) {
- index == 0 && field.Check(event, input, cb)
- })
- })
- },
-
- "正常": function(event, can, value, cmd, field) {
- can.page.Select(can, can.output, "fieldset.item", function(item) {
- item.setAttribute("draggable", false)
- item.style.position = ""
- item.style.cursor = ""
- item.style.clear = ""
- item.style.left = ""
- item.style.top = ""
- })
- },
- "竖排": function(event, can, value, cmd, field) {
- can.page.Select(can, can.output, "fieldset.item", function(item) {
- item.style.clear = "both"
- })
- },
- "编排": function(event, can, value, cmd, field) {
- can.page.Select(can, can.target, "fieldset.item", function(item) {
- item.setAttribute("draggable", true)
- item.ondragstart = function(event) {can.drag = event.target}
- item.ondragover = function(event) {event.preventDefault()}
- item.ondrop = function(event) {event.preventDefault()
- item.parentNode.insertBefore(can.drag, item)
- }
- })
- },
- "定位": function(event, can, value, cmd, field) {
- can.page.Select(can, can.output, "fieldset.item", function(item) {
- item.style.left = item.offsetLeft + "px"
- item.style.top = item.offsetTop + "px"
- })
-
- var max, current, begin;
- can.page.Select(can, can.output, "fieldset.item", function(item) {
- item.style.position = "absolute"
-
- item.onmousedown = function(event) {if (can.Action("action") != "定位") {return}
- if (current) {
- // 更新位置
- current.style.left = begin.left + event.clientX - begin.x + "px"
- current.style.top = begin.top + event.clientY - begin.y + "px"
- current = null;
- return
- }
- // 记录位置
- current = item;
- current.style["z-index"] = max = max + 1
- begin = {x: event.clientX, y: event.clientY, left: item.offsetLeft, top: item.offsetTop}
- };
-
- can.output.onmousemove = item.onmousemove = function(event) {if (!current) {return}
- // 移动位置
- current.style.left = begin.left + event.clientX - begin.x + "px"
- current.style.top = begin.top + event.clientY - begin.y + "px"
- }
- })
- },
- "定形": function(event, can, value, cmd, field) {
- can.page.Select(can, can.output, "fieldset.item", function(item) {
- item.style.top = item.offsetTop + "px"
- item.style.left = item.offsetLeft + "px"
- item.style.width = item.offsetWidth + "px"
- item.style.height = item.offsetHeight + "px"
- })
-
- var max, pos, current, begin;
- can.page.Select(can, can.output, "fieldset.item", function(item) {
- item.style.position = "absolute"
-
- item.onmousedown = function(event) {
- if (can.Action("action") != "定形") {return}
- if (current) {current = null; return}
-
- // 记录位置
- current = item;
- current.style["z-index"] = max = max + 1
- begin = {
- x: event.clientX, y: event.clientY,
- left: item.offsetLeft, top: item.offsetTop,
- width: item.offsetWidth, height: item.offsetHeight,
- }
- };
-
- item.onmousemove = function(event) {
- if (can.Action("action") != "定形") {return}
- var pos = can.page.Prepos(event, item)
- if (!current) {return}
- can.page.Resize(event, current, begin, pos)
- }
- })
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: ["共享", "保存", "刷新"],
- "共享": function(event, can, msg, cmd, field) {
- can.user.input(event, can, ["name", "text"], function(event, cmd, meta, list) {
- var msg = can.Event(event);
- msg.Option("name", meta.name)
- msg.Option("text", meta.key)
- cmd == "提交" && can.Export(event, can.Name(), "share")
- return true
- })
- },
- "保存": function(event, can, msg, cmd, field) {
- var list = []
- can.page.Select(can, field, "fieldset.item", function(item) {var meta = item.Meta
- can.page.Select(can, item, "form.option", function(option) {
- if (option.parentNode != item) {return}
- meta.args = can.page.Select(can, option, ".args", function(item) {return item.value})
- })
- list.push(meta.node||"", meta.group, meta.index, meta.help, JSON.stringify(meta.args||[]))
- })
- can.run(event, [can.Conf("river"), can.Conf("storm"), "save"].concat(list), function(msg) {
- can.user.toast("保存成功")
- })
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
diff --git a/pane/Footer.css b/pane/Footer.css
index aa2f2117..307e3b3f 100644
--- a/pane/Footer.css
+++ b/pane/Footer.css
@@ -1,29 +1,19 @@
fieldset.Footer {
- clear:both;
- overflow:hidden;
height:32px;
+ clear:both;
}
-fieldset.Footer>div.action {
- padding:0;
+fieldset.Footer>div {
+ margin:7px 0;
}
fieldset.Footer>div.output div.title {
+ margin-left:5px;
float:left;
}
-fieldset.Footer>div.output div.magic {
- float:right;
- margin-top:-6px;
-}
-fieldset.Footer>div.output div.magic>label {
- margin-right:2px;
-}
-fieldset.Footer>div.output div.magic>input {
- background-color:black;
- color:lightgreen;;
-}
fieldset.Footer>div.output div.state {
float:right;
}
-fieldset.Footer>div.output div.state div {
+fieldset.Footer>div.output div.state>div {
+ margin-right:5px;
float:right;
}
diff --git a/pane/Footer.js b/pane/Footer.js
index c60e58b1..7edf4125 100644
--- a/pane/Footer.js
+++ b/pane/Footer.js
@@ -1,31 +1,25 @@
Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, output, action, option, field) {output.innerHTML = "";
- can._init = function() {
- can.run({}, [], function(msg) {
- can.core.List(msg.result, function(title) {
- can.page.Append(can, output, [{view: "title", list: [{text: title, className: "title"}]}])
- })
-
- can.ui = can.page.Append(can, output, [{view: "state", list: can.core.List(meta.state, function(item) {
- return {text: meta[item]||"", className: item, click: function(event) {can.Export(event, meta[item], item)}};
- })}])
- })
- }
- },
- username: function(event, can, value, cmd, field) {can._init()},
-
- email: function(event, can, value, cmd, field) {
- can.ui[cmd].innerHTML = value
- },
- ntxt: function(event, can, value, cmd, field) {var state = can.Conf(cmd);
- can.ui[cmd].innerHTML = cmd+":"+ can.Conf(cmd, can.base.Int(value)+can.base.Int(state))
- },
- ncmd: function(event, can, value, cmd, field) {var state = can.Conf(cmd);
- can.ui && (can.ui[cmd].innerHTML = cmd+":"+ can.Conf(cmd, can.base.Int(value)+can.base.Int(state)))
+ _init: function(can, meta, list, cb, target) {
+ },
+})
+Volcanos("onaction", {help: "交互数据", list: [],
+ _init: function(can, msg, list, cb, target) {
+ can.onexport._init(can, msg, list, cb, target)
+ },
+})
+Volcanos("onexport", {help: "导出数据", list: [],
+ _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
+ can.run(msg._event, [], function(msg) {
+ console.log(can._root, can._name, "show", msg.result)
+ can.core.List(msg.result, function(title) {
+ can.page.Append(can, can._output, [{view: ["title", "div", title]}])
+ })
+
+ console.log(can._root, can._name, "show", can.Conf("state"))
+ can.ui = can.page.Append(can, can._output, [{view: "state", list: can.core.List(can.Conf("state"), function(item) {
+ return {text: can.Conf(item)||"", className: item, click: function(event) {can.onaction[item](event, can, item)}};
+ })}])
+ })
},
})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
diff --git a/pane/Header.css b/pane/Header.css
index a59bdd90..bb6b95ea 100644
--- a/pane/Header.css
+++ b/pane/Header.css
@@ -1,29 +1,27 @@
fieldset.Header {
height:32px;
- min-width:640px;
clear:both;
}
-fieldset.Header>div.action {
- padding:0;
+fieldset.Header>div {
+ margin:7px 0;
}
fieldset.Header>div.output>div.title {
+ margin-left:5px;
cursor:pointer;
float:left;
}
fieldset.Header>div.output>div.title:hover {
- cursor:pointer;
background-color:red;
border:ridge 2px yellow;
}
+
fieldset.Header>div.output>div.state {
+ margin-right:5px;
float:right;
}
-fieldset.Header>div.output>div.state div.item {
- padding:0;
-}
fieldset.Header>div.output>div.state>div {
cursor:pointer;
- margin-left:5px;
+ margin-right:5px;
float:right;
}
fieldset.Header>div.output>div.state>div:hover {
diff --git a/pane/Header.js b/pane/Header.js
index 79a2d94b..9521f1b2 100644
--- a/pane/Header.js
+++ b/pane/Header.js
@@ -1,59 +1,39 @@
Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, meta, list, cb, output, action, option, field) {output.innerHTML = "";
- can._init = function() {
- can.run({}, [], function(msg) {
- can.core.List(msg.result, function(title) {
- can.page.Append(can, output, [{view: "title", list: [{text: title, className: "title"}],
- click: function(event) {can.Export(event, meta.title, "title")},
- }])
- })
-
- can.ui = can.page.Append(can, output, [{view: "state", list: can.core.List(meta.state, function(item) {
- return {text: meta[item]||"", className: item, click: function(event) {can.Export(event, meta[item], item)}};
- })}])
-
- can.timer = can.Timer({interval: 1000, length: -1}, function(event) {
- can.onimport.time(event, can, can.base.Time().split(" ")[1], "time")
- })
- })
- }
- },
- username: function(event, can, value, cmd, field) {can.Conf("user", value), can._init()},
-
- title: function(event, can, value, cmd, field) {
- can.ui[cmd].innerHTML = value
- },
- time: function(event, can, value, cmd, field) {
- can.ui[cmd].innerHTML = value
- },
-
- river: function(event, can, value, cmd, field) {if (value == "update") {return}
- can.Conf("river", value)
- },
- storm: function(event, can, value, cmd, field) {if (value == "update") {return}
- can.Conf("storm", value)
- },
- layout: function(event, can, value, cmd, field) {if (value == "update") {return}
- can.Conf("layout", value)
+ _init: function(can, meta, list, cb, target) {
},
})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: [],
- title: function(event, can, value, cmd, field) {
- var args = {river: can.Conf("river"), storm: can.Conf("storm"), layout: can.Conf("layout")}
-
- can.page.Select(can, document.body, "fieldset.Action>div.action input", function(input) {
- input.name && input.value && (args[input.name] = input.value)
+Volcanos("onaction", {help: "交互数据", list: [],
+ _init: function(can, msg, list, cb, target) {
+ can.onexport._init(can, msg, list, cb, target)
+ can.run(msg._event, ["search", "Footer.onaction._init"], function(msg) {
+ })
+ can.run(msg._event, ["search", "Action.onaction._init"], function(msg) {
})
- can.user.Search(can, args)
},
- user: function(event, can, value, cmd, field) {
- if (can.user.confirm("logout?")) {
- can.user.Cookie(can, "sessid", "")
- can.user.reload()
- }
+ title: function(event, can, key) {
+ },
+ time: function(event, can, key) {
+ can.ui[key].innerHTML = can.base.Time().split(" ")[1]
},
})
+Volcanos("onexport", {help: "导出数据", list: [],
+ _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
+ can.run(msg._event, [], function(msg) {
+ console.log(can._root, can._name, "show", msg.result)
+ can.core.List(msg.result, function(title) {
+ can.page.Append(can, can._output, [{view: ["title", "div", title],
+ click: function(event) {can.onaction["title"](event, can, "title")},
+ }])
+ })
+ console.log(can._root, can._name, "show", can.Conf("state"))
+ can.ui = can.page.Append(can, can._output, [{view: "state", list: can.core.List(can.Conf("state"), function(item) {
+ return {text: can.Conf(item)||"", className: item, click: function(event) {can.onaction[item](event, can, item)}};
+ })}])
+
+ can.timer = can.Timer({interval: 1000, length: -1}, function(event) {
+ can.onaction.time(event, can, "time")
+ })
+ })
+ },
+})
diff --git a/pane/River.css b/pane/River.css
index 5dec11b0..49111b54 100644
--- a/pane/River.css
+++ b/pane/River.css
@@ -1,4 +1,6 @@
fieldset.River {
+ min-width:80px;
+ min-height:160px;
float:left;
}
fieldset.River>div.output {
@@ -7,6 +9,10 @@ fieldset.River>div.output {
fieldset.River>div.output>div.item {
padding-left:6px;
}
+fieldset.River>div.output>div.item:hover {
+ background-color:red;
+ border:ridge 2px yellow;
+}
fieldset.River>div.output>div.item.select {
background-color:red;
border:ridge 2px yellow;
diff --git a/pane/River.js b/pane/River.js
index e49eea33..d8915b25 100644
--- a/pane/River.js
+++ b/pane/River.js
@@ -1,79 +1,37 @@
Volcanos("onimport", {help: "导入数据", list: [],
- init: function(event, can, msg, cmd, field) {can.output.innerHTML = "";
- can.page.AppendItem(can, can.output, msg.Table(), can.user.Search(can, can.Name()), function(event, line, item) {
- can.Export(event, line.key, can.Name())
- })
- },
- river: function(event, can, value, cmd, field) {if (value == "update") {
- can.run(event, [], function(msg) {
- can.onimport.init(event, can, msg, cmd, field)
- })
- }},
- favor: function(event, can, msg, cmd, field) {if (msg._hand) {return}
- var cmds = msg.detail, key = cmds[0];
- if (key == can.Name()) {key = cmds[1], cmds = cmds.slice(1)}
-
- can.page.Select(can, field, "div.item>span", function(item) {
- if (item.innerText == key) {
- item.click(), msg._hand = true;
- msg.Echo(can._name, " ", key)
- }
- })
+ _init: function(can, meta, list, cb, target) {
},
})
-Volcanos("onaction", {help: "组件交互", list: ["创建", "刷新"],
- "创建": function(event, can, meta, cmd, field) {
- can.Export(event, "create", "ocean")
- },
- "刷新": function(event, can, meta, cmd, field) {
- can.Import(event, "update", can.Name())
+Volcanos("onaction", {help: "交互数据", list: [],
+ _init: function(can, msg, list, cb, target) {
+ can.onexport._init(can, msg, list, cb, target)
},
})
-Volcanos("onchoice", {help: "组件菜单", list: ["创建", "刷新", "宽度"],
- "宽度": function(event, can, meta, cmd, field) {
- var begin;
- function end() {
- field.onmousedown = null;
- field.onmousemove = null;
- field.style.cursor = "";
- begin = null;
+Volcanos("onexport", {help: "导出数据", list: [],
+ _init: function(can, msg, list, cb, target) { var key = "river";
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ if (msg.Option(key, can.Conf(key))) {
+ typeof cb == "function" && cb (msg); return
}
- field.style.cursor = "e-resize"
- field.onmousedown = function(event) {if (begin) {return end()}
- begin = {x: event.clientX, width: field.offsetWidth}
- }
- field.onmousemove = function(event) {if (!begin) {return}
- field.dataset.width = field.style.width = begin.width + event.clientX - begin.x + "px";
- can.Export(event, "", "layout");
- }
-
- can.user.prompt("输入宽度", function(width) {
- field.dataset.width = field.style.width = width + "px"
- can.Export(event, "", "layout")
- end()
- }, field.offsetWidth)
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: ["共享", "重命名", "删除"],
- "共享": function(event, can, line, value, cmd, item) {
- var msg = can.Event(event);
- msg.Option("name", line.name)
- msg.Option("text", line.key)
- can.Export(event, can.Name(), "share")
- },
- "重命名": function(event, can, line, value, cmd, item) {
- can.user.prompt("输入新名:", function(name) {
- can.run(event, [value, "rename", name], function(msg) {
- can.Import(event, "update", can.Name())
- })
- }, line.name)
- },
- "删除": function(event, can, line, value, cmd, item) {
- can.run(event, [value, "remove"], function(msg) {
- can.Import(event, "update", can.Name())
+ can.run(msg._event, [], function(msg) { can._output.innerHTML = "";
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ var select; msg.Table(function(value, index, array) {
+ // 添加列表
+ var view = can.onappend.item(can, can._output, "item", value, function(event, item) {
+ // 左键点击
+ can.Conf(key, value.key); can.run(event, ["search", "Storm.onaction._init"], function(action) {
+ // 切换群组
+ });
+ }, function(event) {
+ // 右键点击
+ });
+ if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
+ select = view
+ }
+ }); select.click();
+ typeof cb == "function" && cb(msg)
})
},
})
-Volcanos("onexport", {help: "导出数据", list: []})
diff --git a/pane/Storm.css b/pane/Storm.css
index b72d830c..df64ac18 100644
--- a/pane/Storm.css
+++ b/pane/Storm.css
@@ -1,4 +1,6 @@
fieldset.Storm {
+ min-width:80px;
+ min-height:160px;
float:right;
}
fieldset.Storm>div.output {
@@ -7,4 +9,13 @@ fieldset.Storm>div.output {
fieldset.Storm>div.output>div.item {
padding-left:6px;
}
+fieldset.Storm>div.output>div.item:hover {
+ cursor:pointer;
+ background-color:red;
+ border:ridge 2px yellow;
+}
+fieldset.Storm>div.output>div.item.select {
+ background-color:red;
+ border:ridge 2px yellow;
+}
diff --git a/pane/Storm.js b/pane/Storm.js
index f23ab8ea..aed0854f 100644
--- a/pane/Storm.js
+++ b/pane/Storm.js
@@ -1,89 +1,41 @@
Volcanos("onimport", {help: "导入数据", list: [],
- init: function(event, can, msg, cmd, field) {can.output.innerHTML = "";
- can.page.AppendItem(can, can.output, msg.Table(), can.user.Search(can, can.Name()), function(event, line, item) {
- can.Export(event, line.key, can.Name())
- })
- },
- river: function(event, can, value, cmd, field) {if (value == "update") {return}
- can.run(event, [can.Conf("river", value)], function(msg) {
- can.onimport.init(event, can, msg, cmd, field)
- })
- },
- storm: function(event, can, value, cmd, field) {
- if (value == "update") {
- can.run(event, [can.Conf("river")], function(msg) {
- can.onimport.init(event, can, msg, cmd, field)
- })
- } else {
- can.Conf(can.Name(), value)
- }
- },
- favor: function(event, can, msg, cmd, field) {if (msg._hand) {return}
- var cmds = msg.detail, key = cmds[0];
- if (key == "river") {key = cmds[1], cmds = cmds.slice(1)}
-
- can.page.Select(can, field, "div.item>span", function(item) {
- if (item.innerText == key) {
- item.click(), msg._hand = true;
- msg.Echo(can._name, " ", key)
- }
- })
+ _init: function(can, meta, list, cb, target) {
},
})
-Volcanos("onaction", {help: "组件交互", list: ["创建", "刷新"],
- "创建": function(event, can, meta, cmd, field) {
- can.Export(event, "create", "steam")
- },
- "刷新": function(event, can, meta, cmd, field) {
- can.Import(event, "update", can.Name())
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: ["创建", "刷新", "宽度"],
- "宽度": function(event, can, meta, cmd, field) {
- var begin;
- function end() {
- field.onmousedown = null;
- field.onmousemove = null;
- field.style.cursor = "";
- begin = null;
- }
-
- field.style.cursor = "w-resize"
- field.onmousedown = function(event) {if (begin) {return end()}
- begin = {x: event.clientX, width: field.offsetWidth}
- }
- field.onmousemove = function(event) {if (!begin) {return}
- field.dataset.width = field.style.width = begin.width - event.clientX + begin.x + "px";
- can.Export(event, "", "layout");
- }
-
- can.user.prompt("输入宽度", function(width) {
- field.dataset.width = field.style.width = width + "px"
- can.Export(event, "", "layout")
- end()
- }, field.offsetWidth)
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: ["共享", "重命名", "删除"],
- "共享": function(event, can, line, value, cmd, item) {can.share || (can.share = {});
- var msg = can.Event(event);
- msg.Option("name", line.name)
- msg.Option("text", line.key)
- can.Export(event, can.Name(), "share")
- },
- "重命名": function(event, can, line, value, cmd, item) {
- can.user.prompt("输入新名:", function(name) {
- can.run(event, [can.Conf("river"), value, "rename", name], function(msg) {
- can.Import(event, "update", can.Name())
- })
- }, line.name)
- },
- "删除": function(event, can, line, value, cmd, item) {
- can.run(event, [can.Conf("river"), value, "remove"], function(msg) {
- can.Import(event, "update", can.Name())
- })
+Volcanos("onaction", {help: "交互数据", list: [],
+ _init: function(can, msg, list, cb, target) {
+ can.onexport._init(can, msg, list, cb, target)
},
})
Volcanos("onexport", {help: "导出数据", list: [],
-})
+ _init: function(can, msg, list, cb, target) { var key = "storm";
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ can.run(msg._event, ["search", "River.onaction._init"], function(msg) {
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ can.Cache(can.Conf("river"), can._output, can.Conf(key));
+ var river = can.Conf("river", msg.Option("river"));
+ console.log(can._root, can._name, "show", river);
+ if (can.Conf(key, msg.Option(key, can.Cache(river, can._output)))) {
+ typeof cb == "function" && cb (msg); return
+ }
+ can.run(msg._event, [river], function(msg) { can._output.innerHTML = "";
+ if (Volcanos.meta.follow[can._root]) { debugger }
+ var select; msg.Table(function(value, index, array) {
+ // 添加列表
+ var view = can.onappend.item(can, can._output, "item", value, function(event, item) {
+ // 左键点击
+ can.Conf(key, value.key); can.run(event, ["search", "Action.onaction._init"], function(msg) {
+ })
+ }, function(event, item) {
+ // 右键点击
+ });
+ if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
+ select = view
+ }
+ }); select.click();
+ typeof cb == "function" && cb(msg)
+ })
+ })
+ },
+})
diff --git a/plugin/input.js b/plugin/input.js
index b084acc4..f37c07e4 100644
--- a/plugin/input.js
+++ b/plugin/input.js
@@ -1,117 +1,27 @@
Volcanos("onimport", {help: "导入数据", list: [],
- init: shy("添加控件", function(can, item, name, value, option) {
- var input = {type: "input", name: name, data: item};
- item.action = item.action || item.value || "";
- item.figure = item.figure || item.value || "";
- item.cb = item.cb || item.value || "";
- item.name && item.name.indexOf("@") == 0 && (item.name = item.name.slice(1)) && (item.position = item.position || "opts")
-
- switch (item.type = item.type || item._type || item._input || "text") {
- case "upfile": item.type = "file"; break
- case "button":
- item.value = item.name || item.value;
- break
- case "select":
- item.values = typeof item.values == "string"? item.values.split(" "): item.values;
- if (!item.values && item.value) {
- item.values = item.value.split("|")
- item.value = item.values[0]
- }
- input.type = "select", input.list = item.values.map(function(value) {
- return {type: "option", value: value, inner: value};
- })
- item.className || can.page.ClassList.add(can, item, item.position||"args");
- break
- case "textarea":
- input.type = "textarea"
- // no break
- case "password":
- // no break
- case "text":
- item.className || can.page.ClassList.add(can, item, item.position||"args");
- item.value = value || item.value || "";
- item.autocomplete = "off";
- break
- }
-
- if (item.value == "auto") {item.value = ""}
- item.figure && item.figure.indexOf("@") == 0 && (item.figure = item.figure.slice(1)) && can.require(["plugin/input/"+item.figure], function() {
- target.type != "button" && (target.value = "")
- })
-
- var target = can.Dream(option, "input", input)[input.name];
- item.type == "text" && !target.placeholder && (target.placeholder = item.name || "");
- item.type != "button" && !target.title && (target.title = item.placeholder || item.name || "");
- item.type == "textarea" && can.page.Append(can, option, [{type: "br"}])
- item.type == "select" && (target.value = value || item.value || item.values[item.index||0])
- item.type == "button" && item.action == "auto" && can.run && can.run({});
- return target;
- }),
- path: function(event, can, value, cmd, target) {
- return target.value + (target.value == "" || target.value.endsWith("/")? "": "/") + value
+ _init: function(can, meta, list, cb, output, action, option, field) { output.innerHTML = "";
},
})
-Volcanos("onfigure", {help: "控件交互", list: []})
Volcanos("onaction", {help: "控件交互", list: [],
- onclick: function(event, can) {can.Select(event);
- var figure = can.onfigure[can.item.cb] || can.onfigure[can.item.figure]
- figure? can.page.AppendFigure(event, can, can.item.figure, can._name) && figure.click(event, can, can.item, can.item.name, event.target, can.figure):
- can.item.type == "button" && can.run(event)
- },
- onchange: function(event, can) {
- can.item.type == "select" && can.item.action == "auto" && can.Runs(event)
+ onclick: function(event, can) {
+ switch (can.Conf("type")) {
+ case "button":
+ can.run(event, [], function() {})
+ break
+ }
},
onkeydown: function(event, can) {
- if (event.target.tagName == "TEXTAREA") {return}
-
- can.page.oninput(event, can, function(event) {
- switch (event.key) {
- case "b":
- can.Append(event)
- return true
- case "m":
- can.Clone(event)
- return true
- }
- })
-
switch (event.key) {
- case "Enter": can.run(event, []); break
- case "Escape": event.target.blur(); break
- default:
- if (event.target.value.endsWith("j") && event.key == "k") {
- can.page.DelText(event.target, event.target.selectionStart-1, 2);
- event.target.blur();
- break
- }
- return false
+ case "Enter":
+ can.run(event, [], function() {})
+ break
}
- event.stopPropagation()
- event.preventDefault()
- return true
},
onkeyup: function(event, can) {
- if (event.target.tagName == "TEXTAREA") {return}
-
switch (event.key) {
- default: return false
+ case "Enter":
+ can.run(event, [], function() {})
+ break
}
- event.stopPropagation()
- event.preventDefault()
- return true
},
})
-Volcanos("onchoice", {help: "控件菜单", list: ["全选", "复制", "清空"],
- "全选": function(event, can, msg, value, target) {
- can.target.focus(), can.target.setSelectionRange(0, can.target.value.length);
- },
- "复制": function(event, can, msg, value, target) {
- can.user.toast(can.page.CopyText(can, can.target.value), "复制成功")
- },
- "清空": function(event, can, msg, value, target) {
- can.target.value = "";
- },
-})
-Volcanos("ondetail", {help: "控件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/plugin/state.js b/plugin/state.js
index f909207a..8caf88e6 100644
--- a/plugin/state.js
+++ b/plugin/state.js
@@ -1,41 +1,5 @@
-Volcanos("onimport", {help: "导入数据", list: []})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: ["执行", "返回", "共享", "重命名", "选项", "加参", "减参", "克隆", "删除"],
- "执行": function(event, can, msg, cmd, field) {can.Runs(event)},
- "返回": function(event, can, msg, cmd, field) {can.Last(event)},
- "共享": function(event, can, msg, cmd, field) {
- can.user.input(event, can, ["name", "text"], function(event, cmd, meta, list) {
- var msg = can.Event(event);
- msg.Option("name", meta.name)
- msg.Option("text", meta.text)
- can.Conf("args", JSON.stringify(can.Option()))
- can.core.List(["node", "group", "index", "args"], function(key) {
- msg.Option(key, can.Conf(key))
- })
- can.Export(event, "action", "share")
- return true
- })
+Volcanos("onimport", {help: "导入数据", list: [],
+ _init: function(can, meta, list, cb, target) {
},
- "重命名": function(event, can, msg, cmd, field) {var meta = field.Meta;
- meta.help = can.user.prompt("", function(help) {
- meta.help = help
- }, meta.help)
- },
- "选项": function(event, can, msg, cmd, field) {
- can.user.input(event, can, ["name", "value"], function(event, cmd, meta, list) {
- var data = {type: "text", value: meta.value||""}
- can.page.ClassList.add(can, data, "opts");
-
- var input = {type: "input", name: meta.name, data: data};
- var target = can.Dream(can.option, "option", input)[input.name];
- return true
- })
- },
- "加参": function(event, can, msg, cmd, field) {can.Append()},
- "减参": function(event, can, msg, cmd, field) {can.Remove(event)},
- "克隆": function(event, can, msg, cmd, field) {can.Clone(event)},
- "删除": function(event, can, msg, cmd, field) {can.Delete(event)},
})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
diff --git a/plugin/table.js b/plugin/table.js
index d0d1ad50..f76c9cb2 100644
--- a/plugin/table.js
+++ b/plugin/table.js
@@ -1,143 +1,19 @@
Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
+ _init: function(can, msg, list, cb, output, action, option, field) { output.innerHTML = "";
var table = can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
- can.ondetail["复制"](event, can, msg, value, index, key, td);
- can.Export(event, value.trim(), key, index)
+ can.page.Select(can, option, "input.args", function(input) { if (input.name == key) {
+ input.value = value
+ } })
}, function(event, value, key, index, tr, td) {
- can.user.carte(event, shy("上下文菜单", can.ondetail, msg["field.detail"] || can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
- var sub = can.Event(event);
- msg.append.forEach(function(key) {sub.Option(key, msg[key][index].trim())})
-
- typeof cb == "function"? cb(event, can, msg, index, key, cmd, td):
- can.run(event, ["action", typeof cb == "string"? cb: cmd, key, value.trim(), msg.Ids(index)], function(msg) {
- can.user.toast(msg.Result())
- if (msg.Option("field.reload") == "true") {
- can.run(event)
- }
- }, true)
- }))
});
-
- if (msg.Option("render") != "" && msg.result) {
- var story = can.page.Append(can, output, [{view: [msg.Option("render"), "div", msg.Result()]}]).first;
- can.page.Select(can, story, ".story", function(item) {var data = item.dataset;
- switch (item.tagName) {
- case "FIELDSET":
- can.Plugin(can, data.name, JSON.parse(data.meta||"{}"), function(event, cmds, cb, silent) {
- can.run(event, ["action", "story", data.type, data.name, data.text].concat(cmds), cb, true)
- }, item, function(sub) {
-
- })
- break
- }
- })
- } else {
- switch (msg._xhr.getResponseHeader("content-type")) {
- case "image/png":
- if (msg._xhr.responseType != "blob") {
- break
- }
- var str = URL.createObjectURL(new Blob([msg._xhr.response], {type: "image/png"}));
- can.page.Append(can, output, [{img: [str]}])
- break
-
- default:
- msg.result && can.page.Append(can, output, [{view: ["code", "div"], list: [
- {view: ["code", "pre", can.page.Display(msg.Result())]},
- ]}]).code;
- }
- }
- return typeof cb == "function" && cb(msg);
+ msg.result && can.page.AppendBoard(can, output, msg.result.join(""))
},
})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: ["返回", "清空", "复制", "下载"],
- "返回": function(event, can, msg, cmd, target) {
- can.run(event, ["", "Last"])
- },
- "清空": function(event, can, msg, cmd, target) {
- can.target.innerHTML = "";
- },
- "复制": function(event, can, msg, cmd, target) {
- var list = can.onexport.Format(can, msg, "data");
- can.user.toast(can.page.CopyText(can, list[2]), "复制成功")
- },
- "下载": function(event, can, msg, cmd, target) {msg = msg || can.msg;
- var list = can.onexport.Format(can, msg, msg._plugin_name||"data");
- can.page.Download(can, list[0]+list[1], list[2]);
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: ["渲染", "选择", "编辑", "删除", "复制", "下载", "收藏"],
- "渲染": function(event, can, msg, index, key, cmd, td) {
- can._story = can._story || can.Plugin(can, msg.name[index], {inputs: [
- {_input: "button", name: "喜欢"},
- {_input: "button", name: "讨厌"},
- {_input: "button", name: "查看"},
- {_input: "button", name: "关闭"},
- ]}, function(event, cmds, cb, silent) {
- var req = can.Event(event)
- switch (req.Option("_action")) {
- case "关闭":
- can.page.Remove(can, can._story.target)
- delete(can._story)
- break
- default:
- req.Option("pod", "");
- can.run(event, ["set", msg.pod[index], msg.engine[index], msg.favor[index], msg.id[index],
- msg.type[index], msg.name[index], msg.text[index]], function(res) {
- can._story.Show(res.Option("display")||"table", res, cb)
- }, true)
- }
- }, can.page.AppendField(can, document.body, "story", {name: msg.type[index], help: msg.name[index]}), function(plugin) {
- can.page.Modify(can, plugin.target, {style: {position: "absolute", left: "10px", top: "100px"}})
- })
- can._story.Runs(event)
- },
- "选择": "select",
- "删除": "delete",
- "编辑": function(event, can, msg, index, key, cmd, td) {
- var text = td.innerHTML;
- var input = can.page.Appends(can, td, [{type: "input", value: text, style: {width: td.clientWidth+"px"}, data: {onkeydown: function(event) {
- if (event.key != "Enter") {return}
- if (key == "value" && msg.key) {key = msg.key[index]}
-
- var sub = can.Event(event);
- can.core.List(msg.append, function(key) {sub.Option(key, msg[key][index])})
- can.run(event, ["action", "modify", key, event.target.value, text, can.Option("id")||msg.Ids(index)], function(msg) {
- td.innerHTML = event.target.value;
- can.user.toast(msg.Result()||"修改成功")
- }, true)
- }}}]).first;
- input.focus();
- input.setSelectionRange(0, input.value.length);
- },
- "复制": function(event, can, msg, index, key, cmd, target) {
- can.user.toast(can.page.CopyText(can, target.innerHTML), "复制成功")
- },
- "下载": function(event, can, msg, index, key, cmd, target) {
- can.page.Download(can, key, target.innerHTML);
- },
- "收藏": function(event, can, msg, index, key, cmd, target) {
- can.user.input(event, can, [
- {_input: "text", name: "favor", value: can._last_favor||""},
- {_input: "text", name: "type", value: msg.type && msg.type[index] || ""},
- {_input: "text", name: "name", value: msg.name && msg.name[index] || ""},
- {_input: "text", name: "text", value: msg.text && msg.text[index] || ""},
- ], function(event, cmd, meta, list) {can._last_favor = meta.favor;
- can.run(event, ["action", "favor", meta.favor, meta.type, meta.name, meta.text], function(msg) {
- can.user.toast(msg.Result()||"收藏成功");
- }, true)
- })
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- Format: function(can, msg, name) {
- var ext = ".csv", txt = can.page.Select(can, can.target, "tr", function(tr) {
- return can.page.Select(can, tr, "td,th", function(td) {return td.innerText}).join(",")
- }).join("\n");
-
- !txt && (ext = ".txt", txt = msg.result && msg.result.join("") || "");
- return [name, ext, txt]
+Volcanos("onaction", {help: "控件交互", list: [],
+ onclick: function(event, can) {
+ can.run(event, [], function() {})
},
})
+
+
diff --git a/demo/proto.js b/proto.js
similarity index 100%
rename from demo/proto.js
rename to proto.js
diff --git a/style.css b/style.css
index e69de29b..aceec56f 100644
--- a/style.css
+++ b/style.css
@@ -0,0 +1,156 @@
+* {
+ background:black;
+}
+body {
+ padding:0;
+ margin:0;
+}
+fieldset {
+ color:cyan;
+ padding:2px;
+ margin:0px;
+}
+legend {
+ margin-left:10px;
+}
+
+fieldset>form.option {
+ padding:0 5px;
+}
+fieldset>form.option>br {
+ clear:both;
+}
+fieldset>form.option>div.item {
+ margin-right:3px;
+ float:left;
+}
+fieldset>form.option>div.item label {
+ margin-right:3px;
+}
+fieldset>form.option>div.item input.args.char {
+ width:20px;
+}
+fieldset>form.option>div.item input.args.tiny {
+ width:40px;
+}
+fieldset>form.option>div.item input.args {
+ width:80px;
+}
+fieldset>form.option>div.item input.args.cmd {
+ background-color:black;
+ color:white;
+ width:160px;
+}
+fieldset>form.option>div.item input.args.long {
+ width:240px;
+}
+fieldset>form.option>div.item input.args.full {
+ width:480px;
+}
+fieldset>form.option>div.item input.opts {
+ width:80px;
+}
+fieldset>form.option>div.item textarea.args {
+ width:300px;
+ height:50px;
+ background-color:cyan;
+}
+
+fieldset>form.option>div.item.text>input {
+ background-color:cyan;
+}
+fieldset>form.option>div.item.button>input {
+ color:cyan;
+}
+fieldset>form.option>div.item.select>select {
+ color:cyan;
+}
+fieldset>form.option>div.item.textarea {
+ margin-top:4px;
+ clear:both;
+}
+
+fieldset.Action>div.output {
+ overflow:auto;
+}
+fieldset>div.output {
+ margin-top:4px;
+ clear:both;
+ overflow:auto;
+}
+
+fieldset table {
+ font-size:14px;
+ overflow: auto;
+}
+fieldset table caption {
+ font-size:18px;
+ font-style:italic;
+ border:solid 1px green;
+}
+fieldset table tbody {
+ overflow:auto;
+}
+fieldset table td sup.more {
+ color:red;
+}
+
+fieldset table {
+ border:solid 1px green;
+ cursor:pointer;
+}
+fieldset table tr:hover {
+ background-color:#0fbd45;
+}
+fieldset table tr.over {
+ background:red;
+}
+fieldset table tr.select {
+ background-color:#0fbd45;
+}
+fieldset table th {
+ font-family:monospace;
+ background-color:#0fbd45;
+ cursor:pointer;
+ padding: 0 6px;
+}
+fieldset table td {
+ max-width:1200px;
+ font-family:monospace;
+ padding: 0 6px;
+ white-space: pre;
+}
+fieldset table td:hover {
+ background-color:red;
+}
+fieldset table td.select {
+ background-color:red;
+}
+
+fieldset div.code {
+ color:white;
+ font-size:14px;
+ font-family:monospace;
+ background-color:#343a34f2;
+ white-space:pre;
+ padding:10px;
+ overflow:auto;
+ border:solid 3px green;
+ max-height:640px;
+}
+fieldset div.hidden {
+ display:none;
+}
+
+fieldset div.code {
+ color:white;
+ font-size:14px;
+ font-family:monospace;
+ background-color:#343a34f2;
+ white-space:pre;
+ padding:10px;
+ overflow:auto;
+ border:solid 3px green;
+ max-height:640px;
+}
+