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 @@ - - - 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 ['', svg? svg.innerHTML: "", ""]).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 @@ - - -volcanos - -proto.js - -ID 生成器 - -Log 日志器 - -Conf 配置器 - -Sync 同步器 - -Timer 定时器 - -Event 触发器 - -Dream 构造器 - -Cache 缓存器 - -Story 存储器 - -frame.js - -Page - -Pane - -base 基础模块 - -core 核心模块 - -misc 工具模块 - -page 网页模块 - -user 用户模块 - -Plugin - -Inputs - -onimport 导入数据 - -onaction 控件交互 - -onchoice 控件菜单 - -ondetail 控件详情 - -onexport 导出数据 - -Output - -order.js - -Header - -Ocean - -River - -Target - -Source - -Action - -Storm - -Steam - -Footer - - -