diff --git a/README.md b/README.md
index 1b7c085b..24533113 100644
--- a/README.md
+++ b/README.md
@@ -1,52 +1,4 @@
# volcanos
-volcanos是一个前端框架,通过模块化、共享化、自动化、快速的创建、共享应用程序、数据。
+volcanos是一个前端框架,通过模块化、集群化、自动化、快速的创建、共享应用程序和数据。
-## 1 原型 proto.js
-### 1.1 ID 生成器
-### 1.2 Log 日志器
-### 1.3 Conf 配置器
-### 1.4 Sync 同步器
-### 1.5 Timer 定时器
-### 1.6 Event 触发器
-### 1.7 Dream 构造器
-### 1.8 Cache 缓存器
-### 1.9 Story 存储器
-
-## 2 框架 frame.js
-### 2.1 Page 页面
-### 2.2 Pane 面板
-### 2.3 Plugin 插件
-### 2.4 Inputs 控件
-### 2.5 Output 组件
-
-## 3 工具模块 lib/
-### 3.1 数据类型 base.js
-### 3.2 数据结构 core.js
-### 3.3 后端通信 misc.js
-### 3.4 网页操作 page.js
-### 3.5 用户交互 user.js
-
-## 4 网页模块 page/
-### 4.1 应用页面 index.html
-### 4.2 共享页面 share.html
-
-## 4 面板模块 pane/
-### 4.1 标题栏 Header.js
-### 4.2 用户列表 Ocean.js
-### 4.3 群组列表 River.js
-### 4.4 工作台 Action.js
-### 4.5 应用列表 Storm.js
-### 4.6 设备列表 Steam.js
-### 4.7 状态栏 Footer.js
-
-## 5 插件模块 plugin/
-### 5.1 插件模块 state.js
-### 5.2 输入模块 input.js
-### 5.3 输出模块 table.js
-### 5.4 输入插件 input/
-### 5.5 输出插件 story/
-### 5.6 其它模块 local/
-
-## 6 客户端 client/
-### 6.1 小程序 mp/
diff --git a/chrome/chrome.html b/chrome/chrome.html
deleted file mode 100644
index 4ea6fceb..00000000
--- a/chrome/chrome.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/chrome/chrome.js b/chrome/chrome.js
deleted file mode 100644
index 3b9a129a..00000000
--- a/chrome/chrome.js
+++ /dev/null
@@ -1,96 +0,0 @@
-var can = Volcanos("chrome", {
- chrome: function(msg, cmd, cb) {
- if (cmd.length == 0) {
- // 窗口列表
- chrome.windows.getAll(function(wins) {
- can.core.List(wins, function(win) {win.wid = win.id
- msg.Push(win, ["wid", "state", "left", "top", "width", "height"])
- })
- typeof cb == "function" && cb(msg)
- })
- return
- }
- if (cmd.length == 1) {
- // 标签列表
- chrome.tabs.getAllInWindow(parseInt(cmd[0]), function(tabs) {
- can.core.List(tabs, function(tab) {tab.tid = tab.id
- msg.Push(tab, ["tid", "active", "width", "height", "index", "title", "url"])
- })
- typeof cb == "function" && cb(msg)
- })
- return
- }
-
- delete(msg._can)
- delete(msg._event)
- if (cmd[1] == "") {
- chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
- cmd[1] = tabs[0].id
- chrome.tabs.sendMessage(parseInt(cmd[1]), msg, function (res) {
- msg.Copy(res), typeof cb == "function" && cb(msg)
- })
- })
- } else {
- chrome.tabs.sendMessage(parseInt(cmd[1]), msg, function (res) {
- msg.Copy(res), typeof cb == "function" && cb(msg)
- })
- }
- return
-
- // 新建标签
- chrome.tabs.create({windowId: parseInt(cmd[0]), url: cmd[1], selected: false}, function() {
- can.chrome(msg, [cmd[0]], cb)
- })
- },
- bookmark: function(msg, cmd, cb) {
- chrome.bookmarks.getSubTree(cmd[0]||"0", function(labs) {
- for (var i = 0; i < labs.length; i++) {labs[i].pid = labs[i].parentId
- msg.Push("time", can.base.Time(labs[i].dateAdded))
- msg.Push(labs[i], ["pid", "id", "index", "title", "url"])
- labs = labs.concat(labs[i].children||[])
- }
- typeof cb == "function" && cb(msg)
- })
- },
-}, ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], function(can) {can.Conf({iceberg: "http://localhost:9020/"})
- can.user.toast = function(message, title) {chrome.notifications.create(null, {
- message: message, title: title||"volcanos", iconUrl: "/favicon.ico", type: "basic",
- })},
-
- can.misc.WSS(can, "ws://localhost:9020/space/", {name: "chrome", type: "chrome"}, function(event, msg) {
- if (msg.Option("_handle")) { return can.user.toast(msg.result.join("")) }
-
- // can.user.toast(msg.detail.join(" "))
- try {
- switch (msg.detail[0]) {
- case "space": can._share = msg.detail[2]; break
- case "pwd": msg.Echo("hello world"); break
- default: (can[msg.detail[0]]||can.chrome[msg.detail[0]])(msg, msg.detail.slice(1), function(msg) {
- msg.Reply(msg)
- }); return
- }
- } catch (e) {
- can.user.toast(e)
- }
- msg.Reply(msg)
- }, function() {can.user.toast("wss connect", "iceberg")})
-
- can.run = function(event, cmd, cb, silent) { var msg = can.request(event)
- can.misc.Run(event, can, {names: "code/chrome/crx"}, cmd, cb)
- },
- chrome.history.onVisited.addListener(function(item) {
- can.run({}, ["history", item.id, item.title, item.url])
- })
- chrome.contextMenus.create({
- title: "favor",
- onclick: function(event) {
- chrome.tabs.query({ active: true}, function (tabs) {
- chrome.tabs.sendMessage(tabs[0].id, { action: "copy" }, function (response) {
- console.log(response)
- can.run({}, ["history", "id", response.title, response.src])
- })
- })
- },
- })
-})
-
diff --git a/chrome/contexts.js b/chrome/contexts.js
deleted file mode 100644
index bfb96d67..00000000
--- a/chrome/contexts.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var can = Volcanos("chrome", {
- spide: function(can, msg) {
- can.page.Select(can, document.body, "video", function(item) {
- var p = can.page.Select(can, document.body, "p.title")[0]
-
- var ls = item.src.split("?")
- var ls = ls[0].split(".")
- msg.Push("time", can.base.Time())
- msg.Push("type", "video")
- msg.Push("name", (p && p.innerText || "video")+"."+ls[ls.length-1])
- msg.Push("text", item.src)
- msg.Push("link", item.src)
- })
- can.page.Select(can, document.body, "img", function(item) {
- var ls = item.src.split("?")
- var ls = ls[0].split("/")
-
- msg.Push("time", can.base.Time())
- msg.Push("type", "img")
-
- if (item.src.startsWith("data:image")) {
- msg.Push("name", item.src.slice(item.src.length-20))
- } else {
- msg.Push("name", ls[ls.length-1]||"image.jpg")
- }
-
- msg.Push("text", item.src)
- msg.Push("link", item.src)
- })
- },
-}, [], function(can) {
- can.user = user
- can.page = page
- can.misc = misc
- can.core = core
- can.base = base
-
- chrome.extension.onMessage.addListener( function (msg, sender, cb) { var action = can[msg.detail[3]||"spide"]
- msg = can.request({}, msg)
- delete(msg._event)
- delete(msg._can)
- typeof action == "function" && action(can, msg) || typeof cb == "function" && cb(msg)
- })
- return
-
- chrome.extension.onMessage.addListener( function (request, sender, sendResponse) {
- var title = can.page.Select(can, document.body, "p.title", function(item) {
- return item.innerText
- }).join("-")
- can.page.Select(can, document.body, "video", function(item) {
- sendResponse({poster: item.poster, src: item.src, title: title})
- console.log(item)
- })
- })
-})
-
diff --git a/chrome/popup.html b/chrome/popup.html
deleted file mode 100644
index 36ca8697..00000000
--- a/chrome/popup.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/chrome/popup.js b/chrome/popup.js
deleted file mode 100644
index 7690efe9..00000000
--- a/chrome/popup.js
+++ /dev/null
@@ -1,12 +0,0 @@
-Volcanos({name: "demo", volcano: "/frame.js", iceberg: "http://localhost:9020/chat/", intshell: "plug.sh",
- libs: ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], panes: [
- {name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
- {name: "River", help: "群聊组", pos: "left"},
- {name: "Action", help: "工作台", pos: "middle"},
- {name: "Search", help: "搜索框", pos: "float"},
- {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd" ]},
- ], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [
- "/plugin/state.js", "/plugin/input.js", "/plugin/table.js",
- ],
-})
-
diff --git a/chrome/spided.js b/chrome/spided.js
deleted file mode 100644
index c1e61515..00000000
--- a/chrome/spided.js
+++ /dev/null
@@ -1,28 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
- can.ui = can.page.Append(can, can._target, [
- {view: ["content", "div"]}, {view: ["display", "pre"]},
- ])
- can.onappend.table(can, msg, can.ui.content, "table")
- can.onappend.board(can, msg,can.ui.display, "board")
- var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
- refresh && can.core.Timer(refresh, function() {
- can.run({})
- })
- return typeof cb == "function" && cb(msg)
- },
-})
-Volcanos("onaction", {help: "控件交互", list: [],
- onclick: function(event, can) {
- can.run(event, [], function() {})
- },
-})
-Volcanos("ondetail", {help: "控件交互", list: ["编辑", "删除"],
- "编辑": function(event, can, key) {
- console.log(key)
- },
- "删除": function(event, can, key) {
- console.log(key)
- },
-})
-
-
diff --git a/client/mp/app.js b/client/mp/app.js
deleted file mode 100644
index c52e4b1a..00000000
--- a/client/mp/app.js
+++ /dev/null
@@ -1,134 +0,0 @@
-const kit = require("utils/kit.js")
-
-App({
- // data: {}, conf: {serve: "https://shylinux.com/chat", space: "mac"},
- data: {}, conf: {serve: "https://shylinux.com/chat", space: ""},
- request: function(cmd, data, cb) { var app = this; data.sessid = app.conf.sessid, data.pod = app.conf.space
- wx.request({method: "POST", url: app.conf.serve+"/"+cmd, data: data, success: function(res) { var msg = res.data
- if (res.statusCode == 401) { return app.usercode(function() {app.request(cmd, data, cb)}) }
- console.log("POST", cmd, msg)
-
- msg.__proto__ = {
- nRow: function() { return msg.append && msg.append[0] && msg[msg.append[0]].length || 0 },
- Result: function() { return msg.result && msg.result.length > 0 && msg.result.join("") || "" },
- Table: function(cb) { var row = 0
- for (var i = 0; i < msg.append.length; i++) {
- row = msg[msg.append[i]].length > row? msg[msg.append[i]].length: row
- }
- for (var i = 0; i < row; i++) { var line = {}
- for (var k in msg.append) {
- line[msg.append[k]] = msg[msg.append[k]][i]
- }
- typeof cb == "function" && cb(line, i, row)
- }
- },
- }
- var row = 0
- var index = []
- if (msg.append) {
- for (var i = 0; i < msg.append.length; i++) {
- row = msg[msg.append[i]].length > row? msg[msg.append[i]].length: row
- }
- for (var i = 0; i < row; i++) {
- index.push(i)
- }
- }
- msg._index = index
-
- typeof cb == "function" && cb(msg)
- }})
- },
- download: function(cmd, data, cb) { var app = this; data.sessid = app.conf.sessid
- wx.downloadFile({url: app.conf.serve+"/"+cmd, data: data, success: cb})
- },
- usercode: function(cb) { var app = this
- wx.login({success: function(res) { app.request("mp/login/sess", {code: res.code}, function(msg) {
- wx.setStorage({key: "sessid", data: msg.Result()})
- app.conf.sessid = msg.Result(), typeof cb == "function" && cb()
- })}})
- },
- userinfo: function(cb) { var app = this
- if (app.conf.userInfo) {
- app.request("mp/login/user", app.conf.userInfo, function(msg) {
- typeof cb == "function" && cb(app.conf.userInfo)
- })
- return
- }
- app.usercode(function() {
- wx.getSetting({ success: function(res) { res.authSetting['scope.userInfo'] && wx.getUserInfo({success: function(res) {
- app.request("mp/login/user", res.userInfo, function(msg) { app.conf.userInfo = res.userInfo
- typeof cb == "function" && cb(res.userInfo)
- })
- }})}})
- })
- },
- location: function(arg) { wx.chooseLocation(arg) },
-
- title: function(title) { wx.setNavigationBarTitle({title: title, success: function() {}})},
- modal: function(title, content, cb) { wx.showModal({title: title||"", content: content||"", success: cb})},
- toast: function(title, content) { wx.showToast({title: title, content: content||""})},
- jumps: function(url, args, cb) { var next = "/pages/"+kit.Args(url, args)
- console.log("jump", next), wx.navigateTo({url: next, success: cb})
- },
- scans: function(cb) { var app = this
- wx.scanCode({success: function(res) { console.log("scan", res)
- try {
- var value = JSON.parse(res.result)
- } catch(e) {
- try {
- var value = {"type": "url", "text": res.result}
- var ls = res.result.split("?"); if (ls.length > 1) { ls = ls[1].split("&")
- for (var i = 0; i < ls.length; i++) { var vs = ls[i].split("=")
- value[vs[0]] = decodeURIComponent(vs[1])
- }
- }
- } catch(e) {
- typeof cb == "function" && cb({type: "", text: res.result})
- return
- }
- }
-
- switch (value.type) {
- case "share":
- switch (value.name) {
- case "invite":
- app.userinfo(function(userInfo) {
- app.modal("接受邀请", value.name, function(res) {
- res.confirm && app.request("mp/login/auth", value, function(msg) {
- app.toast("回执成功")
- })
- })
- })
- break
- }
- break
-
- case "login":
- app.userinfo(function(userInfo) {
- app.modal("授权登录", value.name, function(res) {
- res.confirm && app.request("mp/login/auth", value, function(msg) {
- app.toast("授权成功")
- })
- })
- })
- break
- case "active":
- app.userinfo(function(userInfo) {
- app.modal("授权登录", value.name, function(res) {
- res.confirm && app.request("mp/login/auth", value, function(msg) {
- app.toast("授权成功")
- })
- })
- })
- break
- default:
- typeof cb == "function" && cb(value)
- }
- }})
- },
-
- onLaunch: function() {
- this.conf.sessid = wx.getStorageSync("sessid")
- console.log("load", "sessid", this.conf.sessid)
- },
-})
diff --git a/client/mp/app.json b/client/mp/app.json
deleted file mode 100644
index 35adc4ae..00000000
--- a/client/mp/app.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "pages": [
- "pages/river/river",
- "pages/action/action",
- "pages/insert/insert"
- ],
- "window": {
- "backgroundColor": "#000",
- "backgroundTextStyle": "dark",
- "navigationBarBackgroundColor": "#000",
- "navigationBarTitleText": "终端工具链",
- "navigationBarTextStyle": "white"
- },
- "style": "v2",
- "sitemapLocation": "sitemap.json"
-}
diff --git a/client/mp/app.wxml b/client/mp/app.wxml
deleted file mode 100644
index 16dd762e..00000000
--- a/client/mp/app.wxml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{item}}
-
-
diff --git a/client/mp/app.wxss b/client/mp/app.wxss
deleted file mode 100644
index 6772bd11..00000000
--- a/client/mp/app.wxss
+++ /dev/null
@@ -1,84 +0,0 @@
-page {
- color:white;
- font-size:14px;
- font-family:monospace;
- background-color:#272822;
- white-space:pre;
-}
-
-view.action>view.item {
- float:left;
-}
-view.option>view.item {
- padding:0;
- border: 0;
- float:left;
-}
-view.option input {
- width:80px;
- margin:2px;
- padding:2px;
- border:solid 1px green;
-}
-view.option view.textarea {
- clear:both;
- width:calc(100% - 2px);
- border:solid 1px green;
-}
-view.option view.select {
- border:solid 1px green;
- float:left;
- /* width:40px; */
- padding:6px;
-}
-view.option view.select picker {
-}
-view.option view.select picker view {
-}
-view.output {
- clear:both;
-}
-view.output view.item {
- text-align:center;
- font-size:18px;
- padding:10px;
- border:solid 1px green;
-}
-view.output view.list view.item {
- background-color:darkgray;
- margin-left:20px;
-}
-view.output view.code {
- margin-left:10px;
- padding:10px;
- border-left:solid 2px cyan;
-}
-
-view.title {
- margin-top:20px;
- margin-bottom:10px;
- font-weight:bold;
- font-size:18px;
-}
-view.field {
-}
-
-table {
-}
-tr {
- display:flex;
- justify-content:space-between;
-}
-th {
- padding:5px;
- width:100%;
- text-align:center;
- border:solid 1px red;
-}
-td {
- padding:5px;
- width:100%;
- text-align:center;
- border:solid 1px green;
-}
-
diff --git a/client/mp/pages/action/action.js b/client/mp/pages/action/action.js
deleted file mode 100644
index c135ec90..00000000
--- a/client/mp/pages/action/action.js
+++ /dev/null
@@ -1,185 +0,0 @@
-const kit = require("../../utils/kit.js")
-const app = getApp()
-
-Page({
- data: {
- action: ["扫码", "刷新", "清屏", "串行", "并行"],
- river: "", storm: "", title: "",
- res: [], his: {}, inputs: {},
- },
- action: {
- "扫码": function(event, page, data, name) {
- // app.jumps("scans/scans")
- app.scans(function(res) {
- res["sess.river"] = page.data.river
- res["sess.storm"] = page.data.storm
- app.request("mp/login/scan", res)
- page.onaction(event, res, res.name)
- })
- },
- "刷新": function(event, page, data, name) {
- var list = []; app.data[page.data.river+page.data.storm] = page.data.res = list
- wx.showLoading()
- app.request("action", {cmds: [page.data.river, page.data.storm]}, function(msg) {
- wx.hideLoading()
- msg.Table(function(line, index) {
- line.name = line.name.split(" ")[0]
- page.data.his[index] = []
- line.inputs = JSON.parse(line.list)
- line.feature = JSON.parse(line.meta)
- if (!line.inputs || line.inputs.length === 0) {
- line.inputs = [{_input: "text"}, {_input: "button", value: "执行"}]
- }
- list.push(line), line.inputs.forEach(function(input) {
- input.action = input.action || input.value
- input.value == "auto" && (input.value = "")
- input.value = input.value || kit.Value(line, "feature.trans."+input.name)
- if (input.value && input.value.startsWith("@")) {
- input.value = ""
- }
- if (input._input == "select") {
- input.values = input.values || input.value && input.value.split("|")
- }
- input._input == "button" && input.action == "auto" && page.run(event, index)
- })
- })
- page.setData({res: list})
- })
- },
- "串行": function(event, page, data, name) {
- function cb(i) {
- page.run(event, i, null, function() {i < page.data.res.length - 1&& cb(i+1)})
- }
- cb(0)
- },
- "并行": function(event, page, data, name) {
- kit.List(page.data.res, function(field, index) {
- page.run(event, index)
- })
- },
- "清屏": function(event, page, data, name) {
- kit.List(page.data.res, function(field, index) {
- delete(field.msg)
- })
- page.setData({res: page.data.res})
- },
- },
- onaction: function(event, data, name) {
- data = data || event.target.dataset, name = name || data.name
- console.log("action", "action", name)
- this.action[name](event, this, data)
- },
-
- run: function(event, order, cmd, cb) {var page = this, field = page.data.res[order]
- var cmds = [page.data.river, page.data.storm, field.id || field.key]
- cmds = cmds.concat(cmd||kit.List(field.inputs, function(input) {
- if (["text", "textarea", "select"].indexOf(input._input) > -1) {
- return input.value || ""
- }
- }))
-
- for (var i = cmds.length-1; i > 0; i--) {
- if (cmds[i] === "") {cmds.pop()} else {break}
- }
-
- wx.showLoading()
- app.request("action?="+field.name, {cmds: cmds}, function(msg) {
- wx.hideLoading()
- page.data.res[order].msg = msg
- page.setData({res: page.data.res})
- typeof cb == "function" && cb(msg)
- })
- },
-
- onBlur: function(event) {var page = this, data = event.target.dataset
- },
- onFocus: function(event) {},
- onInput: function(event) {var page = this, data = event.target.dataset
- page.data.res[data.order].inputs[data.index].value = event.detail.value
- page.setData({res: page.data.res})
- },
- onChange: function(event) {var page = this, data = event.target.dataset
- page.data.res[data.order].inputs[data.index].index = parseInt(event.detail.value)
- page.data.res[data.order].inputs[data.index].value = data.input.values[parseInt(event.detail.value)]
- page.setData({res: page.data.res})
- },
- onEnter: function(event) {var page = this, data = event.target.dataset
- page.data.res[data.order].inputs[data.index].value = event.detail.value
- },
-
- onClick: function(event) {var page = this, data = event.target.dataset
- var field = page.data.res[data.order]
-
- if (field.feature[data.input.name]) {
- app.data.insert = {
- field: field, input: data.input,
- data: {}, list: field.feature[data.input.name], cb: function(res) {
- var list = ["action", data.input.name]
- kit.Item(res, function(key, value) {
- key && value && list.push(key, value)
- })
- page.run(event, data.order, list)
- }
- }
- app.jumps("insert/insert", {river: page.data.river, storm: page.data.storm, title: field.name})
- return
- }
-
- switch (data.input.name) {
- case "返回":
- // 恢复命令
- page.data.his[data.order].pop()
- var line = page.data.his[data.order].pop()
- kit.List(field.inputs, function(input, index) {
- input.value = line && line[index] || ""
- })
- default:
- // 执行命令
- page.data.his[data.order].push(kit.List(field.inputs, function(input) {
- return input.value
- })) && page.run(event, data.order)
- }
- },
- onWhich: function(event) {var page = this, data = event.target.dataset
- var field = page.data.res[data.order]
- field.inputs.forEach(function(input, index) {
- if (input.name == data.field) {
- // 导入参数
- page.data.res[data.order].inputs[index].value = data.value
- page.setData({res: page.data.res})
- // 执行命令
- input.action == "auto" && page.data.his[data.order].push(kit.List(field.inputs, function(input) {
- return input.value
- })) && page.run(event, data.order)
- }
- })
- },
-
- onLoad: function (options) {
- console.log("page", "action", options)
- app.conf.sessid = options.sessid || app.conf.sessid
- this.data.river = options.river
- this.data.storm = options.storm
- this.data.title = options.title
- app.title(options.title)
-
- var data = app.data[options.river+options.storm]
- if (data) { return this.setData({res: this.data.res = data}) }
- this.onaction({}, {}, "刷新")
- },
- onReady: function () {},
- onShow: function () {},
- onHide: function () {},
- onUnload: function () {},
- onPullDownRefresh: function () {
- this.onaction({}, {}, "刷新")
- },
- onReachBottom: function () {},
- onShareAppMessage: function (res) {
- console.log("action", "share", res)
- return {
- title: this.data.title,
- path: "pages/action/action?river="+this.data.river+"&storm="+this.data.storm+"&title="+this.data.title,
- }
- },
-})
diff --git a/client/mp/pages/action/action.json b/client/mp/pages/action/action.json
deleted file mode 100644
index 5ed4543e..00000000
--- a/client/mp/pages/action/action.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "usingComponents": {}
-}
diff --git a/client/mp/pages/action/action.wxml b/client/mp/pages/action/action.wxml
deleted file mode 100644
index 3e226aa3..00000000
--- a/client/mp/pages/action/action.wxml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
- {{field.name}}({{field.help}})
-
-
-
-
-
-
-
-
-
-
-
- {{item.values[item.index||0]}}
-
-
-
-
-
-
-
-
-
-
-
- {{item}} |
-
- {{field.msg[item][line]}} |
-
-
-
-
-
-
-
-
-
diff --git a/client/mp/pages/action/action.wxss b/client/mp/pages/action/action.wxss
deleted file mode 100644
index 8cef7a7f..00000000
--- a/client/mp/pages/action/action.wxss
+++ /dev/null
@@ -1,6 +0,0 @@
-view.option view.item {
- padding:0;
-}
-view.option view.item.select {
- padding:3px;
-}
diff --git a/client/mp/pages/insert/insert.js b/client/mp/pages/insert/insert.js
deleted file mode 100644
index 7c0e79f3..00000000
--- a/client/mp/pages/insert/insert.js
+++ /dev/null
@@ -1,80 +0,0 @@
-const kit = require("../../utils/kit.js")
-const app = getApp()
-
-Page({
- data: {
- action: ["扫码"],
- field: {},
- insert: [],
- },
- action: {
- "扫码": function(event, page, data, name) {
- app.scans(function(res) {
- res["sess.river"] = page.data.river
- res["sess.storm"] = page.data.storm
- app.request("mp/login/scan", res)
- page.onaction(event, res, res.name)
- })
- },
- },
- onaction: function(event, data, name) {
- data = data || event.target.dataset, name = name || data.name
- console.log("action", "action", name)
- this.action[name](event, this, data)
- },
-
- onInput: function(event) {var page = this, data = event.target.dataset
- app.data.insert[data.index].value = event.detail.value
- },
- onFocus: function(event) {},
- onConfirm: function (event) { var page = this
- kit.List(page.data.insert, function(item) {
- app.data.insert.data[item.name] = item.value
- })
- app.data.insert.cb(app.data.insert.data)
- wx.navigateBack()
- },
- onLoad: function (options) {
- this.data.insert = app.data.insert.list
-
- var p = app.data.insert.input.action
- if (p.startsWith("@")) {
- var cb = this.plugin[p.slice(1,-1)]; cb && cb(this)
- }
- var cb = this.plugin[p]; cb && cb(this)
- kit.List(app.data.insert.list, function(item) {
- item.action = item.action || item.value
- item.value && item.value.startsWith("@") && (item.value = "")
- app.data.insert.data[item.name] = item.value
- })
- console.log("page", "insert", options)
- app.title(options.title)
- this.setData(this.data)
- },
- onReady: function () {},
- onShow: function () {},
- onHide: function () {},
- onUnload: function () {},
- onPullDownRefresh: function () {},
- onReachBottom: function () {},
-
- plugin: {
- getLocation: function(page, data) { app.location({success: function(res) {
- res.latitude = parseInt(res.latitude * 100000)
- res.longitude = parseInt(res.longitude * 100000)
- kit.List(page.data.insert, function(item) {
- res[item.name] && (item.value = res[item.name])
- }), page.setData(page.data)
- }}) },
- scanQRCode: function(page) { app.scans(function(res) {
- kit.List(page.data.insert, function(item) {
- res[item.name] && (item.value = res[item.name])
- }), page.setData(page.data)
- }) },
- paste: function(page, data) { wx.getClipboardData({success: function(res) {
- kit.List(page.data.insert, function(item) {
- res[item.name] && (item.value = res[item.name])
- }), page.setData(page.data)
- }}) },
- },
-})
diff --git a/client/mp/pages/insert/insert.json b/client/mp/pages/insert/insert.json
deleted file mode 100644
index 8835af06..00000000
--- a/client/mp/pages/insert/insert.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/client/mp/pages/insert/insert.wxml b/client/mp/pages/insert/insert.wxml
deleted file mode 100644
index d412598b..00000000
--- a/client/mp/pages/insert/insert.wxml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{item.values[item.index||0]}}
-
-
-
-
-
-
-
-
-
diff --git a/client/mp/pages/insert/insert.wxss b/client/mp/pages/insert/insert.wxss
deleted file mode 100644
index b96c7b27..00000000
--- a/client/mp/pages/insert/insert.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/insert/insert.wxss */
\ No newline at end of file
diff --git a/client/mp/pages/river/river.js b/client/mp/pages/river/river.js
deleted file mode 100644
index 14983590..00000000
--- a/client/mp/pages/river/river.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const kit = require("../../utils/kit.js")
-const app = getApp()
-
-Page({
- data: {
- action: ["扫码", "刷新", "登录"],
- river: {},
- },
- action: {
- "扫码": function(event, page, data) { app.scans(function(res) {
- switch (res.type) {
- case "url":
- app.request("mp/login/scan", res, function(msg) {
- page.onaction({}, {}, "刷新")
- })
- break
- default:
- res.name && page.onaction(event, res, res.name)
- }
- }) },
- "刷新": function(event, page, data) {
- wx.showLoading()
- app.request("river", {}, function(msg) {
- wx.hideLoading()
- var river = {}; msg.Table(function(value) {
- river[value.hash] = value
- })
- page.setData({river: river})
- })
- },
- "登录": function(event, page, data) { app.conf.sessid = "",
- app.userinfo(function(res) {
- page.onaction(event, data, "刷新")
- })
- },
- },
- onaction: function(event, data, name) {
- data = data || event.target.dataset, name = name || data.name
- console.log("action", "river", name)
- this.action[name](event, this, data)
- },
- ondetail: function(event, data) { var page = this
- data = data || event.target.dataset.item
- console.log("detail", "river", data)
-
- var river = page.data.river[data.hash]
- if (river.tool) {
- river.hidetool = !river.hidetool
- page.setData({river: page.data.river})
- return
- }
-
- wx.showLoading()
- app.request("river", {cmds: [data.hash, "tool"]}, function(msg) {
- wx.hideLoading()
- river.tool = {}; msg.Table(function(value) {
- river.tool[value.hash] = value
- value.river = data
- })
- page.setData({river: page.data.river})
- })
- },
- onchange: function(event, data) { var page = this
- data = data || event.target.dataset.item
- app.jumps("action/action", {river: data.river.hash, storm: data.hash, title: data.river.name+"."+data.name})
- },
-
- onLoad: function (options) { var page = this
- console.log("page", "river", options)
- app.conf.sessid = options.sessid || app.conf.sessid
- app.usercode(function() {
- page.onaction({}, options, "刷新")
- })
- },
- onReady: function () {},
- onShow: function () {},
- onHide: function () {},
- onUnload: function () {},
- onPullDownRefresh: function () {
- this.onaction({}, {}, "刷新")
- },
- onReachBottom: function () {},
- onShareAppMessage: function () {}
-})
diff --git a/client/mp/pages/river/river.json b/client/mp/pages/river/river.json
deleted file mode 100644
index 5ed4543e..00000000
--- a/client/mp/pages/river/river.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "usingComponents": {}
-}
diff --git a/client/mp/pages/river/river.wxml b/client/mp/pages/river/river.wxml
deleted file mode 100644
index e9e54504..00000000
--- a/client/mp/pages/river/river.wxml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
- {{item.name}}
-
- {{item.name}}
-
-
-
diff --git a/client/mp/pages/river/river.wxss b/client/mp/pages/river/river.wxss
deleted file mode 100644
index e69de29b..00000000
diff --git a/client/mp/plugin/story/paste.js b/client/mp/plugin/story/paste.js
deleted file mode 100644
index eb11f367..00000000
--- a/client/mp/plugin/story/paste.js
+++ /dev/null
@@ -1,4 +0,0 @@
-
-module.exports = {
- onimport: function() {},
-}
diff --git a/client/mp/plugin/story/paste.wxml b/client/mp/plugin/story/paste.wxml
deleted file mode 100644
index 43c226f3..00000000
--- a/client/mp/plugin/story/paste.wxml
+++ /dev/null
@@ -1 +0,0 @@
-hello wrold
diff --git a/client/mp/project.config.json b/client/mp/project.config.json
deleted file mode 100644
index 7b64dc28..00000000
--- a/client/mp/project.config.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "description": "项目配置文件",
- "packOptions": {
- "ignore": []
- },
- "setting": {
- "urlCheck": true,
- "es6": true,
- "postcss": true,
- "minified": true,
- "newFeature": true,
- "autoAudits": false,
- "coverView": true,
- "showShadowRootInWxmlPanel": true,
- "scopeDataCheck": false
- },
- "compileType": "miniprogram",
- "libVersion": "2.0.4",
- "appid": "wxf4e5104d83476ed6",
- "projectname": "%E7%BB%88%E7%AB%AF%E5%B7%A5%E5%85%B7%E9%93%BE",
- "debugOptions": {
- "hidedInDevtools": []
- },
- "isGameTourist": false,
- "simulatorType": "wechat",
- "simulatorPluginLibVersion": {},
- "condition": {
- "search": {
- "current": -1,
- "list": []
- },
- "conversation": {
- "current": -1,
- "list": []
- },
- "plugin": {
- "current": -1,
- "list": []
- },
- "game": {
- "currentL": -1,
- "list": []
- },
- "gamePlugin": {
- "current": -1,
- "list": []
- },
- "miniprogram": {
- "current": -1,
- "list": [
- {
- "id": 0,
- "name": "pages/action/action",
- "pathName": "pages/action/action",
- "query": "river=c796cd&storm=9092d5",
- "scene": 1008
- },
- {
- "id": 1,
- "name": "action",
- "pathName": "pages/action/action",
- "query": "river=d022b3&storm= c22d21",
- "scene": null
- },
- {
- "id": 2,
- "name": "pages/river/river",
- "pathName": "pages/river/river",
- "query": "river=c796cd&storm=9092d5",
- "scene": null
- },
- {
- "id": -1,
- "name": "pages/scans/scans",
- "pathName": "pages/scans/scans",
- "query": "river=c796cd&storm=9092d5",
- "scene": null
- },
- {
- "id": 4,
- "name": "pages/action/action",
- "pathName": "pages/action/action",
- "query": "river=d82c1d&storm=12d1d7&title=mac.paste",
- "scene": null
- }
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/client/mp/sitemap.json b/client/mp/sitemap.json
deleted file mode 100644
index ca02add2..00000000
--- a/client/mp/sitemap.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
- "rules": [{
- "action": "allow",
- "page": "*"
- }]
-}
\ No newline at end of file
diff --git a/client/mp/utils/kit.js b/client/mp/utils/kit.js
deleted file mode 100644
index 8c5fae8d..00000000
--- a/client/mp/utils/kit.js
+++ /dev/null
@@ -1,42 +0,0 @@
-module.exports = {
- Number: function(d, n) {var res = [];
- while (d > 0) {res.push(d % 10); d = parseInt(d / 10); n--}
- while (n > 0) {res.push("0"); n--}
- return res.reverse(), res.join("");
- },
- Time: function(t, fmt) {var now = t? new Date(t): new Date();
- fmt = fmt || "%y-%m-%d %H:%M:%S";
- fmt = fmt.replace("%y", now.getFullYear())
- fmt = fmt.replace("%m", Number(now.getMonth()+1, 2))
- fmt = fmt.replace("%d", Number(now.getDate(), 2))
- fmt = fmt.replace("%H", Number(now.getHours(), 2))
- fmt = fmt.replace("%M", Number(now.getMinutes(), 2))
- fmt = fmt.replace("%S", Number(now.getSeconds(), 2))
- return fmt
- },
- Args: function(url, args) {var list = []
- for (var k in args) {
- list.push(encodeURIComponent(k)+"="+encodeURIComponent(args[k]))
- }
- return url+"?"+list.join("&")
- },
- List: function(list, cb, cbs) {var res = [], val;
- for (var i = 0; i < list.length; i++) {
- typeof cb == "function"? (val = cb(list[i], i, list)) != undefined && res.push(val): res.push(list[i])
- }
- return typeof cbs == "function" && cbs(res), res
- },
- Item: function(list, cb, cbs) {
- for (var k in list) {
- cb(k, list[k])
- }
- },
- Value: function(item, key) {
- var p = item, ls = key.split(".")
- while (p && ls.length > 0) {
- p = p[ls[0]], ls = ls.slice(1)
- }
- return p
- },
-}
-
diff --git a/client/mp/utils/util.js b/client/mp/utils/util.js
deleted file mode 100644
index 4149ac48..00000000
--- a/client/mp/utils/util.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const formatTime = date => {
- const year = date.getFullYear()
- const month = date.getMonth() + 1
- const day = date.getDate()
- const hour = date.getHours()
- const minute = date.getMinutes()
- const second = date.getSeconds()
-
- return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
-}
-
-const formatNumber = n => {
- n = n.toString()
- return n[1] ? n : '0' + n
-}
-function Number(d, n) {var res = [];
- while (d > 0) {res.push(d % 10); d = parseInt(d / 10); n--}
- while (n > 0) {res.push("0"); n--}
- return res.reverse(), res.join("");
-}
-function Time(t, fmt) {var now = t? new Date(t): new Date();
- fmt = fmt || "%y-%m-%d %H:%M:%S";
- fmt = fmt.replace("%y", now.getFullYear())
- fmt = fmt.replace("%m", Number(now.getMonth()+1, 2))
- fmt = fmt.replace("%d", Number(now.getDate(), 2))
- fmt = fmt.replace("%H", Number(now.getHours(), 2))
- fmt = fmt.replace("%M", Number(now.getMinutes(), 2))
- fmt = fmt.replace("%S", Number(now.getSeconds(), 2))
- return fmt
-}
-function Args(url, args) {var list = []
- for (var k in args) {
- list.push(encodeURIComponent(k)+"="+encodeURIComponent(args[k]))
- }
- return url+"?"+list.join("&")
-}
-
-module.exports = {
- formatTime: formatTime,
- Time: Time,
- Args: Args,
- List: function(list, cb) {
- var res = [], val;
- for (var i = 0; i < list.length; i++) {
- typeof cb == "function"? (val = cb(list[i], i, list)) != undefined && res.push(val): res.push(list[i])
-
- }
- return res
- },
-}
diff --git a/favicon.png b/favicon.png
deleted file mode 100644
index dd62b405..00000000
Binary files a/favicon.png and /dev/null differ
diff --git a/frame.js b/frame.js
index bf01ca25..966b09a8 100644
--- a/frame.js
+++ b/frame.js
@@ -3,14 +3,14 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
can.onappend._init(can, item, item.list, function(pane) {
pane.Status = function(key, value) { pane.run({}, ["search", "Footer.onimport."+key, value]) }
- pane.onaction && pane.onappend._action(pane, pane._action, item._action||pane.onaction.list)
+ pane.onaction && pane.onappend._action(pane, pane._action, item.action||pane.onaction.list)
pane.run = function(event, cmds, cb, silent) { var msg = pane.request(event); cmds = cmds || []
- return (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, msg, pane, cmds, function(msg) {
+ return (can.onengine[cmds[0]]||can.onengine[meta.main.engine]||can.onengine.remote)(event, can, msg, pane, cmds, function(msg) {
typeof cb == "function" && cb(msg)
})
}, can[item.name] = pane, next()
}, target)
- }, function() { can.onlayout._init(can, target)
+ }, function() {
can.require(meta.main.list, function(can) {
var pane = can[meta.main.name], msg = can.request({})
pane.onkeypop._init(pane, target), pane.onmotion._init(pane)
@@ -19,69 +19,31 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
})
})
},
- _daemon: function(can, name) {
- can.misc.WSS(can, "", {type: "chrome", name: name}, function(event, msg, cmd, arg) {
- if (msg.Option("_handle")) { return can.user.toast(can, msg.result.join("")) }
- can.user.toast(can, msg.detail.join(" "))
-
- switch (cmd) {
- case "pwd":
- msg.Echo("hello world")
- break
- default:
- can.run(event, ["search"].concat(msg.detail), function(msg) {
- msg.Reply(msg)
- })
- return
- }
- msg.Reply(msg)
- }, function() { can.user.toast(can, "wss connect", "iceberg") })
+ _daemon: function(can, name, cb) {
+ can.misc.WSS(can, {type: "chrome", name: name}, cb||function(event, msg, cmd, arg) {
+ msg && can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) {
+ msg.Reply()
+ })
+ })
},
search: function(event, can, msg, pane, cmds, cb) {
- var sub, mod = can, fun = can; can.core.List(cmds[1].split("."), function(value, index, array) {
- fun && (sub = mod, mod = fun, fun = mod[value])
- }); if (!sub || !mod || !fun) { console.info("not found", cmds[1]); return }
- return typeof fun == "function" && fun(sub, msg, cmds.slice(2), cb, sub._target)
+ var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split("."), function(value) {
+ fun && (sub = mod, mod = fun, fun = mod[value], key = value)
+ }); if (!sub || !mod || !fun) { can.base.Warn("not found", cmds[1]); return }
+
+ return can.core.CallFunc(fun, {
+ "event": event, "can": sub, "msg": msg,
+ "cmd": key, "button": key, "cmds": cmds.slice(2),
+ "list": cmds.slice(2), "cb": cb, "target": sub._target,
+ }, mod)
},
remote: function(event, can, msg, pane, cmds, cb) {
- if (can.onengine.engine(event, can, msg, pane, cmds, cb)) { return }
+ if (pane.onengine.engine(event, can, msg, pane, cmds, cb)) { return }
can.misc.Run(event, can, {names: pane._name}, cmds, cb)
pane.run(event, ["search", "Footer.onimport.ncmd"])
- },
- engine: function(event, can, msg, pane, cmds, cb) {
- switch (pane._name) {
- case "River":
- cmds.length == 0 && can.core.Item(can.onengine.river, function(key, value) {
- msg.Push({hash: key, name: value.name})
- }); if (cmds.length != 1 && cmds[1] != "tool") { return false }
+ }, engine: function(event, can, msg, pane, cmds, cb) { return false },
- var river = can.onengine.river[cmds[0]]; if (!river) { return false }
- can.core.Item(river.storm, function(key, value) {
- msg.Push({hash: key, name: value.name})
- }), typeof cb == "function" && cb(msg); return true
-
- case "Action":
- var river = can.onengine.river[cmds[0]]
- var storm = river && river.storm[cmds[1]]
- if (!storm || cmds.length != 2) { break }
-
- if (storm.index) {
- can.misc.Run(event, can, {names: pane._name}, ["action", "command"].concat(storm.index), cb)
- } else {
- can.core.List(storm.action, function(value) {
- msg.Push("name", value.name||"")
- msg.Push("help", value.help||"")
- msg.Push("inputs", JSON.stringify(value.inputs||[]))
- msg.Push("feature", JSON.stringify(value.feature||{}))
- msg.Push("index", value.index||"")
- msg.Push("args", value.args||"[]")
- }), typeof cb == "function" && cb(msg)
- }
- return true
- }
- return false
- },
river: {
"serivce": {name: "运营群", storm: {
"wx": {name: "公众号 wx", action: [
@@ -201,6 +163,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var action = can.page.Select(can, field, "div.action")[0]
var output = can.page.Select(can, field, "div.output")[0]
var status = can.page.Select(can, field, "div.status")[0]
+ can.core.Value(meta, {"width": can._width, "height": can._height})
var sub = Volcanos(meta.name, {_follow: can._follow+"."+meta.name,
_legend: legend, _option: option, _action: action, _output: output, _status: status,
@@ -282,7 +245,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
item === ""? /*空白*/ can.page.Append(can, action, [{view: "item space"}]):
typeof item == "string"? /*按键*/ can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) {
var cb = can.onaction[item] || can.onaction["_engine"] || can.onkeymap && can.onkeymap._remote
- cb? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true)
+ typeof cb == "function"? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true)
}}): item.length > 0? /*列表*/ can.onappend.input(can, action, "input", {type: "select", name: item[0], values: item.slice(1), title: item[0], onchange: function(event) {
var which = item[event.target.selectedIndex+1]
var cb = can.onaction[which]
@@ -302,7 +265,6 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.run(event, cmds||[], function(msg) {
if (can.onimport._process(can, msg, cmds, cb)) { return }
-
typeof cb == "function" && cb(msg)
if (silent) { return }
@@ -331,7 +293,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
},
_detail: function(can, target, list, cb) {
list.length > 0 && (target.oncontextmenu = function(event) {
- can.user.carte(can, can.ondetail||{}, list, function(ev, item, meta) {
+ can.user.carte(event, can, can.ondetail||{}, list, function(ev, item, meta) {
(cb||can.ondetail[item]||can.onaction[item])(event, can, item)
})
})
@@ -346,7 +308,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
item: function(can, target, type, item, cb, cbs) {
var ui = can.page.Append(can, target, [{view: [type, "div", item.nick||item.name],
- click: function(event) {
+ onclick: function(event) {
can.page.Select(can, target, "div."+type, function(item) {
can.page.ClassList.del(can, item, "select")
}), can.page.ClassList.add(can, ui.item, "select")
@@ -426,61 +388,58 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return text && can.page.Append(can, target, [{view: ["code", "div", text]}]).code
},
- plugin: function(can, value, cb, target) { value = value || {}
- can.run({}, ["action", "command", value.index], function(msg) {
- value.feature = can.base.Obj(msg.meta&&msg.meta[0] || "{}", {})
- value.inputs = can.base.Obj(msg.list&&msg.list[0] || "[]", [])
+ plugin: function(can, meta, cb, target) { meta = meta || {}
+ can.run({}, ["action", "command", meta.index], function(msg) {
+ meta.feature = can.base.Obj(msg.meta&&msg.meta[0] || "{}", {})
+ meta.inputs = can.base.Obj(msg.list&&msg.list[0] || "[]", [])
- value.name = value.name || msg.name&&msg.name[0] || "story"
- value.help = value.help || msg.help&&msg.help[0] || "story"
- value.width = can._target.offsetWidth
- value.type = "story"
+ meta.name = meta.name || msg.name&&msg.name[0] || "story"
+ meta.help = meta.help || msg.help&&msg.help[0] || "story"
+ meta.width = can._target.offsetWidth
+ meta.type = "story"
- can.onappend._init(can, value, ["/plugin/state.js"], function(story) {
+ can.onappend._init(can, meta, ["/plugin/state.js"], function(story) {
+ typeof cb == "function" && cb(story, meta)
story.page.Remove(story, story._legend)
- typeof cb == "function" && cb(story, value)
}, target || can._output)
}, true)
},
}, [], function(can) {})
-Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, target) {
- if (can.user.Search(can, "share")) { return }
- var width = can._width, height = can._height
-
- can.page.Select(can, target, "fieldset.head", function(field) {
- height -= field.offsetHeight + 15
- })
- can.page.Select(can, target, "fieldset.foot", function(field) {
+Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, target, width, height) {
+ can.page.Select(can, target, ["fieldset.head", "fieldset.foot"], function(field) {
+ can.page.Modify(can, field, {style: {display: can.user.isMobile && width > height? "none": ""}})
height -= field.offsetHeight
})
- can.page.Select(can, target, ["fieldset.middle"], function(field, index) {
- var border = field.offsetHeight - field.clientHeight
- can.page.Modify(can, field, { style: {
- height: height-border*2+"px",
- } })
- can.page.Select(can, field, "div.output", function(output) {
- var border = output.offsetHeight - output.clientHeight
- can.page.Modify(can, output, { style: {
- height: height-border*2-14+"px",
- } })
- })
- })
-
can.page.Select(can, target, ["fieldset.left", "fieldset.right"], function(field, index) {
var border = field.offsetHeight - field.clientHeight
- can.page.Modify(can, field, { style: {
- height: height-border*2+"px",
- } })
+ can.page.Modify(can, field, {style: {height: height-4}})
can.page.Select(can, field, "div.output", function(output) {
var border = output.offsetHeight - output.clientHeight
- can.page.Modify(can, output, { style: {
- height: height-border*2-40+"px",
- } })
+ can.page.Modify(can, output, {style: {height: height-26}})
})
+
+ width -= field.offsetWidth
+ })
+
+ can.Action._width = width, can.Action._height = height
+
+ if (can.user.isMobile) { return }
+ can.page.Select(can, target, ["fieldset.middle"], function(field, index) {
+ var border = field.offsetHeight - field.clientHeight
+ can.page.Modify(can, field, {style: {height: height-border*2}})
+ })
+ can.page.Select(can, target, ["fieldset.middle>div.output"], function(output) {
+ var border = output.offsetHeight - output.clientHeight
+ can.page.Modify(can, output, {style: {height: height-border*2-14}})
+ })
+
+ can.core.List(can.onlayout.resize.list, function(item) {
+ item(width, height)
})
},
+ resize: shy("", {}, [], function(cb) { arguments.callee.list.push(cb) }),
})
Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, target) {
can.core.Item(can.onkeypop._mode, function(item, value) { var engine = {}
@@ -500,7 +459,8 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
}
},
_parse: function(event, can, target, mode, list) {
- event.key.length == 1 && list.push(event.key)
+ // event.key.length == 1 &&
+ list.push(event.key)
can.Status && can.Status("keys", list.join(""))
for (var pre = 0; pre < list.length; pre++) {
@@ -532,7 +492,8 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
normal: {
j: function(event, can, target) { target.scrollBy(0, 30) },
k: function(event, can, target) { target.scrollBy(0, -30) },
- hello: function(event, can, target) { can.base.Log("nice") },
+ b: function(event, can, target) { can.run(event, ["search", "Header.onaction.black"]) },
+ w: function(event, can, target) { can.run(event, ["search", "Header.onaction.white"]) },
" ": function(event, can, target) {
can.page.Select(can, document.body, "fieldset.pane.Header div.search input", function(target) {
@@ -614,7 +575,7 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
},
}, _engine: {},
- input: function(event, can, local) { var target = event.target
+ input: function(event, can) { var target = event.target
target._keys = can.onkeypop._parse(event, can, target, event.ctrlKey? "insert_ctrl": "insert", target._keys||[])
if (target._keys.length == 0) { event.stopPropagation(), event.preventDefault() }
},
@@ -633,44 +594,6 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can) {
})
})
},
- modifys: function(can, target, cb) { var back = target.innerHTML
- var ui = can.page.Appends(can, target, [{type: "textarea", value: back, style: {height: "80px"}, onkeydown: function(event) {
- switch (event.key) {
- case "Enter":
- if (event.ctrlKey) { target.innerHTML = event.target.value
- if (event.target.value != back) {
- cb(event, event.target.value, back)
- }
- }
- break
- case "Escape":
- td.innerHTML = back
- break
- }
- }, onkeyup: function(event) {
-
- }}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
- },
- modify: function(can, target, cb) { var back = target.innerHTML
- var ui = can.page.Appends(can, target, [{type: "input", value: back, onkeydown: function(event) {
- switch (event.key) {
- case "Enter":
- target.innerHTML = event.target.value
- if (event.target.value != back) {
- cb(event, event.target.value, back)
- }
- break
- case "Escape":
- td.innerHTML = back
- break
- }
- }, onkeyup: function(event) {
-
- }}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
- },
- clear: function(can, target) { target = target || can._output
- target.innerHTML = ""
- },
show: function(can, time, cb, target) { target = target || can._target
time = typeof time == "object"? time: {value: 10, length: time||20}
@@ -687,7 +610,58 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can) {
can.page.Modify(can, target, {style: {opacity: 1-(index+1)/time.length}})
}, cb)
},
+ clear: function(can, target) {
+ can.page.Modify(can, target||can._output, "")
+ },
+ modify: function(can, target, cb) { var back = target.innerHTML
+ var ui = can.page.Appends(can, target, [{type: "input", value: back, onkeydown: function(event) {
+ switch (event.key) {
+ case "Enter":
+ target.innerHTML = event.target.value
+ if (event.target.value != back) {
+ cb(event, event.target.value, back)
+ }
+ break
+ case "Escape":
+ target.innerHTML = back
+ break
+ default:
+ can.onkeypop.input(event, can)
+ }
+ }}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
+ },
+ modifys: function(can, target, cb) { var back = target.innerHTML
+ var ui = can.page.Appends(can, target, [{type: "textarea", value: back, style: {height: "80px"}, onkeydown: function(event) {
+ switch (event.key) {
+ case "Enter":
+ if (event.ctrlKey) {
+ target.innerHTML = event.target.value
+ if (event.target.value != back) {
+ cb(event, event.target.value, back)
+ }
+ }
+ break
+ case "Escape":
+ target.innerHTML = back
+ break
+ default:
+ can.onkeypop.input(event, can)
+ }
+ }}]); ui.first.focus(), ui.first.setSelectionRange(0, -1)
+ },
+ autosize: function(can, msg, list, cb, target) {
+ can.page.Select(can, target, "div.output", function(item, index) {
+ index == 0 && (item.style.height = "")
+ }), target.style.height = ""
+ typeof cb == "function" && cb(msg)
+ },
+ hidden: function(can, msg, list, cb, target) {
+ can.page.Modify(can, target, {style: {display: "none"}})
+ },
+ toggle: function(can, msg, list, cb, target) {
+ can.page.Toggle(can, target)
+ },
move: function(can, target, layout) { var begin
target.onmousedown = function(event) {
begin = {x: event.x, y: event.y, left: layout.left, top: layout.top, width: layout.width, height: layout.height}
@@ -706,15 +680,5 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can) {
}
}
},
-
- toggle: function(can, msg, list, cb, target) {
- can.page.Toggle(can, target)
- },
- autosize: function(can, msg, list, cb, target) {
- can.page.Select(can, target, "div.output", function(item, index) {
- index == 0 && (item.style.height = "")
- })
- target.style.height = ""
- },
})
diff --git a/index.css b/index.css
index 7ce9c0cd..7dcc3045 100644
--- a/index.css
+++ b/index.css
@@ -1,3 +1,60 @@
+body.mobile fieldset.Header.head {
+ position:fixed;
+ width:-webkit-fill-available;
+ height:48px; font-size:24px;
+ background-color:#000000b8;
+ z-index:10;
+}
+body.mobile fieldset.Footer.foot {
+ position:fixed; bottom:0px;
+ width:-webkit-fill-available;
+ height:64px; font-size:24px;
+ background-color:#000000b8;
+ z-index:10;
+}
+body.mobile fieldset.Action fieldset>form.option {
+ padding:0 5px;
+ height:36px;
+ min-width:640px;
+}
+body.mobile fieldset.Action {
+ padding-top:48px;
+}
+body.mobile fieldset.River {
+ font-size:24px;
+ min-width:240px;
+ position:fixed;
+ z-index:10;
+ background-color:#243950bf;
+ top:56px;
+}
+body.mobile input {
+ font-size:18px;
+}
+body.mobile select {
+ font-size:18px;
+}
+
+fieldset.River>div.output div.list {
+ margin-left:8px;
+ padding-left:5px;
+}
+fieldset.River>div.output div.item {
+ border-left:solid 3px #00ffae;
+}
+fieldset.River>div.output div.list div.item {
+ border-left:solid 3px #ccdc4c;
+ background-color:#181d15;
+}
+fieldset.River>div.output div.list div.item:hover {
+ cursor:pointer;
+ background-color:#2e515f;
+}
+fieldset.River>div.output div.list div.item.select {
+ border-left:solid 3px #ccdc4c;
+ background-color:#2e515f;
+}
+
body {
margin:0; padding:0;
background:black;
@@ -32,6 +89,7 @@ table {
border:0; white-space: pre;
font-size:14px; font-family:monospace;
cursor:pointer; overflow: auto;
+ background:#04272f;
}
table tr:hover {
background-color:#0fbd45;
@@ -178,7 +236,6 @@ fieldset>div.output>pre.display:hover {
fieldset.input {
background-color:black;
position:fixed;
- left:0; top:0;
}
fieldset.input {
z-index:99;
@@ -190,10 +247,32 @@ fieldset.input.key {
z-index:101;
}
+fieldset.Header>div.output>div.menus {
+ margin-left:5px;
+ cursor:pointer;
+ float:left;
+}
+fieldset.Header>div.output>div.menus:hover {
+ background:gray;
+}
+div.menu {
+ position:absolute;
+ background:#295b61;
+ color:white;
+ padding:4px;
+}
+div.menu div.item {
+ padding:3px 12px;
+ cursor:pointer;
+}
+div.menu div.item:hover {
+ background:red;
+}
+
div.toast {
color:yellow;
background:#0e3369b3;
- border:solid 2px red;
+ border:solid 2px #0c8e4c;
position:fixed;
padding:5px;
z-index:100;
@@ -343,3 +422,4 @@ fieldset.max>form.option>div.item textarea.args {
width:500px;
height:120px;
}
+
diff --git a/index.html b/index.html
index 5820bdbb..f04bd182 100644
--- a/index.html
+++ b/index.html
@@ -1,6 +1,6 @@
-
+
volcanos
diff --git a/index.js b/index.js
index 3c4e805e..c04fc88f 100644
--- a/index.js
+++ b/index.js
@@ -1,9 +1,8 @@
-_can_name = ""
Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panes: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
{name: "Search", help: "搜索框", pos: "float"},
- {name: "River", help: "群聊组", pos: "left"},
+ {name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]},
{name: "Action", help: "工作台", pos: "middle"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd", "keys"]},
], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [
diff --git a/lib/base.js b/lib/base.js
index 9f084842..3e2809f6 100644
--- a/lib/base.js
+++ b/lib/base.js
@@ -8,6 +8,37 @@ Volcanos("base", {help: "基础模块",
}
},
+ URLMerge: function(url) { var args = {}
+ var arg = url.split("?")[1]||""
+ arg && arg.split("&").forEach(function(item) {
+ var ls = item.split("=")
+ args[decodeURIComponent(ls[0])] = decodeURIComponent(ls[1])
+ })
+ for (var i = 1; i < arguments.length; i++) {
+ switch (typeof arguments[i]) {
+ case "object":
+ if (arguments[i].length > 0) {
+ for (var j = 0; j < arguments[i].length; j += 2) {
+ args[arguments[i][j]] = arguments[i][j]
+ }
+ break
+ }
+ for (var k in arguments[i]) {
+ args[k] = arguments[i][k]
+ }
+ break
+ case "string":
+ args[arguments[i]] = arguments[i+1]
+ i++
+ break
+ }
+ }
+ var list = []; for (var k in args) {
+ list.push(encodeURIComponent(k)+"="+encodeURIComponent(args[k]))
+ }
+ return url.split("?")[0]+(list.length>0? "?"+list.join("&"): "")
+ },
+
Ext: function(file) { return (file.split("/").pop().split(".").pop()||"txt").toLowerCase() },
Path: function() { var res = ""
for (var i = 0; i < arguments.length; i++) {
@@ -98,24 +129,32 @@ Volcanos("base", {help: "基础模块",
return parseInt(size)
},
- _fileLine: function() { var obj = {}; Error.captureStackTrace(obj, arguments.callee); return obj.stack },
- FileLine: function(depth) { return this._fileLine().split("\n")[1+depth].trim() },
+ _fileLine: function() { var obj = {}
+ Error.captureStackTrace && Error.captureStackTrace(obj, arguments.callee)
+ return obj.stack || ""
+ },
+ fileLine: function(depth) {
+ return (this._fileLine().split("\n")[1+depth]||"").trim()
+ },
+ FileLine: function(depth, length) {
+ return this.fileLine(depth+1).split("/").slice(3).slice(-length).join("/").split(")")[0]
+ },
Log: function() {
- var args = [this.Time(), this.FileLine(2, 3).split("/").slice(3).slice(-length).join("/") ]
+ var args = [this.Time(null, "%H:%M:%S"), this.FileLine(2, 3)]
for (var i in arguments) { args.push(arguments[i]) }
console.log.apply(console, args)
},
- Logs: function() {
- var args = [this.Time()]
- for (var i in arguments) { args.push(arguments[i]) }
- args.push(this.FileLine(2, 3))
- console.log.apply(console, args)
- },
- Error: function() {
- var args = [this.Time()]
+ Warn: function() {
+ var args = [this.Time(null, "%H:%M:%S"), this.FileLine(2, 3), "error"]
for (var i in arguments) { args.push(arguments[i]) }
args.push("\n", this._fileLine().split("\n").slice(2).join("\n"))
console.log.apply(console, args)
},
+ Debug: function() {
+ var args = [this.Time(null, "%H:%M:%S"), this.FileLine(2, 3), "warn"]
+ for (var i in arguments) { args.push(arguments[i]) }
+ args.push(this.fileLine(2, 3))
+ console.log.apply(console, args)
+ },
})
diff --git a/lib/core.js b/lib/core.js
index d8dd78ef..7be259de 100644
--- a/lib/core.js
+++ b/lib/core.js
@@ -55,6 +55,35 @@ Volcanos("core", {help: "核心模块",
next(obj, cb, 0)
}),
+ Value: function(data, key, value) {
+ if (key == undefined) { return data }
+ if (typeof key == "object") { for (var k in key) {
+ arguments.callee.call(this, data, k, key[k])
+ }; return data }
+
+ if (value != undefined) { data[key] = value }
+ if (data[key] != undefined) { return data[key] }
+
+ var p = data, ls = key.split("."); while (p && ls.length > 0) {
+ p = p[ls[0]], ls = ls.slice(1)
+ }; return p
+ },
+ CallFunc: shy("调用器", function(func, args, mod) {
+ func = typeof func == "string"? this.Value(mod, func): func
+ if (typeof func != "function") { return }
+
+ var ls = func.toString(); ls = ls.split(")")[0], ls = ls.split("(")[1]
+
+ var echo = false
+ var list = []; this.List(ls.split(","), function(item) {
+ list.push(args[item.trim()]||args)
+ if (item == "cb") { echo = true}
+ })
+
+ var res = typeof func == "function" && func.apply(mod||this, list)
+ if (!echo && typeof args.cb == "function") { res && args.msg.Echo(res), args.cb(args.msg) }
+ return res
+ }),
Split: shy("分词器", function(str) { if (!str || !str.length) { return [] }
var opt = {simple: false}, arg = []; for (var i = 1; i < arguments.length; i++) {
typeof arguments[i] == "object"? opt = arguments[i]: arg.push(arguments[i])
diff --git a/lib/misc.js b/lib/misc.js
index 18ee02f6..1c0fd685 100644
--- a/lib/misc.js
+++ b/lib/misc.js
@@ -1,26 +1,22 @@
-Volcanos("misc", {help: "工具模块",
- Message: function(event, can) { var msg = {}
+Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg = {}
msg.__proto__ = {_event: event, _can: can,
Option: function(key, val) {
if (key == undefined) { return msg && msg.option || [] }
if (typeof key == "object") { can.core.Item(key, msg.Option) }
if (val == undefined) { return msg && msg[key] && msg[key][0] || "" }
msg.option = msg.option || [], can.core.List(msg.option, function(k) { if (k == key) { return k } }).length > 0 || msg.option.push(key)
- msg[key] = can.core.List(arguments).slice(1)
- return val
+ return msg[key] = can.core.List(arguments).slice(1), val
},
Append: function(key, val) {
if (key == undefined) { return msg && msg.append || [] }
if (typeof key == "object") { can.core.Item(key, msg.Append) }
if (val == undefined) { return msg && msg[key] && msg[key][0] || "" }
msg.append = msg.append || [], can.core.List(msg.append, function(k) { if (k == key) { return k } }).length > 0 || msg.append.push(key)
- msg[key] = can.core.List(arguments).slice(1)
- return val
+ return msg[key] = can.core.List(arguments).slice(1), val
},
- Result: function() {
- return msg.result && msg.result.join("") || ""
- },
- Table: function(cb) { if (!msg.append || !msg.append.length || !msg[msg.append[0]]) { return }
+ Result: function() { return msg.result && msg.result.join("") || "" },
+
+ Table: function(cb) { if (!msg.append || msg.append.length == 0 || !msg[msg.append[0]]) { return }
var max = "", len = 0; can.core.List(msg.append, function(key, index) {
if (msg[key] && msg[key].length > len) { max = key, len = msg[key].length }
})
@@ -34,11 +30,8 @@ Volcanos("misc", {help: "工具模块",
switch (key) {
case "append":
case "option":
- can.core.List(msg[key], function(item) {
- delete(msg[item])
- })
- default:
- msg[key] = []
+ can.core.List(msg[key], function(item) { delete(msg[item]) })
+ default: msg[key] = []
}
},
Copy: function(res) { if (!res) { return msg }
@@ -53,22 +46,19 @@ Volcanos("misc", {help: "工具模块",
},
Push: function(key, value, detail) { msg.append = msg.append || []
if (typeof key == "object") {
- value = value || can.core.Item(key)
- can.core.List(value, function(item) {
+ value = value || can.core.Item(key), can.core.List(value, function(item) {
detail? msg.Push("key", item).Push("value", key[item]||""):
msg.Push(item, key[item]||"")
})
- return
+ return msg
}
for (var i = 0; i < msg.append.length; i++) {
- if (msg.append[i] == key) {
- break
- }
- }
- if (i >= msg.append.length) { msg.append.push(key) }
+ if (msg.append[i] == key) { break }
+ }; i >= msg.append.length && msg.append.push(key)
+
msg[key] = msg[key] || []
- msg[key].push(""+(typeof value == "object"? JSON.stringify(value): value)+"")
+ msg[key].push(""+(typeof value == "string"? value: JSON.stringify(value))+"")
return msg
},
Echo: function(res) { msg.result = msg.result || []
@@ -79,130 +69,93 @@ Volcanos("misc", {help: "工具模块",
return msg
},
POST: shy("请求后端", {order: 0}, function(can, msg, url, form, cb) {
- var xhr = new XMLHttpRequest()
+ var xhr = new XMLHttpRequest(); msg._xhr = xhr
xhr.open("POST", url), xhr.onreadystatechange = function() {
- if (xhr.readyState != 4) {return}
+ if (xhr.readyState != 4) { return }
- switch (xhr.getResponseHeader("content-type")) {
- case "image/png":
- if (xhr.responseType != "blob") {
- msg.responseType = "blob"
- can.misc.POST(can, msg, url, form, cb)
- return
- }
- break
- default:
- try { // 解析响应
- var res = JSON.parse(xhr.responseText)
- } catch (e) {
- var res = {"result": [xhr.responseText]}
- }
+ try { // 解析响应
+ var res = JSON.parse(xhr.responseText)
+ } catch (e) {
+ var res = {"result": [xhr.responseText]}
}
xhr.status == 200 && typeof cb == "function" && cb(msg.Copy(res))
}
- if (msg.upload) {
- // 文件参数
+ if (msg.upload) { // 上传文件
var data = new FormData()
can.core.Items(form, function(value, index, key) {
- data.append(key, item)
+ data.append(key, value)
}), data.append("upload", msg.upload)
xhr.upload.onprogress = function(event) {
typeof msg._progress == "function" && msg._progress(event, parseInt(event.loaded*100/event.total), event.total, event.loaded)
}
- } else {
- // 表单参数
+ } else { // 请求数据
var data = can.core.Items(form, function(value, index, key) {
return key+"="+encodeURIComponent(value)
}).join("&")
+
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
// 发送请求
- ++arguments.callee.meta.order
xhr.setRequestHeader("Accept", "application/json")
- xhr.responseType = msg.responseType || ""
- try {
- xhr.send(data)
- } catch(e) {
- console.error(e)
- cb == "function" && cb(msg)
- }
- msg._xhr = xhr
+ try { xhr.send(data) } catch(e) { can.base.Log(e) }
}),
- Run: shy("请求后端", {order: 0}, function(event, can, dataset, cmd, cb) {
+ Run: shy("请求后端", {order: 0}, function(event, can, dataset, cmds, cb) {
var msg = can.request(event = event || {})
-
- // 解析参数
- var option = {cmds: cmd||msg.cmd}
+ var form = {cmds: cmds||msg.cmd}
msg.option && msg.option.forEach(function(item) {
- msg[item] && (option[item] = msg[item])
- })
- msg.option = can.core.Item(option, function(key, value) {
- return msg[key] = value, key
+ msg[item] && (form[item] = msg[item])
})
- msg._hand = true, can.misc.POST(can, msg, can.Conf("iceberg")+(msg.names||dataset.names||event.names||"").toLowerCase()+"?="+(msg._can.sup||msg._can)._name, option, function(msg) {
+ can.misc.POST(can, msg, can.Conf("iceberg")+dataset.names.toLowerCase()+"?="+(msg._can.sup||msg._can)._name, form, function(msg) {
typeof cb == "function" && cb(msg)
- }), delete(event.msg)
+ })
}),
- WSS: shy("请求后端", {order: 0}, function(can, url, args, cb, onopen, onerror, onclose) {var meta = arguments.callee.meta
- if (url.indexOf("ws") == -1) {
- url = location.protocol.replace("http", "ws")+"//"+location.host+"/space/" + (url||"")
- }
- if (url.indexOf("chrome") == 0) {
- url = "ws://localhost:9020/space/"
- }
+ WSS: shy("请求后端", {order: 0}, function(can, args, cb, onopen, onclose, onerror) {
+ var url = location.protocol.replace("http", "ws")+"//"+location.host+"/space/"
+ if (url.indexOf("chrome") == 0) { url = "ws://localhost:9020/space/" }
- if (can._socket) {return can._socket}
- args["share"] = can._share || ""
- can._socket = new WebSocket(url+"?"+can.base.Args(args))
-
- can._socket.onclose = onclose || function() {if (!can._socket) {return}
- console.log("socket close")
-
- delete(can._socket), setTimeout(function() {
- // 断线重连
+ var socket = new WebSocket(can.base.URLMerge(url, args))
+ socket.onclose = function() { can.base.Log("wss", "close", args)
+ typeof onclose == "function"? onclose(socket): can.core.Timer(1000, function() {
can.misc.WSS(can, url, args, cb, onopen, onerror, onclose)
- }, 1000)
- }, can._socket.onerror = onerror || function() {if (!can._socket) {return}
- console.log("socket error")
-
- can._socket.close(), delete(can._socket), setTimeout(function() {
- // 断线重连
- can.misc.WSS(can, url, args, cb, onerror, onclose, onopen)
- }, 1000)
- }, can._socket.onopen = onopen || function() {
+ })
+ }, socket.onerror = function() { can.base.Log("wss", "error", args)
+ typeof onerror == "function"? onerror(socket): socket.close()
+ }, socket.onopen = function() { can.base.Log("wss", "open", args)
+ typeof onopen == "function" && onopen(socket)
}
- can._socket.onmessage = function(event) {var order = ++meta.order
+ socket.onmessage = function(event) {
try { // 解析命令
var data = JSON.parse(event.data)
} catch (e) {
- var data = {"result": [event.data]}
+ var data = {"detail": [event.data]}
}
var msg = can.request(event); msg.Reply = function() {
+ msg.result = (msg.result||[]).concat(can.core.List(arguments))
+
// 回复命令
delete(msg._can)
delete(msg._event)
msg.Option("_handle", true)
msg.Option("_target", msg.Option("_source"))
- console.log(["wss", order, "result"].concat(msg.result).concat([msg]))
- can._socket.send(JSON.stringify(msg))
+ can.base.Log("wss", "result", msg.result, msg)
+ socket.send(JSON.stringify(msg))
}, msg.detail = data.detail, msg.Copy(data)
try { // 执行命令
- console.log(["wss", order].concat(msg.detail).concat([msg]))
+ can.base.Log("wss", "detail", msg.detail, msg)
typeof cb == "function" && cb(event, msg, msg.detail[0], msg.detail.slice(1))
-
} catch (e) { // 执行失败
- console.log(e)
+ can.base.Log(e)
+ msg.Reply(e)
}
}
- return can._socket
}),
})
diff --git a/lib/page.js b/lib/page.js
index c853e71c..a615e2bb 100644
--- a/lib/page.js
+++ b/lib/page.js
@@ -1,20 +1,20 @@
Volcanos("page", {help: "网页模块",
ClassList: {
- has: function(can, obj, key) {var list = obj.className? obj.className.split(" "): [];
+ has: function(can, obj, key) {var list = obj.className? obj.className.split(" "): []
for (var i = 2; i < arguments.length; i++) {
if (list.indexOf(arguments[i]) == -1) {return false}
}
- return true;
+ return true
},
add: function(can, obj, key) {var list = obj.className? obj.className.split(" "): []
return obj.className = list.concat(can.core.List(key, function(value, index) {
- return list.indexOf(value) == -1? value: undefined;
- })).join(" ").trim();
+ return list.indexOf(value) == -1? value: undefined
+ })).join(" ").trim()
},
del: function(can, obj, key) {var list = can.core.List(arguments, function(value, index) {return index > 0? value: undefined})
return obj.className = can.core.List(obj.className.split(" "), function(value) {
- return list.indexOf(value) == -1? value: undefined;
- }).join(" ").trim();
+ return list.indexOf(value) == -1? value: undefined
+ }).join(" ").trim()
},
set: function(can, obj, key, condition) {
condition? can.page.ClassList.add(can, obj, key): can.page.ClassList.del(can, obj, key)
@@ -25,11 +25,11 @@ Volcanos("page", {help: "网页模块",
},
Select: shy("选择节点", function(can, obj, key, cb, interval, cbs) {if (key == ".") {return []}
- var item = obj && obj.querySelectorAll(key);
- return can.core.List(item, cb, interval, cbs);
+ var item = obj && obj.querySelectorAll(key)
+ return can.core.List(item, cb, interval, cbs)
}),
Modify: shy("修改节点", function(can, target, value) {
- target = typeof target == "string"? document.querySelector(target): target;
+ target = typeof target == "string"? document.querySelector(target): target
typeof value == "string"? (target.innerHTML = value): can.core.Item(value, function(key, value) {
typeof value != "object"? (target[key] = value): can.core.Item(value, function(sub, value) {
var size = {
@@ -38,29 +38,27 @@ Volcanos("page", {help: "网页模块",
"left": true, "right": true, "top": true, "bottom": true,
"margin-top": true, "margin-left": true,
}
- if (size[sub] && (typeof value == "number" || !value.endsWith("px"))) {
+ if (size[sub] && value && (typeof value == "number" || !value.endsWith("px"))) {
value += "px"
}
- target[key] && (target[key][sub] = value);
+ target[key] && (target[key][sub] = value)
})
- });
- return target;
+ })
+ return target
}),
Create: shy("创建节点", function(can, key, value) {
- return can.page.Modify(can, document.createElement(key), value);
+ return can.page.Modify(can, document.createElement(key), value)
}),
Append: shy("添加节点", function(can, target, key, value) {
- if (typeof key == "string") {var res = can.page.Create(can, key, value); return target.appendChild(res), res}
+ if (typeof key == "string") { var res = can.page.Create(can, key, value); return target.appendChild(res), res }
value = value || {}
- can.core.List(key, function(item, index) {if (!item) {return}
- if (item.nodeName) {
- target.appendChild(item)
- return
- }
+ can.core.List(key, function(item, index) { if (!item) { return }
+ if (item.nodeName) { target.appendChild(item); return }
+
// 基本结构: type name data list
- var type = item.type || "div", data = item.data || {};
- var name = item.name || data.name || "";
+ var type = item.type || "div", data = item.data || {}
+ var name = item.name || data.name || ""
// 数据调整
can.core.Item(item, function(key, value) {
@@ -71,111 +69,110 @@ Volcanos("page", {help: "网页模块",
case "list":
break
case "click":
- data.onclick = item.click;
+ data.onclick = item.click
break
case "inner":
- data.innerHTML = item.inner;
+ data.innerHTML = item.inner
break
default:
- data[key] = item[key];
+ data[key] = item[key]
}
})
- if (item.view) {var list = can.core.List(item.view);
- (list.length > 0 && list[0]) && can.page.ClassList.add(can, data, list[0]);
- type = list[1] || "div";
- data.innerHTML = list[2] || data.innerHTML || "";
- name = name || list[3] || "";
+ if (item.view) { var list = can.core.List(item.view)
+ list.length > 0 && list[0] && can.page.ClassList.add(can, data, list[0])
+ type = list[1] || "div"
+ data.innerHTML = can.user.trans(can, list[2]) || data.innerHTML || ""
+ name = name || list[3] || ""
- } else if (item.text) {var list = can.core.List(item.text);
- data.innerHTML = list[0] || data.innerHTML || "";
- type = list[1] || "span";
- list.length > 2 && (data.className = list[2]);
+ } else if (item.text) { var list = can.core.List(item.text)
+ data.innerHTML = can.user.trans(can, list[0]) || data.innerHTML || ""
+ type = list[1] || "span"
+ list.length > 2 && list[2] && can.page.ClassList.add(can, data, list[2])
- } else if (item.button) {var list = can.core.List(item.button);
- type = "button", name = name || list[0];
- data.value = data.value || name;
- data.innerText = list[0], data.onclick = function(event) {
- typeof list[1] == "function" && list[1](event, name);
+ } else if (item.button) { var list = can.core.List(item.button)
+ type = "button", name = name || list[0]
+ data.value = data.value || name
+ data.innerText = can.user.trans(can, list[0]), data.onclick = function(event) {
+ typeof list[1] == "function" && list[1](event, name)
event.stopPropagation()
event.preventDefault()
return true
}
- } else if (item.select) {var list = item.select;
- type = "select", name = name || list[0][0];
+ } else if (item.select) { var list = item.select
+ type = "select", name = name || list[0][0]
data.onchange = function(event) {
- typeof list[1] == "function" && list[1](event, event.target.value, name);
+ typeof list[1] == "function" && list[1](event, event.target.value, name)
}
item.list = list[0].slice(1).map(function(value) {
- return {type: "option", value: value, inner: value};
+ return {type: "option", value: value, inner: can.user.trans(can, value)}
})
- data.className = data.className || list[0][0] || "";
- data.title = data.title || name;
- data.name = name;
+ data.className = data.className || list[0][0] || ""
+ data.title = can.user.trans(can, data.title || name)
+ data.name = name
- } else if (item.input) {var list = can.core.List(item.input)
+ } else if (item.input) { var list = can.core.List(item.input)
type = "input", name = name || list[0] || ""
data.name = data.name || name
data.className = data.className || data.name
data.placeholder = data.placeholder || data.name
- data.placeholder = data.placeholder.split(".").pop()
- data.title = data.title || data.placeholder
+ data.placeholder = can.user.trans(can, data.placeholder.split(".").pop())
+ data.title = can.user.trans(can, data.title || data.placeholder)
data.autocomplete = "none"
data.onfocus = data.onfocus || function(event) {
event.target.setSelectionRange(0, -1)
}
data.onkeydown = function(event) {
- typeof list[1] == "function" && list[1](event);
+ typeof list[1] == "function" && list[1](event)
}
data.onkeyup = function(event) {
- typeof list[2] == "function" && list[2](event);
+ typeof list[2] == "function" && list[2](event)
}
- } else if (item.username) {var list = can.core.List(item.username);
- type = "input", name = name || list[0] || "username";
- data.name = data.name || name;
- data.className = list[1] || data.className || data.name;
- data.placeholder = data.placeholder || data.name;
- data.title = data.title || data.placeholder;
+ } else if (item.username) { var list = can.core.List(item.username)
+ type = "input", name = name || list[0] || "username"
+ data.name = data.name || name
+ data.className = list[1] || data.className || data.name
+ data.placeholder = data.placeholder || data.name
+ data.title = data.title || data.placeholder
data.autocomplete = data.autocomplete || "username"
- } else if (item.password) {var list = can.core.List(item.password);
- type = "input", name = name || list[0] || "password";
+ } else if (item.password) { var list = can.core.List(item.password)
+ type = "input", name = name || list[0] || "password"
data.type = "password"
- data.name = data.name || name;
- data.className = list[1], data.className || data.name;
- data.placeholder = data.placeholder || data.name;
- data.title = data.title || data.placeholder;
+ data.name = data.name || name
+ data.className = list[1], data.className || data.name
+ data.placeholder = data.placeholder || data.name
+ data.title = data.title || data.placeholder
data.autocomplete = data.autocomplete || "current-password"
- } else if (item.img) {var list = can.core.List(item.img);
- type = "img";
- data.src = list[0];
+ } else if (item.img) { var list = can.core.List(item.img)
+ type = "img"
+ data.src = list[0]
- } else if (item.row) {type = "tr";
+ } else if (item.row) { type = "tr"
item.list = item.row.map(function(text) {return {text: [text, item.sub||"td"]}})
- } else if (item.th) {type = "tr";
+ } else if (item.th) { type = "tr"
item.list = item.th.map(function(text) {return {text: [text, "th"]}})
- } else if (item.td) {type = "tr";
+ } else if (item.td) { type = "tr"
item.list = item.td.map(function(text) {return {text: [text, "td"]}})
} else if (item.include) {var list = can.core.List(item.include)
- type = "script";
- data.src = list[0];
- data.onload = list[1];
+ type = "script"
+ data.src = list[0]
+ data.onload = list[1]
}
-
-
// 创建节点
- name = name || data.className || type || "";
+ name = name || data.className || type || ""
!data.name && item.name && (data.name = item.name)
var node = can.page.Create(can, type, data)
+
value.last = node, value.first = value.first || node, value[name||""] = value[data.className||""] = value[type] = node
item.list && can.page.Append(can, node, item.list, value)
- target && target.append && target.append(node)
typeof item._init == "function" && item._init(node)
+ target && target.append && target.append(node)
})
return value
}),
@@ -199,24 +196,24 @@ Volcanos("page", {help: "网页模块",
AppendTable: shy("添加表格", function(can, msg, target, list, cb) {
if (!msg.append || msg.append.length == 0) {return}
- var table = can.page.Append(can, target, "table");
- var tr = can.page.Append(can, table, "tr", {dataset: {index: -1}});
+ var table = can.page.Append(can, target, "table")
+ var tr = can.page.Append(can, table, "tr", {dataset: {index: -1}})
can.core.List(list, function(key, index) {if (key.indexOf("_") == 0) {return}
key = can.Conf("feature.table.trans."+key) || {}[key] || key
can.page.Append(can, tr, "th", key.trim()).onclick = function(event) {
- var dataset = event.target.dataset;
- dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1;
- can.page.RangeTable(can, table, index, dataset["sort_asc"] == "1");
+ var dataset = event.target.dataset
+ dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1
+ can.page.RangeTable(can, table, index, dataset["sort_asc"] == "1")
}
- });
+ })
can.page.Append(can, table, can.core.List(msg.Table(), function(line, index, array) {
return {type: "tr", dataset: {index: index}, list: can.core.List(list, function(key) {if (key.indexOf("_") == 0) {return}
return cb(can.page.Display(line[key]).trim(), key, index, line, array)
})}
}))
- return table;
+ return table
}),
RangeTable: function(can, table, index, sort_asc) {
var list = can.page.Select(can, table, "tr", function(tr) {
@@ -238,7 +235,7 @@ Volcanos("page", {help: "网页模块",
// 选择排序
for (var i = 0; i < num_list.length; i++) {
- var min = i;
+ var min = i
for (var j = i+1; j < num_list.length; j++) {
if (sort_asc? num_list[min] <= num_list[j]: num_list[min] >= num_list[j]) {
min = j
@@ -262,9 +259,9 @@ Volcanos("page", {help: "网页模块",
OrderTable: function(can, table) {
can.page.Select(can, table, "th", function(th, index) {
table.onclick = function(event) {
- var dataset = event.target.dataset;
- dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1;
- can.page.RangeTable(can, table, index, dataset["sort_asc"] == "1");
+ var dataset = event.target.dataset
+ dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1
+ can.page.RangeTable(can, table, index, dataset["sort_asc"] == "1")
}
})
},
@@ -286,7 +283,7 @@ Volcanos("page", {help: "网页模块",
text = text.replace(/\033\[0m/g, "")
text = text.replace(/\033\[m/g, "")
text = text.replace(/\\n/g, "
")
- return text;
+ return text
},
Format: function(type) {
switch (type) {
@@ -373,21 +370,21 @@ Volcanos("page", {help: "网页模块",
},
Prepos: function(event, item, p, q) {
var max = 20
- p = p || item.getBoundingClientRect();
+ p = p || item.getBoundingClientRect()
q = q || {x: event.clientX, y: event.clientY}
- var pos = 5;
+ var pos = 5
var y = (q.y - p.y) / p.height
if (y < 0.2 && q.y - p.y < max) {
- pos -= 3;
+ pos -= 3
} else if (y > 0.8 && q.y - p.y - p.height > -max) {
- pos += 3;
+ pos += 3
}
var x = (q.x - p.x) / p.width
if (x < 0.2 && q.x - p.x < max) {
- pos -= 1;
+ pos -= 1
} else if (x > 0.8 && q.x - p.x - p.width > -max) {
- pos += 1;
+ pos += 1
}
var cursor = [
diff --git a/lib/user.js b/lib/user.js
index a21c717a..5f2f3442 100644
--- a/lib/user.js
+++ b/lib/user.js
@@ -47,8 +47,12 @@ Volcanos("user", {help: "用户模块", agent: {
can.user.toast(can, {text: text, title: "复制成功", width: 400})
},
+ trans: function(can, text) {
+ return can._trans && can._trans[text] || text
+ },
topic: function(can, name) {
can.page.Modify(can, document.body, {className: name})
+ if (can.user.isMobile) { can.page.ClassList.add(can, document.body, "mobile") }
},
toast: function(can, text, title, duration, progress) {
var meta = typeof text == "object"? text: {text: text, title: title||can._help, duration: duration, progress: progress}
@@ -82,29 +86,6 @@ Volcanos("user", {help: "用户模块", agent: {
}]}] })
})
},
- carte: function(can, meta, list, cb) { meta = meta || can.ondetail, list = list && list.length > 0? list: meta.list; if (list.length == 0) { return }
- meta = meta||can.ondetail||{}, cb = cb||function(ev, item, meta) {
- var cb = can.ondetail[item] || can.onaction[item] || can.onkeymap&&can.onkeymap._remote
- cb && cb(event, can, item)
- }
-
- var x = event.clientX, y = event.clientY; y += 0; if (x > 600) { x -= 20 }
- var ui = can.page.Append(can, document.body, [{view: "carte", style: {left: x+"px", top: y+"px"}, onmouseleave: function(event) {
- can.page.Remove(can, ui.first)
- }, list: can.core.List(list, function(item) {
- return {view: "item", list: [typeof item == "string"? /* button */ {text: item, click: function(event) {
- typeof cb == "function" && cb(event, item, meta)
- }}: item.args? /* input */ {text: item.name, click: function(event) {
- can.user.input(event, can, item.args, cb)
- }}: /* select */ {select: [item, function(event) {
- typeof cb == "function" && cb(event, event.target.value, meta)
- }]} ]}
- }) }])
-
- event.stopPropagation()
- event.preventDefault()
- return ui
- },
login: function(can, cb) {
var ui = can.user.input({clientX: 200, clientY: 100}, can, [
{username: "username", name: "用户"},
@@ -124,6 +105,31 @@ Volcanos("user", {help: "用户模块", agent: {
// TODO
})
},
+ carte: function(event, can, meta, list, cb) {
+ meta = meta||can.ondetail||can.onaction||{}, list = list&&list.length > 0? list: meta.list||[]; if (list.length == 0) { return }
+ cb = cb||function(ev, item, meta) {
+ var cb = meta[item] || can.ondetail&&can.ondetail[item] || can.onaction&&can.onaction[item] || can.onkeymap&&can.onkeymap._remote
+ typeof cb == "function" && cb(event, can, item)
+ }
+
+ var x = event.clientX, y = event.clientY; y += 0; if (x > 600) { x -= 20 }
+
+ var ui = can.page.Append(can, document.body, [{view: "carte", style: {left: x, top: y}, onmouseleave: function(event) {
+ can.page.Remove(can, ui.first)
+ }, list: can.core.List(list, function(item) {
+ return {view: "item", list: [typeof item == "string"? /* button */ {text: item, click: function(event) {
+ typeof cb == "function" && cb(event, item, meta)
+ }}: item.args? /* input */ {text: item.name, click: function(event) {
+ can.user.input(event, can, item.args, cb)
+ }}: /* select */ {select: [item, function(event) {
+ typeof cb == "function" && cb(event, event.target.value, meta)
+ }]} ]}
+ }) }])
+
+ event.stopPropagation()
+ event.preventDefault()
+ return ui
+ },
input: function(event, can, form, cb) { // form [ string, {_input: }, array, object, button ]
function cbs(event, button) {
var data = {}; var list = can.page.Select(can, ui.table, "select,input,textarea", function(item) {
@@ -136,6 +142,7 @@ Volcanos("user", {help: "用户模块", agent: {
var msg = can.request(event)
var x = event.clientX, y = event.clientY; y += 10; if (x > 600) { x -= 160 }
+ if (can.user.isMobile) { x = 100, y = 100 }
var button; var ui = can.page.Append(can, document.body, [{view: ["input", "fieldset"], style: {left: x+"px", top: y+"px"}, list: [
{view: ["option", "table"], list: can.core.List(form, function(item) {
if (item.button) { button = can.core.List(item.button, function(item) {
@@ -193,6 +200,7 @@ Volcanos("user", {help: "用户模块", agent: {
},
upload: function(event, can) { var begin = new Date()
var x = event.clientX, y = event.clientY; y += 10; if (x > 400) { x -= 200 }
+ if (can.user.isMobile) { x = 100, y = 100 }
var ui = can.page.Append(can, document.body, [{view: "upload", style: {left: x+"px", top: y+"px"}, list: [
{view: "action"}, {view: "output"},
]}])
diff --git a/manifest.json b/manifest.json
index a4680f19..e7324870 100644
--- a/manifest.json
+++ b/manifest.json
@@ -7,21 +7,22 @@
"48": "favicon.png",
"128": "favicon.png"
},
- "background": {"page": "/chrome/chrome.html"},
+ "background": {"page": "/publish/chrome/chrome.html"},
"browser_action": {
"default_icon": "/favicon.png",
- "default_popup": "/chrome/popup.html"
+ "default_popup": "/publish/chrome/popup.html"
},
"content_scripts": [
{
- "matches": [ "" ],
+ "matches": [""],
"js": ["/proto.js",
"/lib/base.js",
"/lib/core.js",
"/lib/misc.js",
"/lib/page.js",
"/lib/user.js",
- "/chrome/contexts.js"]
+ "/publish/chrome/contexts.js"
+ ]
}
],
"permissions": [
diff --git a/pane/Action.css b/pane/Action.css
index 87820dd4..4dd357e8 100644
--- a/pane/Action.css
+++ b/pane/Action.css
@@ -9,6 +9,8 @@ fieldset.Action>div.output {
fieldset.Action fieldset.plugin {
margin:5px;
+ background-color:#113c4a;
+ box-shadow: 4px 4px 10px 4px #626bd0;
}
fieldset.Action fieldset.plugin:hover {
border-color:red;
diff --git a/pane/Action.js b/pane/Action.js
index ded67062..5d995d27 100644
--- a/pane/Action.js
+++ b/pane/Action.js
@@ -1,5 +1,8 @@
(function() { const RIVER = "river", STORM = "storm", ACTION = "action"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
+ can._target.ontouchstart = function(event) {
+ can.run({}, ["search", "River.onmotion.hidden"])
+ }
var river = can.Conf(RIVER), storm = can.Conf(STORM)
can.onmotion.clear(can), can.core.Next(msg.Table(), function(value, next) {
value.feature = can.base.Obj(value.feature||value.meta||"{}", {})
@@ -30,6 +33,27 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, target)
},
})
+Volcanos("onengine", {help: "解析引擎", list: [],
+ engine: function(event, can, msg, pane, cmds, cb) {
+ var river = can.onengine.river[cmds[0]]
+ var storm = river && river.storm[cmds[1]]
+ if (!storm || cmds.length != 2) { return false }
+
+ if (storm.index) {
+ can.misc.Run(event, can, {names: pane._name}, ["action", "command"].concat(storm.index), cb)
+ } else {
+ can.core.List(storm.action, function(value) {
+ msg.Push("name", value.name||"")
+ msg.Push("help", value.help||"")
+ msg.Push("inputs", JSON.stringify(value.inputs||[]))
+ msg.Push("feature", JSON.stringify(value.feature||{}))
+ msg.Push("index", value.index||"")
+ msg.Push("args", value.args||"[]")
+ }), typeof cb == "function" && cb(msg)
+ }
+ return true
+ },
+})
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
can.page.Cache(can.Conf(RIVER)+"."+can.Conf(STORM), can._output, can._output.scrollTop+1)
var river = can.Conf(RIVER, msg.Option(RIVER)), storm = can.Conf(STORM, msg.Option(STORM))
diff --git a/pane/Footer.js b/pane/Footer.js
index bac4c3e6..9ab32b72 100644
--- a/pane/Footer.js
+++ b/pane/Footer.js
@@ -5,7 +5,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
},
_title: function(can, msg, target) {
- can.core.List(msg.result, function(title) {
+ can.user.isMobile || can.core.List(msg.result, function(title) {
can.page.Append(can, target, [{view: ["title", "div", title]}])
})
},
diff --git a/pane/Header.css b/pane/Header.css
index ea77d05f..27b61193 100644
--- a/pane/Header.css
+++ b/pane/Header.css
@@ -11,8 +11,7 @@ fieldset.Header>div.output>div.title {
float:left;
}
fieldset.Header>div.output>div.title:hover {
- background-color:red;
- border:ridge 2px yellow;
+ background-color:#2e515f;
}
fieldset.Header>div.output>div.search {
margin-left:20px;
@@ -35,7 +34,7 @@ fieldset.Header>div.output>div.state {
float:right;
}
fieldset.Header>div.output>div.state:hover {
- background-color:red;
+ background-color:#2e515f;
}
body.white fieldset.Header {
diff --git a/pane/Header.js b/pane/Header.js
index 1fe0f3f1..1f4e5983 100644
--- a/pane/Header.js
+++ b/pane/Header.js
@@ -1,5 +1,13 @@
(function() { const TITLE = "title", TOPIC = "topic", POD = "pod", STATE = "state", USERNAME = "username"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
+ can._trans = {
+ "river": "菜单",
+ "setting": "设置",
+ "pack": "打包页面",
+ "white": "白色主题",
+ "black": "黑色主题",
+ "logout": "退出",
+ }
can.onmotion.clear(can)
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
@@ -24,10 +32,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}
}, }], }]).input)
- var ui = can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["River"]: ["pack"], function(item) {
- return {view: "item", list: [{type: "input", data: {type: "button", name: item, value: item.toLowerCase()}, onclick: function(event) {
- var cb = can.onaction[item]; typeof cb == "function" && (item == "River"? cb(can): cb(event, can, item))
- }, }]}
+ var ui = can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["river", "setting"]: ["setting"], function(item) {
+ return {view: ["menus", "div", item], onclick: function(event) {
+ var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item)
+ }}
}))
},
_state: function(can, msg, target) {
@@ -55,7 +63,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.user.isWeiXin && can.onimport._weixin(can)
},
_weixin: function(can, msg) { can.run({}, ["action", "wx"], function(msg) {
+ can.user.toast(can, "weixin")
can.require(["https://res.wx.qq.com/open/js/jweixin-1.6.0.js"], function(can) {
+ can.user.toast(can, "weixin")
can.user.agent = { __proto__: can.user.agent,
getLocation: function(cb) { wx.getLocation({type: "gcj02", success: function (res) {
typeof cb == "function" && cb({latitude: parseInt(res.latitude*100000), longitude: parseInt(res.longitude*100000) })
@@ -81,7 +91,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
time: function(can, target) { target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
- can.user.Search(can, TOPIC) || can.user.Search(can, POD) || can.user.topic(can, can.base.isNight()? "black": "white")
+ can._topic || can.user.Search(can, TOPIC) || can.user.Search(can, POD) || can.user.topic(can, can.base.isNight()? "black": "white")
},
})
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
@@ -102,9 +112,22 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
})
can.user.jumps(can.user.Share(can, args, true))
},
- username: function(event, can) { can.user.logout(can) },
+ username: function(event, can) {
+ var ui = can.user.carte(event, can, can.onaction, ["logout"])
+ can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}, className: "menu"})
+ },
+ logout: function(event, can) {
+ can.user.logout(can)
+ },
+ time: function(event, can) {
+ can.require(["/plugin/input/date.js"], function(can) {
+ event.target.value = ""
+ var ui = can.onfigure.date.onclick(event, can)
+ can.page.Modify(can, ui.fieldset, {style: {right: 0, top: can._target.offsetHeight, left: ""}})
+ })
+ },
- pack: function(event, can, key) {
+ pack: function(event, can) {
can.core.Item(Volcanos.meta.pack, function(key, msg) { delete(msg._event), delete(msg._can) })
var msg = can.request(event, {name: "demo", content: JSON.stringify(Volcanos.meta.pack)})
@@ -114,6 +137,15 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
})
},
+ river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) },
+ setting: function(event, can) {
+ var ui = can.user.carte(event, can, can.onaction, ["pack", "white", "black", "toast"])
+ can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}, className: "menu"})
+ },
+ black: function(event, can, button) { can.user.topic(can, can._topic = button) },
+ white: function(event, can, button) { can.user.topic(can, can._topic = button) },
+ toast: function(event, can, button) { can.user.toast(can, "nice", "hi", 1000000)},
+
River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) },
Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) },
})
diff --git a/pane/River.css b/pane/River.css
index 392e12f0..d57b0382 100644
--- a/pane/River.css
+++ b/pane/River.css
@@ -9,19 +9,14 @@ fieldset.River>div.output {
padding:0;
}
fieldset.River>div.output div.item {
- padding-left:6px;
+ padding:3px 16px;
}
fieldset.River>div.output div.item:hover {
cursor:pointer;
- background-color:red;
- border:ridge 2px yellow;
+ background-color:#2e515f;
}
fieldset.River>div.output div.item.select {
- background-color:red;
- border:ridge 2px yellow;
-}
-fieldset.River>div.output div.list {
- margin-left:20px;
+ background-color:#2e515f;
}
body.white fieldset.River {
@@ -29,19 +24,3 @@ body.white fieldset.River {
background-color:#1f2224;
color:white;
}
-body.white fieldset.River>div.output div.item:hover {
- background-color:black;
- border:solid 2px black;
-}
-body.white fieldset.River>div.output div.item.select {
- background-color:black;
- border:solid 2px black;
-}
-body.white fieldset.River>div.output div.subitem:hover {
- background-color:black;
- border:solid 2px black;
-}
-body.white fieldset.River>div.output div.subitem.select {
- background-color:black;
- border:solid 2px black;
-}
diff --git a/pane/River.js b/pane/River.js
index 0495c170..418e4869 100644
--- a/pane/River.js
+++ b/pane/River.js
@@ -10,9 +10,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onaction.storm(event, can, value.hash)
}, function(event) {
// 右键点击
- can.user.carte(can, can.ondetail, can.ondetail.list, function(ev, item, meta) {
+ var ui = can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, item, meta) {
can.ondetail[item](event, can, item, value.hash)
- })
+ }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}, className: "menu"})
})
if (index == 0 || [value.hash, value.name].indexOf(can._main_river) > -1) { select = view }
@@ -21,7 +21,18 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
},
})
-Volcanos("onaction", {help: "控件交互", list: ["创建", "刷新"], _init: function(can, msg, list, cb, target) {
+Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, can, msg, pane, cmds, cb) {
+ cmds.length == 0 && can.core.Item(can.onengine.river, function(key, value) {
+ msg.Push({hash: key, name: value.name})
+ }); if (cmds.length != 1 && cmds[1] != "tool") { return false }
+
+ var river = can.onengine.river[cmds[0]]; if (!river) { return false }
+ can.core.Item(river.storm, function(key, value) {
+ msg.Push({hash: key, name: value.name})
+ }), typeof cb == "function" && cb(msg); return true
+ },
+})
+Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) {
can.run({}, [], function(msg) {
can.onimport._init(can, msg, list, cb, can._output)
})
@@ -38,10 +49,12 @@ Volcanos("onaction", {help: "控件交互", list: ["创建", "刷新"], _init: f
can.onaction.action(event, can, river, storm.hash)
can.user.title(can.user.Search(can, POD) || storm.name)
}, oncontextmenu: function(event) {
+ can.onaction.action(event, can, river, storm.hash)
+ can.user.title(can.user.Search(can, POD) || storm.name)
// 右键点击
- can.user.carte(can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) {
+ var ui = can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) {
can.ondetail[item](event, can, item, storm.hash, river)
- })
+ }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}, className: "menu"})
}}
}) }]).first, list.children.length > 0 && list.children[select].click()
diff --git a/pane/Search.js b/pane/Search.js
index 685e99c2..e8eea56f 100644
--- a/pane/Search.js
+++ b/pane/Search.js
@@ -31,7 +31,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
function search(word, cb) { cmd[1] = word
- if (word == "" && can.list[0] && can.list[0].type == "fieldset") {
+ if (word == "" && can.list && can.list[0] && can.list[0].type == "fieldset") {
can.page.Select(can, document.body, "fieldset.pane.Action fieldset.plugin>legend", function(item) {
if (item.innerHTML == can.list[0].name) {
var cb = can.page.Select(can, item.parentNode, "input.args")[0]
@@ -69,7 +69,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.ui = can.page.Append(can, can._output, [
{input: ["word", function(event) { var target = event.target
- can.onkeypop.input(event, can, target)
+ can.onkeypop.input(event, can)
if (event.key == "Escape") {
can.onmotion.hide(can)
}
diff --git a/plugin/input/date.js b/plugin/input/date.js
index 97e23bfb..f4669b7c 100644
--- a/plugin/input/date.js
+++ b/plugin/input/date.js
@@ -1,82 +1,78 @@
-Volcanos("onfigure", {help: "控件详情", list: [], _merge: function(can, sub) { can.core.Item(sub, function(key, value) {
- if (sub.hasOwnProperty(key)) { can.onfigure[key] = value }
- }); return true },
+Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target) { target = target || event.target
- date: {onclick: function(event, can, item, target) {
+ // 设置输入
+ function set(now) {
+ target.value = can.base.Time(now)
+ item && item.action == "auto" && can.run({})
+ }
- // 设置输入
- function set(now) {
- target.value = can.base.Time(now)
- item.action == "auto" && can.run({})
+ // 添加插件
+ var figure = can.onappend.field(can, document.body, "input date", {})
+ figure.table = can.page.Append(can, figure.output, [{type: "table"}]).first
+ can.page.Modify(can, figure.fieldset, {style: {top: event.clientY+10, left: event.clientX}})
+ can.page.Remove(can, figure.legend)
+
+ // 添加控件
+ var now = target.value? new Date(target.value): new Date()
+ var control = can.page.AppendAction(can, figure.action, ["今天",
+ ["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)), {view: ["", "br"]},
+ "关闭", {type: "hr", style: {margin: 0}},
+ "上一月", ["year"].concat(can.core.List(now.getFullYear() - 20, now.getFullYear() + 20)),
+ ["month"].concat(can.core.List(1, 13)), "下一月", {view: ["", "br"]},
+ ], function(event, value, cmd) {can.stick = true
+ // 设置时间
+ switch (cmd) {
+ case "year": now.setFullYear(parseInt(value)), show(now); return
+ case "month": now.setMonth(parseInt(value)-1), show(now); return
+ case "hour": now.setHours(parseInt(value)), set(show(now)); return
+ case "minute": now.setMinutes(parseInt(value)), set(show(now)); return
+ case "second": now.setSeconds(parseInt(value)), set(show(now)); return
}
- // 添加插件
- var figure = can.onappend.field(can, document.body, "input date", {})
- figure.table = can.page.Append(can, figure.output, [{type: "table"}]).first
- can.page.Modify(can, figure.fieldset, {style: {top: event.clientY+10, left: event.clientX}})
- can.page.Remove(can, figure.legend)
+ // 设置日期
+ switch (value) {
+ case "关闭": can.page.Remove(can, figure.fieldset); break
+ case "今天": now = new Date(), set(show(now)); break
+ case "随机": now.setDate((Math.random() * 100 - 50) + now.getDate()), set(show(now)); break
+ case "关闭": can.page.Remove(can, figure.first)
+ case "前一年": now.setFullYear(now.getFullYear()-1), show(now); break
+ case "后一年": now.setFullYear(now.getFullYear()+1), show(now); break
+ case "上一月": now.setMonth(now.getMonth()-1), show(now); break
+ case "下一月": now.setMonth(now.getMonth()+1), show(now); break
+ }
+ })
- // 添加控件
- var now = target.value? new Date(target.value): new Date();
- var control = can.page.AppendAction(can, figure.action, ["今天",
- ["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)), {view: ["", "br"]},
- "关闭", {type: "hr", style: {margin: 0}},
- "上一月", ["year"].concat(can.core.List(now.getFullYear() - 20, now.getFullYear() + 20)),
- ["month"].concat(can.core.List(1, 13)), "下一月", {view: ["", "br"]},
- ], function(event, value, cmd) {can.stick = true;
- // 设置时间
- switch (cmd) {
- case "year": now.setFullYear(parseInt(value)); show(now); return;
- case "month": now.setMonth(parseInt(value)-1); show(now); return;
- case "hour": now.setHours(parseInt(value)); set(show(now)); return;
- case "minute": now.setMinutes(parseInt(value)); set(show(now)); return;
- case "second": now.setSeconds(parseInt(value)); set(show(now)); return;
- }
+ function show(now) {
+ // 设置控件
+ control.month.value = now.getMonth()+1
+ control.year.value = now.getFullYear()
+ control.hour.value = now.getHours()
+ control.minute.value = parseInt(now.getMinutes()/5)*5
+ control.second.value = parseInt(now.getSeconds()/5)*5
- // 设置日期
- switch (value) {
- case "关闭": can.page.Remove(can, figure.fieldset); break;
- case "今天": now = new Date(); set(show(now)); break;
- case "随机": now.setDate((Math.random() * 100 - 50) + now.getDate()); set(show(now)); break;
- case "关闭": can.page.Remove(can, figure.first);
- case "前一年": now.setFullYear(now.getFullYear()-1); show(now); break;
- case "后一年": now.setFullYear(now.getFullYear()+1); show(now); break;
- case "上一月": now.setMonth(now.getMonth()-1); show(now); break;
- case "下一月": now.setMonth(now.getMonth()+1); show(now); break;
- }
- })
+ // 设置组件
+ can.page.Appends(can, figure.table, [{type: "tr", list: can.core.List(["日", "一", "二", "三", "四", "五", "六"], function(day) {return {text: [day, "th"]}})}])
+ var tr; function add(day, type) {if (day.getDay() == 0) {tr = can.page.Append(can, figure.table, [{type: "tr"}]).tr}
+ can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(day).split(" ")[0] == can.base.Time(now).split(" ")[0]? "select": type],
+ dataset: {date: day.getTime()}, click: function(event) {
+ set(now = new Date(parseInt(target.dataset.date)))
+ can.page.Remove(can, figure.fieldset)
+ },
+ }])
+ }
- function show(now) {
- // 设置控件
- control.month.value = now.getMonth()+1;
- control.year.value = now.getFullYear();
- control.hour.value = now.getHours();
- control.minute.value = parseInt(now.getMinutes()/5)*5;
- control.second.value = parseInt(now.getSeconds()/5)*5;
+ // 时间区间
+ var one = new Date(now); one.setDate(1)
+ var end = new Date(now); end.setMonth(now.getMonth()+1), end.setDate(1)
+ var head = new Date(one); head.setDate(one.getDate()-one.getDay())
+ var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay())
- // 设置组件
- can.page.Appends(can, figure.table, [{type: "tr", list: can.core.List(["日", "一", "二", "三", "四", "五", "六"], function(day) {return {text: [day, "th"]}})}])
- var tr; function add(day, type) {if (day.getDay() == 0) {tr = can.page.Append(can, figure.table, [{type: "tr"}]).tr}
- can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(day).split(" ")[0] == can.base.Time(now).split(" ")[0]? "select": type],
- dataset: {date: day.getTime()}, click: function(event) {
- set(now = new Date(parseInt(event.target.dataset.date)))
- can.page.Remove(can, figure.fieldset)
- },
- }])
- }
-
- // 时间区间
- var one = new Date(now); one.setDate(1);
- var end = new Date(now); end.setMonth(now.getMonth()+1); end.setDate(1);
- var head = new Date(one); head.setDate(one.getDate()-one.getDay());
- var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay());
-
- // 时间序列
- for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) {add(day, "last")}
- for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) {add(day, "main")}
- for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
- return now
- }; set(show(now));
- }},
-}, ["/plugin/input/date.css"])
+ // 时间序列
+ for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) {add(day, "last")}
+ for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) {add(day, "main")}
+ for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
+ return now
+ }; set(show(now))
+ return figure
+}} }, ["/plugin/input/date.css"])
diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js
index 15851e4e..098a343f 100644
--- a/plugin/local/code/inner.js
+++ b/plugin/local/code/inner.js
@@ -1,10 +1,19 @@
-Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { if (!msg.cmds) { return }
+Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) {
+ var width = can.Conf("width"), height = can.Conf("height")
+
can.ui = can.page.Appends(can, target, [
{type: "table", list: [{type: "tr", list: [
- {type: "td", list: [{view: "project", style: {"max-height": window.innerHeight-480, display: "none"}} ]},
- {type: "td", list: [{view: "profile", style: {"max-height": window.innerHeight-480}, list: [
+ {type: "td", list: [{view: "project", style: {"max-height": height-480, display: "none"}} ]},
+ {type: "td", list: [{view: "profile", style: {"max-height": height-480}, list: [
{view: ["content", "table"]},
- ]}], style: {"min-width": parseInt(can.Conf("width"))-120, "max-width": parseInt(can.Conf("width"))-60}},
+ ]}], style: {"min-width": width-120, "max-width": width-60}, _init: function(item) {
+ can.onlayout.resize(function(width, height) {
+ width = can.Conf("width", width), height = can.Conf("height", height)
+ can.page.Modify(can, item, {style: {
+ "min-width": width-120, "max-width": width-60,
+ }})
+ })
+ }},
]}, ]},
{view: "search", style: {display: "none"}, list: [{view: "action", list: [
{input: ["word", function(event) {
@@ -60,7 +69,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
}, true)
},
project: function(can, path, cb) { can.Option({path: path})
- var msg = can.request({}); msg.Option("dir_root", path), msg.Option("dir_deep", "true")
+ var msg = can.request({}, {dir_root: path, dir_deep: true})
can.run(msg._event, ["action", "dir", "./"], function(msg) { can.ui.project.innerHTML = ""
msg.path && can.Status("文件数", msg.path.length)
can.onappend.tree(can, msg, "path", "/", can.ui.project, function(event, value) {
diff --git a/plugin/local/wiki/data.js b/plugin/local/wiki/data.js
index c7ae12ae..566a8d8c 100644
--- a/plugin/local/wiki/data.js
+++ b/plugin/local/wiki/data.js
@@ -3,7 +3,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.table = can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) {
return {text: [value, "td"], oncontextmenu: function(event) {
- can.user.carte(can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) {
+ can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) {
var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line)
})
}, ondblclick: function(event) {
diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js
index 02f28b8e..f0753ddf 100644
--- a/plugin/local/wiki/draw.js
+++ b/plugin/local/wiki/draw.js
@@ -54,7 +54,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.Action(key, target.Value(key)||can.Action(key))
}), can.onmotion.show(can, 10, null, target)
}, function(event) {
- can.user.carte(can, can.onaction||{}, ["隐藏", "显示", "添加", "删除", "清空"], function(ev, item, meta) {
+ can.user.carte(event, can, can.onaction||{}, ["隐藏", "显示", "添加", "删除", "清空"], function(ev, item, meta) {
switch (item) {
case "显示":
can.page.Select(can, can.ui.content, "g."+name, function(item) {
diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js
index bf67f561..b2feefdb 100644
--- a/plugin/local/wiki/word.js
+++ b/plugin/local/wiki/word.js
@@ -93,7 +93,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}
},
}, ["/plugin/local/wiki/word.css"])
-Volcanos("onaction", {help: "控件交互", list: ["演示"],
+Volcanos("onaction", {help: "控件交互", list: [],
show: function(can, which) {
can.page.Select(can, can.ui.content, "div.page.show", function(page) {
can.page.ClassList.del(can, page, "show")
diff --git a/plugin/story/spide.js b/plugin/story/spide.js
index 555bc768..340288d5 100644
--- a/plugin/story/spide.js
+++ b/plugin/story/spide.js
@@ -224,6 +224,11 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "横向",
layout.left = 0, layout.top = 40
layout.width = window.innerWidth-40
layout.height = window.innerHeight-60
+ if (can.user.isMobile) {
+ if (window.innerWidth > window.innerHeight) {
+ layout.top = 0
+ }
+ }
can.onaction._resize(sub, layout)
break
default:
@@ -234,6 +239,11 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "横向",
}, true)
}
}
+ if (can.user.isMobile) {
+ can.core.Timer(100, function() {
+ sub.run({}, ["some", "最大"])
+ })
+ }
})
},
diff --git a/proto.js b/proto.js
index 4453f080..45fc869a 100644
--- a/proto.js
+++ b/proto.js
@@ -11,23 +11,28 @@ function shy(help, meta, list, cb) {
cb.list = next("object") || []
return cb
}; var _can_name = ""
-var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, libs, cb) {
+var Volcanos = shy("火山架", {cache: {}, libs: [], _target: document.body}, [], function(name, can, libs, cb) {
var meta = arguments.callee.meta, list = arguments.callee.list
- if (typeof name == "object") { var Config = name
+ if (typeof name == "object") { var Config = name; _can_name = ""
+ meta.libs = Config.libs, meta.volcano = Config.volcano
+
// 预加载
var Preload = Config.libs; Config.panes.forEach(function(pane) {
Preload = Preload.concat(pane.list = pane.list || ["/pane/"+pane.name+".css", "/pane/"+pane.name+".js"])
}); Preload = Preload.concat(Config.plugin)
// 根模块
- meta.volcano = Config.volcano, meta.libs = Config.libs
name = Config.name, can = {_follow: Config.name,
- _target: document.body, _width: window.innerWidth, _height: window.innerHeight,
+ _width: window.innerWidth, _height: window.innerHeight,
}, libs = Preload.concat(Config.volcano), cb = function(can) {
can.onengine._init(can, can.Conf(Config), Config.panes, function(msg) {
- can.base.Log(can)
+ can.base.Log(name, "run", window.can = can)
+ document.body.onresize = function(event) {
+ can.onlayout._init(can, can._target, window.innerWidth, window.innerHeight)
+ }, can.onlayout._init(can, can._target, window.innerWidth, window.innerHeight-8)
}, can._target)
}
+
}
list.push(can = can || {}), can.__proto__ = {__proto__: Volcanos.meta, _name: name, _load: function(name, cb) {
@@ -38,8 +43,8 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
// 加载模块
for (var i = 0; i < cache.length; i++) { var sub = cache[i]
+ if (typeof cb == "function" && cb(can, name, sub)) { continue }
if (can[sub._name] && can[sub._name]._merge && can[sub._name]._merge(can, sub)) { continue }
- if (typeof cb == "function" && cb(can, name, sub)) { continue}
if (can[sub._name]) {
for (var k in sub) {
can[sub._name].hasOwnProperty(k) || (can[sub._name][k] = sub[k])
@@ -55,29 +60,13 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
}
var source = !libs[0].endsWith("/") && (libs[0].indexOf(".") == -1? libs[0]+".js": libs[0]) || libs[0]
- var target = source.endsWith(".css")? (can._head||document.head): (can._body||document.body)
-
- if (meta.cache[source]) {
- can._load(source, each), can.require(libs.slice(1), cb, each)
- return // 加载缓存
+ if (source.indexOf("/publish") == 0 && can.base && can.user) {
+ source = can.base.URLMerge(source, "pod", can.user.Search(can, "pod")||"")
}
- if (source.endsWith(".css")) { var style = document.createElement("link")
- style.rel = "stylesheet", style.type = "text/css"
- style.href = source; style.onload = function() {
- can._load(source, each), can.require(libs.slice(1), cb, each)
- } // 加载样式
- target.appendChild(style)
-
- } else if (source.endsWith(".js")) { var script = document.createElement("script")
- if (source.indexOf("/publish") == 0 && can.user) {
- source += "?pod="+(can.user.Search(can, "pod")||"")
- }
- script.src = source, script.onload = function() {
- can._load(source, each), can.require(libs.slice(1), cb, each)
- } // 加载脚本
- target.appendChild(script)
- }
+ // 请求模块
+ function next() { can._load(source, each), can.require(libs.slice(1), cb, each) }
+ meta.cache[source]? next(): meta._load(source, next)
},
request: function(event, option) { event = event || {}
event._msg = event._msg || can.misc.Message(event, can)
@@ -86,17 +75,7 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
},
Conf: function(key, value) {
- if (key == undefined) { return can._conf }
- if (typeof key == "object") { can._conf = key; return can._conf }
- can._conf[key] = value == undefined? can._conf[key]: value
-
- if (can._conf[key] == undefined && key.indexOf(".") > 0) {
- var p = can._conf, ls = key.split("."); while (p && ls.length > 0) {
- p = p[ls[0]], ls = ls.slice(1)
- }
- return p
- }
- return can._conf[key]
+ return can.core.Value(can._conf, key, value)
}, _conf: {},
}
@@ -106,4 +85,18 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
}
return can.require(libs, cb), can
})
-
+Volcanos.meta._load = function(url, cb) {
+ switch (url.split("?")[0].split(".").pop().toLowerCase()) {
+ case "css":
+ var item = document.createElement("link")
+ item.rel = "stylesheet", item.type = "text/css"
+ item.href = url; item.onload = cb
+ document.head.appendChild(item)
+ return item
+ case "js":
+ var item = document.createElement("script")
+ item.src = url, item.onload = cb
+ document.body.appendChild(item)
+ return item
+ }
+}
diff --git a/trash/chat.js b/trash/chat.js
deleted file mode 100644
index 9bdd3411..00000000
--- a/trash/chat.js
+++ /dev/null
@@ -1,91 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, body) {
- window.onresize = function(event) {
- can.onlayout["刷新"](event, can, conf, null, body)
- }
- },
- layout: function(event, can, value, key, body) {var conf = can.Conf()
- can.onlayout["刷新"](event, can, conf, value? conf.layout.size[value]: null, body)
- },
- title: function(event, can, value, key, body) {var conf = can.Conf()
- can.user.title(value||conf.title)
- },
- login: function(event, can, value, key, body) {var conf = can.Conf()
- var list = location.pathname.split("/");
- can.Login? can.user.login(function(user) {
- can.River.Import(event, "update", "river")
- }): (
- can.Action.Import(event, list[2], "river"),
- can.Action.Import(event, "action", "storm")
- )
- }
-})
-Volcanos("onaction", {help: "组件交互", list: [],
- onkeydown: function(event, can) {var conf = can.Conf()
- if (event.target.tagName == "INPUT" || event.target.tagName == "TEXTAREA") {
- return
- }
- if (event.target.getAttribute("contenteditable")) {
- return
- }
-
- switch (event.key) {
- case "j":
- can.Report(event, {x: 0, y: conf.scroll.line}, "scroll")
- can.Report(event, event.key, "keydown")
- break
- case "k":
- can.Report(event, {x: 0, y: -conf.scroll.line}, "scroll")
- can.Report(event, event.key, "keydown")
- break
- case "Escape":
- can.Report(event, event.key, "escape")
- break
- case "Enter":
- can.Report(event, event.key, "enter")
- break
- case " ":
- can.Report(event, event.key, "space")
- break
- default:
- can.Report(event, event.key, "keydown")
- }
- },
-})
-Volcanos("onlayout", {help: "组件布局", list: ["刷新"],
- "刷新": function(event, can, conf, layout, body) {layout = layout || {};
- var height = body.clientHeight-conf.layout.border;
- var width = body.clientWidth-conf.layout.border;
- can.user.isWindows && (body.style.overflow = "hidden");
-
- layout.head == undefined && (layout.head = can.head.target.clientHeight)
- layout.foot == undefined && (layout.foot = can.foot.target.clientHeight)
- can.head.Size(event, width, layout.head)
- can.foot.Size(event, width, layout.foot)
- height -= can.head.target.offsetHeight+can.foot.target.offsetHeight
-
- layout.left != 0 && can.left.target.dataset.width && (layout.left = can.left.target.dataset.width)
- layout.right != 0 && can.right.target.dataset.width && (layout.right = can.right.target.dataset.width)
-
- layout.left == undefined && (layout.left = can.left.target.clientWidth)
- layout.right == undefined && (layout.right = can.right.target.clientWidth)
- can.left.Size(event, layout.left, height)
- can.right.Size(event, layout.right, height)
- width -= can.left.target.offsetWidth+can.right.target.offsetWidth
-
- layout.bottom == -1 && (layout.bottom = can.user.isMobile? "": height, layout.top = 0, layout.center = 0)
- layout.bottom == undefined && (layout.bottom = can.bottom.target.offsetHeight-conf.layout.border)
- layout.center == undefined && (layout.center = can.center.target.clientHeight)
- layout.top == undefined && (layout.top = can.top.target.clientHeight)
- layout.center == 0 && layout.top == 0 && !can.user.isMobile && layout.bottom != -2 && (layout.bottom = height)
- can.bottom.Size(event, width, layout.bottom)
- can.center.Size(event, width, layout.center)
-
- height -= layout.top==0? height: can.center.target.offsetHeight+can.bottom.target.offsetHeight
- can.top.Size(event, width, height)
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/frame_old.js b/trash/frame_old.js
deleted file mode 100644
index 0b173553..00000000
--- a/trash/frame_old.js
+++ /dev/null
@@ -1,345 +0,0 @@
-var can = Volcanos("chat", {
- Page: shy("构造网页", function(can, name, conf, cb, body, topic) {
- var page = Volcanos(name, {_type: "local", _panes: {}, _views: {}, target: body,
- Plugin: can.Plugin, Inputs: can.Inputs, Output: can.Output,
-
- Import: function(event, value, key) {var cb = page.onimport[key];
- typeof cb == "function" && cb(event, page, value, key, body);
- },
- Report: function(event, value, key) {
- // 导入数据
- page.Import(event, value, key)
- // 分发数据
- can.core.Item(page._panes, function(index, item) {
- if (key == "favor") {var msg = value;
- var cmds = msg.detail, cmd = cmds[0];
- if (cmd == item._name || cmd == item.Name()) {cmd = cmds[1], cmds = cmds.slice(1)}
-
- var cb = item.onchoice[cmd];
- if (typeof cb == "function") {
- cb(event, item, value, cmd, item.target);
- return msg.Echo(item._name, " onchoice ", cmd), msg._hand = true;
- }
-
- var cb = item.onaction[cmd];
- if (typeof cb == "function") {
- cb(event, item, value, cmd, item.target);
- return msg.Echo(item._name, " onaction ", cmd), msg._hand = true;
- }
- }
- // 下发数据
- item.Import && item.Import(event, value, key)
- })
- },
-
- run: function(event, option, cmds, cb) {can.misc.Run(event, page, option, cmds, cb)},
- }, Config.libs.concat([name, "topic/"+topic+".css"]), function(page) {
- // 加载配置
- page.onimport._init && page.onimport._init(page, page.Conf(conf), body)
-
- can.core.Next(conf.pane, function(item, cb) {
- // 加载模块
- page._panes[item.name] = page[item.name] = page._views[item.pos] = page[item.pos] = can.Pane(page, item.name, item, cb,
- can.page.Select(can, body, "fieldset."+item.name)[0] ||
- can.page.AppendField(can, body, item.name+" "+(item.pos||""), item))
- }, function() {typeof cb == "function" && cb(page)})
- }, conf)
- return page
- }),
- Pane: shy("构造组件", function(can, name, meta, cb, field) {
- var river = "", storm = "";
- var pane = Volcanos(name, {_type: "local", _plugins: [], _local: {}, target: field,
- option: field.querySelector("form.option"),
- action: field.querySelector("div.action"),
- output: field.querySelector("div.output"),
- Plugin: can.Plugin, Inputs: can.Inputs, Output: can.Output,
-
- Export: function(event, value, key) {var cb = pane.onexport[key];
- typeof cb == "function"? cb(event, pane, value, key, field): can.Report(event, value, key)
- },
- Import: function(event, value, key) {var cb = pane.onimport[key];
- // 导入数据
- typeof cb == "function" && cb(event, pane, value, key, field);
- // 分发数据
- can.core.List(pane._plugins, function(item) {item.Import(event, value, key)})
- // 显示数据
- pane.page.Select(pane, pane.action, "input."+key, function(item) {item.value = value})
- },
-
- Action: function(key, value) {var cb = pane.onimport[key];
- typeof cb == "function" && cb(event, pane, value, key, field);
-
- return can.page.Select(can, pane.action, "input[name="+key+"],select."+key+",select[name="+key+"]", function(item) {
- // 读写控件
- value != undefined && (item.value = value), value = item.value
- }), value
- },
-
- Size: function(event, width, height) {var cb = pane.onimport["size"];
- field.style.display = width === 0 || height === 0? "none": "block";
- if (width > 0) {
- field.style.width = width + "px"
- } else if (width == -1) {
- field.style.width = document.body.offsetWidth + "px"
- } else if (width == -2) {
- field.style.width = ""
- }
-
- if (height > 0) {
- field.style.height = height + "px"
- } else if (height == -1) {
- field.style.height = document.body.offsetHeight + "px"
- } else if (height == -2) {
- field.style.height = ""
- }
-
- typeof cb == "function" && cb(event, pane, {width: width, height: height}, "size", field)
- },
- Show: function(event, width, height, offset) {field.style.display = "block";
- if (width < 0) {field.style.left = -width / 2 + "px";
- field.style.width = (document.body.offsetWidth + width) + "px";
- }
- if (width > 0) {field.style.width = width + "px";
- field.style.left = (document.body.offsetWidth - width) / 2 + "px";
- }
- if (width === "") {
- field.style.width = ""
- }
- if (height > 0) {field.style.height = height + "px";
- field.style.top = (document.body.offsetHeight - height) / 2 + (offset||0) + "px";
- }
- if (height < 0) {field.style.top = -height / 2 + (offset||0) + "px";
- field.style.height = (document.body.offsetHeight + height) + "px";
- }
- if (height === "") {
- field.style.height = ""
- }
- var cb = pane.onimport["show"];
- typeof cb == "function" && cb(event, can, width, "show", pane.output)
- return field;
- },
- Hide: function() {field.style.display = "none"},
-
- run: function(event, cmds, cb) {var msg = pane.Event(event)
- can.page.Select(can, pane.action, "input", function(item, index) {
- // 控件参数
- item.name && item.value && msg.Option(item.name, item.value)
- })
- can.run(event, pane.option.dataset, cmds, cb)
- return msg
- },
- }, Config.libs.concat(["pane/"+(meta.path||"")+name]), function(pane) {can.Dream(document.head, "pane/"+(meta.path||"")+name+".css")
- if (["Header", "Footer"].indexOf(meta.name) > -1) {
- pane.onimport._init && pane.onimport._init(pane, pane.Conf(meta), [], function() {}, pane.output, pane.action, pane.option, field)
- } else {
- pane.onimport._init && pane.onimport._init(pane, pane.Conf(meta), pane.output, pane.action, pane.option, field)
- }
- typeof cb == "function" && cb(pane)
- }, meta)
- return pane
- }),
- Plugin: shy("构造插件", function(can, name, meta, run, field, cb) {
- meta && meta.class && can.page.ClassList.add(can, field, meta.class)
-
- var option = field.querySelector("form.option");
- var action = field.querySelector("div.action");
- var output = field.querySelector("div.output");
- var status = field.querySelector("div.status");
-
- var history = []
-
- var args = can.base.Obj(meta.args, []);
- var feature = can.base.Obj(meta.feature);
- var exports = can.base.Obj(meta.exports, feature.exports||[]);
- var plugin = Volcanos(name, {_type: "local", _local: {}, target: field,
- option: option, action: action, output: output,
- Plugin: can.Plugin, Inputs: can.Inputs, Output: can.Output,
-
- Export: function(event, value, key) {var cb = plugin.onexport[key];
- typeof cb == "function"? cb(event, plugin, value, key, field): can.Export(event, value, key)
- },
- Import: function(event, value, key) {var cb = plugin.onimport[key];
- // 导入数据
- typeof cb == "function" && cb(event, plugin, value, key, plugin.output);
- // 下发数据
- key && plugin[key] && plugin[key].target && plugin[key].Import(event, value, key)
- // 下发数据
- plugin._output && plugin._output.Import(event, value, key)
- },
- Report: function(event, value, key, index) {
- // 导入数据
- plugin.Import(event, value, key)
-
- for (var i = 0; i < exports.length; i += 3) {
- if (exports[i+1] == key) {key = exports[i]
- if (exports[i+2]) {var cb = plugin.onexport[exports[i+2]], res;
- // 数据转换
- value = typeof cb == "function" && ((res = cb(event, plugin, plugin.msg, value, key, index)) != undefined) && res || value;
- }
- // 上报数据
- // 上下循环
- // key && can.Import(event, value, key)
- can.Action(key, value)
- }
- }
- },
-
- Remove: function(event) {var list = can.page.Select(can, option, "input.temp")
- list.length > 0 && list[list.length-1].parentNode.removeChild(list[list.length-1])
- },
- Append: function(item, cb) {item = item || {type: "text", name: "", className: "args temp"};
- var name = item.name || item.value || "args"+plugin.page.Select(can, option, "input.args.temp").length;
- var count = plugin.page.Select(can, option, ".args").length, value = "";
- args && count < args.length && (value = args[count] || item.value || "");
- plugin._local[name] = plugin[name] = can.Inputs(plugin, item, item.display||"input", name, value, cb, option);
- },
- Select: function(event, target, focus) {
- can.page.Select(can, field.parentNode, "fieldset.item.select", function(item) {
- can.page.ClassList.del(can, item, "select")
- })
- can.page.ClassList.add(can, field, "select")
-
- can._plugin = plugin, can.input = target || option.querySelectorAll("input")[1];
- focus && can.input.focus();
- return true
- },
- Option: function(key, value) {
- value != undefined && option[key] && (option[key].value = value)
- return key != undefined? option[key] && option[key].value || "":
- plugin.page.Select(can, option, ".args", function(item) {return item.value})
- },
- Check: function(event, target, cb) {
- plugin.page.Select(can, option, ".args", function(item, index, list) {
- if (item == target && index < list.length-1) {can._plugin && can._plugin.target == field && list[index+1].focus(); return item}
- }).length == 0 && plugin.Runs(event, cb)
- },
- Last: function(event) {
- can.core.List(history.pop() && history.pop(), function(item, index) {
- return item.target.value = item.value
- }).length > 0 && plugin.Runs(event)
- },
- Runs: function(event, cb) {
- history.push(plugin.page.Select(can, option, ".args", function(item, index, list) {
- return {target: item, value: item.value}
- }))
- can.Export(event, 1, "ncmd")
-
- plugin.Run(event, plugin.Option(), cb)
- },
- Run: function(event, args, cb, silent) {var show = !silent;
- var msg = can.Event(event);
- can.page.Select(can, option, ".opts", function(item) {
- msg[item] == undefined && item.name && item.value && msg.Option(item.name, item.value)
- })
-
- for (var i = args.length-1; i >= 0; i--) {if (args[i] == "") {args = args.slice(0, i)} else {break}}
- show && can.core.Timer(1000, function() {show && plugin.user.toast(can.base.Format(args||["running..."]), meta.name, -1)});
- run(event, args, function(msg) {if (silent) {return typeof cb == "function" && cb(msg)}
- plugin.msg = msg, plugin.Show(feature.display || "table", msg, cb)
- show = false, plugin.user.toast();
- })
- },
- Show: function(type, msg, cb) {plugin.msg = msg, msg._plugin_name = name;
- msg.Option("title") && can.user.title(msg.Option("title"))
- return plugin._output = plugin._local[type] = plugin[type] = can.Output(plugin, feature, type, msg, cb, output, action, option, status)
- },
- Clone: function(event, cb) {meta.nick = meta.name + can.ID()
- meta.msg = plugin.msg
- meta.args = can.page.Select(can, plugin.option, ".args", function(item) {return item.value})
- can._plugins.push(can.Plugin(can, meta.nick, meta, run,
- can.page.AppendField(can, field.parentNode, "item "+meta.name+" "+meta.nick, meta), cb))
- },
- Delete: function(event) {field.parentNode.removeChild(field)},
- }, Config.libs.concat(["plugin/"+(meta.type||feature.active||"state")]), function(plugin) {plugin.Conf(meta);
- var list = typeof meta.inputs == "string"? JSON.parse(meta.inputs||"[]"): meta.inputs || [];
- // 加载配置
- plugin.onimport._init? plugin.onimport._init(plugin, feature, plugin.output, plugin.action, plugin.option):
- // 加载控件
- can.core.Next(list.length>0? list: [{type: "text"}, {type: "button", value: "执行"}], plugin.Append, function() {
- typeof cb == "function" && cb(plugin)
- })
- // 加载控件
- meta.msg && plugin.Show(feature.display || "table", meta.msg)
- }, meta)
- return field.Check = plugin.Check, plugin
- }),
- Inputs: shy("构造控件", function(can, item, type, name, value, cb, option) {
- var input = Volcanos(name, {_type: "input", _plugin: can, item: item, target: "",
- Run: can.Run, Runs: can.Runs,
-
- Import: function(event, value, key, index) {var cb = input.onimport[item.imports];
- value = typeof cb == "function" && cb(event, input, value, key, input.target) || value
- input.target.value = value;
- item.action == "auto"? can.Runs(event): can.Check(event, input.target);
- },
- Append: function(event, value) {can.Append(null, function(input) {can.Select(event, input.target, true)})},
- Clone: function(event, value) {can.Clone(event, function(input) {input.Select(event, null, true)})},
- Select: function(event) {can.Select(event, input.target, true)},
-
- run: function(event, cmd, cb, silent) {var msg = can.Event(event);
- msg.Option("_action", item.name);
-
- var cbs = typeof input[item.cb] == "function" && input[item.cb]
- || typeof can[item.cb] == "function" && can[item.cb] || can.Check
- cbs(event, event.target, cb);
- },
- }, Config.libs.concat(["plugin/"+type, "plugin/input/"+(item.figure||"")]), function(input) {
- var target = input.onimport.init(input, item, name, value, option);
- input.target = target, typeof cb == "function" && cb(input);
- })
- return input
- }),
- Output: shy("构造组件", function(can, feature, type, msg, cb, target, action, option, status) {
- var output = Volcanos(type, {_type: "output", feature: feature, msg: msg,
- target: target, action: action,
- Plugin: can.Plugin, Inputs: can.Inputs, Output: can.Output,
- Run: can.Run, Runs: can.Runs,
-
- Import: function(event, value, key) {var cb = output.onimport && output.onimport[key];
- typeof cb == "function" && cb(event, output, value, key, target);
- },
- Option: function(key, value) {
- return key == undefined? can.page.Select(can, can.option, ".args", function(item) {return item.value}):
- (can.page.Select(can, can.option, "input[name="+key+"],select[name="+key+"]", function(item) {
- value != undefined && (item.value = value), value = item.value
- }), value)
- },
- Action: function(key, value) {
- return can.page.Select(can, action, "input[name="+key+"],select."+key+",select[name="+key+"]", function(item) {
- value != undefined && (item.value = value), value = item.value
- }), value
- },
- Status: function(event, value, key) {var cb = output.onstatus[key];
- typeof cb == "function" && cb(event, output, value, key, can.page.Select(can, status, "span."+key, function(item) {
- value? can.page.ClassList.del(can, item.previousSibling, "hidden"):
- can.page.ClassList.add(can, item.previousSibling, "hidden")
- return item
- })[0]||{})
- },
- Export: function(event, value, key, index) {var cb = output.onexport[key];
- return typeof cb == "function"? cb(event, output, value, key, target): can.Report && can.Report(event, value, key, index)
- },
-
- run: function(event, cmd, cb, silent) {var msg = can.Event(event);
- cmd = cmd || can.Option(), can.page.Select(can, option, ".args", function(item) {
- msg[item.name] == undefined && item.name && item.value && msg.Option(item.name, item.value)
- });
- can.Run(event, cmd, cb, silent);
- },
- }, Config.libs.concat([(type.startsWith("/")? "": "plugin/")+type]), function(output) {
- status.innerHTML = "", output.onstatus && can.page.AppendStatus(output, status, output.onstatus.list)
- output.onimport.Action = output.Action
- output.onimport.init(output, msg, cb, target, action, option);
- output.onfigure && (output.onfigure.sup = output, output.onfigure.target = target)
- }, msg)
- return output
- }),
-}, Config.libs.concat(Config.list), function(can) {
- can.user.Search(can, "sessid") && can.user.Cookie(can, "sessid", can.user.Search(can, "sessid")) && can.user.Search(can, "sessid", "")
-
- can[Config.main] = can.Page(can, Config.main, Config, function(chat) {
- chat.Import({}, can.user.Search(can, "pod")||can.user.Search(can, "you")||can.user.Search(can, "title")||Config.title, "title")
- chat.Import({}, can.user.Search(can, "layout")||Config.layout.def, "layout")
- chat.Import({}, "", "login")
- }, document.body, can.user.Search(can, "topic")||Config.topic)
-})
diff --git a/trash/index.html b/trash/index.html
deleted file mode 100644
index 28bfeeb9..00000000
--- a/trash/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- volcanos
-
-
-
-
-
-
-
-
-
-
-
diff --git a/trash/index.js b/trash/index.js
deleted file mode 100644
index 45b191a3..00000000
--- a/trash/index.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var Config = {iceberg: "/chat/", volcano: "",
- libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"],
- main: "chat", list: ["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/trash/lib b/trash/lib
deleted file mode 120000
index dc598c56..00000000
--- a/trash/lib
+++ /dev/null
@@ -1 +0,0 @@
-../lib
\ No newline at end of file
diff --git a/trash/pane/Action.css b/trash/pane/Action.css
deleted file mode 100644
index bb16ee50..00000000
--- a/trash/pane/Action.css
+++ /dev/null
@@ -1,4 +0,0 @@
-fieldset.Action div.output div.item:hover {
- background-color:lightblue;
-}
-
diff --git a/trash/pane/Action.js b/trash/pane/Action.js
deleted file mode 100644
index 37a13463..00000000
--- a/trash/pane/Action.js
+++ /dev/null
@@ -1,218 +0,0 @@
-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.page.Cache(can.Conf("river")+"."+can.Conf("storm"), can.output, "some");
- if (can.page.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/trash/pane/Footer.css b/trash/pane/Footer.css
deleted file mode 100644
index aa2f2117..00000000
--- a/trash/pane/Footer.css
+++ /dev/null
@@ -1,29 +0,0 @@
-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/trash/pane/Footer.js b/trash/pane/Footer.js
deleted file mode 100644
index c60e58b1..00000000
--- a/trash/pane/Footer.js
+++ /dev/null
@@ -1,31 +0,0 @@
-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/trash/pane/Header.css b/trash/pane/Header.css
deleted file mode 100644
index a59bdd90..00000000
--- a/trash/pane/Header.css
+++ /dev/null
@@ -1,32 +0,0 @@
-fieldset.Header {
- height:32px;
- min-width:640px;
- clear:both;
-}
-fieldset.Header>div.action {
- padding:0;
-}
-fieldset.Header>div.output>div.title {
- 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 {
- float:right;
-}
-fieldset.Header>div.output>div.state div.item {
- padding:0;
-}
-fieldset.Header>div.output>div.state>div {
- cursor:pointer;
- margin-left:5px;
- float:right;
-}
-fieldset.Header>div.output>div.state>div:hover {
- background-color:red;
-}
-
diff --git a/trash/pane/Header.js b/trash/pane/Header.js
deleted file mode 100644
index 44f7dad6..00000000
--- a/trash/pane/Header.js
+++ /dev/null
@@ -1,59 +0,0 @@
-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.core.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/trash/pane/Ocean.css b/trash/pane/Ocean.css
deleted file mode 100644
index 3ad4ff6d..00000000
--- a/trash/pane/Ocean.css
+++ /dev/null
@@ -1,8 +0,0 @@
-fieldset.Ocean div.create pre:hover {
- background-color:red;
-}
-fieldset.Ocean div.create pre:hover {
- background-color:red;
-}
-
-
diff --git a/trash/pane/Ocean.js b/trash/pane/Ocean.js
deleted file mode 100644
index da2b437a..00000000
--- a/trash/pane/Ocean.js
+++ /dev/null
@@ -1,55 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, output, action, option, field) {output.innerHTML = "";
- var ui = can.page.Append(can, field, [{view: ["create"], list: [
- {input: "name", value: can.Conf("def_name"), title: "群聊名称"},
- {button: ["创建群聊", function(event) {
- if (!ui.name.value) {ui.name.focus(); can.user.toast("请输入群名"); return}
-
- var list = can.page.Select(can, ui.list, "tr", function(item, index) {if (index > 0) {
- return item.dataset.user
- }})
- if (list.length == 0) {can.user.toast("请添加组员"); return}
-
- can.run(event, ["spawn", ui.name.value].concat(list), function(msg) {
- can.Hide(), can.Export(event, "update", "river");
- })
- }]}, {name: "list", view: ["list", "table"], list: [
- {text: ["2. 已选用户列表", "caption"]},
- {row: ["username", "usernode"], sub: "th"},
- ]},
- ]}])
- can.ui = ui
- },
- init: function(event, can, msg, key, field) {can.output.innerHTML = ""; can.Show(event, -100, -100);
- var table = can.page.Append(can, can.output, "table");
- can.page.Appends(can, table, [{text: ["1. 选择用户节点 ->", "caption"]}])
-
- can.page.AppendTable(can, table, msg, ["username", "usernode"], function(event, value, key, index, tr, td) {tr.className = "hidden";
- var uis = can.page.Append(can, can.ui.list, [{type: "tr", list: [
- {text: [msg["username"][index], "td"]},
- {text: [msg["usernode"][index], "td"]},
- ], dataset: {user: value}, click: function(event) {
- tr.className = "normal", can.page.Remove(can, uis.tr)
- }}])
- })
- },
- ocean: function(event, can, value, key, field) {
- if (value == "create") {can.Show(event);
- can.run(event, [], function(msg) {
- can.onimport.init(event, can, msg, key, field);
- });
- }
- },
-})
-Volcanos("onaction", {help: "组件交互", list: ["关闭", "刷新"],
- "关闭": function(event, can, meta, key, field) {
- can.Hide()
- },
- "刷新": function(event, can, meta, key, field) {
- can.Import(event, "create", "ocean")
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: ["关闭", "刷新"]})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/pane/River.css b/trash/pane/River.css
deleted file mode 100644
index 5dec11b0..00000000
--- a/trash/pane/River.css
+++ /dev/null
@@ -1,13 +0,0 @@
-fieldset.River {
- float:left;
-}
-fieldset.River>div.output {
- padding:0;
-}
-fieldset.River>div.output>div.item {
- padding-left:6px;
-}
-fieldset.River>div.output>div.item.select {
- background-color:red;
- border:ridge 2px yellow;
-}
diff --git a/trash/pane/River.js b/trash/pane/River.js
deleted file mode 100644
index e49eea33..00000000
--- a/trash/pane/River.js
+++ /dev/null
@@ -1,79 +0,0 @@
-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/trash/pane/Source.css b/trash/pane/Source.css
deleted file mode 100644
index 763e3d43..00000000
--- a/trash/pane/Source.css
+++ /dev/null
@@ -1,10 +0,0 @@
-fieldset.Source {
- overflow:hidden;
-}
-fieldset.Source div.action {
- padding:0;
-}
-fieldset.Source div.output {
- padding:0;
-}
-
diff --git a/trash/pane/Source.js b/trash/pane/Source.js
deleted file mode 100644
index 8a998ab8..00000000
--- a/trash/pane/Source.js
+++ /dev/null
@@ -1,7 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: []})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
diff --git a/trash/pane/Steam.css b/trash/pane/Steam.css
deleted file mode 100644
index 9bbd187a..00000000
--- a/trash/pane/Steam.css
+++ /dev/null
@@ -1,16 +0,0 @@
-fieldset.Steam table.device {
- padding:10px;
- border:solid 1px green;
- margin-left:10px;
- float:left;
-}
-fieldset.Steam div.output tr.select {
- background-color:red;
-}
-fieldset.Steam div.create {
- /* clear:both; */
-}
-fieldset.Steam div.create pre:hover {
- background-color:red;
-}
-
diff --git a/trash/pane/Steam.js b/trash/pane/Steam.js
deleted file mode 100644
index f5a4e9cc..00000000
--- a/trash/pane/Steam.js
+++ /dev/null
@@ -1,113 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, output, action, option, field) {output.innerHTML = "";
- function create(event, cmd) {
- if (!ui.name.value) {ui.name.focus(); can.user.toast("请输入群名"); return}
-
- var list = []
- can.page.Select(can, ui.list, "tr", function(item, index) {if (index > 0) {
- list.push(item.dataset.pod)
- list.push(item.dataset.key)
- list.push(item.dataset.index)
- list.push(item.dataset.help)
- }})
-
- var name = ui.name.value;
- switch (event.target.value) {
- case "创建应用": cmd = "spawn"; break
- case "追加应用": cmd = "append", name = can.Conf("storm"); break
- }
-
- can.run(event, [can.Conf("river"), cmd, name].concat(list), function(msg) {
- can.Hide(), can.Export(event, "update", "storm");
- })
- }
-
- can.page.AppendAction(can, field, [{type: "text", name: "pod"}])
-
- var device = can.page.Append(can, field, [{"view": ["device", "table"]}]).last
- var ui = can.page.Append(can, field, [{view: ["create"], list: [
- {input: "name", value: can.Conf("def_name"), title: "应用名称"},
- {button: ["创建应用", create]},
- {button: ["追加应用", create]},
- {name: "list", view: ["list", "table"], list: [
- {text: ["3. 已选命令列表", "caption"]},
- {row: ["ctx", "cmd", "name", "help"], sub: "th"},
- ]},
- ]}])
- can.device = device
- can.ui = ui
- },
- init: function(event, can, msg, key) {can.output.innerHTML = ""; can.Show(event, -100, -100);
- var table = can.page.Append(can, can.output, "table")
-
- can.page.Append(can, table, [{text: ["1. 选择用户节点 ->", "caption"]}])
- can.page.AppendTable(can, table, msg, ["type", "name", "user"], function(event, value, key, index, tr, td) {
-
- can.page.Select(can, table, "tr.select", function(item) {can.page.ClassList.del(can, item, "select")})
- can.page.ClassList.add(can, tr, "select")
-
- var node = msg.name[index];
- can.run(event, [can.Conf("river"), msg.user[index], node], function(com) {var list = com.Table()
- can.page.Appends(can, can.device, [{text: ["2. 选择模块命令 ->", "caption"]}])
- can.com = list, can.command = can.page.AppendTable(can, can.device, com, ["key", "index", "name", "help"], function(event, value, key, index, tr, td) {
- var line = list[index];
- line.pod = node;
- var last = can.page.Append(can, can.ui.list, [{
- row: [line.key, line.index, line.name, line.help], dataset: line,
- click: function(event) {last.parentNode.removeChild(last)},
- }]).first
-
- }, function(event, value, key, index, tr, td) {
- can.user.carte(event, shy(can.ondetail, can.ondetail.list, function(event, key, meta) {
- meta[key](event, can, com, value, key, index, td)
- }))
- })
- })
- }), table.querySelector("td").click()
- },
- steam: function(event, can, value, key, field) {
- if (value == "create") {
- can.run(event, [can.Conf("river")], function(msg) {
- can.onimport.init(event, can, msg, key, field);
- });
- }
- },
- river: function(event, can, value, key, field) {if (value == "update") {return}
- can.Conf("river", value)
- },
- storm: function(event, can, value, key, field) {if (value == "update") {return}
- can.Conf("storm", value)
- },
-})
-Volcanos("onaction", {help: "组件交互", list: ["关闭", "刷新", {input: ["pod"]}, {input: ["cmd", function(event, can) {
-}, function(event, can) {
- if (event.key == "Enter") {
- can.page.Select(can, can.command, "tr", function(tr, index) {
- if (index == 0) {return}
- if (!can.page.ClassList.has(can, tr, "hidden")) {
- tr.firstChild.click()
- event.target.value = ""
- }
- })
- return
- }
- can.page.Select(can, can.command, "tr", function(tr, index) {
- if (index == 0) {return}
- if (can.com[index-1].index.indexOf(event.target.value) > -1) {
- can.page.ClassList.del(can, tr, "hidden")
- } else {
- can.page.ClassList.add(can, tr, "hidden")
- }
- })
-}]}],
- "关闭": function(event, can, meta, key, field) {
- can.Hide()
- },
- "刷新": function(event, can, meta, key, field) {
- can.Import(event, "create", "steam")
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: ["关闭", "刷新"]})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/pane/Storm.css b/trash/pane/Storm.css
deleted file mode 100644
index b72d830c..00000000
--- a/trash/pane/Storm.css
+++ /dev/null
@@ -1,10 +0,0 @@
-fieldset.Storm {
- float:right;
-}
-fieldset.Storm>div.output {
- padding:0;
-}
-fieldset.Storm>div.output>div.item {
- padding-left:6px;
-}
-
diff --git a/trash/pane/Storm.js b/trash/pane/Storm.js
deleted file mode 100644
index f23ab8ea..00000000
--- a/trash/pane/Storm.js
+++ /dev/null
@@ -1,89 +0,0 @@
-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/trash/pane/Target.css b/trash/pane/Target.css
deleted file mode 100644
index f56a19f1..00000000
--- a/trash/pane/Target.css
+++ /dev/null
@@ -1,23 +0,0 @@
-fieldset.Target div.output div.item:hover {
- background-color:lightgreen;
-}
-fieldset.Target>div.output>div.item {
- padding-top:6px;
- clear:both;
-}
-fieldset.Target>div.output>div.item>div.text {
- padding:6px;
- float:left;
-}
-fieldset.Target>div.output>div.item>div.time {
- padding-left:5px;
- font-size:10px;
- color:gray;
-}
-fieldset.Target>div.output>div.item>div.user {
- border-right:solid 1px green;
- border-bottom:solid 1px green;
- float:left;
- padding:6px;
-}
-
diff --git a/trash/pane/Target.js b/trash/pane/Target.js
deleted file mode 100644
index 8a998ab8..00000000
--- a/trash/pane/Target.js
+++ /dev/null
@@ -1,7 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: []})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
diff --git a/trash/pane/float/Carte.css b/trash/pane/float/Carte.css
deleted file mode 100644
index 149827b1..00000000
--- a/trash/pane/float/Carte.css
+++ /dev/null
@@ -1,32 +0,0 @@
-fieldset.dialog.Carte {
- padding:0;
- border:solid 2px red;
- /* background-color:greenyellow; */
- position:absolute;
- display:none;
- z-index:200;
-}
-fieldset.dialog.Carte>div.action {
- padding:0;
-}
-fieldset.dialog.Carte>div.output {
- padding:0;
-}
-fieldset.dialog.Carte>div.output button {
- display:block;
-}
-fieldset.dialog.Carte>div.output select {
- display:block;
-}
-fieldset.dialog.Carte>div.output div.layout>div {
- float:left;
-}
-fieldset.dialog.Carte>div.output div.item {
- padding:0px 6px;
-}
-fieldset.dialog.Carte>div.output div.space {
- border:solid 1px gray;
- margin-top:8px;
- clear:both;
-}
-
diff --git a/trash/pane/float/Carte.js b/trash/pane/float/Carte.js
deleted file mode 100644
index 715b019b..00000000
--- a/trash/pane/float/Carte.js
+++ /dev/null
@@ -1,41 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, output, action, option, field) {
- can.user.carte = function(event, cb, src) {if (!cb || !cb.list || cb.list.length == 0) {return}
- output.innerHTML = "", can.page.Append(can, output, can.core.List(cb.list, function(item) {
- return {view: ["item"], list: [typeof item == "string"? {text: [item], click: function(event) {
- typeof cb == "function" && cb(event, item, cb.meta)
- }}: item.args? {text: [item.name], click: function(event) {
- can.user.input(event, can, item.args, function(event, cmd, form, list) {
- var msg = can.Event(event);
- can.core.Item(form, function(key, value) {msg.Option(key, value)})
- cmd == "提交" && typeof cb == "function" && cb(event, item.name, cb.meta)
- return true
- })
- }}: {select: [item, function(event) {
- typeof cb == "function" && cb(event, event.target.value, cb.meta)
- }], value: src[item[0]]||""}]}
- }))
- can.page.Select(can, output, "select", function(item) {
- item.value = src[item.className]||""
- })
-
- var pos = {display: "block", left: event.x, top: event.y}
- if (document.body.clientWidth - event.x < 60) {
- var pos = {display: "block", right: event.x, top: event.y}
- }
- pos.left += "px"; pos.top += "px";
- can.page.Modify(can, field, {style: pos})
-
- event.stopPropagation()
- event.preventDefault()
- can.Show(event)
- }
- },
-})
-Volcanos("onaction", {help: "组件交互", list: [],
- onmouseleave: function(event, can) {can.Hide()},
-})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/pane/float/Debug.css b/trash/pane/float/Debug.css
deleted file mode 100644
index 957958ad..00000000
--- a/trash/pane/float/Debug.css
+++ /dev/null
@@ -1,49 +0,0 @@
-fieldset.dialog.Debug {
- opacity:0.8;
-}
-fieldset.dialog.Debug tr.hide {
- display:none;
-}
-fieldset.dialog.Debug tr.event {
- background-color:red;
-}
-fieldset.dialog.Debug tr.run {
- background-color:lightgreen;
-}
-fieldset.dialog.Debug tr.wss {
- background-color:lightblue;
-}
-fieldset.dialog.Debug tr.key {
- background-color:lightyellow;
-}
-fieldset.dialog.Debug>div.output {
- overflow:auto;
- margin-top:50px;
-}
-fieldset.dialog.Debug>div.output table caption {
- position:absolute;
- top:50px;
- left:20px;
-}
-fieldset.dialog.Debug>div.output table thead {
- position:absolute;
- top:72px;
- left:18px;
-}
-fieldset.dialog.Debug>div.output table thead th {
- border:solid 1px red;
-}
-fieldset.dialog.Debug>div.output table caption>span {
- margin-right:4px;
-}
-fieldset.dialog.Debug>div.output table caption>span:hover {
- cursor:pointer;
- background-color:red;
-}
-fieldset.dialog.Debug>div.output table th {
- min-width:60px;
-}
-fieldset.dialog.Debug>div.output table td {
- min-width:60px;
-}
-
diff --git a/trash/pane/float/Debug.js b/trash/pane/float/Debug.js
deleted file mode 100644
index 8a998ab8..00000000
--- a/trash/pane/float/Debug.js
+++ /dev/null
@@ -1,7 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: []})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
diff --git a/trash/pane/float/Favor.css b/trash/pane/float/Favor.css
deleted file mode 100644
index 90fd741a..00000000
--- a/trash/pane/float/Favor.css
+++ /dev/null
@@ -1,28 +0,0 @@
-fieldset.Favor {
- border:solid 2px red;
- background-color:rgba(100,100,100,0.8);
- position:absolute;
- display:none;
- z-index:100;
-}
-fieldset.Favor input.cmd {
- color:white;
- font-size:16px;
- font-weight:bold;
- font-family:monospace;
- background-color:black;
- border:solid 1px white;
- padding:4px;
- min-width:383px;
-}
-fieldset.Favor div.output {
- color:white;
- font-size:16px;
- font-family:monospace;
- white-space:pre;
- max-width:640px;
- max-height:240px;
- overflow:auto;
-}
-
-
diff --git a/trash/pane/float/Favor.js b/trash/pane/float/Favor.js
deleted file mode 100644
index 99c1a4fc..00000000
--- a/trash/pane/float/Favor.js
+++ /dev/null
@@ -1,84 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, output, action, option, field) {
- can.Show(event, 400, 100), can.Hide();
- can.target.style.height = ""
- can.target.style.width = ""
-
- function res(msg) {
- if (msg._hand) {ui.cmd.value = "", output.innerHTML = "";
- msg.result && msg.result.length > 0? can.page.Append(can, output, [{text: msg.Result()}]):
- can.page.AppendTable(can, output, msg, msg.append);
- }
- return msg
- }
- function run(event, cmds) {cmds = can.core.Split(cmds);
- var cmd = cmds[0]; if (cmd == "") {return}
- can.msg = can.Event(event, {detail: cmds});
-
- var cb = can.onexport[cmd];
- typeof cb == "function"? cb(event, can, can.msg, cmds, output): can.Export(event, can.msg, "favor");
- return can.msg._hand? res(can.msg): can.run(event, cmds, res, true);
- }
-
- var ui = can.page.Append(can, option, [{input: ["cmd", function(event) {
- switch (event.key) {
- case "Enter": run(event, event.target.value); return
- case "Escape": can.Hide(); return
- default: if (event.target.value.endsWith("j") && event.key == "k") {
- can.page.DelText(event.target, event.target.selectionStart-1, 2)
- event.target.value == ""? can.Hide(): run(event, event.target.value)
- return
- }
- }
-
- can.page.oninput(event, can)
- return true
- }, function(event) {
- switch (event.key) {
- default: return false
- }
- event.stopPropagation()
- event.preventDefault()
- return true
- }]}])
- },
-
- space: function(event, can, value, cmd, field) {
- can.page.Select(can, can.Show(), "input.cmd", function(item) {
- item.focus()
- })
- },
-})
-Volcanos("onaction", {help: "组件交互", list: ["关闭", "清空", "下载"],
- onmousedown: function(event, can) {
- if (event.ctrlKey) {can.moving = !can.moving, can.movarg = {
- left: can.target.offsetLeft,
- top: can.target.offsetTop,
- x: event.x, y: event.y,
- }}
- },
- onmousemove: function(event, can) {
- if (can.moving) {
- can.target.style.top = can.movarg.top + event.y - can.movarg.y + "px"
- can.target.style.left = can.movarg.left + event.x - can.movarg.x + "px"
- }
- },
- onmouseup: function(event, can) {
- },
- "关闭": function(event, can, value, cmd, field) {
- can.Hide();
- },
- "清空": function(event, can, value, cmd, field) {
- can.output.innerHTML = ""
- },
- "下载": function(event, can, value, cmd, field) {
- var list = can.msg.Export(can._name);
- can.page.Download(can, list[0]+list[1], list[2]);
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: ["下载", "关闭"]})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: [],
- time: function(event, can, msg, cmd, field) {msg.Echo(can.base.Time())},
-})
-
diff --git a/trash/pane/float/Login.css b/trash/pane/float/Login.css
deleted file mode 100644
index 7fba53f1..00000000
--- a/trash/pane/float/Login.css
+++ /dev/null
@@ -1,12 +0,0 @@
-fieldset.Login {
- font-size:24px;
- z-index:20;
-}
-fieldset.Login>form.option input {
- height:24px;
-}
-fieldset.Login>form.option button {
- font-size:18px;
- height:28px;
-}
-
diff --git a/trash/pane/float/Login.js b/trash/pane/float/Login.js
deleted file mode 100644
index 4a66c872..00000000
--- a/trash/pane/float/Login.js
+++ /dev/null
@@ -1,72 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, output, action, option, field) {
- can.user.login = function(cb) {
- var cbs = function(res) {
- typeof cb == "function" && cb(res)
- can.Export({}, res.name, "username")
- }
- can.misc.WSS(can, "", {node: "active", user: can.user.title()}, function(event, msg, cmd, arg) {
- switch (cmd) {
- case "space":
- can._share = arg[1]
- break
- case "sessid":
- can.user.Cookie(can, "sessid", arg[0]), can.user.toast(""), can.Hide()
- cbs({name: msg["user.name"]})
- break
- }
- })
- can.user.Cookie("sessid")? can.onaction.check(event, can, cbs, "check", output):
- can.onaction.login(event, can, cbs, "login", output)
- }
- },
- share: function(event, can, value, cmd, target) {var msg = can.Event(event)
- var list = [];
- switch (value) {
- case "storm": list.push("river", msg.Conf("river")); break
- case "action": list.push("river", msg.Conf("river")), list.push("storm", msg.Conf("storm")); break
- }
- can.run(event, ["share", value, msg.Option("name"), msg.Option("text")].concat(list), function(msg) {
- var p = "/share/" + msg.Result(); can.user.toast({title: msg.Option("name"),
- text: [{text: ''+p+''}, {img: p+"/share"}],
- width: 300, height: 400, duration: 300000,
- })
- })
- },
-})
-Volcanos("onaction", {help: "组件交互", list: [],
- check: function(event, can, cb, cmd, target) {
- can.run(event||{}, ["check"], function(msg) {var user = msg.nickname && msg.nickname[0] || msg.Result()
- user? typeof cb == "function" && cb({name: user}): can.onaction.login(event, can, cb, "login", target)
- })
- },
- login: function(event, can, cb, cmd, target) {
- var ui = can.page.Appends(can, target, [
- {text: ["账号: ", "label"]}, {username: []}, {type: "br"},
- {text: ["密码: ", "label"]}, {password: []}, {type: "br"},
- {button: ["密码登录", function(event, cmd) {
- if (!ui.username.value) {ui.username.focus(); return}
- if (!ui.password.value) {ui.password.focus(); return}
-
- can.run(event, ["login", ui.username.value, ui.password.value], function(msg) {
- if (msg.result && msg.result.length > 0) {
- can.Hide(), can.onaction.check(event, can, cb, "check", target)
- return
- }
- can.user.toast(can, "用户或密码错误")
- })
- }]},
- {button: ["扫码登录", function(event, cmd) {
- can.user.toast(can, {title: "请用微信扫码("+can._share+")", list: [{img: [can.user.Share(can, {
- path: "/share/"+can._share+"/value",
- }, true)]}]})
- }]},
- {type: "br"},
- ])
- can.Show(event, -1, -1)
- },
-})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/pane/float/Toast.css b/trash/pane/float/Toast.css
deleted file mode 100644
index c3c2c555..00000000
--- a/trash/pane/float/Toast.css
+++ /dev/null
@@ -1,41 +0,0 @@
-fieldset.Toast {
- border:solid 2px red;
- /* background-color:rgba(100,100,100,0.8); */
- position:absolute;
- display:none;
- z-index:200;
-}
-fieldset.Toast>div.action {
- padding:0 0px;
-}
-fieldset.Toast>div.output {
- padding:0 10px;
- text-align:center;
-}
-fieldset.Toast>div.output>div.title {
- font-size:12px;
- text-align:center;
- /* color:gray; */
-}
-fieldset.Toast>div.output>div.content {
- word-break:break-word;
- white-space:pre-wrap;
- text-align:center;
- margin:0px;
- padding:2px;
- font-size:16px;
-}
-fieldset.Toast>div.output table {
- /* color:yellow */
-}
-fieldset.Toast>div.output table th {
- /* background:red; */
-}
-fieldset.Toast>div.output table td {
- white-space:pre;
-}
-fieldset.Toast>div.output>div.tick {
- font-size:12px;
- /* color:gray; */
-}
-
diff --git a/trash/pane/float/Toast.js b/trash/pane/float/Toast.js
deleted file mode 100644
index 41d53fa0..00000000
--- a/trash/pane/float/Toast.js
+++ /dev/null
@@ -1,47 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, conf, output) {
- can.Show(200, 100, -100)
- can.target.style.height = ""
- can.target.style.width = ""
-
- var timer;
- can.user.toast = function(text, title, duration, action) {if (!text) {return can.Hide()}
- text = typeof text == "object"? text: {list: action, text: text, title: title||""}
- text.duration = text.duration || conf.duration || 3000
-
- var list = [{text: [text.title||"", "div", "title"]},
- typeof text.text == "string"? {text: [text.text||"", "div", "content"]}: {view: "content", list: text.text},
- {view: ["form"], list: text.list||[{type: "button", inner: "ok", click: function() {
- timer.stop = true
- }}]},
- {text: [text.tick||"", "div", "tick"]},
- ]
-
- var toast = can.page.Appends(can, output, list)
- var width = text.width||text.text.length*10+100
- width = width>800?800:width
- can.Show(event, text.width==undefined? width: text.width, text.height==undefined? 80: text.height)
- toast.Hide = can.Hide
- toast.Show = can.Show
-
- if (text.duration == -1) {return {toast: toast}}
-
- var begin = can.base.Time().split(" ")[1]
- timer = can.core.Timer({value: 1000, length: text.duration > 0? text.duration/1000: text.duration}, function(t, i) {
- if (i < 10) {return}
- if (i > 10000) {return true}
- toast.tick.innerHTML = can.base.Duration(i*t) + " after " + begin
- console.log(t, i)
- }, function() {
- can.Hide()
- })
- timer.toast = toast
- return timer
- }
- },
-})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/pane/float/Tutor.css b/trash/pane/float/Tutor.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/trash/pane/float/Tutor.js b/trash/pane/float/Tutor.js
deleted file mode 100644
index 15b1d58c..00000000
--- a/trash/pane/float/Tutor.js
+++ /dev/null
@@ -1,9 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: []})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
-
-
diff --git a/trash/plugin/chrome/chrome.html b/trash/plugin/chrome/chrome.html
deleted file mode 100644
index ef630a19..00000000
--- a/trash/plugin/chrome/chrome.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/trash/plugin/chrome/chrome.js b/trash/plugin/chrome/chrome.js
deleted file mode 100644
index d1a70e04..00000000
--- a/trash/plugin/chrome/chrome.js
+++ /dev/null
@@ -1,155 +0,0 @@
-var can = Volcanos("chrome", {
- _send: function(msg, cb) {chrome.extension.sendRequest(msg, cb)},
- _open: function(url) {chrome.windows.create({url: url})},
-
- run: function(can, msg, cb) {msg = can.Event({}, msg)
- msg.Option("sid", can.sid||"")
- can.misc.Run({names: "code/chrome/crx", msg: msg}, can, {}, null, cb)
- },
-
- open: function(msg, cmd, cb) {
- chrome.windows.create({url: cmd[0]})
- typeof cb == "function" && cb(msg)
- },
- wins: function(msg, cmd, cb) {
- if (cmd.length == 0) {
- // 窗口列表
- chrome.windows.getAll(function(wins) {
- can.core.List(wins, function(win) {win.wid = win.id
- msg.Push(win, ["wid", "state", "left", "top", "width", "height"])
- })
- typeof cb == "function" && cb(msg)
- })
- return
- }
-
- if (cmd.length > 1) {
- // 新建标签
- chrome.tabs.create({windowId: parseInt(cmd[0]), url: cmd[1], selected: false}, function() {
- can.wins(msg, [cmd[0]], cb)
- })
- return
- }
-
- // 标签列表
- chrome.tabs.getAllInWindow(parseInt(cmd[0]), function(tabs) {
- can.core.List(tabs, function(tab) {tab.tid = tab.id
- msg.Push(tab, ["tid", "active", "width", "height", "index", "title", "url"])
- })
- typeof cb == "function" && cb(msg)
- })
- },
- tabs: function(msg, cmd, cb) {
- if (cmd.length == 0) {
- chrome.tabs.getAllInWindow(function(tabs) {
- can.core.List(tabs, function(tab) {
- msg.Push("id", tab.id)
- msg.Push("active", tab.active)
- msg.Push("index", tab.index)
- msg.Push("title", tab.title)
- msg.Push("url", tab.url)
- })
- typeof cb == "function" && cb(msg)
- })
- return
- }
-
- chrome.tabs[cmd[1]](parseInt(cmd[0]), cb)
- },
- cookie: function(msg, cmd, cb) {
- if (cmd[0] == "modify") {var data = {}; data[cmd[1]] = cmd[2]
- chrome.bookmarks.update(cmd[4], data, function() {
- typeof cb == "function" && cb(msg)
- })
- return
- } else if (cmd[0] == "delete") {
- chrome.bookmarks.remove(cmd[2], function() {
- typeof cb == "function" && cb(msg)
- })
- return
- } else if (cmd.length > 2) {
- chrome.bookmarks.create({parentId: cmd[0], url: cmd[1], title: cmd[2], index: cmd[3]||0}, cb)
- }
-
- chrome.cookies.getAll({name: ""}, function(cs) {
- typeof cb == "function" && cb(msg)
- })
- },
- history: function(msg, cmd, cb) {
- chrome.tabs.getAllInWindow(function(tabs) {
- can.core.List(tabs, function(tab) {
- msg.Push("id", tab.id)
- msg.Push("active", tab.active)
- msg.Push("index", tab.index)
- msg.Push("title", tab.title)
- msg.Push("url", tab.url)
- })
- typeof cb == "function" && cb(msg)
- })
- },
- bookmark: function(msg, cmd, cb) {
- if (cmd[0] == "modify") {var data = {}; data[cmd[1]] = cmd[2]
- chrome.bookmarks.update(cmd[4], data, function() {
- typeof cb == "function" && cb(msg)
- })
- return
- } else if (cmd[0] == "delete") {
- chrome.bookmarks.remove(cmd[2], function() {
- typeof cb == "function" && cb(msg)
- })
- return
- } else if (cmd.length > 2) {
- chrome.bookmarks.create({parentId: cmd[0], url: cmd[1], title: cmd[2], index: cmd[3]||0}, cb)
- }
-
- chrome.bookmarks.getSubTree(cmd[0]||"0", function(labs) {
- for (var i = 0; i < labs.length; i++) {labs[i].pid = labs[i].parentId
- msg.Push("time", can.base.Time(labs[i].dateAdded))
- msg.Push(labs[i], ["pid", "id", "index", "title", "url"])
- labs = labs.concat(labs[i].children||[])
- }
- typeof cb == "function" && cb(msg)
- })
- },
-}, Config.libs.concat(Config.list), function(can) {can.Conf(Config)
- can.user.toast = function(message, title) {chrome.notifications.create(null, {
- message: message, title: title||Config.title, iconUrl: "/favicon.ico", type: "basic",
- })},
-
- can.misc.WSS(can, "ws://localhost:9020/space/", {node: "chrome", name: chrome.runtime.id}, function(event, msg) {
- if (msg.Option("_handle")) {return can.user.toast(msg.result.join(""))}
-
- can.user.toast(msg.detail.join(" "))
- switch (msg.detail[0]) {
- case "space": can._share = msg.detail[2]; break
- case "pwd": msg.Echo("hello world"); break
- default: (can[msg.detail[0]]||can.chrome[msg.detail[0]])(msg, msg.detail.slice(1), function(msg) {
- msg.Reply(msg)
- }); return
- }
- msg.Reply(msg)
- }, function() {can.user.toast("wss connect", "iceberg")})
-
- can.run(can, {cmd: ["login", can.sid||""]}, function(msg) {
- can.sid = msg.Result()
- })
-
- chrome.history.onVisited.addListener(function(item) {
- can.run(can, {cmd: ["history", item.id, item.url, item.title]}, function(msg) {
- can.user.toast(item.url, item.title)
- })
- })
-
- chrome.bookmarks.onCreated.addListener(function(id, item) {
- chrome.bookmarks.get(item.parentId, function(root) {
- can.run(can, {cmd: ["bookmark", item.id, item.url, item.title, root[0].title]}, function(msg) {
- can.user.toast(item.url, item.title)
- })
- })
- })
-
- chrome.extension.onRequest.addListener(function(msg, sender, cb) {
- can.run(can, msg, cb)
- })
-})
-
diff --git a/trash/plugin/chrome/config.js b/trash/plugin/chrome/config.js
deleted file mode 100644
index cb6bbfaa..00000000
--- a/trash/plugin/chrome/config.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var Config = {iceberg: "http://localhost:9020/", volcano: "/",
- libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"],
- main: "chat", list: ["page/chat",
- "pane/Toast", "pane/Tutor", "pane/Debug",
- "pane/Carte", "pane/Favor", "pane/Login",
-
- "pane/Header",
- "pane/Ocean", "pane/River", "pane/Storm", "pane/Steam",
- "pane/Target", "pane/Source", "pane/Action",
- "pane/Footer",
-
- "plugin/state", "plugin/input", "plugin/table", "plugin/inner",
- ], pane: [
- {group: "index", name: "Toast", pos: "dialog", duration: 3000},
- {group: "index", name: "Tutor", pos: "dialog"},
- {group: "index", name: "Debug", pos: "dialog"},
- {group: "index", name: "Carte", pos: "dialog"},
- {group: "index", name: "Favor", pos: "dialog"},
- {group: "index", name: "Login", pos: "dialog"},
-
- {group: "index", name: "Header", pos: "head", state: ["time", "user", "link"], title: "github.com/shylinux/context"},
- {group: "index", name: "Ocean", pos: "dialog", def_name: "meet"},
- {group: "index", name: "River", pos: "left"},
- {group: "index", name: "Storm", pos: "right"},
- {group: "index", name: "Steam", pos: "dialog", def_name: "miss"},
-
- {group: "index", name: "Target", pos: "top"},
- {group: "index", name: "Source", pos: "center"},
- {group: "index", name: "Action", pos: "bottom"},
- {group: "index", name: "Footer", pos: "foot", state: ["ntxt", "ncmd"], title: 'shylinux@163.com'},
-
- ], title: "范晓旭", 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: 0, foot: 0, left: 0, right: 0, bottom: -1, center: 0, top: 0},
- }, border: 4,
- },
-}
-
diff --git a/trash/plugin/chrome/popup.html b/trash/plugin/chrome/popup.html
deleted file mode 100644
index 902facfd..00000000
--- a/trash/plugin/chrome/popup.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/trash/plugin/chrome/popup.js b/trash/plugin/chrome/popup.js
deleted file mode 100644
index 2c1ef1c9..00000000
--- a/trash/plugin/chrome/popup.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var can = Volcanos("popup", {
- demo: function() {
- can.chrome.notice("hi", "hello")
- },
-}, Config.libs.concat(Config.list), function(can) {can.Conf(Config)
- can.page.Append(can, document.body, [{button: ["baidu", function() {
- can.chrome.open("https://www.baidu.com")
- }]}])
- can.page.Append(can, document.body, [{button: ["volcanos", function() {
- can.chrome.open("http://localhost:9020")
- }]}])
-
- can.page.Append(can, document.body, [{button: ["send", function() {
- can.chrome.send({names: "crx", cmds: ["hi"]}, function(msg) {
- can.chrome.notice("hi", "hello")
- console.log(msg)
- })
- }]}])
-})
diff --git a/trash/plugin/inner.js b/trash/plugin/inner.js
deleted file mode 100644
index 0a972805..00000000
--- a/trash/plugin/inner.js
+++ /dev/null
@@ -1,13 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: shy("添加控件", function(can, msg, cb, output, action, option) {output.innerHTML = ""
- can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
- can.Export(event, value.trim(), key, index)
- }) || (output.innerHTML = msg.Result())
- }),
-})
-Volcanos("onaction", {help: "控件交互", list: []})
-Volcanos("onchoice", {help: "控件菜单", list: []})
-Volcanos("ondetail", {help: "控件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
diff --git a/trash/plugin/input.js b/trash/plugin/input.js
deleted file mode 100644
index b084acc4..00000000
--- a/trash/plugin/input.js
+++ /dev/null
@@ -1,117 +0,0 @@
-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/trash/plugin/input/city.js b/trash/plugin/input/city.js
deleted file mode 100644
index 0201fccf..00000000
--- a/trash/plugin/input/city.js
+++ /dev/null
@@ -1,13 +0,0 @@
-Volcanos("onfigure", {help: "控件详情", list: [],
- city: {click: function(event, can, value, cmd, target, figure) {
- function run() {figure.output.innerHTML = ""
- can.Run(event, ["action", "input", can.item.name, target.value], function(msg) {
- can.page.AppendTable(can, figure.output, msg, msg.append, function(event, value, key, index, tr, td) {
- target.value = value; msg.Option("_refresh") && run()
- })
- }, true)
- }
- run()
- }},
-})
-
diff --git a/trash/plugin/input/date.js b/trash/plugin/input/date.js
deleted file mode 100644
index f3618719..00000000
--- a/trash/plugin/input/date.js
+++ /dev/null
@@ -1,73 +0,0 @@
-Volcanos("onfigure", {help: "控件详情", list: [],
- date: {click: function(event, can, value, cmd, target, figure) {
- // 设置输入
- target.style.width = "120px"
- function set(now) {
- target.value = can.base.Time(now);
- can.item.action == "auto" && can.run({});
- }
-
- // 添加插件
- figure.table = can.page.Append(can, figure.output, [{type: "table"}]).first
-
- // 添加控件
- can.now = target.value? new Date(target.value): new Date();
- var control = can.page.AppendAction(can, figure.action, ["今天", "随机",
- ["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)), {view: ["", "br"]},
- {type: "hr", style: {margin: 0}}, {type: "br"},
- "上一月", ["year"].concat(can.core.List(can.now.getFullYear() - 20, can.now.getFullYear() + 20)),
- ["month"].concat(can.core.List(1, 13)), "下一月", {view: ["", "br"]},
- ], function(event, value, cmd) {can.stick = true;
- // 设置时间
- switch (cmd) {
- case "year": can.now.setFullYear(parseInt(value)); show(can.now); return;
- case "month": can.now.setMonth(parseInt(value)-1); show(can.now); return;
- case "hour": can.now.setHours(parseInt(value)); set(show(can.now)); return;
- case "minute": can.now.setMinutes(parseInt(value)); set(show(can.now)); return;
- case "second": can.now.setSeconds(parseInt(value)); set(show(can.now)); return;
- }
-
- // 设置日期
- switch (value) {
- case "今天": can.now = new Date(); set(show(can.now)); break;
- case "随机": can.now.setDate((Math.random() * 100 - 50) + can.now.getDate()); set(show(can.now)); break;
- case "关闭": can.page.Remove(can, figure.first); delete(can.figure);
- case "前一年": can.now.setFullYear(can.now.getFullYear()-1); show(can.now); break;
- case "后一年": can.now.setFullYear(can.now.getFullYear()+1); show(can.now); break;
- case "上一月": can.now.setMonth(can.now.getMonth()-1); show(can.now); break;
- case "下一月": can.now.setMonth(can.now.getMonth()+1); show(can.now); break;
- }
- })
-
- function show(now) {
- // 设置控件
- control.month.value = now.getMonth()+1;
- control.year.value = now.getFullYear();
- control.hour.value = now.getHours();
- control.minute.value = parseInt(now.getMinutes()/5)*5;
- control.second.value = parseInt(now.getSeconds()/5)*5;
-
- // 设置组件
- can.page.Appends(can, figure.table, [{type: "tr", list: can.core.List(["日", "一", "二", "三", "四", "五", "六"], function(day) {return {text: [day, "th"]}})}])
- var tr; function add(day, type) {if (day.getDay() == 0) {tr = can.page.Append(can, figure.table, [{type: "tr"}]).tr}
- can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(day).split(" ")[0] == can.base.Time(now).split(" ")[0]? "select": type],
- dataset: {date: day.getTime()}, click: function(event) {set(can.now = new Date(parseInt(event.target.dataset.date)))},
- }])
- }
-
- // 时间区间
- var one = new Date(now); one.setDate(1);
- var end = new Date(now); end.setMonth(now.getMonth()+1); end.setDate(1);
- var head = new Date(one); head.setDate(one.getDate()-one.getDay());
- var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay());
-
- // 时间序列
- for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) {add(day, "last")}
- for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) {add(day, "main")}
- for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
- return now
- }
-
- set(show(can.now));
- }},
-})
diff --git a/trash/plugin/input/key.js b/trash/plugin/input/key.js
deleted file mode 100644
index 6aaf6de0..00000000
--- a/trash/plugin/input/key.js
+++ /dev/null
@@ -1,12 +0,0 @@
-Volcanos("onfigure", {help: "控件详情", list: [],
- key: {click: function(event, can, value, cmd, target, figure) {
- function run() {figure.output.innerHTML = ""
- can.Run(event, ["action", "input", can.item.name, target.value], function(msg) {
- can.page.AppendTable(can, figure.output, msg, msg.append, function(event, value, key, index, tr, td) {
- target.value = value; msg.Option("_refresh") && run()
- })
- }, true)
- }
- run()
- }},
-})
diff --git a/trash/plugin/input/province.js b/trash/plugin/input/province.js
deleted file mode 100644
index 89215f15..00000000
--- a/trash/plugin/input/province.js
+++ /dev/null
@@ -1,18 +0,0 @@
-Volcanos("onfigure", {help: "控件详情", list: [],
- province: {click: function(event, can, value, cmd, target, figure) {
- figure.fieldset.style.left = "20px"
- figure.fieldset.style.top = "200px"
-
- var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).last);
-
- var option = {geo: {map: 'china'}};
- china_chart.setOption(option);
-
- china_chart.on('click', function (params) {
- target.value = params.name;
- });
- }},
-}, [
- "plugin/github.com/shylinux/echarts/echarts.js",
- "plugin/github.com/shylinux/echarts/china.js",
-])
diff --git a/trash/plugin/input/upload.js b/trash/plugin/input/upload.js
deleted file mode 100644
index b0dd7822..00000000
--- a/trash/plugin/input/upload.js
+++ /dev/null
@@ -1,38 +0,0 @@
-Volcanos("onfigure", {help: "控件详情", list: [],
- upload: {click: function(event, can, value, cmd, target, figure) {figure.stick = true
- var begin = new Date();
- function show(event, value, total, loaded) {
- var now = new Date(); can.page.Appends(can, figure.output, [
- {view: ["progress"], style: {height: "10px", border: "solid 2px red"}, list: [{
- view: ["progress"], style: {height: "10px", width: value + "%", background: "red"},
- }]},
- {text: [value+"%", "div"], style: {"float": "right"}},
- {text: [can.base.Duration(now - begin), "div"], style: {"float": "left"}},
- {text: [can.base.Size(loaded)+"/"+can.base.Size(total), "div"], style: {"text-align": "center"}},
- ]);
- }
-
- var action = can.page.AppendAction(can, figure.action, [
- {type: "input", data: {name: "upload", type: "file", onchange: function(event) {
- var file = action.upload.files[0]
- console.log(file)
- show(event, 0, file.size, 0)
- }}, style: {width: "200px"}}, "上传", "关闭"], function(event, value, cmd) {
- if (action.upload.files.length == 0) {return action.upload.focus()}
- if (value == "关闭") {figure.stick = false; return}
-
- var msg = can.Event(event);
- can.page.Select(can, can._plugin.option, "input", function(item) {
- item.name && item.value && msg.Option(item.name, item.value)
- })
-
- // 上传文件
- begin = new Date();
- msg._progress = show
- msg.upload = action.upload.files[0];
- can.run(event, ["action", "upload"], function(msg) {
- can.user.toast("上传成功")
- }, true);
- })
- }},
-})
diff --git a/trash/plugin/local/mall/input.js b/trash/plugin/local/mall/input.js
deleted file mode 100644
index 0aae3a62..00000000
--- a/trash/plugin/local/mall/input.js
+++ /dev/null
@@ -1,39 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _init: function(can, feature, output, action, option) {
- function passcode(event) {
- can.Run(event, [], function(msg) {
- can.page.Appends(can, output, [{type: "img", src: "data:image/jpg;base64,"+msg.image[0], onclick: function(event) {
- var p = can.page.Append(can, output, [{view: ["what", "div"], dataset: {meta: ""+(event.offsetX+1)+","+(event.offsetY-30+1)+""}, style: {
- background: "red", position: "absolute", width: "20px", height: "20px",
- left: event.offsetX+1+"px", top: event.offsetY+30+1+"px",
- }, onclick: function(event) {
- p.parentNode.removeChild(p)
- }}]).what
- }}])
- }, true)
- }
-
- can.page.Append(can, option, [
- {button: ["刷新", passcode]},
- {username: ["账号", "args"]}, {password: ["密码", "args"]},
- {button: ["登录", function(event) {
- var point = can.page.Select(can, output, "div.what", function(item) {return item.dataset.meta}).join(",")
- point == ""? can.page.toast("请点击图片"): can.Run(event, ["check", point], function(msg) {
- if (msg.result_code == "4") {
- var input = can.page.Select(can, option, "input.args", function(item) {return item.value})
- can.Run(event, ["login"].concat(input).concat([msg.cmds[4]]), function(msg) {
- can.page.toast(msg.result_message[0])
- })
- } else {
- passcode(event)
- }
- }, true)
- }]},
- ])
- },
-})
-Volcanos("onaction", {help: "控件交互", list: []})
-Volcanos("onchoice", {help: "控件菜单", list: []})
-Volcanos("ondetail", {help: "控件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/plugin/local/team/plan.css b/trash/plugin/local/team/plan.css
deleted file mode 100644
index a4932772..00000000
--- a/trash/plugin/local/team/plan.css
+++ /dev/null
@@ -1,22 +0,0 @@
-fieldset.item.plan div.output td {
- vertical-align:top;
-}
-fieldset.item.plan div.output td.over {
- border:solid 2px red;
-}
-
-fieldset.item.plan div.output div.task.finish {
- color:red;
-}
-fieldset.item.plan div.output div.task.finish:hover {
- color:white;
-}
-fieldset.item.plan div.output div.task.process {
- color:green;
-}
-fieldset.item.plan div.output div.task.process:hover {
- color:white;
-}
-fieldset.item.plan div.output div.task.cancel {
- color:yellow;
-}
diff --git a/trash/plugin/local/team/plan.js b/trash/plugin/local/team/plan.js
deleted file mode 100644
index a51cc40b..00000000
--- a/trash/plugin/local/team/plan.js
+++ /dev/null
@@ -1,129 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
- var table = can.page.AppendTable(can, output, msg, msg.append);
- table.onclick = function(event) {switch (event.target.tagName) {
- case "SPAN":
- case "TD":
- var input = can.user.input(event, can, ["zone", "type", "name", "text"], function(event, value, data) {
- switch (value) {
- case "提交":
- // 创建任务
- can.run(event, ["action", "insert", data.zone, data.type, data.name, data.text, "begin_time", can.base.Time()], function(msg) {
- can.page.Remove(can, input.first)
- can.user.toast("添加成功")
- can.Runs(event)
- return true
- }, true)
- break
- case "关闭": return true;
- }
- })
- break
- case "TH":
- break
- case "TR":
- case "TABLE":
- }}
-
- table.oncontextmenu = function(event) {var target = event.target;
- switch (event.target.tagName) {
- case "DIV":
- // 任务操作
- var data = target.dataset;
- can.user.carte(event, shy("", can.ondetail, can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
- typeof cb == "function"? cb(event, can, msg, data.id, data.zone, cmd, target):
- can.run(event, ["action", typeof cb == "string"? cb: cmd, data.id, data.zone], function(msg) {
- can.user.toast("修改成功")
- }, true)
- }))
- event.stopPropagation()
- event.preventDefault()
- break
- case "TD":
- break
- case "TH":
- case "TR":
- case "TABLE":
- }
- }
-
- can.page.Select(can, table, "div.task", 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()
- can.preview.insertBefore(can.drag, item)
- }
- })
-
- can.page.Select(can, table, "tr", function(tr) {tr.list = [];
- can.page.Select(can, tr, "td", function(item, index) {tr.list.push(item);
- item.ondragover = function(event) {event.preventDefault(), can.page.Select(can, table, "td.over", function(item) {
- can.page.ClassList.del(can, item, "over")
- }), can.page.ClassList.add(can, item, "over")}
-
- item.ondrop = function(event) {event.preventDefault()
- item.append(can.drag)
-
- // 任务排期
- var data = can.drag.dataset;
- var begin_time = new Date(data.begin_time);
-
- switch (can.Option("scale")) {
- case "long":
- begin_time.setYear(parseInt(tr.list[0].innerText));
- break
- case "year":
- begin_time.setMonth(parseInt(tr.list[0].innerText)-1);
- break
- case "month":
- can.page.Select(can, item, "span", function(item) {var data = item.dataset
- begin_time.setYear(parseInt(data.year))
- begin_time.setMonth(parseInt(data.month)-1)
- begin_time.setDate(parseInt(data.day))
- })
- break
- case "week":
- begin_time.setDate(begin_time.getDate() - (begin_time.getDay() - index + 1))
- case "day":
- begin_time.setHours(parseInt(tr.list[0].innerText));
- begin_time.setMinutes(0);
- begin_time.setSeconds(0);
- }
-
- can.run(event, ["action", "modify", "begin_time", can.base.Time(begin_time), data.begin_time, data.id, data.zone], function(msg) {
- can.user.toast("修改成功")
- }, true);
- }
- })
- })
-
- return typeof cb == "function" && cb(msg), table;
- },
- which: function(event, table, list, cb) {if (event.target == table) {return cb(-1, "")}
- can.page.Select(can, table, "tr", function(tr, index) {if (event.target == tr) {return cb(index-1, "")}
- can.page.Select(can, tr, "th,td", function(td, order) {
- if (event.target == td) {return cb(index-1, list[order])}
- })
- })
- },
-}, ["plugin/local/team/plan.css"])
-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 = "";
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: ["开始", "完成", "取消"],
- "开始": "process",
- "完成": "finish",
- "取消": "cancel",
-})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
-
diff --git a/trash/plugin/local/wiki/data.js b/trash/plugin/local/wiki/data.js
deleted file mode 100644
index 72731fa7..00000000
--- a/trash/plugin/local/wiki/data.js
+++ /dev/null
@@ -1,149 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
- can.table = can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
- can.Export(event, value, key)
- }, function(event, value, key, index, tr, td) {
- can.user.carte(event, shy("上下文菜单", can.ondetail, 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, tr):
- (cb = can.onchoice[cmd], typeof cb == "function")? cb(event, can, msg, index, key, cmd, td, tr):
- (cb = can.onaction[cmd], typeof cb == "function")? cb(event, can, msg, index, key, cmd, td, tr):
- can.run(event, ["action", typeof cb == "string"? cb: cmd, key, value.trim(), msg.Ids(index)], function(msg) {
- can.user.toast(msg.Result())
- }, true)
- }))
- });
- },
-})
-Volcanos("onfigure", {help: "组件菜单", list: ["保存", "求和"],
- "求和": function(event, can, res, td, index) {
- res[index] = parseInt(td.innerText) + (res[index]||0);
- },
- "最大": function(event, can, res, td, index) {
- var n = parseInt(td.innerText);
- n > (res[index]||-10000) && (res[index] = n);
- },
- "最小": function(event, can, res, td, index) {
- var n = parseInt(td.innerText);
- n < (res[index]||10000) && (res[index] = n);
- },
- "平均": function(event, can, res, td, ncol, cols, rows, nrow) {
- res[ncol] = parseInt(td.innerText) + (res[ncol]||0);
- if (nrow == rows.length - 1) {
- res[ncol] = res[ncol] / nrow
- }
- },
-})
-Volcanos("onaction", {help: "组件菜单", list: ["保存", ["mode", "正常", "块选", "反选", "多选", "拖动", "编辑"], "求和", "最大", "最小", "平均"],
- "保存": function(event, can, msg, cmd, target) {
- can.run(event, ["action", cmd, can.Option("path"), can.Export(event, "", "file")], function(msg) {
- can.user.toast("保存成功")
- }, true)
- },
- "正常": function(event, can, msg, cmd, target) {
- cmd && can.Action("mode", cmd)
- can.page.Select(can, can.table, "tr", function(item) {
- item.setAttribute("contenteditable", false)
- item.setAttribute("draggable", false)
- item.onmouseenter = null
- item.onclick = null
- })
- },
- "块选": function(event, can, msg, cmd, target) {
- cmd && can.Action("mode", cmd)
- can.page.Select(can, can.table, "tr", function(item) {
- item.onmouseenter = function() {
- can.page.ClassList.add(can, item, "select")
- }
- })
- },
- "反选": function(event, can, msg, cmd, target) {
- cmd && can.Action("mode", cmd)
- can.page.Select(can, can.table, "tr", function(item) {
- item.onmouseenter = function() {
- can.page.ClassList.del(can, item, "select")
- }
- })
- },
- "多选": function(event, can, msg, cmd, target) {
- cmd && can.Action("mode", cmd)
- can.page.Select(can, can.table, "tr", function(item) {
- item.onclick = function() {
- can.page.ClassList.neg(can, item, "select")
- }
- })
- },
- "拖动": function(event, can, msg, cmd, target) {
- can.onaction["正常"](event, can, msg, cmd, target)
- can.page.Select(can, can.table, "tr", function(item) {
- item.setAttribute("draggable", true)
- item.ondragstart = function(event) {can.drag = item}
- item.ondragover = function(event) {
- event.preventDefault(),
- can.page.ClassList.add(can, item, "over")}
- item.ondragleave = function(event) {
- can.page.ClassList.del(can, item, "over")
- }
- item.ondrop = function(event) {event.preventDefault()
- can.table.insertBefore(can.drag, item)
- }
- })
- },
- "编辑": function(event, can, msg, cmd, target) {
- cmd && can.Action("mode", cmd)
- can.page.Select(can, can.table, "tr", function(item) {
- item.setAttribute("contenteditable", true)
- })
- },
-
- show: function(event, can, msg, cmd, target) {
- var res = {};
- var method = can.onfigure[cmd];
- var mul = "tr" + (can.Action("mode") == "正常"? "": ".select");
-
-
- can.page.Select(can, can.table, mul, function(tr, nrow, rows) {
- (mul != "tr" || nrow > 0) && can.page.Select(can, tr, "td", function(td, ncol, cols) {
- method && method(event, can, res, td, ncol, cols, rows, nrow)
- })
- });
- can.page.Append(can, can.target, [{type: "table", list: [{type: "tr", list: can.core.Item(res, function(key, value) {
- return {text: [value, "td"]}
- }).concat([{text: [cmd, "td"]}])}]}]);
- },
- "求和": function(event, can, msg, cmd, target) {
- can.onaction.show(event, can, msg, cmd, target)
- },
- "最大": function(event, can, msg, cmd, target) {
- can.onaction.show(event, can, msg, cmd, target)
- },
- "最小": function(event, can, msg, cmd, target) {
- can.onaction.show(event, can, msg, cmd, target)
- },
- "平均": function(event, can, msg, cmd, target) {
- can.onaction.show(event, can, msg, cmd, target)
- },
-})
-Volcanos("onchoice", {help: "组件交互", list: ["保存", "块选", "反选", "求和"]})
-Volcanos("ondetail", {help: "组件详情", list: ["复制", "块选", "反选", "编辑", "删除"],
- "复制": function(event, can, msg, index, key, cmd, td, tr) {
- var end = can.page.Append(can, can.table, [{type: "tr", list: can.page.Select(can, tr, "td", function(item) {
- return {text: [item.innerHTML, "td"]}
- })}]).tr
- can.table.insertBefore(end, tr)
- },
- "删除": function(event, can, msg, index, key, cmd, td, tr) {
- can.page.Remove(can, tr)
- },
-})
-Volcanos("onstatus", {help: "组件状态", list: []})
-Volcanos("onexport", {help: "导出数据", list: [],
- file: function(event, can, csv, cmd, target) {
- return can.page.Select(can, target, "tr", function(tr) {
- return can.page.Select(can, tr, "th,td", function(td) {return td.innerHTML}).join(",")
- }).join("\n")
- },
-})
-
diff --git a/trash/plugin/local/wiki/draw.css b/trash/plugin/local/wiki/draw.css
deleted file mode 100644
index 31a75bdb..00000000
--- a/trash/plugin/local/wiki/draw.css
+++ /dev/null
@@ -1,34 +0,0 @@
-
-fieldset.item>div.output>div.status>div {
- float:left;
- height:20px;
- border:1px solid black;
-}
-fieldset.item>div.output>div.status>input.cmd {
- float:left;
- background-color:black;
- color:lightgreen;;
- font-size:16px;
- width:250px;
-}
-fieldset.item>div.output>div.action>button.trap {
- background-color:lightblue;
- border:2px blue solid;
-}
-fieldset.item>div.output>div.action>div.space {
- width:10px;
- display:inline-block;
-}
-fieldset.item>div.output>canvas {
- background-color:#8dd09e;
-}
-fieldset table tr.hidden {
- display:none;
-}
-fieldset table th.order {
- background-color:red;
- cursor:pointer;
-}
-fieldset table td.clip {
- background-color:red;
-}
diff --git a/trash/plugin/local/wiki/draw.js b/trash/plugin/local/wiki/draw.js
deleted file mode 100644
index 26d9cd88..00000000
--- a/trash/plugin/local/wiki/draw.js
+++ /dev/null
@@ -1,921 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- _start: function(can) {
- var def = {
- "font-size": "24",
- "stroke-width": 2,
- "stroke": "yellow",
- "fill": "purple",
- "grid": "10",
- }
- // 默认参数
- can.core.Item(def, function(key, value) {
- can.svg.Value(key, can.Action(key, can.svg.Value(key)||value))
- })
- can.Action("mode", "select")
- can.Action("mode", "draw")
- can.Action("shape", "path")
- },
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
- if (msg.Option("_display") == "table") {
- // 文件目录
- can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
- can.Export(event, value, key)
- })
- return typeof cb == "function" && cb(msg);
- }
-
- // 交互数据
- can.point = [], can.keys = []
- can.current = null, can.temp = null
- can.group = null, can.svg = null
- can.last = null
-
- // 加载绘图
- var code = can.page.AppendBoard(can, output, msg.Result()||can.Export(event, null, "file"))
- can.page.Select(can, output, "svg", function(svg) {
- // 画布
- can.onaction.init(event, can, msg, "init", svg);
- can.group = can.svg = svg;
-
- var list = can.core.List(can.onaction.list, function(item, index) {if (item[0] == "group") {
- // 清空分组
- return can.onaction.list[index] = ["group", "svg"]
- }})[0]
-
- can.page.Select(can, svg, "*", function(item, index) {
- // 元素
- can.onaction.init(event, can, msg, index, item);
- item.tagName == "g" && item.Value("class") != "" && list.push(item.Value("class"));
- })
- })
-
- return typeof cb == "function" && cb(msg);
- },
- draw: function(event, can, value) {
- var figure = can.onfigure[value.shape]
- var data = figure.draw(event, can, value.point, value.style)
- can.core.Item(value.style, function(key, value) {data[key] = value})
- return can.onaction.push(event, can, data, value.shape, can.group||can.svg)
- },
- escape: function(event, can, value) {
- can.point = can.point.slice(0, -1)
- },
- keydown: function(event, can, value) {
- if (["Control", "Shift", "Meta", "Alt"].indexOf(value) > -1 ) {return}
- can.keys.push((event.ctrlKey? "C-": "") + (event.shiftKey? value.toUpperCase(): value))
-
- var list = {
- a: {prefix: ["mode", "mode"],
- w: {list: ["draw"]},
- m: {list: ["move"]},
- r: {list: ["resize"]},
- s: {list: ["select"]},
- d: {list: ["delete"]},
- },
- s: {prefix: ["shape", "shape"],
- r: {list: ["rect"]},
- c: {list: ["circle"]},
- e: {list: ["ecllipse"]},
- t: {list: ["text"]},
- l: {list: ["line"]},
- },
- c: {prefix: ["stroke", "stroke"],
- r: {list: ["red"]},
- b: {list: ["blue"]},
- g: {list: ["green"]},
- y: {list: ["yellow"]},
- p: {list: ["purple"]},
- c: {list: ["cyan"]},
- h: {list: ["black"]},
- w: {list: ["white"]},
- },
- f: {prefix: ["fill", "fill"],
- r: {list: ["red"]},
- b: {list: ["blue"]},
- g: {list: ["green"]},
- y: {list: ["yellow"]},
- p: {list: ["purple"]},
- c: {list: ["cyan"]},
- h: {list: ["black"]},
- w: {list: ["white"]},
- },
- }
-
- var prefix = []
- can.core.List(can.keys, function(key) {
- if (!list) {
- // 查找失败
- return can.keys = [], can.Status(event, can.keys, "keys")
- }
-
- // 查找递进
- prefix = prefix.concat(can.core.List(list.prefix))
- list = list[key]
- })
-
- if (!list || !list.list) {
- // 等待输入
- return can.Status(event, can.keys+"("+can.core.Item(list).join(",")+")", "keys")
- }
-
- function call(cmds) {
- cmds && can.onaction[cmds[0]] && can.onaction[cmds[0]].apply(can, [event, can].concat(cmds.slice(1)))
- }
-
- // 执行命令
- call(prefix.concat(list.list))
- return can.keys = [], can.Status(event, can.keys, "keys")
- },
-}, ["plugin/local/wiki/draw.css"])
-Volcanos("onfigure", {help: "图形绘制", list: [],
- _spawn: function(sup, can) {can.sup = sup},
- _swell: function(can, sub) {
- can.sup && can.sup.action && sub.draw && can.page.Select(can, can.sup.action, "select.shape", function(shape) {
- can.page.Append(can, shape, [{text: [sub._name, "option"]}])
- })
- },
- svg: {
- data: {
- size: {},
- }, //
- show: function(event, can, value, target) {
- return can.svg.Val("width") +","+ can.svg.Val("width")
- },
- },
- rect: {
- data: {
- rx: 4, ry: 4,
- size: {x: "x", y: "y"},
- copy: ["width", "height", "rx", "ry"],
- }, //
- draw: function(event, can, point) {if (point.length < 2) {return}
- var p0 = point[0], p1 = point[1];
- var data = {
- "x": p0.x > p1.x? p1.x: p0.x,
- "y": p0.y > p1.y? p1.y: p0.y,
- "width": Math.abs(p0.x-p1.x),
- "height": Math.abs(p0.y-p1.y),
- "rx": this.data.rx,
- "ry": this.data.ry,
- }
- return event.type == "click" && point.length == 2 && (can.point = []), data;
- },
- text: function(event, can, data, target) {
- data.x = target.Val("x")+target.Val("width")/2
- data.y = target.Val("y")+target.Val("height")/2
- return data
- },
- show: function(event, can, value, target) {
- return ": (" + value.Val("x") + "," + value.Val("y") + ")"
- + " + (" + value.Val("width") + "," + value.Val("height") + ")"
- },
- },
- circle: {
- data: {
- size: {x: "cx", y: "cy", width: "r", height: "r"},
- copy: ["r"],
- }, //
- draw: function(event, can, point) {if (point.length < 2) {return}
- var p0 = point[0], p1 = point[1];
- var data = {
- "cx": p0.x, "cy": p0.y,
- "r": Math.sqrt(Math.pow(p0.x-p1.x, 2)+Math.pow(p0.y-p1.y, 2)),
- }
- return event.type == "click" && point.length == 2 && (can.point = []), data;
- },
- text: function(event, can, data, target) {
- data.x = target.Val("cx")
- data.y = target.Val("cy")
- return data
- },
- show: function(event, can, value, target) {
- return ": (" + value.Val("cx") + "," + value.Val("cy") + ")"
- + " > (" + parseInt(value.Val("r")) + ")"
- },
- },
- ellipse: {
- data: {
- size: {x: "cx", y: "cy", width: "rx", height: "ry"},
- copy: ["rx", "ry"],
- }, //
- draw: function(event, can, point) {if (point.length < 2) {return}
- var p0 = point[0], p1 = point[1];
- var data = {
- "cx": p0.x, "cy": p0.y,
- "rx": Math.abs(p0.x - p1.x), "ry": Math.abs(p0.y - p1.y),
- }
- return event.type == "click" && point.length == 2 && (can.point = []), data;
- },
- text: function(event, can, data, target) {
- data.x = target.Val("cx")
- data.y = target.Val("cy")
- return data
- },
- show: function(event, can, value, target) {
- return ": (" + value.Val("cx") + "," + value.Val("cy") + ")"
- + " > (" + value.Val("rx") + value.Val("ry") + ")"
- },
- },
- text: {
- data: {
- size: {x: "x", y: "y"},
- copy: ["inner"],
- }, // hi
- draw: function(event, can, point, style) {if (point.length < 1 || event.type == "mousemove") {return}
- var p0 = point[0];
- var data = {
- "x": p0.x, "y": p0.y,
- "inner": style&&style.inner||can.user.prompt("text"),
- }
- return can.point = [], data;
- },
- show: function(event, can, value, target) {
- return ": (" + target.Val("x") + "," + target.Val("y")+ ")"
- }
- },
- line: {
- data: {
- size: {},
- copy: ["x1", "y1", "x2", "y2"],
- x: function(event, can, value, cmd, target) {
- if (value != undefined) {
- var offset = value - target.Val("xx")
- target.Val("x1", target.Val("x1") + offset)
- // target.Val("x2", target.Val("x2") + offset)
- target.Val("xx", value)
- }
- return target.Val("xx")
- },
- y: function(event, can, value, cmd, target) {
- if (value != undefined) {
- var offset = value - target.Val("yy")
- target.Val("y1", target.Val("y1") + offset)
- // target.Val("y2", target.Val("y2") + offset)
- target.Val("yy", value)
- }
- return target.Val("yy")
- },
- width: function(event, can, value, cmd, target) {
- return value != undefined && target.Val("x2", target.Val("x1") + parseInt(value)), target.Val("x2") - target.Val("x1")
- },
- height: function(event, can, value, cmd, target) {
- return value != undefined && target.Val("y2", target.Val("y1") + parseInt(value)), target.Val("y2") - target.Val("y1")
- },
- }, //
- grid: function(event, can, point) {var target = event.target
- if (event.target == can.svg) {return}
- var pos = can.page.Prepos(event, target)
- var p = point[point.length-1]
- p.target = target
- p.anchor = pos
- target.Val && can.page.Anchor(event, target, pos, p)
- return point
- },
- draw: function(event, can, point) {if (point.length < 2) {return}
- var p0 = point[0], p1 = point[1];
- var data = {
- "x1": p0.x, "y1": p0.y,
- "x2": p1.x, "y2": p1.y,
- }
- return event.type == "click" && point.length == 2 && (can.point = []), data;
- },
- text: function(event, can, data, target) {
- data.x = (target.Val("x1") + target.Val("x2")) / 2
- data.y = (target.Val("y1") + target.Val("y2")) / 2
- return data
- },
- show: function(event, can, value, target) {
- return ": (" + value.Val("x1") + "," + value.Val("y1") + ")"
- + " - (" + value.Val("x2") + "," + value.Val("y2") + ")"
- },
- },
- path: {
- data: {
- size: {},
- x: function(event, can, value, cmd, target) {
- var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}')
- if (value != undefined) {
- tt.tx = value-target.Val("xx")
- target.Value("tt", JSON.stringify(tt))
- target.Value("transform", "translate("+tt.tx+","+tt.ty+")")
- }
- return target.Val("xx")+tt.tx
- },
- y: function(event, can, value, cmd, target) {
- var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}')
- if (value != undefined) {
- tt.ty = value-target.Val("yy")
- target.Value("tt", JSON.stringify(tt))
- target.Value("transform", "translate("+tt.tx+","+tt.ty+")")
- }
- return target.Val("yy")+tt.ty
- },
- copy: ["d", "cmd", "name", "meta", "tt", "xx", "yy", "fill"],
- }, //
- draw: function(event, can, point) {
- if (point.length == 1) {
- can._temp = {}
- }
- if (point.length < 2) {return}
- if (can.keys && can.keys.length > 0) {
- switch (can._temp[point.length-1] = can.keys[0]) {
- case "C": can._temp[point.length+1] = ","
- case "Q": can._temp[point.length] = ","; break
- default:
- }
- can.keys = can.keys.slice(1)
- }
-
- var skip = 0;
- var end = false;
- var data = {
- d: can.core.List(point, function(p, i) {var k = p.k
- if (i < skip) {return}
- switch (i) {
- case 0: k = "M"; break
- default: k = can._temp[i] || p.k || "L"; break
- }
- if (end) {return}
-
- switch (k) {
- case "Z": return can.point = [], can._temp = {}, k
- case "L": return k+" " + p.x + " " + p.y
- case "M": return k+" " + p.x + " " + p.y
- case "H": return k+" " + p.x
- case "V": return k+" " + p.y
- case "A":
- switch (point.length - i) {
- case 1: end = true;
- return k+" " + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + " 0 0 0 " + p.x + " " + p.y
- case 2: end = true;
- var r = Math.sqrt(Math.pow(point[i+1].x - p.x, 2) + Math.pow(point[i+1].y - p.y, 2))
- return k+" " + r + " " + r + " 0 0 0 " + p.x + " " + p.y
- case 3:
- if (!p.done) {
- var r = Math.sqrt(Math.pow(point[i+1].x - p.x, 2) + Math.pow(point[i+1].y - p.y, 2))
- var temp = point[i]
- p = point[i] = point[i+1]
- point[i+1] = temp
- var temp = can.point[i]
- p = can.point[i] = can.point[i+1]
- can.point[i+1] = temp
- p.x = r
- p.y = r
- p.done = true
- p.arg = " 0 0 0 "
- }
- default:
- skip = i + 2
- return k+" " + p.x + " " + p.y + " 0 0 0 " + point[i+1].x + " " + point[i+1].y
- }
- break
- case "C":
- switch (point.length - i) {
- case 1: end = true;
- return k+" " + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + p.x + " " + p.y
- case 2: end = true;
- return k+" " + point[i+1].x + " " + point[i+1].y + "," + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + p.x + " " + p.y
- case 3:
- return k+" " + point[i+1].x + " " + point[i+1].y + "," + point[i+2].x + " " + point[i+2].y + "," + p.x + " " + p.y
- case 4:
- if (!p.done) {
- var temp = point[i]
- p = point[i] = point[i+1]
- point[i+1] = temp
-
- var temp = point[i+1]
- point[i+1] = point[i+2]
- point[i+2] = temp
- p.done = true
- }
- default:
- return k+" " + p.x + " " + p.y
- }
- case "Q":
- switch (point.length - i) {
- case 1: end = true;
- return k+" " + (point[i-1].x+p.x)/2 + " " + (point[i-1].y+p.y)/2 + "," + p.x + " " + p.y
- case 2: end = true;
- return k+" " + point[i+1].x + " " + point[i+1].y + "," + p.x + " " + p.y
- case 3:
- if (!p.done) {
- var temp = point[i]
- p = point[i] = point[i+1]
- point[i+1] = temp
- p.done = true
- }
- default:
- return k+" " + p.x + " " + p.y
- }
- default: return k+" " + p.x + " " + p.y
- }
- }).join(" ")
- }
- return data;
- },
- text: function(event, can, data, target) {
- data.x = (target.x1.baseVal.value + target.x2.baseVal.value) / 2
- data.y = (target.y1.baseVal.value + target.y2.baseVal.value) / 2
- return data
- },
- show: function(event, can, value, target) {
- return value.tagName
- },
- },
-
- think: {
- data: {
- rx: 4, ry: 4,
- size: {x: "x", y: "y"},
- copy: ["width", "height", "rx", "ry"],
- }, //
- draw: function(event, can, point) {if (point.length < 2) {return}
- can._temp && can.page.Remove(can, can._temp) && delete(can._temp);
- can._temp = can.onaction.push(event, can, {}, "g", can.group||can.svg)
- var rect = can.onaction.push(event, can, can.onfigure.rect.draw(event, can, point), "rect", can._temp)
- if (event.type == "click" && point.length == 2) {
- can.ondetail["标签"](event, can, {}, "", rect);
- delete(can._temp)
- }
- return
- },
- text: function(event, can, data, target) {
- data.x = target.Val("x")+target.Val("width")/2
- data.y = target.Val("y")+target.Val("height")/2
- return data
- },
- show: function(event, can, value, target) {
- return ": (" + value.Val("x") + "," + value.Val("y") + ")"
- + " + (" + value.Val("width") + "," + value.Val("height") + ")"
- },
- },
- polyline: {
- data: {}, //
- draw: function(event, can, point) {if (point.length < 2) {return}
- var data = {
- points: can.core.List(point, function(item) {return item.x + " " + item.y}).join(", ")
- }
- return data;
- },
- text: function(event, can, data, target) {
- data.x = (target.x1.baseVal.value + target.x2.baseVal.value) / 2
- data.y = (target.y1.baseVal.value + target.y2.baseVal.value) / 2
- return data
- },
- show: function(event, can, value, target) {
- return value.tagName + ": (" + value.points.baseVal.value + ")"
- },
- },
- polygon: {
- data: {}, //
- draw: function(event, can, point) {if (point.length < 2) {return}
- var data = {
- points: can.core.List(point, function(item) {return item.x + " " + item.y}).join(", ")
- }
- return data;
- },
- text: function(event, can, data, target) {
- data.x = (target.x1.baseVal.value + target.x2.baseVal.value) / 2
- data.y = (target.y1.baseVal.value + target.y2.baseVal.value) / 2
- return data
- },
- show: function(event, can, value, target) {
- return value.tagName + ": (" + value.points.baseVal.value + ")"
- },
- },
-}, Config.libs.concat(["plugin/local/wiki/draw/heart"]))
-Volcanos("onaction", {help: "组件菜单", list: ["保存", "清空", "删除", "添加",
- ["group", "svg"],
- ["font-size", 12, 16, 18, 24, 32],
- ["stroke-width", 1, 2, 3, 4, 5],
- {text: "c"}, ["stroke", "red", "yellow", "green", "purple", "blue", "cyan", "white", "black"],
- {text: "f"}, ["fill", "red", "yellow", "green", "purple", "blue", "cyan", "white", "black", "#0000"],
- {text: "a"}, ["go", "auto", "manual"],
- {text: "a"}, ["mode", "draw", "move", "resize", "select", "delete"],
- {text: "s"}, ["shape", "think", "rect", "circle", "ellipse", "text", "line", "path", "polyline", "polygon"],
- ["grid", 1, 2, 3, 4, 5, 10, 20],
- ],
- "保存": function(event, can, msg, cmd, target) {
- can.run(event, ["action", cmd, can.Option("path"), can.Export(event, can.svg, "file")], function() {
- can.user.toast("保存成功")
- }, true)
- },
- "清空": function(event, can, msg, cmd, target) {
- can.svg.innerHTML = ""
- can.point = []
- can.keys = []
- },
- "删除": function(event, can, msg, cmd, target) {if (can.group == can.svg) {return}
- can.page.Remove(can, can.group), can.page.Select(can, can.action, "option[value="+can.group.Value("class")+"]", function(item) {
- can.page.Remove(can, item)
- })
- can.Action("group", "svg")
- },
- "添加": function(event, can, msg, cmd, target) {
- can.user.prompt("add group", function(name) {
- var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
- can.group.append(can.onaction.init(event, can, msg, cmd, group))
-
- can.group = group, can.group.Value("class", name)
- can.core.List(["font-size", "stroke-width", "stroke", "fill"], function(name) {
- can.group.Value(name, can.Action(name))
- })
- can.page.Select(can, can.action, "select.group", function(item) {
- can.page.Append(can, item, [{type: "option", value: name, inner: name}]);
- item.value = name
- })
- })
- },
-
- group: function(event, can, value, cmd, target) {
- if (cmd == "svg") {
- can.group = can.svg
- } else {
- can.page.Select(can, can.svg, "g."+cmd, function(item) {
- can.group = item
- })
- }
- can.core.List(["font-size", "storke-width", "stroke", "fill"], function(key) {
- can.Action(key, can.group.Value(key)||can.Action(key))
- })
- return can.group
- },
- "font-size": function(event, can, value, cmd, target) {can.Action(value, can.group.Value(value, cmd))},
- "stroke-width": function(event, can, value, cmd, target) {can.Action(value, can.group.Value(value, cmd))},
- stroke: function(event, can, value, cmd, target) {can.Action(value, can.group.Value(value, cmd))},
- fill: function(event, can, value, cmd, target) {can.Action(value, can.group.Value(value, cmd))},
- shape: function(event, can, value, cmd, target) {cmd && can.Action(value, cmd)},
- mode: function(event, can, value, cmd, target) {cmd && can.Action(value, cmd)},
- grid: function(event, can, value, cmd, target) {cmd && can.Action(value, cmd)},
-
- init: function(event, can, msg, cmd, item) {
- item.Value = function(key, value) {
- if (typeof key == "object") {
- can.core.Item(key, function(key, value) {
- item.Value(key, value)
- })
- return
- }
- var figure = can.onaction._get(can, item);
- key && (key = figure && figure.data && figure.data.size && figure.data.size[key] || key)
- if (figure && figure.data && typeof figure.data[key] == "function") {
- return figure.data[key](event, can, value, key, item)
- }
- if (key == "inner") {
- return value != undefined && (item.innerHTML = value), item.innerHTML
- }
- return value && item.setAttribute(key, value), item.getAttribute(key||"class")||item[key]&&item[key].baseVal&&item[key].baseVal.value||item[key]&&item[key].baseVal||"";
- }
- item.Val = function(key, value) {
- return parseInt(item.Value(key, value == undefined? value: parseInt(value)||0))||0;
- }
- item.Group = function() {var target = item
- while (target) {
- if (["svg", "g"].indexOf(target.tagName) > -1) {
- return target;
- }
- target = target.parentNode;
- }
- return can.svg
- }
- return item;
- },
- push: function(event, can, msg, cmd, target) {
- var rect = document.createElementNS("http://www.w3.org/2000/svg", cmd);
- target.appendChild(can.onaction.init(event, can, msg, cmd, rect));
-
- can.core.Item(msg, function(key, value) {
- if (key == "inner") {return rect.innerHTML = value}
- rect.Value(key, value)
- });
-
- if (can.point.length == 0) {
- var pid = "p"+ can.svg.Val("count", can.svg.Val("count")+1)
- rect.Value("class", (rect.Value("class") + " " + rect.Value("pid", pid)).trim());
- }
- return can.last = rect;
- },
- _get: function(can, item, name) {
- return can.onfigure[name||item.getAttribute("name")||item.tagName];
- },
- _ship: function(can, value, target) {
- var ship = JSON.parse(target.Value("ship")||"[]").concat([value])
- target.Value("ship", JSON.stringify(ship))
- },
- _run: function(event, can, target) {
- var figure = can.onaction._get(can, event.target);
- var msg = can.Event(event);
- figure && can.core.List(["x", "y", "cmd"].concat(figure.copy||[]), function(item) {
- msg.Option(item, target.Value(item))
- })
- figure && figure.run? figure.run(event, can, figure, "run", event.target): (event.type == "click" && can.run(event, ["action", "执行", target.Value("cmd")], function(msg) {
- msg.Table(function(value, index) {
- index > 0 && can.core.Item(value, function(key, val) {
- target.Value(key, val)
- })
- })
- }, true))
- return
- },
- _draw: function(event, can, point) {
- var shape = can.Action("shape");
- var figure = can.onfigure[shape];
- figure && figure.grid && figure.grid(event, can, point);
- var data = figure && figure.draw(event, can, point);
- var obj = data && can.onaction.push(event, can, data, figure.data.name||shape, can.group||can.svg);
-
- event.type == "click" && obj && can.core.List(point, function(item, index) {if (!item.target) {return}
- can.onaction._ship(can, {pid: obj.Value("pid"), which: index, anchor: item.anchor}, item.target)
- })
- return obj
- },
- _move: function(event, can, point) {
- if (point.length == 1) {if (event.type != "click") {return}
- can.onaction._select(event, can, point)
- // can.point = point, can.current = {target: can.group}
- can.point = point, can.current = {target: event.target}
- } else if (point.length == 2) {
- if (event.type == "click") {
- return can.point = [], delete(can.current)
- }
- }
-
- var target = can.current.target
- var figure = can.onaction._get(can, target);
- if (point.length == 1) {
- target.style.cursor = "move"
- can.current.pos = 5, can.current.begin = can.core.List([target], function(item) {
- if (item.tagName == "g") {return}
- return target.style.cursor = "move", {
- target: item,
- x: item.Val("x"),
- y: item.Val("y"),
- width: item.Val("width"),
- height: item.Val("height"),
- ship: can.core.List(JSON.parse(item.Value("ship")||"[]"), function(ship) {
- return ship.pid && (ship.target = can.page.Select(can, can.svg, "."+ship.pid)[0]) && ship
- })
- }
- })
- /*
- can.current.pos = 5, can.current.begin = can.page.Select(can, target, "*", function(item) {
- if (item.tagName == "g") {return}
- return target.style.cursor = "move", {
- target: item,
- x: item.Val("x"),
- y: item.Val("y"),
- width: item.Val("width"),
- height: item.Val("height"),
- ship: can.core.List(JSON.parse(item.Value("ship")||"[]"), function(ship) {
- ship.target = can.page.Select(can, can.svg, "."+ship.pid)[0];
- return ship
- })
- }
- })
- */
- return
- }
-
- can.core.List(can.current.begin, function(item) {
- var figure = can.onaction._get(can, item.target)
-
- can.page.Resizes(event, item.target, item, point[0], point[1], can.current.pos)
- can.page.Select(can, can.svg, "."+item.target.Value("text"), function(text) {
- text.Value(figure.text(event, can, {}, item.target))
- })
- can.core.List(item.ship, function(ship) {
- var p = can.page.Anchor(event, item.target, ship.anchor, {})
- if (ship.which == 0) {
- ship.target.Val("x1", p.x)
- ship.target.Val("y1", p.y)
- }
- if (ship.which == 1) {
- ship.target.Val("x2", p.x)
- ship.target.Val("y2", p.y)
- }
- })
- })
- },
- _resize: function(event, can, point) {
- if (point.length == 1) {if (event.type != "click") {return}
- can.current = {target: event.target}
- } else if (point.length == 2) {
- if (event.type == "click") {
- return can.point = [], delete(can.current)
- }
- }
-
- var target = can.current.target
- var figure = can.onaction._get(can, target);
- if (point.length == 1) {
- can.current.pos = can.page.Prepos(event, target)
- can.current.begin = {
- x: target.Val("x"),
- y: target.Val("y"),
- width: target.Val("width"),
- height: target.Val("height"),
- }
- return
- }
-
- can.page.Resizes(event, target, can.current.begin, point[0], point[1], can.current.pos)
- },
- _scale: function(event, can, point) {if (point.length < 2) {return}
- if (point.length == 2) {
- can.last && can.page.Remove(can, can.last)
- var figure = can.onfigure["line"];
- var data = figure && figure.draw(event, can, point);
- can.last = can.onaction.push(event, can, data, "line", can.group||can.svg)
- if (event.type == "click" && point.length == 2) {
- can.point = point
- }
- return
- }
-
- can.now && can.page.Remove(can, can.now)
- var figure = can.onfigure["line"];
- var data = figure && figure.draw(event, can, [point[0], point[2]]);
- can.now = can.onaction.push(event, can, data, "line", can.group||can.svg)
- if (event.type == "click" && point.length == 3) {
- can.now && can.page.Remove(can, can.now)
- can.last && can.page.Remove(can, can.last)
- can.point = []
- }
-
- can.group.Value("transform", "scale("+(point[2].x-point[0].x)/(point[1].x-point[0].x)+","+(point[2].y-point[0].y)/(point[1].y-point[0].y)+")")
- },
- _delete: function(event, can, point) {
- can.point = [], event.target != can.svg && can.page.Remove(can, event.target)
- },
- _select: function(event, can, point) {var target = event.target
- while (target) {
- if (target.tagName == "g") {
- can.Action("group", target.Value("class"))
- can.group = target
- break
- }
- if (target.tagName == "svg") {
- can.Action("group", "svg")
- can.group = can.svg
- break
- }
- target = target.parentNode
- }
- can.point = []
- },
-
- oncontextmenu: function(event, can) {var target = event.target
- var figure = can.onaction._get(can, target);
- can.user.carte(event, shy("", can.ondetail, figure.data.detail || can.ondetail.list, function(event, key, meta) {var cb = meta[key];
- typeof cb == "function" && cb(event, can, figure, key, target);
- }), can), event.stopPropagation(), event.preventDefault()
- },
- onclick: function(event, can) {
- var p = can.svg.getBoundingClientRect();
- var point = {x: event.clientX-p.x, y: event.clientY-p.y};
- point.x = point.x - point.x % parseInt(can.Action("grid"));
- point.y = point.y - point.y % parseInt(can.Action("grid"));
- can.point = (can.point || []).concat([point]);
-
- can.temp && can.page.Remove(can, can.temp) && delete(can.temp);
- can.temp = can.onaction["_"+can.Action("mode")](event, can, can.point);
- can.point.length == 0 && delete(can.temp);
- },
- onmouseover: function(event, can) {
- can.Status(event, event.target, "which")
- },
- onmousemove: function(event, can) {
- var p = can.svg.getBoundingClientRect()
- var point = {x: event.clientX-p.x, y: event.clientY-p.y}
- point.x = point.x - point.x % parseInt(can.Action("grid"));
- point.y = point.y - point.y % parseInt(can.Action("grid"));
- can.Status(event, point, "point")
-
- var pos = can.page.Prepos(event, event.target)
-
- if (can.Action("go") == "auto" && can.point.length == 0) {
- if (event.target.tagName == "text") {
-
- } else if (event.target == can.svg) {
- if (pos == 5) {
- can.Action("mode", "draw")
- can.Action("shape", "think")
- } else {
- can.Action("mode", "resize")
- }
- } else {
- if (pos == 5) {
- can.Action("mode", "move")
- } else {
- can.Action("mode", "draw")
- can.Action("shape", "line")
- }
- }
- }
-
- // if (["move", "resize"].indexOf(can.Action("mode"))) {
- // can.current ||
- // }
-
- can.temp && can.page.Remove(can, can.temp) && delete(can.temp);
- can.temp = can.onaction["_"+can.Action("mode")](event, can, can.point.concat(point));
- can.point.length == 0 && delete(can.temp);
- },
-})
-Volcanos("onchoice", {help: "组件交互", list: ["move", "draw", "保存", "添加", "删除"],
- "move": function(event, can, msg, cmd, target) {
- can.Action("mode", cmd)
- },
- "draw": function(event, can, msg, cmd, target) {
- can.Action("mode", cmd)
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: ["标签", "编辑", "复制", "变色", "运行", "删除"],
- "标签": function(event, can, value, cmd, target) {
- var def = value.def; can.page.Select(can, can.svg, "."+target.Value("text"), function(item) {
- def = item.Value("inner")
- })
- can.user.prompt("文字", function(text) {
- if (target.tagName == "text") {return target.innerHTML = text}
-
- if (can.page.Select(can, can.svg, "."+target.Value("text"), function(item) {
- item.Value("inner", text)
- }).length > 0) {
- return
- }
-
- var figure = can.onaction._get(can, target);
- var data = figure.text(event, can, {inner: text}, target)
- var obj = can.onaction.push(event, can, data, "text", target.Group())
- target.Value("text", obj.Value("pid"))
- }, def, value.silent)
- },
- "编辑": function(event, can, value, cmd, target) {
- var figure = can.onaction._get(can, target);
- can.user.input(event, can, can.core.List(["x", "y"].concat(figure.data.copy||[]), function(item) {
- return {_input: "text", name: item, value: target.Value(item)}
- }), function(event, cmd, meta, list) {
- can.core.Item(meta, function(key, value) {
- target.Value(key, value)
- })
- })
- },
- "复制": function(event, can, value, cmd, target) {
- var figure = can.onaction._get(can, target).data;
- var data = {}
- can.core.List(figure.copy, function(item) {data[item] = target.Value(item)});
- data[figure.size.x||"x"] = parseInt(target.Value(figure.size.x||"x"))+20;
- data[figure.size.y||"y"] = parseInt(target.Value(figure.size.y||"y"))+20;
-
- var p = data && can.onaction.push(event, can, data, target.tagName, can.group||can.svg)
- can.page.Select(can, can.svg, "."+target.Value("text"), function(item) {
- can.ondetail["标签"](event, can, {silent: true, def: item.Value("inner")}, "", p);
- })
-
- return p
- },
- "变色": function(event, can, value, cmd, target) {
- if (target._timer) {
- target._timer.stop = true
- delete(target._timer)
- return
- }
-
- var list = ["red", "green", "yellow", "blue"]
- target._timer = can.core.Timer({value: 500, length: -1}, function() {
- target.Value("fill", list[parseInt(Math.random()*list.length%list.length)])
- })
- },
- "运行": function(event, can, value, cmd, target) {
- if (target._timer) {
- target._timer.stop = true
- delete(target._timer)
- return
- }
-
- target._timer = can.core.Timer({value: 500, length: -1}, function(event) {
- can.onaction._run({type: "click", target: target}, can, target)
- })
- },
- "删除": function(event, can, value, cmd, target) {can.page.Remove(can, target)},
-})
-Volcanos("onstatus", {help: "组件状态", list: ["point", "which", "begin", "width", "keys"],
- "point": function(event, can, value, cmd, target) {target.innerHTML = value.x+","+value.y},
- "which": function(event, can, value, cmd, target) {
- var figure = can.onaction._get(can, value);
- target.innerHTML = (value.Group && value.Group().Value("class") || "") + " " + value.tagName + " " + (
- figure? figure.show(event, can, value, value): "")
- },
- "begin": function(event, can, value, cmd, target) {target.innerHTML = value? value.x+","+value.y: ""},
- "width": function(event, can, value, cmd, target) {target.innerHTML = value? value.Val("width")+","+value.Val("height"): ""},
- "keys": function(event, can, value, cmd, target) {target.innerHTML = value},
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- file: function(event, can, svg, cmd, target) {
- return ['"]).join("")
- },
-})
-
diff --git a/trash/plugin/local/wiki/draw/heart.js b/trash/plugin/local/wiki/draw/heart.js
deleted file mode 100644
index c12d90c3..00000000
--- a/trash/plugin/local/wiki/draw/heart.js
+++ /dev/null
@@ -1,71 +0,0 @@
-Volcanos("heart", {help: "心形", list: [],
- data: {name: "path",
- size: {},
- x: function(event, can, value, cmd, target) {
- var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}')
- if (value != undefined) {
- tt.tx = value-target.Val("xx")
- target.Value("tt", JSON.stringify(tt))
- target.Value("transform", "translate("+tt.tx+","+tt.ty+")")
- }
- return target.Val("xx")+tt.tx
- },
- y: function(event, can, value, cmd, target) {
- var tt = JSON.parse(target.Value("tt")||'{"tx":0, "ty":0}')
- if (value != undefined) {
- tt.ty = value-target.Val("yy")
- target.Value("tt", JSON.stringify(tt))
- target.Value("transform", "translate("+tt.tx+","+tt.ty+")")
- }
- return target.Val("yy")+tt.ty
- },
- copy: ["d", "cmd", "name", "meta", "tt", "xx", "yy", "fill"],
- }, //
- draw: function(event, can, point) {if (point.length < 2) {return}
-
- var p0 = point[0], p1 = point[1], p2 = point[2];
- pl = {x: 2*p0.x - p1.x, y:2*p0.y-p1.y}
- var r0 = Math.sqrt(Math.pow(p0.x - p1.x, 2), Math.pow(p0.y - p1.y, 2)) / 2
- var d = [
- "M", pl.x, pl.y,
- "A", r0, r0, 0, 0, 0, p0.x, p0.y,
- "A", r0, r0, 0, 0, 0, p1.x, p1.y,
- ]
-
- if (point.length == 3) {
- var r1 = Math.sqrt(Math.pow(p2.x - p1.x, 2), Math.pow(p2.y - p1.y, 2))
- d = d.concat([
- "A", r1, r1, 180, 0, 0, p2.x, p2.y,
- "A", r1, r1, 180, 0, 0, pl.x, pl.y,
- ])
- }
-
- var data = {
- cmd: "pwd",
- name: "heart", d: d.join(" "),
- meta: JSON.stringify(point),
- tt: JSON.stringify({tx: 0, ty: 0}),
- xx: p0.x, yy:p1.y,
- }
-
- // can._tmp && can.page.Remove(can, can._tmp) && delete(can._tmp)
- // can._tmp = can.onaction.push(event, can, data, "path", can.group||can.svg)
- // event.type == "click" && point.length == 3 && (can.point = [], can._tmp = null);
- return event.type == "click" && point.length == 3 && (can.point = []), data;
- },
- text: function(event, can, data, target) {
- data.x = target.Val("cx")
- data.y = target.Val("cy")
- return data
- },
- show: function(event, can, value, target) {
- return ": (" + value.Val("cx") + "," + value.Val("cy") + ")"
- + " > (" + parseInt(value.Val("r")) + ")"
- },
- // run: function(event, can, value, cmd, target) {
- // event.type == "click" && can.Run(event, ["action", "执行", target.Value("cmd")], function(msg) {
- // can.user.toast(msg.Result())
- // }, true)
- // },
-})
-
diff --git a/trash/plugin/local/wiki/feel.js b/trash/plugin/local/wiki/feel.js
deleted file mode 100644
index 863533a7..00000000
--- a/trash/plugin/local/wiki/feel.js
+++ /dev/null
@@ -1,172 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
- if (!msg.append || msg.append.length == 0) {return}
-
- var list = msg.Table()
- function view(index, width, auto, cb) {var item = list[can.page.Select(can, table, "tr")[index+1].dataset.index];
- function menu(event) {var target = event.target;
- can.user.carte(event, shy("", can.ondetail, can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
- typeof cb == "function" && cb(event, can, item, index, "path", cmd, target);
- }))
- }
-
- var items = item.path.split(".");
- switch (items[items.length-1]) {
- case "png":
- case "jpg":
- case "JPG":
- return {className: "preview", img: "/share/local/web.wiki.feel/"+item.path, width: width, oncontextmenu: menu}
- case "MOV":
- case "m4v":
- return {className: "preview", type: "video", width: width, oncontextmenu: menu,
- onplay: cb, onpause: cb,
- onloadedmetadata: cb,
- onloadeddata: cb,
- ontimeupdate: cb,
- onended: cb,
- data: {src: "/share/local/web.wiki.feel/"+item.path, controls: "controls", autoplay: auto, loop: false}}
- default:
- return
- }
- }
-
- var table = can.page.AppendTable(can, output, msg, msg.append);
-
- var begin = 0, limit = 3;
- var rate = 1, width = 600;
- var control = can.page.Append(can, output, [{view: ["control"], list: [
- {select: [["width", 100, 200, 400, 600, 800], function(event, value) {width = parseInt(value), page(begin, limit)}]},
- {select: [["rate", 0.1, 0.2, 0.5, 1, 2, 3, 5, 10], function(event, value) {rate = value}]},
- {button: ["prev", function() {
- begin > 0 && (begin -= limit, page(begin, limit));
- }]},
- {text: [begin+"-"+(begin+limit)], name: "offset"},
- {button: ["next", function() {
- begin < msg[msg.append[0]].length && (begin += limit, page(begin, limit));
- }]},
- {text: [list.length]},
- {select: [["limit", 3, 6, 9, 12, 15], function(event, value) {limit = parseInt(value), page(begin, limit)}]},
- ]}])
- control.rate.value = rate
- control.width.value = width
-
- var preview = can.page.Append(can, output, [{view: ["preview"]}]).last
- function page(begin, limit) {
- control.offset.innerHTML = begin+"-"+(begin+limit);
- can.page.Appends(can, preview, msg.Table(function(item, index) {
- if (begin <= index && index < begin+limit) {return view(index, width, false, function(event) {var video = event.target;
- switch (event.type) {
- case "loadeddata": video.playbackRate = rate; break
- case "timeupdate": video.playbackRate = rate; break
- }
- })}
- }));
- }
- page(begin, limit);
-
- function show(index) {var item = list[can.page.Select(can, table, "tr")[index+1].dataset.index];
- var video = {};
- var timer = can.user.toast({text: "", list: [{view: "control", list: [
- {button: ["close", function(event) {video.pause(), timer.toast.Hide()}]},
- {select: [["width", 100, 200, 400, 600, 800], function(event, value) {timer.toast.Show(event, parseInt(value)+20),
- width = value
- timer.toast.preview.setAttribute("width", value)
- // video.width = value
- }]},
- {select: [["rate", 0.1, 0.2, 0.5, 1, 2, 3, 5, 10], function(event, value) {rate = video.playbackRate = value}]},
- {button: ["prev", function(event) {show(index-1)}]},
- {text: index+"/"+list.length},
- {button: ["next", function(event) {show(index+1)}]},
- {type: "br"}, {text: item.path},
- {type: "br"}, {text: item.label},
- ]}].concat([view(index, 600, true, function(event) {video = event.target;
- switch (event.type) {
- case "loadeddata": video.playbackRate = rate; break
- case "ended": show(index+1); break
- }
- })]), width: 600+20, height: 620, duration: -1})
- timer.toast.width.value = 600;
- timer.toast.rate.value = rate;
- }
-
- table.onclick = function(event) {switch (event.target.tagName) {
- case "TD":
- can.onimport.which(event, table, msg.append, function(index, key) {
- var name = event.target.innerHTML.trim()
- if (name.endsWith("/")) {
- can.Option("name", name), can.run(event, [name])
- } else {
- show(index);
- }
- })
- break
- case "TH":
- break
- case "TR":
- case "TABLE":
- }}
- table.oncontextmenu = function(event) {var target = event.target;
- switch (event.target.tagName) {
- case "TD":
- can.onimport.which(event, table, msg.append, function(index, key) {
- can.user.carte(event, shy("", can.ondetail, can.feature.detail || can.ondetail.list, function(event, cmd, meta) {var cb = meta[cmd];
- var id = msg.Ids(index);
- 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, target):
- // can.run(event, [id, typeof cb == "string"? cb: cmd, key, target.innerHTML], function(msg) {
- can.run(event, ["action", typeof cb == "string"? cb: cmd, key, target.innerHTML], function(msg) {
- can.onimport.init(can, msg, cb, output, option)
- }, true)
- }))
- })
- event.stopPropagation()
- event.preventDefault()
- break
- case "TH":
- case "TR":
- case "TABLE":
- }
- }
- return typeof cb == "function" && cb(msg), table;
- },
- which: function(event, table, list, cb) {if (event.target == table) {return cb(-1, "")}
- can.page.Select(can, table, "tr", function(tr, index) {if (event.target == tr) {return cb(index-1, "")}
- can.page.Select(can, tr, "th,td", function(td, order) {
- if (event.target == td) {return cb(index-1, list[order])}
- })
- })
- },
-})
-Volcanos("onaction", {help: "组件菜单", list: ["预览", "上传"],
- "预览": function(event, can, msg, cmd, target) {
- },
- "上传": function(event, can, msg, cmd, target) {
- can.run(event, ["action", cmd, can.Option("name"), can.page.Select(can, target, "tr", function(tr) {return can.page.Select(can, tr, "th,td", function(td) {return td.innerHTML}).join(",")}).join("\n")], function() {
- can.user.toast("保存成功")
- }, true)
- },
-})
-Volcanos("onchoice", {help: "组件交互", list: ["保存", "清空", ["rect", "rect", "line", "circle"]],
- "清空": function(event, can, msg, cmd, target) {
- console.log("choice", cmd)
- },
-})
-Volcanos("ondetail", {help: "组件详情", list: ["标签"],
- "标签": function(event, can, msg, index, key, cmd, target) {
- can.user.prompt("目标", function(kind) {
- can.run(event, ["action", "标签", msg.path, kind], function() {
- }, true)
- })
- },
-})
-Volcanos("onstatus", {help: "组件状态", list: ["begin", "width", "point", "which"],
- "begin": function(event, can, value, cmd, target) {target.innerHTML = value? value.x+","+value.y: ""},
- "width": function(event, can, value, cmd, target) {target.innerHTML = value? value.width+","+value.height: ""},
- "point": function(event, can, value, cmd, target) {target.innerHTML = value.x+","+value.y},
- "which": function(event, can, value, cmd, target) {var figure = can.onfigure[value.tagName];
- target.innerHTML = figure? figure.show(event, can, value, target): value.tagName;
- },
-})
-Volcanos("onexport", {help: "导出数据", list: []})
-
diff --git a/trash/plugin/local/wiki/walk.js b/trash/plugin/local/wiki/walk.js
deleted file mode 100644
index 1c4d1d0c..00000000
--- a/trash/plugin/local/wiki/walk.js
+++ /dev/null
@@ -1,155 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
- if (!msg.result || msg.result.length == 0) {
- var table = can.page.AppendTable(can, output, msg, msg.append);
- table.onclick = function(event) {switch (event.target.tagName) {
- case "TD":
- can.onimport.which(event, table, msg.append, function(index, key) {
- can.Option("file", event.target.innerHTML.trim())
- can.run(event, [event.target.innerHTML.trim()], function(msg) {})
- })
- break
- case "TH":
- break
- case "TR":
- case "TABLE":
- }}
- return typeof cb == "function" && cb(msg), table;
- }
-
- // can.page.Append(can, action, [{type: "script", src: "https://cdn.bootcss.com/echarts/4.2.0-rc.2/echarts.js"}]);
- can.page.Append(can, output, [{include: ["plugin/github.com/shylinux/echarts/echarts.js", function(event) {
- can.page.Append(can, output, [{include: ["plugin/github.com/shylinux/echarts/china.js", function(event) {
- var china_chart = echarts.init(can.page.Append(can, output, [{type: "div", style: {width: "600px", height: "400px"}}]).last);
- var data = msg.Table()
-
- var yData = [];
- var barData = [];
- for (var i = 0; i < (data.length>10? 10: data.length); i++) {
- yData.push(i + data[i].name);
- barData.push(data[i]);
- }
-
- var option = {
- title: [{
- text: msg.Option("title"),
- show: true, right: 250, top: 10,
- textStyle: {color: '#2D3E53', fontSize: 18},
- }],
- tooltip: {
- show: true, formatter: function(params) {
- return params.name +": "+params.value
- },
- },
- visualMap: {
- type: 'continuous',
- orient: 'horizontal',
- itemWidth: 10,
- itemHeight: 80,
- text: ['高', '低'],
- showLabel: true,
- seriesIndex: [0],
- min: 0,
- max: data[1].value,
- inRange: {
- color: ['#6FCF6A', '#FFFD64', '#FF5000']
- },
- textStyle: {
- color: '#7B93A7'
- },
- bottom: 30,
- left: 'left',
- },
- grid: {right: 10, top: 135, bottom: 100, width: '20%'},
- xAxis: {show: false},
- yAxis: {
- type: 'category',
- inverse: true,
- nameGap: 16,
- axisLine: {show: false, lineStyle: {color: '#ddd'}},
- axisTick: {show: false, lineStyle: {color: '#ddd'}},
- axisLabel: {
- margin: 0,
- interval: 0,
- textStyle: {color: '#455A74', align: 'left', fontSize: 14},
- rich: {
- a: {
- color: '#fff',
- backgroundColor: '#FAAA39',
- width: 20,
- height: 20,
- align: 'center',
- borderRadius: 2
- },
- b: {
- color: '#fff',
- backgroundColor: '#4197FD',
- width: 20,
- height: 20,
- align: 'center',
- borderRadius: 2
- }
- },
- formatter: function(params) {
- if (parseInt(params.slice(0, 1)) < 3) {
- return [
- '{a|' + (parseInt(params.slice(0, 1)) + 1) + '}' + ' ' + params.slice(1)
- ].join('\n')
- } else {
- return [
- '{b|' + (parseInt(params.slice(0, 1)) + 1) + '}' + ' ' + params.slice(1)
- ].join('\n')
- }
- }
- },
- data: yData
- },
- geo: {
- map: 'china', left: 'left', right: '100',
- label: {emphasis: {show: false}},
- itemStyle: {emphasis: {areaColor: '#fff464'}},
- },
- series: [{
- roam: false, type: 'map', name: 'mapSer',
- geoIndex: 0, label: {show: false},
- data: data
- }, {
- roam: false, type: 'bar', name: 'barSer',
- visualMap: false, barGap: 0, barMaxWidth: 8,
- zlevel: 100, itemStyle: {
- normal: {
- color: function(params) {
- // build a color map as your need.
- var colorList = [{colorStops: [
- {offset: 0, color: '#FFD119'}, // 0% 处的颜色
- {offset: 1, color: '#FFAC4C'}, // 100% 处的颜色
- ]}, {colorStops: [
- {offset: 0, color: '#00C0FA'}, // 0% 处的颜色
- {offset: 1, color: '#2F95FA'}, // 100% 处的颜色
- ]}];
- return params.dataIndex < 3? colorList[0]: colorList[1]
- },
- barBorderRadius: 15
- }
- },
- data: barData
- }]
- };
- china_chart.setOption(option);
- }]}]);
- }]}]);
- },
- which: function(event, table, list, cb) {if (event.target == table) {return cb(-1, "")}
- can.page.Select(can, table, "tr", function(tr, index) {if (event.target == tr) {return cb(index-1, "")}
- can.page.Select(can, tr, "th,td", function(td, order) {
- if (event.target == td) {return cb(index-1, list[order])}
- })
- })
- },
-})
-Volcanos("onaction", {help: "组件交互", list: []})
-Volcanos("onchoice", {help: "组件菜单", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
-
-
diff --git a/trash/plugin/local/wiki/word.css b/trash/plugin/local/wiki/word.css
deleted file mode 100644
index c13b4646..00000000
--- a/trash/plugin/local/wiki/word.css
+++ /dev/null
@@ -1,50 +0,0 @@
-fieldset.story {
- clear:both;
-}
-fieldset.float {
- float:left;
- clear:none;
-}
-fieldset.clear {
- clear:both;
-}
-
-fieldset p.story {
- white-space:pre;
-}
-fieldset ul.story li:hover {
- border:solid 2px red;
- cursor:pointer;
-}
-fieldset code.story {
- display:block;
- color:white;
- font-size:14px;
- font-family:monospace;
- background-color:#272822;
- white-space:pre;
- padding:10px;
- overflow:auto;
- border:solid 3px green;
- max-height:640px;
-}
-
-fieldset div.stack:hover {
- background-color:red;
-}
-fieldset div.stack {
- cursor:pointer;
- width:fit-content;
-}
-fieldset div.stack.fold {
- font-weight:bold;
-}
-fieldset ul.stack {
- border:solid 2px #0000;
- margin:0px;
-}
-fieldset ul.stack:hover {
- border:solid 2px red;
-}
-
-
diff --git a/trash/plugin/local/wiki/word.js b/trash/plugin/local/wiki/word.js
deleted file mode 100644
index fa5a8266..00000000
--- a/trash/plugin/local/wiki/word.js
+++ /dev/null
@@ -1,315 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
- if (msg.Option("_display") == "table") {
- // 文件目录
- can.page.AppendTable(can, output, msg, msg.append, function(event, value, key, index, tr, td) {
- can.Export(event, value, key)
- })
- return typeof cb == "function" && cb(msg);
- }
-
- output.innerHTML = msg.Result()
-
- can.page.Select(can, output, ".story", function(item) {var data = item.dataset
- item.oncontextmenu = function(event) {
- can.user.carte(event, shy("组件菜单", can.ondetail, can.ondetail.list, function(event, key, meta) {
- var cb = meta[key] || can.onchoice[key] || can.onaction[key]; typeof cb == "function" && cb(event, can, data, key, item);
- }));
- event.stopPropagation(), event.preventDefault();
- }
-
- 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
- default:
- var figure = can.onfigure[data.type||item.tagName]
- figure && figure.init && figure.init({}, can, msg, "init", item)
-
- }
- })
- return typeof cb == "function" && cb(msg)
- },
-}, ["plugin/local/wiki/word.css"])
-Volcanos("onfigure", {help: "图形绘制", list: [],
- _spawn: function(sup, can) {can.sup = sup},
- _swell: function(can, sub) {},
- _begin: function(can) {},
- _start: function(can) {},
- _close: function(can) {},
-
- premenu: {
- init: function(event, can, value, cmd, target) {
- can.page.Append(can, target, can.page.Select(can, can.target, "h1.story,h2.story,h3.story", function(item) {var data = item.dataset;
- return {text: [item.innerHTML, "li"], onclick: function(event) {
- item.scrollIntoView();
- }};
- }))
- },
- save: function(event, can, value, cmd, target) {return "premenu"},
- },
- endmenu: {
- init: function(event, can, value, cmd, target) {},
- save: function(event, can, value, cmd, target) {return "endmenu"},
- },
- h1: {
- push: function(event, can, value) {
- return [{view: ["story", "h1", value.text], dataset: {type: "title", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'title "' + value.replace(data.name+" ", "") + '"': ""
- },
- },
- h2: {
- push: function(event, can, value) {
- return [{view: ["story", "h2", value.text], dataset: {type: "chapter", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'chapter "' + value.replace(data.name+" ", "") + '"': ""
- },
- },
- h3: {
- push: function(event, can, value) {
- return [{view: ["story", "h3", value.text], dataset: {type: "section", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'section "' + value.replace(data.name+" ", "") + '"': ""
- },
- },
- brief: {
- push: function(event, can, value) {
- return [{view: ["story", "p", value.text], dataset: {type: "brief", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'brief "'+data.name+'" `' + value + '`': ""
- },
- },
- refer: {
- push: function(event, can, value, cmd, target) {
- return [{view: ["story", "ul"], dataset: {type: "refer", name: value.name, text: value.text}, list: can.core.List(value.text.split("\n"), function(line) {
- return {type: "li", inner: line}
- })}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'refer "'+data.name+'" `\n' + can.page.Select(can, target, "li", function(item) {
- return item.innerHTML.replace(": ", " ")
- }).join("\n") + '\n`': ""
- },
- },
- spark: {
- push: function(event, can, value) {
- return [{view: ["story", "p", value.text], dataset: {type: "spark", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'spark "'+data.name+'" `' + value + '`': "spark"
- },
- },
-
- local: {
- push: function(event, can, value) {
- return [{view: ["story", "div", value.text], dataset: {type: "local", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'local "'+data.name+'" '+' `' + data.text + '`': ""
- },
- },
- shell: {
- push: function(event, can, value) {
- return [{view: ["story", "code", value.text], dataset: {type: "shell", name: value.name, dir: "./", text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'shell "'+data.name+'" '+'"'+data.dir+'"' +' `' + data.text + '`': ""
- },
- },
- field: {
- push: function(event, can, value) {
- return [{view: ["story", "code", value.text], dataset: {type: "field", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'field "'+data.name+'" `'+data.text+'`': ""
- },
- },
-
- order: {
- push: function(event, can, value) {
- return [{view: ["story", "ul"], dataset: {type: "order", name: value.name, text: value.text}, list: can.core.List(value.text.split("\n"), function(line) {
- return {type: "li", inner: line}
- })}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'order "'+data.name+'" `\n' + can.page.Select(can, target, "li", function(item) {
- return item.innerHTML
- }).join("\n") + '\n`': ""
- },
- },
- table: {
- data: {menu: ["追加行", "追加列", "删除行", "删除列"]},
- push: function(event, can, value) {
- return [{view: ["story", "table"], dataset: {type: "table", name: value.name, text: value.text}, list: can.core.List(value.text.split("\n"), function(line, index) {
- return {type: "tr", list: can.core.List(line.split(" "), function(word) {
- return {type: index==0? "th": "td", inner: word}
- })}
- })}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'table "'+data.name+'" `\n' + can.page.Select(can, target, "tr", function(tr) {
- return can.page.Select(can, tr, "th,td", function(td) {
- return td.innerHTML
- }).join(" ")
- }).join("\n") + '\n`': ""
- },
- },
- stack: {
- init: function(event, can, value, cmd, target) {var data = target.dataset;
- can.page.Select(can, target, "div.stack", function(stack) {var data = stack.dataset||{};
- function fold(stack) {
- stack.nextSibling && (stack.nextSibling.style.display = "none")
- can.page.Select(can, stack, "span.state", function(state) {
- if (state.innerText == "o") {return}
- can.page.ClassList.add(can, stack, "fold")
- can.page.ClassList.del(can, stack, "span")
- state.innerText = ">"
- })
- }
- function span(stack) {
- stack.nextSibling && (stack.nextSibling.style.display = "")
- can.page.Select(can, stack, "span.state", function(state) {
- if (state.innerText == "o") {return}
- can.page.ClassList.add(can, stack, "span")
- can.page.ClassList.del(can, stack, "fold")
- state.innerText = "v"
- })
- }
- function mark(stack, color) {
- stack.style.background = color;
- stack.style.color = color == ""? "": "white";
- }
-
- stack.onclick = function(event) {stack.nextSibling && (stack.nextSibling.style.display == "none"? span(stack): fold(stack))}
- stack.oncontextmenu = function(event) {var detail = can.feature.detail || can.ondetail.list, target = event.target;
- can.user.carte(event, shy("", can.ondetail, ["全部折叠", "全部展开", "标记颜色", "清除颜色", "red", "green", "blue"], function(event, cmd, meta) {var cb = meta[cmd];
- switch (cmd) {
- case "red":
- case "green":
- case "blue":
- mark(target, cmd)
- break
- case "标记颜色":
- can.user.prompt("请输入颜色:", function(color) {
- mark(target, color)
- })
- break
- case "清除颜色":
- mark(target, "")
- break
- case "全部折叠":
- fold(stack), can.page.Select(can, stack.nextSibling, "div.stack", fold)
- break
- case "全部展开":
- span(stack), can.page.Select(can, stack.nextSibling, "div.stack", span)
- break
- }
- }))
- }
- })
- },
- push: function(event, can, value) {
- return [{view: ["story", "div", value.text], dataset: {type: "stack", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'stack "'+data.name+'"' +' `' + data.text + '`': ""
- },
- },
- label: {
- init: function(event, can, value, cmd, target) {var data = target.dataset;
- target.Value = function(key, value) {return value && target.setAttribute(key, value), target.getAttribute(key||"class")||target[key]&&target[key].baseVal&&target[key].baseVal.value||target[key]&&target[key].baseVal||""}
- },
- push: function(event, can, value) {
- return [{view: ["story", "svg", value.text], dataset: {type: "label", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'label "'+data.name+'"' +' `\n' + data.text + '\n`' + " " + [
- target.Value("font-size")||16, target.Value("stroke")||"yellow", target.Value("fill")||"blue",
- ].join(" "): ""
- },
- },
- chain: {
- init: function(event, can, value, cmd, target) {var data = target.dataset;
- target.Value = function(key, value) {return value && target.setAttribute(key, value), target.getAttribute(key||"class")||target[key]&&target[key].baseVal&&target[key].baseVal.value||target[key]&&target[key].baseVal||""}
- },
- push: function(event, can, value) {
- return [{view: ["story", "svg", value.text], dataset: {type: "chain", name: value.name, text: value.text}}]
- },
- save: function(event, can, value, cmd, target) {var data = target.dataset;
- return value? 'chain "'+data.name+'"' +' `\n' + data.text + '\n`': ""
- },
- },
-}, [], function(can) {var sup = can.sup
-
-})
-// Volcanos("onaction", {help: "组件菜单", list: ["保存", "刷新", ["操作", "只读", "排序", "编辑"]],
-Volcanos("onaction", {help: "组件菜单", list: [],
- "保存": function(event, can, value, cmd, target) {
- can.run(event, ["action", cmd, can.Option("path"), can.Export(event, "", "file")], function(msg) {
- can.user.toast("保存成功")
- }, true)
- },
- "刷新": function(event, can, value, cmd, target) {
- can.run(event)
- },
-
- "只读": function(event, can, value, cmd, target) {
- can.page.Select(can, can.target, ".story", function(item) {
- item.setAttribute("contenteditable", false)
- item.setAttribute("draggable", false)
- })
- },
- "排序": function(event, can, value, cmd, target) {
- can.page.Select(can, can.target, ".story", 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()
- can.target.insertBefore(can.drag, item)
- }
- })
- },
- "编辑": function(event, can, value, cmd, target) {
- can.page.Select(can, can.target, ".story", function(item) {
- item.setAttribute("contenteditable", true)
- })
- },
-})
-Volcanos("onchoice", {help: "组件交互", list: ["保存", "刷新", "编辑", "排序"]})
-Volcanos("ondetail", {help: "组件详情", list: ["保存", "刷新", "编辑", "复制", "插入", "删除"],
- "复制": function(event, can, value, cmd, target) {
- var clone = target.cloneNode(true);
- target.parentNode.insertBefore(clone, target);
- },
- "插入": function(event, can, value, cmd, target) {
- can.user.input(event, can, [["type", "spark", "refer", "brief", "h3", "h2", "h1",
- "local", "shell", "field", "order", "table", "stack", "label", "chain"], "name", {name: "text", type: "textarea"}], function(event, value, form, list) {
- var figure = can.onfigure[form.type]
- var node = can.page.Append(can, target.parentNode, figure.push(event, can, form)).first;
- figure && figure.init && figure.init(event, can, figure, "init", node);
- target.parentNode.insertBefore(node, target);
- })
- },
- "删除": function(event, can, value, cmd, target) {
- can.page.Remove(can, target)
- },
-})
-Volcanos("onexport", {help: "导出数据", list: [],
- file: function(event, can, shy, cmd, target) {
- return can.page.Select(can, target, ".story", function(story) {
- var figure = can.onfigure[story.dataset.type] || can.onfigure[story.localName];
- var text = figure && figure.save && figure.save(event, can, story.innerText||story.innerHTML, cmd, story) || story.innerText||story.innerHTML
- return text
- }).join("\n\n")
- },
-})
-
diff --git a/trash/plugin/state.js b/trash/plugin/state.js
deleted file mode 100644
index f909207a..00000000
--- a/trash/plugin/state.js
+++ /dev/null
@@ -1,41 +0,0 @@
-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/trash/plugin/story/trend.js b/trash/plugin/story/trend.js
deleted file mode 100644
index 1292c08a..00000000
--- a/trash/plugin/story/trend.js
+++ /dev/null
@@ -1,199 +0,0 @@
-Volcanos("onimport", {help: "导入数据", list: [],
- init: function(can, meta, cb, target, action, option) {target.innerHTML = ""
- if (can.msg.Option("_display") == "table") {
- // 文件目录
- can.page.AppendTable(can, target, can.msg, can.msg.append, function(event, value, key, index, tr, td) {
- can.Export(event, value, key)
- })
- return
- }
-
- can.ui = can.page.Append(can, target, [{view: "action"}, {view: "output"}, {view: "status"}, {view: "total"}, {
- view: "display", style: {position: "absolute", "white-space": "pre", color: "yellow"}, onclick: function(event) {
- can.page.ClassList.add(can, can.ui.display, "hidden")
- },
- }])
- can.data = can.msg.Table()
- can.page.ClassList.add(can, can.ui.total, "status")
-
- can.sub = can.Output(can, {}, "/plugin/local/wiki/draw", can.Event({}), function() {
- can.Action("width", 600)
- can.onaction["编辑"]({}, can)
- can.onaction["股价图"]({}, can)
- }, can.ui.output, can.ui.action, option, can.ui.status)
- },
-})
-Volcanos("onaction", {help: "组件菜单", list: ["编辑", "清空", "股价图", "趋势", "比例", ["width", "200", "400", "600", "800", "1000"], ["height", "200", "400", "600"], "表格"],
- "编辑": function(event, can, value, cmd, target) {
- can.page.ClassList.neg(can, can.ui.action, "hidden")
- can.page.ClassList.neg(can, can.ui.status, "hidden")
- },
- "清空": function(event, can, value, cmd, target) {
- can.sub.svg.innerHTML = ""
- },
- "股价图": function(event, can, value, cmd, target) {var sub = can.sub, data = can.data;
- if (!can.list) {
- var count = 0, add = 0, del = 0, max = 0
- can.max = 0, can.rest = 0, can.list = can.core.List(data, function(value, index) {
- var line = {};
- line.note = value[can.msg.append[4]]
- line.date = value[can.msg.append[0]]
- line.add = parseInt(value[can.msg.append[1]])
- line.del = parseInt(value[can.msg.append[2]])
-
- line.begin = can.rest
- line.max = can.rest + line.add
- line.min = can.rest - line.del
- line.close = can.rest = can.rest + line.add - line.del
-
- count++
- add += line.add
- del += line.del
- if (line.max - line.min > max) {
- max = line.max - line.min
- }
- if (line.max > can.max) {
- can.max = line.max
- }
- return line
- })
-
- var begin = new Date(data[0].date)
- var end = new Date(data[data.length-1].date)
- var avg = parseInt((add + del) / (end - begin) * 1000 * 3600 * 24)
- can.page.AppendStatus(can, can.ui.total, ["from", "days", "count", "avg", "max", "add", "del", "rest"], {
- from: can.base.Time(begin).split(" ")[0], days: can.base.Duration(end-begin),
- count: count, avg: avg, max: max, add: add, del: del, rest: can.rest,
- })
- }
-
- var space = 10
- var view = parseInt(can.Action("height"))
- var max = parseInt(can.Action("width"))
- var step = parseInt(max / can.list.length)||2
-
- var width = can.list.length * step + space * 2
- sub.svg.Val("width", width)
-
- var height = view + space * 2
- sub.svg.Val("height", height)
-
- can.core.List(can.list, function(line, index) {
- sub.onimport.draw({}, sub, {
- shape: "line", point: [
- {x: space/2+step*index+step/4, y: space/2+view-line.min/can.max*view},
- {x: space/2+step*index+step/4, y: space/2+view-line.max/can.max*view},
- ], style: line.begin < line.close? {
- "stroke-width": 1, "stroke": "white",
- }: {
- "stroke-width": 1, "stroke": "black",
- },
- })
-
- var one = line.begin < line.close? sub.onimport.draw({}, sub, {
- shape: "rect", point: [
- {x: space/2+step*index, y: space/2+view-line.begin/can.max*view},
- {x: space/2+step*index+step/2, y: space/2+view-line.close/can.max*view},
- ], style: {
- "rx": 0, "ry": 0,
- "stroke-width": 1, "stroke": "white", "fill": "white",
- },
- }): sub.onimport.draw({}, sub, {
- shape: "rect", point: [
- {x: space/2+step*index, y: space/2+view-line.close/can.max*view},
- {x: space/2+step*index+step/2, y: space/2+view-line.begin/can.max*view},
- ], style: {
- "rx": 0, "ry": 0,
- "stroke-width": 1, "stroke": "black", "fill": "black",
- },
- })
-
- one.onmouseover = function(event) {
- can.page.ClassList.del(can, can.ui.display, "hidden")
- can.ui.display.style.left = event.clientX+space/2+"px"
- can.ui.display.style.top = event.clientY+space/2+"px"
-
- var msg = can.Event(event);
- msg.Push(line, ["date", "note", "begin", "add", "del", "close"], "detail")
- can.ui.display.innerHTML = ""
- can.page.AppendTable(can, can.ui.display, msg, msg.append)
- }
- })
- },
- "趋势": function(event, can, value, cmd, target) {var sub = can.sub, data = can.data;
- var space = 10
- var view = parseInt(can.Action("height"))
- var max = parseInt(can.Action("width"))
- var step = parseInt(max / can.list.length)||2
-
- var width = can.list.length * step + space * 2
- sub.svg.Val("width", width)
-
- var height = 0
- var max = {};
- can.core.List(can.msg.append, function(key, which) {
- height += view + space * 2
- max[key] = 0;
- can.core.List(data, function(value, index) {
- if ((parseInt(value[key])||0) > max[key]) {
- max[key] = parseInt(value[key])||0
- }
- })
- })
-
- sub.svg.Val("height", height+space*2)
-
- can.core.List(can.msg.append, function(key, which) {
- var y = (space*2+view)*(which+1)
- sub.onimport.draw({}, sub, {
- shape: "text", point: [
- {x: width/2, y: y+space},
- ],
- style: {
- "font-size": 20,
- "stroke-width": 0,
- "fill": "red",
- inner: key,
- },
- })
-
- can.core.List(data, function(value, index) {
- var one = sub.onimport.draw({}, sub, {
- shape: "rect",
- point: [
- {x: space+step*index, y: y},
- {x: space+step*index+step/4, y: y-parseInt(value[key])/(max[key]||1)*view}
- ],
- style: {
- "rx": 0, "ry": 0,
- "stroke-width": 1, "stroke": "white", "fill": "white",
- },
- })
-
- one.onmouseover = function(event) {
- can.page.ClassList.del(can, can.ui.display, "hidden")
- can.ui.display.style.left = event.clientX+space/2+"px"
- can.ui.display.style.top = event.clientY+space/2+"px"
-
- var msg = can.Event(event);
- msg.Push(value, can.core.Item(value, function(key) {
- return msg[key] = [], key
- }), "detail")
- can.ui.display.innerHTML = ""
- can.page.AppendTable(can, can.ui.display, msg, msg.append)
- }
- })
- })
- },
- "表格": function(event, can, value, cmd, target) {var sub = can.sub, data = can.data;
- if (!can.ui.table) {
- can.ui.table = can.page.AppendTable(can, can.target, can.msg, can.msg.append)
- can.ui.table.style.clear = "both"
- return
- }
- can.page.ClassList.neg(can, can.ui.table, "hidden")
- },
-})
-Volcanos("onchoice", {help: "组件交互", list: []})
-Volcanos("ondetail", {help: "组件详情", list: []})
-Volcanos("onexport", {help: "导出数据", list: []})
diff --git a/trash/plugin/table.js b/trash/plugin/table.js
deleted file mode 100644
index d0d1ad50..00000000
--- a/trash/plugin/table.js
+++ /dev/null
@@ -1,143 +0,0 @@
-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/trash/proto_old.js b/trash/proto_old.js
deleted file mode 100644
index fda325d1..00000000
--- a/trash/proto_old.js
+++ /dev/null
@@ -1,295 +0,0 @@
-// volcanos: 前端 火山架 我看不行
-// FMS: a fieldset manager system
-
-function shy(help, meta, list, cb) {
- var index = -1, value = "", type = "string", args = arguments;
- function next(check) {
- if (++index >= args.length) {return false}
- if (check && check != typeof args[index]) {index--; return false}
- return value = args[index], type = typeof value, value;
- }
-
- var cb = arguments[arguments.length-1] || function() {};
- cb.help = next("string") || "还没有写";
- cb.meta = next("object") || {};
- cb.list = next("object") || {};
- cb.runs = function() {};
- return cb;
-}
-function Volcanos(name, can, libs, cb, msg) {
- // 全局缓存
- var list = arguments.callee.list || [], meta = arguments.callee.meta || {index: 1, cache: {}};
- arguments.callee.list = list, arguments.callee.meta = meta;
-
- // 定义原型
- var id = 1, conf = {}, conf_cb = {}, sync = {}, cache = {};
- can = can || {}, list.push(can) && (can.__proto__ = {_name: name, _help: "插件模块", _create_time: new Date(), _load: function(name) {
- if (meta.cache[name]) {var cache = meta.cache[name];
- for (var i = 0; i < cache.length; i++) {var sub = cache[i];
- // if (sub._name == can._name) {continue}
- // 加载索引
- can[sub._name] = sub;
- typeof can._swell == "function" && can._swell(can, sub)
- typeof sub._spawn == "function" && sub._spawn(can, sub)
- }
- return can
- }
-
- meta.cache[name] = []
- for (var i = meta.index; i < list.length; i++) {var sub = list[i];
- // if (sub._name == can._name) {continue}
- if (sub._type == "local"|| sub._type == "input" || sub._type == "output") {continue}
- // 加载缓存
- can[sub._name] = sub;
- meta.cache[name].push(sub);
- typeof can._swell == "function" && can._swell(can, sub)
- typeof sub._spawn == "function" && sub._spawn(can, sub)
- }
- meta.index = i;
- return can
- },
- require: function(libs, cb) {
- if (!libs || libs.length == 0) {
- // 加载完成
- typeof cb == "function" && setTimeout(function() {cb(can)}, 10);
- return
- }
-
- if (can[libs[0]]) {
- // 已经加载
- can.require(libs.slice(1), cb)
- return
- }
- if (meta.cache[libs[0]]) {
- // 缓存加载
- can._load(libs[0]), can.require(libs.slice(1), cb)
- return
- }
-
- if (libs[0].endsWith(".wasm")) {var go = new Go();
- // 加载汇编
- WebAssembly.instantiateStreaming(fetch(libs[0]), go.importObject).then((result) => {
- go.argv = [can];
- go.run(result.instance);
- can.require(libs.slice(1), cb);
- }).catch((err) => {
- console.error(err);
- });
- return
- }
-
- // 加载脚本
- can.Dream(libs[0].endsWith(".css")? can.head||document.head: can.body||document.body,
- !libs[0].endsWith("/") && libs[0].indexOf(".") == -1? libs[0]+".js": libs[0], function() {
- can._load(libs[0]), can.require(libs.slice(1), cb);
- })
- },
- Name: function() {return can._name.toLowerCase()},
-
- ID: shy("生成器", function() {return id++}),
- Log: shy("日志器", function() {console.log(arguments)}),
- Conf: shy("配置器", function(key, value, cb) {if (key == undefined) {return conf}
- if (typeof key == "object") {conf = key; return conf}
- typeof cb == "function" && (conf_cb[key] = cb);
- if (value != undefined) {var old = conf[key], res; can.Log("conf", key, old, value);
- conf[key] = conf_cb[key] && (res = conf_cb[key](value, old, key)) != undefined && res || value
- }
- return conf[key]
- }),
- Sync: shy("同步器", function(name) {var data = "", list = []; name = name||"sync"+can.ID()
- return sync[name] || (sync[name] = {
- watch: shy("监听变量", function(cb) {typeof cb == "function" && list.push(cb); return list.length-1}),
- get: shy("读取变量", function() {return data}),
- set: shy("设置变量", function(value, force) {if (value == undefined) {return data}
- if (value == data && !force) {return data}
- can.Log("sync", name, data, value);
- for (var i = 0; i < list; i++) {list[i](value, data, name)}
- return data = value
- }),
- })
- }),
- Timer: shy("定时器", function(interval, cb, cbs) {interval = typeof interval == "object"? interval || []: [interval];
- // value
- // [1,2,3,4]
- // {value, length}
- var timer = {stop: false};
- function loop(event, i) {if (timer.stop || i >= interval.length && interval.length >= 0) {return typeof cbs == "function" && cbs(event, interval)}
- return typeof cb == "function" && cb(event, interval.value||interval[i], i, interval)?
- typeof cbs == "function" && cbs(event, interval):
- setTimeout(function() {loop(event, i+1)}, interval.value||interval[i+1]);
- }
- setTimeout(function(event) {loop(event, 0)}, interval.value||interval[0]);
- return timer;
- }),
- Event: shy("触发器", function(event, msg, proto) {event = event || {};
- if (!msg && event.msg) {return event.msg}
-
- event.msg = msg = msg || {}, msg.__proto__ = proto || {
- __proto__: can, _create_time: can.base.Time(),
- option: [],
- Log: shy("输出日志", function() {console.log(arguments)}),
- Ids: function(index, key) {var id = index;
- msg && msg.id && (id = msg.id[index]) || msg && msg.name && (id = msg.name[index]);
- return id;
- },
- Option: function(key, val) {
- if (val == undefined) {return msg && msg[key] && msg[key][0] || ""}
- msg.option = msg.option || []
- can.core.List(msg.option, function(k) {
- if (k == key) {return k}
- }).length > 0 || msg.option.push(key)
- msg[key] = can.core.List(arguments).slice(1)
- },
- Push: function(key, value, detail) {msg.append = msg.append || []
- if (typeof key == "object") {
- value = value || can.core.Item(key)
- can.core.List(value, function(item) {
- detail? msg.Push("key", item).Push("value", key[item]||""):
- msg.Push(item, key[item]||"")
- })
- return
- }
-
- for (var i = 0; i < msg.append.length; i++) {
- if (msg.append[i] == key) {
- break
- }
- }
- if (i >= msg.append.length) {msg.append.push(key)}
- msg[key] = msg[key] || []
- msg[key].push(""+value+"")
- return msg
- },
- Echo: shy("输出响应", function(res) {msg.result = msg.result || []
- msg._hand = true
- for (var i = 0; i < arguments.length; i++) {msg.result.push(arguments[i])}
- return msg;
- }),
- Copy: function(res) {if (!res) {return msg}
- res.result && (msg.result = res.result)
- res.append && (msg.append = res.append) && res.append.forEach(function(item) {
- res[item] && (msg[item] = res[item])
- })
- res.option && (msg.option = res.option) && res.option.forEach(function(item) {
- res[item] && (msg[item] = res[item])
- })
- return msg
- },
- Table: shy("遍历数据", function(cb) {if (!msg.append || !msg.append.length || !msg[msg.append[0]]) {return}
- var max = "", len = 0;
- can.core.List(msg.append, function(key, index) {
- if (msg[key].length > len) {max = key, len = msg[key].length}
- });
-
- return can.core.List(msg[max], function(value, index, array) {var one = {}, res;
- can.core.List(msg.append, function(key) {one[key] = msg[key][index]||""})
- return typeof cb == "function" && (res = cb(one, index, array)) && res != undefined && res || one
- })
- }),
- Result: function() {
- return msg.result && msg.result.join("") || "";
- },
- Export: function(name) {var ext = ".csv", txt = "";
- msg.append && msg.append.length > 0? txt = can.core.List(msg.append, function(key) {return key}).join(",")+"\n"+
- can.core.List(msg.Table(), function(line, index) {
- return can.core.List(msg.append, function(key) {return line[key]}).join(",")
- }).join("\n"): (ext = ".txt", txt = msg.Result())
- return [name, ext, txt]
- },
- };
- return msg.event = event, msg
- }),
- Dream: shy("构造器", function(target, type, line) {var p = window.Config && Config.volcano || "";
- if (type.endsWith(".css")) {
- var style = document.createElement("link");
- style.rel = "stylesheet", style.type = "text/css";
- style.href = (type.startsWith("/")? "": p)+type;
- style.onload = line;
- target.appendChild(style);
- return style
- }
- if (type.endsWith(".js")) {
- var script = document.createElement("script");
- script.src = (type.startsWith("/")? "": p)+type;
- script.onload = line
- target.appendChild(script);
- return script
- }
- if (type.endsWith("/")) {
- typeof line == "function" && line()
- return
- }
-
- var text = line, list = [], item = false, style = ""
- switch (type) {
- case "option":
- list.push({text: line.name+": "})
- case "input":
- style = " "+line.type
- list.push(line)
- break
- }
- var ui = can.page.Append(can, target, item? list: [{view: ["item"+style], list:list}])
- return ui["item"+style].Meta = text, ui
- }),
- Cache: shy("缓存器", function(name, output, data) {
- if (data) {
- // 写缓存
- var temp = document.createDocumentFragment()
- while (output.childNodes.length>0) {
- var item = output.childNodes[0]
- item.parentNode.removeChild(item)
- temp.appendChild(item)
- }
- cache[name] = {node: temp, data: data}
- return name
- }
-
- var list = cache[name];
- if (!list) {return}
-
- // 读缓存
- while (list.node.childNodes.length>0) {
- var item = list.node.childNodes[0]
- item.parentNode.removeChild(item)
- output.appendChild(item)
- }
- delete(cache[name])
- return list.data
- }),
- Story: shy("存储器", function(type, meta, list) {
- }),
- });
-
- can.require(libs, function() {
- can.onimport && can.onimport._begin && can.onimport._begin(can)
- typeof cb == "function" && cb(can);
-
- if (can.target) {
- function run(event, msg, key, cb) {
- if (typeof cb == "function") {
- // 本地命令
- cb(event, can, msg, key, can.target)
- } else {
- // 本地命令
- can.run(event, ["action", key], function(msg) {can.Import(event, msg, key)}, true)
- }
- }
-
- // 注册控件
- can.action && (can.action.innerHTML = ""), can.onaction && can.page.AppendAction(can, can.action, can.onaction.list, function(event, value, key) {
- key? run(event, key, value, can.onaction[key]||can.onaction[value]): run(event, msg, value, can.onaction[value]);
- })
- // 注册菜单
- can.onchoice && (can.target.oncontextmenu = function(event) {can.user.carte(event, shy("", can.onchoice, can.onchoice.list, function(event, key, meta) {
- run(event, msg, key, can.onchoice[key] || can.onaction[key]);
- }), can), event.stopPropagation(), event.preventDefault()})
-
- // 注册事件
- can.core && can.core.Item(can.onaction, function(key, cb) {key.indexOf("on") == 0 && (can.target[key] = function(event) {cb(event, can)})});
- }
- can.onimport && can.onimport._start && can.onimport._start(can)
- })
- return can
-}
-
diff --git a/trash/share.html b/trash/share.html
deleted file mode 100644
index a50b95b3..00000000
--- a/trash/share.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- volcanos
-
-
-
-
-
-
-
-
-
-
diff --git a/trash/share.js b/trash/share.js
deleted file mode 100644
index 74929b4b..00000000
--- a/trash/share.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var Config = {iceberg: "", volcano: "/static/volcanos/",
- libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"],
- main: "chat", list: [
- "pane/float/Toast", "pane/float/Carte",
-
- "pane/Header",
- "pane/River", "pane/Storm",
- "pane/Target", "pane/Source", "pane/Action",
- "pane/Footer",
- ], pane: [
- {group: "index", name: "Header", pos: "head", state: ["time", "user", "link"], title: "github.com/shylinux/context"},
- {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: "Footer", pos: "foot", state: ["ntxt", "ncmd"], title: 'shylinux@163.com'},
- ],
- title: "volcanos", topic: "black", layout: {def: "最大", list: ["最大"], size: {
- "最大": {head: 0, foot: 0, left: 0, right: 0, bottom: -1, center: 0, top: 0},
- }, border: 4,
- },
-}
diff --git a/trash/style_old.css b/trash/style_old.css
deleted file mode 100644
index b2215e4c..00000000
--- a/trash/style_old.css
+++ /dev/null
@@ -1,171 +0,0 @@
-html, body {
- padding:0px;
- height:100%;
- width:100%;
- margin:0px;
-}
-fieldset {
- border-width:2px;
- padding:0px;
- min-width:10px;
- overflow:auto;
- margin:0px;
-}
-legend {
- margin-left:10px;
-}
-.hidden {
- display:none;
-}
-
-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.textarea {
- margin-top:4px;
- clear:both;
-}
-fieldset>form.option label {
- margin-right:3px;
-}
-fieldset>form.option input.args.char {
- width:20px;
-}
-fieldset>form.option input.args.tiny {
- width:40px;
-}
-fieldset>form.option input.args {
- width:80px;
-}
-fieldset>form.option input.args.cmd {
- background-color:black;
- color:white;
- width:160px;
-}
-fieldset>form.option input.args.long {
- width:240px;
-}
-fieldset>form.option input.args.full {
- width:480px;
-}
-fieldset>form.option input.opts {
- width:80px;
-}
-fieldset>form.option textarea.args {
- width:300px;
- height:50px;
-}
-fieldset div.action {
- padding:6px;
- clear:both;
-}
-fieldset div.action>div.item {
- float:left;
-}
-fieldset div.action>div.item.space {
- display:inline-block;
- width:10px;
-}
-fieldset div.action input {
- width:60px;
- margin-left:6px;
-}
-fieldset div.action input:hover {
- width:100px;
-}
-fieldset div.action input:focus {
- width:120px;
-}
-fieldset div.output {
- padding:5px;
- clear:both;
-}
-fieldset div.output>div.item {
- padding:2px;
-}
-fieldset div.status {
- clear:both;
-}
-
-fieldset div.status>div.item {
- margin:0 2px;
- float:left;
-}
-
-fieldset.dialog {
- padding:10px;
- display:none;
- position:absolute;
- z-index:10;
-}
-fieldset.dialog>div.output {
- padding:10px;
- float:left;
-}
-fieldset.dialog>div.output table th {
- min-width:130px;
-}
-fieldset.dialog>div.output table td {
- min-width:100px;
-}
-fieldset.dialog>div.create {
- padding:10px;
- border:solid 1px red;
- margin-left:10px;
- float:left;
-}
-fieldset.dialog>div.create table {
- min-width:240px;
-}
-
-fieldset.item {
- float:left;
-}
-fieldset.item>div.output {
- overflow:auto;
-}
-
-fieldset.input {
- position:absolute;
-}
-fieldset.input>legend {
- padding-top:4px;
-}
-
-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 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;
-}
diff --git a/trash/topic/black.css b/trash/topic/black.css
deleted file mode 100644
index 65d3e847..00000000
--- a/trash/topic/black.css
+++ /dev/null
@@ -1,118 +0,0 @@
-body, fieldset {
- color: white;
- background-color:black;
-}
-fieldset.item {
- border:ridge 2px cyan;
- margin:2px;
-}
-fieldset.item:hover {
- /* background-color:gold; */
- border:ridge 2px red;
-}
-fieldset.item.select {
- /* background-color:gold; */
- border:ridge 2px red;
-}
-fieldset.item legend {
- color:cyan;
- border:ridge 2px cyan;
- margin-bottom:4px;
-}
-
-fieldset.input {
- border:solid 2px yellow;
-}
-fieldset.input table tr:hover {
- background-color:yellow;
-}
-fieldset.input table td:hover {
- background-color:red;
- cursor:pointer;
-}
-fieldset.input table td.select {
- background-color:red;
-}
-
-fieldset.story {
- border:ridge 1px cyan;
- margin:2px;
-}
-
-fieldset div.output>div.item:hover {
- cursor:pointer;
- background-color:red;
- border:ridge 2px yellow;
-}
-fieldset input {
- font-size:12px;
-}
-fieldset input.args {
- background-color:cyan;
- font-weight:600;
- width:80px;
-}
-fieldset input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
- color:green;
-}
-
-fieldset table {
- border:solid 1px green;
-}
-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.Storm>div.output>div.item.select {
- background-color:red;
- border:ridge 2px yellow;
-}
-fieldset.item>div.output>div.code svg {
- border: solid 2px red;
-}
-
-fieldset .story {
- border:solid 2px #f000;
-}
-fieldset .story:hover {
- border:solid 2px red;
-}
-fieldset fieldset.story {
- border:ridge 2px cyan;
-}
diff --git a/trash/topic/gray.css b/trash/topic/gray.css
deleted file mode 100644
index 6845a41b..00000000
--- a/trash/topic/gray.css
+++ /dev/null
@@ -1,40 +0,0 @@
-body, fieldset {
- background-color:#d8d8d8;
-}
-
-fieldset.item:hover {
- background-color:gold;
- border:ridge 2px red;
-}
-fieldset.item.select {
- background-color:gold;
- border:ridge 2px red;
-}
-
-fieldset.dialog {
-}
-
-fieldset table tr:hover {
- background-color:lightgreen;
-}
-fieldset table tr.select {
- background-color:lightgreen;
-}
-fieldset table th {
- font-family:monospace;
- background-color:lightgreen;
- 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;
-}
diff --git a/trash/topic/miss.css b/trash/topic/miss.css
deleted file mode 100644
index 54b813ed..00000000
--- a/trash/topic/miss.css
+++ /dev/null
@@ -1,114 +0,0 @@
-body, fieldset {
- color: white;
- background-color:black;
-}
-fieldset.item {
- border:ridge 2px gray;
- margin:2px;
-}
-fieldset.item:hover {
- /* background-color:gold; */
- border:ridge 2px gray;
-}
-fieldset.item.select {
- /* background-color:gold; */
- border:ridge 2px gray;
-}
-a {
- color:white;
-}
-
-fieldset.input {
- border:solid 2px yellow;
-}
-fieldset.input table tr:hover {
- background-color:gray;
-}
-fieldset.input table td:hover {
- background-color:gray;
- cursor:pointer;
-}
-fieldset.input table td.select {
- background-color:gray;
-}
-
-fieldset.story {
- border:ridge 1px gray;
- margin:2px;
-}
-
-fieldset div.output>div.item:hover {
- cursor:pointer;
- border:ridge 2px gray;
-}
-fieldset input {
- font-size:12px;
-}
-fieldset input.args {
- background-color:gray;
- font-weight:600;
- width:80px;
-}
-fieldset input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
- color:gray;
-}
-
-fieldset table {
- border:solid 1px gray;
-}
-fieldset table tr:hover {
- background-color:gray;
-}
-fieldset table tr.over {
- background:gray;
-}
-fieldset table tr.select {
- background-color:gray;
-}
-fieldset table th {
- font-family:monospace;
- background-color:gray;
- 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:gray;
-}
-fieldset table td.select {
- background-color:gray;
-}
-fieldset div.code {
- color:white;
- font-size:14px;
- font-family:monospace;
- background-color:black;
- white-space:pre;
- padding:10px;
- overflow:auto;
- border:solid 3px gray;
- max-height:640px;
-}
-
-fieldset.Storm>div.output>div.item.select {
- border:ridge 2px gray;
-}
-fieldset.item>div.output>div.code svg {
- border: solid 2px gray;
-}
-
-
-fieldset .story {
- border:solid 2px gray;
-}
-fieldset .story:hover {
- border:solid 2px gray;
-}
-fieldset fieldset.story {
- border:ridge 2px gray;
-}
diff --git a/trash/topic/miss.svg b/trash/topic/miss.svg
deleted file mode 100644
index 6af9d22a..00000000
--- a/trash/topic/miss.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-