mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-25 16:58:06 +08:00
opt example.js
This commit is contained in:
parent
341447415f
commit
a24fc9cdcf
@ -689,6 +689,31 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
||||
}
|
||||
return
|
||||
}},
|
||||
"location": &ctx.Command{Name: "clip", Help: "授权", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
h := m.Cmdx("aaa.auth", "username", m.Option("username"))
|
||||
|
||||
if len(arg) < 2 { // 会话列表
|
||||
m.Confm("auth", []string{h, "data", "location"}, func(index int, value map[string]interface{}) {
|
||||
m.Add("append", "create_time", value["create_time"])
|
||||
m.Add("append", "location", value["location"])
|
||||
m.Add("append", "latitude", value["latitude"])
|
||||
m.Add("append", "longitude", value["longitude"])
|
||||
})
|
||||
m.Table()
|
||||
return
|
||||
}
|
||||
|
||||
switch arg[0] {
|
||||
default:
|
||||
m.Conf("auth", []string{h, "data", "location", "-2"}, map[string]interface{}{
|
||||
"create_time": m.Time(),
|
||||
"latitude": arg[0], "longitude": arg[1],
|
||||
"location": kit.Select("", arg, 2),
|
||||
})
|
||||
m.Echo("%d", len(m.Confv("auth", []string{h, "data", "location"}).([]interface{}))-1)
|
||||
}
|
||||
return
|
||||
}},
|
||||
|
||||
"relay": &ctx.Command{Name: "relay check hash | share role", Help: "授权", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
if len(arg) == 0 { // 会话列表
|
||||
|
@ -148,7 +148,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
}, Help: "运行环境"},
|
||||
"compile": &ctx.Config{Name: "compile", Value: map[string]interface{}{
|
||||
"bench": "src/examples/app/bench.go",
|
||||
"tmp": "var/tmp/go",
|
||||
"tmp": "var/tmp/go",
|
||||
"env": []interface{}{"GOPATH", "PATH"},
|
||||
}, Help: "运行环境"},
|
||||
"publish": &ctx.Config{Name: "publish", Value: map[string]interface{}{
|
||||
@ -628,7 +628,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
m.Confm("publish", "list", func(key string, value string) {
|
||||
list = append(list, []string{key})
|
||||
})
|
||||
m.Cmdp(time.Second, []string{"copy"}, []string{"cli.publish"}, list)
|
||||
m.Cmdp(0, []string{"copy"}, []string{"cli.publish"}, list)
|
||||
return
|
||||
}
|
||||
|
||||
@ -738,7 +738,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
m.Echo(", wait 1s\n")
|
||||
m.Table()
|
||||
fmt.Printf("\n")
|
||||
for _, v:=range m.Meta["result"] {
|
||||
for _, v := range m.Meta["result"] {
|
||||
fmt.Printf("%v", v)
|
||||
}
|
||||
|
||||
|
@ -1556,10 +1556,11 @@ func (m *Message) Cmdp(t time.Duration, head []string, prefix []string, suffix [
|
||||
|
||||
for i, v := range suffix {
|
||||
m.Show(fmt.Sprintf("%v/%v %v...\n", i+1, len(suffix), v))
|
||||
m.Cmd(prefix, v)
|
||||
m.CopyFuck(m.Cmd(prefix, v), "append")
|
||||
time.Sleep(t)
|
||||
}
|
||||
m.Show("\n")
|
||||
m.Table()
|
||||
return m
|
||||
}
|
||||
func (m *Message) Cmdm(args ...interface{}) *Message {
|
||||
|
@ -98,6 +98,38 @@ var Index = &ctx.Context{Name: "mdb", Help: "数据中心",
|
||||
}, Help: "数据视图"},
|
||||
},
|
||||
Commands: map[string]*ctx.Command{
|
||||
"redis": &ctx.Command{Name: "redis conn address [protocol]", Help: "", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
if mdb, ok := m.Target().Server.(*MDB); m.Assert(ok) {
|
||||
switch arg[0] {
|
||||
case "conn":
|
||||
c, e := net.Dial(kit.Select("tcp", arg, 2), arg[1])
|
||||
m.Assert(e)
|
||||
mdb.conn = redis.NewConn(c, time.Second*10, time.Second*10)
|
||||
default:
|
||||
if mdb.conn == nil {
|
||||
m.Echo("not open")
|
||||
break
|
||||
}
|
||||
if mdb.conn.Err() != nil {
|
||||
m.Echo("%v", mdb.conn.Err())
|
||||
return
|
||||
}
|
||||
args := []interface{}{}
|
||||
for _, v := range arg[1:] {
|
||||
args = append(args, v)
|
||||
}
|
||||
res, err := mdb.conn.Do(arg[0], args...)
|
||||
m.Assert(err)
|
||||
switch val := res.(type) {
|
||||
case redis.Error:
|
||||
m.Echo("%v", val)
|
||||
default:
|
||||
m.Echo("%v", kit.Format(res))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}},
|
||||
"open": &ctx.Command{Name: "open [database [username [password [address [protocol [driver]]]]]]",
|
||||
Help: "打开数据库, database: 数据库名, username: 用户名, password: 密码, address: 服务地址, protocol: 服务协议, driver: 数据库类型",
|
||||
Form: map[string]int{"dbname": 1, "dbhelp": 1},
|
||||
@ -126,38 +158,6 @@ var Index = &ctx.Context{Name: "mdb", Help: "数据中心",
|
||||
kit.Select("数据源", m.Option("dbhelp")), arg...)
|
||||
return
|
||||
}},
|
||||
"redis": &ctx.Command{Name: "redis conn address [protocol]", Help: "", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
if mdb, ok := m.Target().Server.(*MDB); m.Assert(ok) {
|
||||
switch arg[0] {
|
||||
case "conn":
|
||||
c, e := net.Dial(kit.Select("tcp", arg, 2), arg[1])
|
||||
m.Assert(e)
|
||||
mdb.conn = redis.NewConn(c, time.Second*10, time.Second*10)
|
||||
default:
|
||||
if mdb.conn == nil {
|
||||
m.Echo("not open")
|
||||
break
|
||||
}
|
||||
if mdb.conn.Err() != nil {
|
||||
m.Echo("%v", mdb.conn.Err())
|
||||
return
|
||||
}
|
||||
args := []interface{}{}
|
||||
for _, v:=range arg[1:] {
|
||||
args = append(args, v)
|
||||
}
|
||||
res, err := mdb.conn.Do(arg[0], args...)
|
||||
m.Assert(err)
|
||||
switch val := res.(type) {
|
||||
case redis.Error:
|
||||
m.Echo("%v", val)
|
||||
default:
|
||||
m.Echo("%v", kit.Format(res))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}},
|
||||
"exec": &ctx.Command{Name: "exec sql [arg]", Help: "操作数据库, sql: SQL语句, arg: 操作参数", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
if mdb, ok := m.Target().Server.(*MDB); m.Assert(ok) && mdb.DB != nil {
|
||||
which := make([]interface{}, 0, len(arg))
|
||||
|
@ -176,15 +176,35 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
||||
map[string]interface{}{"type": "button", "value": "运行"},
|
||||
},
|
||||
},
|
||||
map[string]interface{}{"componet_name": "location", "componet_help": "地理位置",
|
||||
"componet_tmpl": "componet", "componet_view": "Context", "componet_init": "",
|
||||
"componet_type": "public", "componet_ctx": "aaa", "componet_cmd": "location",
|
||||
"componet_args": []interface{}{}, "inputs": []interface{}{
|
||||
map[string]interface{}{"type": "text", "name": "content", "view": "long"},
|
||||
map[string]interface{}{"type": "button", "value": "位置", "click": "Location"},
|
||||
map[string]interface{}{"type": "button", "value": "查看"},
|
||||
},
|
||||
},
|
||||
map[string]interface{}{"componet_name": "baidu", "componet_help": "百度地图",
|
||||
"componet_tmpl": "componet", "componet_view": "Context", "componet_init": "",
|
||||
"componet_type": "public", "componet_ctx": "aaa", "componet_cmd": "location",
|
||||
"componet_args": []interface{}{}, "inputs": []interface{}{
|
||||
map[string]interface{}{"type": "text", "name": "content", "view": "long"},
|
||||
map[string]interface{}{"type": "button", "value": "位置", "click": "Location"},
|
||||
map[string]interface{}{"type": "button", "value": "查看"},
|
||||
},
|
||||
"display": map[string]interface{}{"map": true},
|
||||
},
|
||||
},
|
||||
"index": []interface{}{
|
||||
map[string]interface{}{"componet_name": "pod", "componet_help": "pod",
|
||||
"componet_tmpl": "componet", "componet_view": "Context", "componet_init": "",
|
||||
"componet_type": "private", "componet_ctx": "ssh", "componet_cmd": "remote",
|
||||
"componet_args": []interface{}{}, "inputs": []interface{}{
|
||||
"componet_type": "private", "componet_ctx": "ssh", "componet_cmd": "_route",
|
||||
"componet_args": []interface{}{"$$", "context", "ssh", "remote"}, "inputs": []interface{}{
|
||||
map[string]interface{}{"type": "text", "name": "pod", "imports": "plugin_pod"},
|
||||
map[string]interface{}{"type": "button", "value": "执行"},
|
||||
},
|
||||
"exports": []interface{}{"pod", "key"},
|
||||
"exports": []interface{}{"pod", "key", "pod"},
|
||||
},
|
||||
map[string]interface{}{"componet_name": "ctx", "componet_help": "ctx",
|
||||
"componet_tmpl": "componet", "componet_view": "Context", "componet_init": "",
|
||||
@ -210,13 +230,13 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
||||
"componet_tmpl": "componet", "componet_view": "Context", "componet_init": "",
|
||||
"componet_type": "private", "componet_ctx": "ssh", "componet_cmd": "_route",
|
||||
"componet_args": []interface{}{"$$", "context", "nfs", "dir"}, "inputs": []interface{}{
|
||||
map[string]interface{}{"type": "button", "value": "回退", "click": "Back"},
|
||||
map[string]interface{}{"type": "text", "name": "pod", "imports": "plugin_pod"},
|
||||
map[string]interface{}{"type": "text", "name": "dir", "value": "", "view": "long", "imports": []interface{}{"plugin_dir", "plugin_you"}},
|
||||
map[string]interface{}{"type": "button", "value": "查看"},
|
||||
map[string]interface{}{"type": "button", "value": "回退", "click": "Back"},
|
||||
},
|
||||
"display": map[string]interface{}{"hide_result": true},
|
||||
"exports": []interface{}{"dir", "filename", "dir"},
|
||||
"display": map[string]interface{}{"hide_result": true},
|
||||
"exports": []interface{}{"dir", "filename", "dir"},
|
||||
"dir_root": []interface{}{"/"},
|
||||
},
|
||||
map[string]interface{}{"componet_name": "status", "componet_help": "git",
|
||||
@ -462,7 +482,6 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
||||
}
|
||||
msg.Cmd(tool["componet_cmd"], args, arg).CopyTo(m)
|
||||
|
||||
|
||||
default:
|
||||
m.Confm("componet", arg[0:], func(value map[string]interface{}) {
|
||||
m.Add("append", "name", value["componet_name"])
|
||||
|
@ -171,7 +171,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
||||
// m.Option("nickname", m.Option("username"))
|
||||
// }
|
||||
m.Append("remote_ip", m.Option("remote_ip"))
|
||||
m.Append("nickname", m.Option("nickname"))
|
||||
m.Append("nickname", kit.Select(m.Option("username"), m.Option("nickname")))
|
||||
m.Echo(m.Option("username"))
|
||||
return
|
||||
}},
|
||||
|
@ -213,6 +213,16 @@ func Format(arg ...interface{}) string {
|
||||
result = append(result, string(val))
|
||||
case []string:
|
||||
result = append(result, val...)
|
||||
// case []interface{}:
|
||||
//
|
||||
// result = append(result, "[")
|
||||
// for i, value := range val {
|
||||
// result = append(result, Format(value))
|
||||
// if i < len(val)-1 {
|
||||
// result = append(result, ",")
|
||||
// }
|
||||
// }
|
||||
// result = append(result, "]")
|
||||
case time.Time:
|
||||
result = append(result, fmt.Sprintf("%s", val.Format("2006-01-02 15:03:04")))
|
||||
case *os.File:
|
||||
@ -318,6 +328,8 @@ func Struct(arg ...interface{}) map[string]interface{} {
|
||||
switch val := arg[0].(type) {
|
||||
case map[string]interface{}:
|
||||
return val
|
||||
case string:
|
||||
json.Unmarshal([]byte(val), value)
|
||||
}
|
||||
|
||||
return value
|
||||
|
@ -1,6 +1,7 @@
|
||||
var page = Page({
|
||||
Page({
|
||||
conf: {border: 4, layout: {header:30, river:180, action:180, source:60, storm:180, footer:30}},
|
||||
onlayout: function(event, sizes) {
|
||||
var page = this
|
||||
kit.isWindows && (document.body.style.overflow = "hidden")
|
||||
|
||||
var height = document.body.clientHeight-page.conf.border
|
||||
@ -11,24 +12,24 @@ var page = Page({
|
||||
sizes = sizes || {}
|
||||
sizes.header == undefined && (sizes.header = page.header.clientHeight)
|
||||
sizes.footer == undefined && (sizes.footer = page.footer.clientHeight)
|
||||
page.header.Size(width, sizes.header)
|
||||
page.footer.Size(width, sizes.footer)
|
||||
page.header.Pane.Size(width, sizes.header)
|
||||
page.footer.Pane.Size(width, sizes.footer)
|
||||
|
||||
sizes.river == undefined && (sizes.river = page.river.clientWidth)
|
||||
sizes.storm == undefined && (sizes.storm = page.storm.clientWidth)
|
||||
height -= page.header.offsetHeight+page.footer.offsetHeight
|
||||
page.river.Size(sizes.river, height)
|
||||
page.storm.Size(sizes.storm, height)
|
||||
page.river.Pane.Size(sizes.river, height)
|
||||
page.storm.Pane.Size(sizes.storm, height)
|
||||
|
||||
sizes.action == undefined && (sizes.action = page.action.clientHeight)
|
||||
sizes.source == undefined && (sizes.source = page.source.clientHeight);
|
||||
(sizes.action == -1 || sizes.source == 0) && (sizes.action = height, sizes.source = 0)
|
||||
width -= page.river.offsetWidth+page.storm.offsetWidth
|
||||
page.action.Size(width, sizes.action)
|
||||
page.source.Size(width, sizes.source)
|
||||
page.action.Pane.Size(width, sizes.action)
|
||||
page.source.Pane.Size(width, sizes.source)
|
||||
|
||||
height -= page.source.offsetHeight+page.action.offsetHeight
|
||||
page.target.Size(width, height)
|
||||
page.target.Pane.Size(width, height)
|
||||
kit.History.add("lay", sizes)
|
||||
},
|
||||
oncontrol: function(event, target, action) {
|
||||
@ -37,7 +38,7 @@ var page = Page({
|
||||
if (event.ctrlKey) {
|
||||
switch (event.key) {
|
||||
case "0":
|
||||
page.source.Select()
|
||||
page.source.Pane.Select()
|
||||
break
|
||||
case "1":
|
||||
case "2":
|
||||
@ -48,13 +49,13 @@ var page = Page({
|
||||
case "7":
|
||||
case "8":
|
||||
case "9":
|
||||
page.action.Select(parseInt(event.key))
|
||||
page.action.Pane.Select(parseInt(event.key))
|
||||
break
|
||||
case "n":
|
||||
page.ocean.Show()
|
||||
page.ocean.Pane.Show()
|
||||
break
|
||||
case "m":
|
||||
page.steam.Show()
|
||||
page.steam.Pane.Show()
|
||||
break
|
||||
case "i":
|
||||
page.storm.Next()
|
||||
@ -70,102 +71,16 @@ var page = Page({
|
||||
} else {
|
||||
switch (event.key) {
|
||||
case "Escape":
|
||||
page.dialog && page.dialog.Show()
|
||||
page.dialog && page.dialog.Pane.Show()
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
},
|
||||
|
||||
initLogin: function(page, pane, form, output) {
|
||||
var ui = kit.AppendChild(form, [
|
||||
{label: "username"}, {input: ["username"]}, {type: "br"},
|
||||
{label: "password"}, {password: ["password"]}, {type: "br"},
|
||||
{button: ["login", function(event) {
|
||||
if (!ui.username.value) {
|
||||
ui.username.focus()
|
||||
return
|
||||
}
|
||||
if (!ui.password.value) {
|
||||
ui.password.focus()
|
||||
return
|
||||
}
|
||||
form.Run([ui.username.value, ui.password.value], function(msg) {
|
||||
if (msg.result && msg.result[0]) {
|
||||
pane.ShowDialog(1, 1)
|
||||
ctx.Cookie("sessid", msg.result[0])
|
||||
location.reload()
|
||||
return
|
||||
}
|
||||
page.alert("用户或密码错误")
|
||||
})
|
||||
}]},
|
||||
{button: ["scan", function(event) {
|
||||
scan(event, function(text) {
|
||||
alert(text)
|
||||
})
|
||||
}]},
|
||||
{type: "br"},
|
||||
{type: "img", data: {"src": "/chat/qrcode?text=hi"}}
|
||||
])
|
||||
|
||||
|
||||
if (kit.isWeiXin) {
|
||||
pane.Run(["weixin"], function(msg) {
|
||||
// if (!ctx.Search("state")) {
|
||||
// location.href = msg["auth2.0"][0]
|
||||
// }
|
||||
// return
|
||||
kit.AppendChild(document.body, [{include: ["https://res.wx.qq.com/open/js/jweixin-1.4.0.js", function(event) {
|
||||
kit.AppendChild(document.body, [{include: ["/static/librarys/weixin.js", function(event) {
|
||||
wx.error(function(res){
|
||||
})
|
||||
wx.ready(function(){
|
||||
wx.getNetworkType({success: function (res) {
|
||||
}})
|
||||
return
|
||||
wx.getLocation({
|
||||
success: function (res) {
|
||||
page.footer.State("site", parseInt(res.latitude*10000)+","+parseInt(res.longitude*10000))
|
||||
},
|
||||
})
|
||||
})
|
||||
wx.config({
|
||||
appId: msg.appid[0],
|
||||
timestamp: msg.timestamp[0],
|
||||
nonceStr: msg.nonce[0],
|
||||
signature: msg.signature[0],
|
||||
jsApiList: [
|
||||
"scanQRCode",
|
||||
"chooseImage",
|
||||
"closeWindow",
|
||||
"openAddress",
|
||||
"getNetworkType",
|
||||
"getLocation",
|
||||
]
|
||||
})
|
||||
}]}])
|
||||
}]}])
|
||||
})
|
||||
}
|
||||
form.Run([], function(msg) {
|
||||
if (msg.result && msg.result[0]) {
|
||||
page.header.State("user", msg.nickname[0])
|
||||
page.river.Show()
|
||||
page.footer.State("ip", msg.remote_ip[0])
|
||||
return
|
||||
}
|
||||
pane.ShowDialog(1, 1)
|
||||
})
|
||||
pane.Exit = function() {
|
||||
ctx.Cookie("sessid", "")
|
||||
page.reload()
|
||||
|
||||
}
|
||||
},
|
||||
initOcean: function(page, pane, form, output) {
|
||||
initOcean: function(page, field, option, output) {
|
||||
var table = kit.AppendChild(output, "table")
|
||||
var ui = kit.AppendChild(pane, [{view: ["create ocean"], list: [
|
||||
var ui = kit.AppendChild(field, [{view: ["create ocean"], list: [
|
||||
{input: ["name", function(event) {
|
||||
page.oninput(event, function(event) {
|
||||
switch (event.key) {
|
||||
@ -181,10 +96,10 @@ var page = Page({
|
||||
tr && tr.childNodes[0].click()
|
||||
return true
|
||||
case "9":
|
||||
pane.Action["全选"](event)
|
||||
field.Pane.Action["全选"](event)
|
||||
return true
|
||||
case "0":
|
||||
pane.Action["清空"](event)
|
||||
field.Pane.Action["清空"](event)
|
||||
return true
|
||||
case "-":
|
||||
var pre = ui.list.querySelector("pre")
|
||||
@ -209,239 +124,235 @@ var page = Page({
|
||||
cmd.push(item.innerText)
|
||||
})
|
||||
if (cmd.length == 3) {
|
||||
alert("请添加组员")
|
||||
kit.alert("请添加组员")
|
||||
return
|
||||
}
|
||||
|
||||
form.Run(cmd, function(msg) {
|
||||
page.river.Show()
|
||||
pane.Show()
|
||||
field.Pane.Run(cmd, function(msg) {
|
||||
page.river.Pane.Show()
|
||||
field.Pane.Show()
|
||||
})
|
||||
}]}, {name: "list", view: ["list"]},
|
||||
]}])
|
||||
|
||||
pane.Show = function() {
|
||||
pane.ShowDialog() && (table.innerHTML = "", ui.list.innerHTML = "", ui.name.value = "good", ui.name.focus(), form.Run([], function(msg) {
|
||||
kit.AppendTable(table, ctx.Table(msg), ["key", "user.route"], function(value, key, row, i, tr, event) {
|
||||
tr.className = "hidden"
|
||||
var uis = kit.AppendChild(ui.list, [{text: [row.key], click: function(event) {
|
||||
tr.className = "normal", uis.last.parentNode.removeChild(uis.last)
|
||||
}}])
|
||||
})
|
||||
}))
|
||||
return {
|
||||
Show: function() {
|
||||
this.ShowDialog() && (table.innerHTML = "", ui.list.innerHTML = "", ui.name.value = "good", ui.name.focus(), this.Run([], function(msg) {
|
||||
kit.AppendTable(table, ctx.Table(msg), ["key", "user.route"], function(value, key, row, i, tr, event) {
|
||||
tr.className = "hidden"
|
||||
var uis = kit.AppendChild(ui.list, [{text: [row.key], click: function(event) {
|
||||
tr.className = "normal", uis.last.parentNode.removeChild(uis.last)
|
||||
}}])
|
||||
})
|
||||
}))
|
||||
},
|
||||
Action: {
|
||||
"取消": function(event) {
|
||||
field.Pane.Show()
|
||||
},
|
||||
"全选": function(event) {
|
||||
table.querySelectorAll("tr.normal").forEach(function(item) {
|
||||
item.firstChild.click()
|
||||
})
|
||||
},
|
||||
"清空": function(event) {
|
||||
ui.list.querySelectorAll("pre").forEach(function(item) {
|
||||
item.click()
|
||||
})
|
||||
},
|
||||
},
|
||||
Button: ["取消", "全选", "清空"],
|
||||
}
|
||||
pane.Action = {
|
||||
"取消": function(event) {
|
||||
pane.Show()
|
||||
},
|
||||
"全选": function(event) {
|
||||
table.querySelectorAll("tr.normal").forEach(function(item) {
|
||||
item.firstChild.click()
|
||||
})
|
||||
},
|
||||
"清空": function(event) {
|
||||
ui.list.querySelectorAll("pre").forEach(function(item) {
|
||||
item.click()
|
||||
})
|
||||
},
|
||||
}
|
||||
return {"button": ["取消", "全选", "清空"], "action": pane.Action}
|
||||
},
|
||||
initRiver: function(page, pane, form, output) {
|
||||
pane.Show = function() {
|
||||
output.Update([], "text", ["name", "count"], "key", ctx.Search("river")||true, function(line, index, event) {})
|
||||
}
|
||||
pane.Action = {
|
||||
"创建": function(event) {
|
||||
page.ocean.Show()
|
||||
initRiver: function(page, field, option, output) {
|
||||
return {
|
||||
Show: function() {
|
||||
this.Update([], "text", ["name", "count"], "key", ctx.Search("river")||true)
|
||||
},
|
||||
Action: {
|
||||
"创建": function(event) {
|
||||
page.ocean.Pane.Show()
|
||||
},
|
||||
},
|
||||
Button: ["创建"],
|
||||
}
|
||||
return {"button": ["创建"], "action": pane.Action}
|
||||
},
|
||||
initTarget: function(page, pane, form, output) {
|
||||
output.DisplayUser = true
|
||||
initTarget: function(page, field, option, output) {
|
||||
var river = ""
|
||||
pane.Listen = {
|
||||
river: function(value, old) {
|
||||
river = value, pane.Show()
|
||||
var which = {}
|
||||
output.DisplayUser = true
|
||||
return {
|
||||
Listen: {
|
||||
river: function(value, old) {
|
||||
field.Pane.Save(river, output)
|
||||
river = value, field.Pane.Show()
|
||||
},
|
||||
},
|
||||
Stop: function() {
|
||||
return field.style.display == "none"
|
||||
},
|
||||
Show: function(i) {
|
||||
field.Pane.Back(river, output)
|
||||
|
||||
var pane = this, foot = page.footer.Pane
|
||||
var cmds = ["brow", river, i||which[river]||0]
|
||||
cmds[2] || (output.innerHTML = ""), pane.Times(1000, cmds, function(line, index, msg) {
|
||||
pane.Append("", line, ["text"], "index")
|
||||
foot.State("text", which[river] = cmds[2] = parseInt(line.index)+1)
|
||||
})
|
||||
},
|
||||
Send: function(type, text, cb) {
|
||||
var pane = this
|
||||
pane.Run(["flow", river, type, text], function(msg) {
|
||||
pane.Show(), typeof cb == "function" && cb(msg)
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
pane.Stop = false
|
||||
pane.Show = function() {
|
||||
var cmds = ["brow", river, 0]
|
||||
output.innerHTML = "", pane.Times(1000, cmds, function(line, index, msg) {
|
||||
output.Append("", line, ["text"], "index", fun)
|
||||
cmds[2] = parseInt(line.index)+1
|
||||
page.footer.State("text", cmds[2])
|
||||
})
|
||||
}
|
||||
|
||||
function fun(line, index, event, args, cbs) {
|
||||
var data = JSON.parse(line.text)
|
||||
form.Run(["wave", river, data.node, data.group, data.index].concat(args), cbs)
|
||||
}
|
||||
|
||||
pane.Send = function(type, text, cb) {
|
||||
form.Run(["flow", river, type, text], function(msg) {
|
||||
// output.Append(type, {create_user: msg.create_user[0], text:text, index: msg.result[0]}, ["text"], "index", fun)
|
||||
typeof cb == "function" && cb()
|
||||
})
|
||||
}
|
||||
return [{"text": ["target"]}]
|
||||
},
|
||||
initSource: function(page, pane, form, output) {
|
||||
var ui = kit.AppendChild(pane, [{"view": ["input", "textarea"], "data": {"onkeyup": function(event){
|
||||
kit.isSpace(event.key) && pane.which.set(event.target.value)
|
||||
event.key == "Enter" && !event.shiftKey && page.target.Send("text", event.target.value, pane.Clear)
|
||||
initSource: function(page, field, option, output) {
|
||||
var ui = kit.AppendChild(field, [{"view": ["input", "textarea"], "data": {"onkeyup": function(event){
|
||||
page.oninput(event), kit.isSpace(event.key) && field.Pane.which.set(event.target.value)
|
||||
event.key == "Enter" && !event.shiftKey && page.target.Pane.Send("text", event.target.value, field.Pane.Clear)
|
||||
}, "onkeydown": function(event) {
|
||||
event.key == "Enter" && !event.shiftKey && event.preventDefault()
|
||||
}}}])
|
||||
|
||||
pane.Size = function(width, height) {
|
||||
pane.style.display = (width<=0 || height<=0)? "none": "block"
|
||||
pane.style.width = width+"px"
|
||||
pane.style.height = height+"px"
|
||||
ui.first.style.width = (width-7)+"px"
|
||||
ui.first.style.height = (height-7)+"px"
|
||||
return {
|
||||
Size: function(width, height) {
|
||||
field.style.display = (width<=0 || height<=0)? "none": "block"
|
||||
field.style.width = width+"px"
|
||||
field.style.height = height+"px"
|
||||
ui.first.style.width = (width-7)+"px"
|
||||
ui.first.style.height = (height-7)+"px"
|
||||
},
|
||||
Select: function() {
|
||||
ui.first.focus()
|
||||
},
|
||||
Clear: function(value) {
|
||||
ui.first.value = ""
|
||||
},
|
||||
}
|
||||
pane.Select = function() {
|
||||
ui.first.focus()
|
||||
}
|
||||
|
||||
pane.Clear = function(value) {
|
||||
ui.first.value = value || ""
|
||||
}
|
||||
return
|
||||
},
|
||||
initAction: function(page, pane, form, output) {
|
||||
var cache = {}
|
||||
initAction: function(page, field, option, output) {
|
||||
var river = "", storm = 0, input = "", share = ""
|
||||
pane.Listen = {
|
||||
river: function(value, old) {
|
||||
river = value
|
||||
},
|
||||
storm: function(value, old) {
|
||||
var temp = document.createDocumentFragment()
|
||||
while (output.childNodes.length>0) {
|
||||
item = output.childNodes[0]
|
||||
item.parentNode.removeChild(item)
|
||||
temp.appendChild(item)
|
||||
}
|
||||
cache[river+storm] = temp
|
||||
storm = value, pane.Show()
|
||||
},
|
||||
source: function(value, old) {
|
||||
input = value, kit.Log(value)
|
||||
},
|
||||
target: function(value, old) {
|
||||
share = value, kit.Log(value)
|
||||
},
|
||||
}
|
||||
pane.Show = function() {
|
||||
if (cache[river+storm]) {
|
||||
while (cache[river+storm].childNodes.length>0) {
|
||||
item = cache[river+storm].childNodes[0]
|
||||
item.parentNode.removeChild(item)
|
||||
output.appendChild(item)
|
||||
}
|
||||
cache[river+storm] = undefined
|
||||
return
|
||||
}
|
||||
|
||||
output.Update([river, storm], "plugin", ["node", "name"], "index", false, function(line, index, event, args, cbs) {
|
||||
event.shiftKey? page.target.Send("field", JSON.stringify({
|
||||
name: line.name, help: line.help, view: line.view, init: line.init,
|
||||
node: line.node, group: line.group, index: line.index,
|
||||
inputs: line.inputs, args: args,
|
||||
})): form.Run([river, storm, index].concat(args), function(msg) {
|
||||
event.ctrlKey && (msg.append && msg.append[0]?
|
||||
page.target.Send("table", JSON.stringify(ctx.Tables(msg))):
|
||||
page.target.Send("code", msg.result.join("")))
|
||||
cbs(msg)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
pane.Select = function(index) {
|
||||
output.querySelectorAll("fieldset")[index-1].Select()
|
||||
}
|
||||
|
||||
var toggle = true
|
||||
pane.Action = {
|
||||
"恢复": function(event, value) {
|
||||
page.onlayout(event, page.conf.layout)
|
||||
},
|
||||
"缩小": function(event, value) {
|
||||
page.onlayout(event, {action:60, source:60})
|
||||
},
|
||||
"放大": function(event, value) {
|
||||
page.onlayout(event, {action:300, source:60})
|
||||
},
|
||||
"最高": function(event, value) {
|
||||
page.onlayout(event, {action: -1})
|
||||
},
|
||||
"最宽": function(event, value) {
|
||||
page.onlayout(event, {river:0, storm:0})
|
||||
},
|
||||
"最大": function(event, value) {
|
||||
(toggle = !toggle)? page.onlayout(event, page.conf.layout): page.onlayout(event, {river:0, action:-1, source:60})
|
||||
page.target.Stop = !toggle
|
||||
},
|
||||
"全屏": function(event, value) {
|
||||
page.onlayout(event, {header:0, footer:0, river:0, action: -1, storm:0})
|
||||
},
|
||||
"添加": function(event, value) {
|
||||
page.plugin && page.plugin.Clone()
|
||||
},
|
||||
"删除": function(event, value) {
|
||||
page.plugin && page.plugin.Clear()
|
||||
},
|
||||
"加参": function(event, value) {
|
||||
page.plugin.Append({})
|
||||
},
|
||||
"去参": function(event, value) {
|
||||
page.input && page.plugin.Remove(page.input)
|
||||
},
|
||||
}
|
||||
return {"button": ["恢复", "缩小", "放大", "最高", "最宽", "最大", "全屏", "br", "添加", "删除", "加参", "去参"], "action": pane.Action}
|
||||
},
|
||||
initStorm: function(page, pane, form, output) {
|
||||
var river = "", index = -1
|
||||
pane.Listen = {
|
||||
river: function(value, old) {
|
||||
pane.which.set(""), river = value, pane.Show()
|
||||
},
|
||||
}
|
||||
pane.Show = function(which) {
|
||||
output.Update([river], "text", ["key", "count"], "key", which||ctx.Search("storm")||true)
|
||||
}
|
||||
pane.Next = function() {
|
||||
var next = output.querySelector("div.item.select").nextSibling
|
||||
next? next.click(): output.firstChild.click()
|
||||
}
|
||||
pane.Prev = function() {
|
||||
var prev = output.querySelector("div.item.select").previousSibling
|
||||
prev? prev.click(): output.lastChild.click()
|
||||
}
|
||||
pane.Action = {
|
||||
"创建": function(event) {
|
||||
page.steam.Show()
|
||||
},
|
||||
}
|
||||
return {"button": ["创建"], "action": pane.Action}
|
||||
},
|
||||
initSteam: function(page, pane, form, output) {
|
||||
var river = ""
|
||||
pane.Listen = {
|
||||
river: function(value, old) {
|
||||
river = value
|
||||
},
|
||||
}
|
||||
|
||||
output.DisplayRaw = true
|
||||
return {
|
||||
Listen: {
|
||||
river: function(value, old) {
|
||||
river = value
|
||||
},
|
||||
storm: function(value, old) {
|
||||
field.Pane.Save(river+storm, output)
|
||||
storm = value, field.Pane.Show()
|
||||
},
|
||||
source: function(value, old) {
|
||||
input = value, kit.Log(value)
|
||||
},
|
||||
target: function(value, old) {
|
||||
share = value, kit.Log(value)
|
||||
},
|
||||
},
|
||||
Show: function() {
|
||||
if (field.Pane.Back(river+storm, output)) {
|
||||
return
|
||||
}
|
||||
|
||||
this.Update([river, storm], "plugin", ["node", "name"], "index", false, function(line, index, event, args, cbs) {
|
||||
event.shiftKey? page.target.Send("field", JSON.stringify({
|
||||
name: line.name, help: line.help, view: line.view, init: line.init,
|
||||
node: line.node, group: line.group, index: line.index,
|
||||
inputs: line.inputs, args: args,
|
||||
})): field.Pane.Run([river, storm, index].concat(args), function(msg) {
|
||||
event.ctrlKey && (msg.append && msg.append[0]?
|
||||
page.target.Send("table", JSON.stringify(ctx.Tables(msg))):
|
||||
page.target.Send("code", msg.result.join("")))
|
||||
typeof cbs == "function" && cbs(msg)
|
||||
})
|
||||
})
|
||||
},
|
||||
Layout: function(name) {
|
||||
var layout = field.querySelector("select.layout")
|
||||
name && this.Action[layout.value = name](null, layout.value)
|
||||
return layout.value
|
||||
},
|
||||
Action: {
|
||||
"恢复": function(event, value) {
|
||||
page.onlayout(event, page.conf.layout)
|
||||
},
|
||||
"缩小": function(event, value) {
|
||||
page.onlayout(event, {action:60, source:60})
|
||||
},
|
||||
"放大": function(event, value) {
|
||||
page.onlayout(event, {action:300, source:60})
|
||||
},
|
||||
"最高": function(event, value) {
|
||||
page.onlayout(event, {action: -1})
|
||||
},
|
||||
"最宽": function(event, value) {
|
||||
page.onlayout(event, {river:0, storm:0})
|
||||
},
|
||||
"最大": function(event, value) {
|
||||
(toggle = !toggle)? page.onlayout(event, page.conf.layout): page.onlayout(event, {river:0, action:-1, source:60})
|
||||
},
|
||||
"全屏": function(event, value) {
|
||||
page.onlayout(event, {header:0, footer:0, river:0, action: -1, storm:0})
|
||||
},
|
||||
"添加": function(event, value) {
|
||||
page.plugin && page.plugin.Plugin.Clone().Select()
|
||||
},
|
||||
"删除": function(event, value) {
|
||||
page.plugin && page.plugin.Clear()
|
||||
},
|
||||
"加参": function(event, value) {
|
||||
page.plugin.Append({})
|
||||
},
|
||||
"去参": function(event, value) {
|
||||
page.input && page.plugin.Remove(page.input)
|
||||
},
|
||||
"位置": function(event, value) {
|
||||
page.getLocation(function(res) {
|
||||
alert(res.latitude)
|
||||
alert(res.longitude)
|
||||
})
|
||||
},
|
||||
},
|
||||
Button: [["layout", "恢复", "缩小", "放大", "最高", "最宽", "最大", "全屏"], "br", "添加", "删除", "加参", "去参", "位置"],
|
||||
}
|
||||
},
|
||||
initStorm: function(page, field, option, output) {
|
||||
var river = ""
|
||||
return {
|
||||
Listen: {
|
||||
river: function(value, old) {
|
||||
field.Pane.which.set(""), river = value, field.Pane.Show()
|
||||
},
|
||||
},
|
||||
Show: function(which) {
|
||||
this.Update([river], "text", ["key", "count"], "key", which||ctx.Search("storm")||true)
|
||||
},
|
||||
Next: function() {
|
||||
var next = output.querySelector("div.item.select").nextSibling
|
||||
next? next.click(): output.firstChild.click()
|
||||
},
|
||||
Prev: function() {
|
||||
var prev = output.querySelector("div.item.select").previousSibling
|
||||
prev? prev.click(): output.lastChild.click()
|
||||
},
|
||||
Action: {
|
||||
"创建": function(event) {
|
||||
page.steam.Pane.Show()
|
||||
},
|
||||
},
|
||||
Button: ["创建"],
|
||||
}
|
||||
},
|
||||
initSteam: function(page, field, option, output) {
|
||||
var river = ""
|
||||
var table = kit.AppendChild(output, "table")
|
||||
var device = kit.AppendChild(pane, [{"view": ["device", "table"]}]).last
|
||||
var ui = kit.AppendChild(pane, [{view: ["create steam"], list: [
|
||||
var device = kit.AppendChild(field, [{"view": ["device", "table"]}]).last
|
||||
var ui = kit.AppendChild(field, [{view: ["create steam"], list: [
|
||||
{input: ["name", function(event) {
|
||||
page.oninput(event, function(event) {
|
||||
switch (event.key) {
|
||||
@ -465,10 +376,10 @@ var page = Page({
|
||||
tr && tr.childNodes[0].click()
|
||||
return true
|
||||
case "9":
|
||||
pane.Action["全选"](event)
|
||||
field.Pane.Action["全选"](event)
|
||||
return true
|
||||
case "0":
|
||||
pane.Action["清空"](event)
|
||||
field.Pane.Action["清空"](event)
|
||||
return true
|
||||
case "-":
|
||||
var tr = ui.list.querySelectorAll("tr")[1]
|
||||
@ -496,130 +407,125 @@ var page = Page({
|
||||
})
|
||||
|
||||
if (cmd.length == 4) {
|
||||
alert("请添加命令")
|
||||
kit.alert("请添加命令")
|
||||
return
|
||||
}
|
||||
|
||||
form.Run(cmd, function(msg) {
|
||||
pane.Show()
|
||||
page.storm.Show(ui.name.value)
|
||||
field.Pane.Run(cmd, function(msg) {
|
||||
field.Pane.Show()
|
||||
page.storm.Pane.Show(ui.name.value)
|
||||
})
|
||||
}]}, {name: "list", view: ["list", "table"]},
|
||||
]}])
|
||||
|
||||
pane.Show = function() {
|
||||
pane.ShowDialog() && (table.innerHTML = "", ui.name.value = "nice", form.Run([river], function(msg) {
|
||||
kit.AppendTable(table, ctx.Table(msg), ["key", "user.route"], function(value, key, pod, i, tr, event) {
|
||||
var old = table.querySelector("tr.select")
|
||||
tr.className = "select", old && (old.className = "normal"), form.Run([river, pod.key], function(msg) {
|
||||
device.innerHTML = "", kit.AppendTable(device, ctx.Table(msg), ["key", "index", "name", "help"], function(value, key, com, i, tr, event) {
|
||||
var last = kit.AppendChild(ui.list, [{type: "tr", list: [
|
||||
{text: [com.key, "td"]}, {text: [com.index, "td"]}, {text: [com.name, "td"]}, {text: [com.help, "td"]},
|
||||
], dataset: {pod: pod["user.route"], group: com.key, index: com.index, name: com.name}, click: function(event) {
|
||||
last.parentNode.removeChild(last)
|
||||
}}]).last
|
||||
return {
|
||||
Listen: {
|
||||
river: function(value, old) {
|
||||
river = value
|
||||
},
|
||||
},
|
||||
Show: function() {
|
||||
this.ShowDialog() && (table.innerHTML = "", ui.name.value = "nice", this.Run([river], function(msg) {
|
||||
kit.AppendTable(table, ctx.Table(msg), ["key", "user.route"], function(value, key, pod, i, tr, event) {
|
||||
var old = table.querySelector("tr.select")
|
||||
tr.className = "select", old && (old.className = "normal"), field.Pane.Run([river, pod.key], function(msg) {
|
||||
device.innerHTML = "", kit.AppendTable(device, ctx.Table(msg), ["key", "index", "name", "help"], function(value, key, com, i, tr, event) {
|
||||
var last = kit.AppendChild(ui.list, [{type: "tr", list: [
|
||||
{text: [com.key, "td"]}, {text: [com.index, "td"]}, {text: [com.name, "td"]}, {text: [com.help, "td"]},
|
||||
], dataset: {pod: pod["user.route"], group: com.key, index: com.index, name: com.name}, click: function(event) {
|
||||
last.parentNode.removeChild(last)
|
||||
}}]).last
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
table.querySelector("td").click()
|
||||
ui.name.focus()
|
||||
}))
|
||||
table.querySelector("td").click()
|
||||
ui.name.focus()
|
||||
}))
|
||||
},
|
||||
Action: {
|
||||
"取消": function(event) {
|
||||
field.Pane.Show()
|
||||
},
|
||||
"全选": function(event) {
|
||||
ui.list.innerHTML = "", device.querySelectorAll("tr").forEach(function(item) {
|
||||
item.firstChild.click()
|
||||
})
|
||||
},
|
||||
"清空": function(event) {
|
||||
ui.list.innerHTML = ""
|
||||
},
|
||||
},
|
||||
Button: ["取消", "全选", "清空"],
|
||||
}
|
||||
|
||||
pane.Action = {
|
||||
"取消": function(event) {
|
||||
pane.Show()
|
||||
},
|
||||
"全选": function(event) {
|
||||
ui.list.innerHTML = "", device.querySelectorAll("tr").forEach(function(item) {
|
||||
item.firstChild.click()
|
||||
})
|
||||
},
|
||||
"清空": function(event) {
|
||||
ui.list.innerHTML = ""
|
||||
},
|
||||
}
|
||||
return {"button": ["取消", "全选", "清空"], "action": pane.Action}
|
||||
},
|
||||
init: function(page) {
|
||||
page.initField(page, function(init, pane, form) {
|
||||
var output = pane.querySelector("div.output")
|
||||
|
||||
var list = [], last = -1
|
||||
output.Clear = function() {
|
||||
output.innerHTML = "", list = [], last = -1
|
||||
}
|
||||
output.Select = function(index) {
|
||||
-1 < last && last < list.length && (list[last].className = "item")
|
||||
last = index
|
||||
list[index] && (list[index].className = "item select")
|
||||
}
|
||||
output.Append = function(type, line, key, which, cb) {
|
||||
var index = list.length, ui = page.View(output, line.type || type, line, key, function(event, cmds, cbs) {
|
||||
output.Select(index), pane.which.set(line[which])
|
||||
typeof cb == "function" && cb(line, index, event, cmds, cbs)
|
||||
})
|
||||
list.push(ui.last), pane.scrollBy(0, pane.scrollHeight+100)
|
||||
return ui
|
||||
}
|
||||
output.Update = function(cmds, type, key, which, first, cb) {
|
||||
output.Clear(), form.Runs(cmds, function(line, index, msg) {
|
||||
var ui = output.Append(type, line, key, which, cb)
|
||||
if (typeof first == "string") {
|
||||
(line.key == first || line.name == first) && ui.first.click()
|
||||
} else {
|
||||
first && index == 0 && ui.first.click()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (typeof init == "function") {
|
||||
var conf = init(page, pane, form, output)
|
||||
if (conf && conf["button"]) {
|
||||
var buttons = []
|
||||
conf.button.forEach(function(value, index) {
|
||||
if (value == "br") {
|
||||
buttons.push({type: "br"})
|
||||
} else {
|
||||
buttons.push({"button": [value, function(event) {
|
||||
typeof conf["action"] == "function" && conf["action"](value, event)
|
||||
typeof conf["action"] == "object" && conf["action"][value](event, value)
|
||||
pane.Button = value
|
||||
}]})
|
||||
}
|
||||
})
|
||||
kit.InsertChild(pane, output, "div", buttons).className = "action "+form.dataset.componet_name
|
||||
} else if (conf) {
|
||||
kit.AppendChild(output, conf)
|
||||
}
|
||||
}
|
||||
return conf
|
||||
})
|
||||
|
||||
page.onlayout(null, page.conf.layout)
|
||||
kit.isMobile && page.action.Action["最宽"]()
|
||||
page.action.Action["最大"]()
|
||||
ctx.Search("layout") && page.action.Action[ctx.Search("layout")]()
|
||||
|
||||
page.footer.Order({"text": "", "ip": "", ".": "", ":":""}, ["ip", "text", ":", "."])
|
||||
kit.isMobile && page.footer.Order({"text": "", "site": "", "ip": ""}, ["ip", "text", "site"])
|
||||
page.header.Order({"user": "", "logout": "logout"}, ["logout", "user"], function(event, item, value) {
|
||||
page.action.Pane.Layout(ctx.Search("layout")? ctx.Search("layout"): kit.isMobile? "最宽": "最大")
|
||||
page.footer.Pane.Order({"site": "", "ip": "", "text": "", ":":""}, kit.isMobile? ["site", "ip", "text"]: ["ip", "text", ":"], function(event, item, value) {
|
||||
})
|
||||
page.header.Pane.Order({"logout": "logout", "user": ""}, ["logout", "user"], function(event, item, value) {
|
||||
switch (item) {
|
||||
case "title":
|
||||
ctx.Search({"river": page.river.which.get(), "storm": page.storm.which.get(), "layout": page.action.Button})
|
||||
ctx.Search({"river": page.river.Pane.which.get(), "storm": page.storm.Pane.which.get(), "layout": page.action.Pane.Layout()})
|
||||
break
|
||||
case "user":
|
||||
var name = page.prompt("new name")
|
||||
name && page.login.Run(["rename", name], function(msg) {
|
||||
page.header.State("user", name)
|
||||
var name = kit.prompt("new name")
|
||||
name && page.login.Pane.Run(["rename", name], function(msg) {
|
||||
page.header.Pane.State("user", name)
|
||||
})
|
||||
break
|
||||
case "logout":
|
||||
page.confirm("logout?") && page.login.Exit()
|
||||
kit.confirm("logout?") && page.login.Pane.Exit()
|
||||
break
|
||||
default:
|
||||
}
|
||||
})
|
||||
kit.isWeiXin && page.login.Pane.Run(["weixin"], function(msg) {
|
||||
page.Include([
|
||||
"https://res.wx.qq.com/open/js/jweixin-1.4.0.js",
|
||||
"/static/librarys/weixin.js",
|
||||
], function(event) {
|
||||
wx.error(function(res){})
|
||||
wx.ready(function(){
|
||||
page.getLocation = function(cb) {
|
||||
wx.getLocation({success: function (res) {
|
||||
cb(res)
|
||||
}})
|
||||
}
|
||||
page.openLocation = function(latitude, longitude, name) {
|
||||
wx.openLocation({latitude: parseFloat(latitude), longitude: parseFloat(longitude), name:name||"here"})
|
||||
}
|
||||
|
||||
wx.getNetworkType({success: function (res) {}})
|
||||
wx.getLocation({success: function (res) {
|
||||
page.footer.Pane.State("site", parseInt(res.latitude*10000)+","+parseInt(res.longitude*10000))
|
||||
}})
|
||||
})
|
||||
wx.config({
|
||||
appId: msg.appid[0],
|
||||
timestamp: msg.timestamp[0],
|
||||
nonceStr: msg.nonce[0],
|
||||
signature: msg.signature[0],
|
||||
jsApiList: [
|
||||
"scanQRCode",
|
||||
"chooseImage",
|
||||
"closeWindow",
|
||||
"openAddress",
|
||||
"getNetworkType",
|
||||
"getLocation",
|
||||
"openLocation",
|
||||
]
|
||||
})
|
||||
})
|
||||
})
|
||||
page.login.Pane.Run([], function(msg) {
|
||||
if (msg.result && msg.result[0]) {
|
||||
page.header.Pane.State("user", msg.nickname[0])
|
||||
page.footer.Pane.State("ip", msg.remote_ip[0])
|
||||
page.river.Pane.Show()
|
||||
return
|
||||
}
|
||||
page.login.Pane.ShowDialog(1, 1)
|
||||
})
|
||||
},
|
||||
})
|
||||
|
@ -95,7 +95,13 @@ ctx = context = {
|
||||
|
||||
var as = []
|
||||
for (var k in args) {
|
||||
as.push(k+"="+encodeURIComponent(args[k]));
|
||||
if (typeof args[k] == "object") {
|
||||
for (var i = 0; i < args[k].length; i++) {
|
||||
as.push(k+"="+encodeURIComponent(args[k][i]));
|
||||
}
|
||||
} else {
|
||||
as.push(k+"="+encodeURIComponent(args[k]));
|
||||
}
|
||||
}
|
||||
var arg = as.join("&");
|
||||
return location.origin+location.pathname+"?"+arg
|
||||
|
@ -66,6 +66,10 @@ fieldset div.output table td {
|
||||
word-break:break-all;
|
||||
min-width:40px;
|
||||
}
|
||||
fieldset div.output table td {
|
||||
word-break:keep-all;
|
||||
min-width:40px;
|
||||
}
|
||||
|
||||
fieldset.toast {
|
||||
background-color:#ffffff00;
|
||||
|
@ -1,25 +1,25 @@
|
||||
function Page(page) {
|
||||
var id = 1
|
||||
var conf = {}
|
||||
var conf_cb = {}
|
||||
var conf = {}, conf_cb = {}
|
||||
var sync = {}
|
||||
page.__proto__ = {
|
||||
__proto__: kit,
|
||||
ID: function() {
|
||||
return id++
|
||||
},
|
||||
Conf: function(key, value, cb) {
|
||||
if (key == undefined) {
|
||||
return conf
|
||||
}
|
||||
if (cb != undefined) {
|
||||
conf_cb[key] = cb
|
||||
}
|
||||
if (value != undefined) {
|
||||
var old = conf[key]
|
||||
conf[key] = value
|
||||
conf_cb[key] && conf_cb[key](value, old)
|
||||
}
|
||||
if (cb != undefined) {
|
||||
conf_cb[key] = cb
|
||||
}
|
||||
if (key != undefined) {
|
||||
return conf[key]
|
||||
}
|
||||
return conf
|
||||
return conf[key]
|
||||
},
|
||||
Sync: function(m) {
|
||||
var meta = m, data = "", list = []
|
||||
@ -38,6 +38,9 @@ function Page(page) {
|
||||
return data
|
||||
},
|
||||
set: function(value, force) {
|
||||
if (value == undefined) {
|
||||
return
|
||||
}
|
||||
if (value == data && !force) {
|
||||
return value
|
||||
}
|
||||
@ -51,32 +54,30 @@ function Page(page) {
|
||||
})
|
||||
},
|
||||
View: function(parent, type, line, key, cb) {
|
||||
var ui = {}
|
||||
var result = []
|
||||
var text = line
|
||||
var text = line, list = [], ui = {}
|
||||
switch (type) {
|
||||
case "icon":
|
||||
result = [{view: ["item", "div"], list: [{img: [line[key[0]], function(event) {
|
||||
event.target.scrollIntoView()
|
||||
}]}]}]
|
||||
list.push({img: [line[key[0]], function(event) {
|
||||
// event.target.scrollIntoView()
|
||||
}]})
|
||||
break
|
||||
|
||||
case "text":
|
||||
result = [{text: [key.length>1? line[key[0]]+"("+line[key[1]]+")": (key.length>0? line[key[0]]: "null"), "span"], click: cb}]
|
||||
list.push({text: [key.length>1? line[key[0]]+"("+line[key[1]]+")":
|
||||
(key.length>0? line[key[0]]: "null"), "span"], click: cb})
|
||||
break
|
||||
|
||||
case "code":
|
||||
result = [{type: "code", list: [{text: [key.length>1? line[key[0]]+"("+line[key[1]]+")": (key.length>0? line[key[0]]: "null")], click: cb}]}]
|
||||
list.push({view: ["code", key.length>1? line[key[0]]+"("+line[key[1]]+")":
|
||||
(key.length>0? line[key[0]]: "null")], click: cb})
|
||||
break
|
||||
|
||||
case "table":
|
||||
result = [{view: [""], list: [
|
||||
{view: ["", "table"], list: JSON.parse(line.text || "[]").map(function(item, index) {
|
||||
return {type: "tr", list: item.map(function(value) {
|
||||
return {text: [value, index == 0? "th": "td"]}
|
||||
})}
|
||||
})},
|
||||
]}]
|
||||
list.push({type: "table", list: JSON.parse(line.text || "[]").map(function(item, index) {
|
||||
return {type: "tr", list: item.map(function(value) {
|
||||
return {text: [value, index == 0? "th": "td"]}
|
||||
})}
|
||||
})})
|
||||
break
|
||||
|
||||
case "field":
|
||||
@ -84,37 +85,65 @@ function Page(page) {
|
||||
|
||||
case "plugin":
|
||||
var id = "plugin"+page.ID()
|
||||
result = [{name: "field", view: [text.view, "fieldset"], data: {id: id}, list: [
|
||||
list.push({view: [text.view+" item", "fieldset", "", "field"], data: {id: id, Run: cb}, list: [
|
||||
{text: [text.name+"("+text.help+")", "legend"]},
|
||||
{name: "option", view: ["option", "form"], data: {Run: cb}, list: [{type: "input", style: {"display": "none"}}]},
|
||||
{name: "output", view: ["output", "div"]},
|
||||
{script: "Plugin("+id+","+JSON.stringify(text)+","+"[\""+(text.args||[]).join("\",\"")+"\"]"+","+(text.init||"")+")"},
|
||||
]}]
|
||||
{view: ["option", "form", "", "option"], list: [{type: "input", style: {"display": "none"}}]},
|
||||
{view: ["output", "div", "", "output"]},
|
||||
{script: ""+id+".Script="+(text.init||"{}")},
|
||||
]})
|
||||
break
|
||||
}
|
||||
if (parent.DisplayUser) {
|
||||
ui = kit.AppendChild(parent, [{view: ["item"], list:[
|
||||
{view: ["user", "div", line.create_nick]},
|
||||
{view: ["text"], list:result}
|
||||
]}])
|
||||
} else {
|
||||
ui = kit.AppendChild(parent, [{view: ["item"], list:result}])
|
||||
}
|
||||
|
||||
parent.DisplayUser && (list = [{view: ["user", "div", line.create_nick||line.create_user]}, {view: ["text"], list:list}])
|
||||
!parent.DisplayRaw && (list = [{view: ["item"], list:list}])
|
||||
ui = kit.AppendChild(parent, list)
|
||||
ui.field && (ui.field.Meta = text)
|
||||
return ui
|
||||
},
|
||||
alert: function(text) {
|
||||
alert(text)
|
||||
Include: function(src, cb) {
|
||||
kit.AppendChild(document.body, [{include: [src[0], function(event) {
|
||||
src.length == 1? cb(event): page.Include(src.slice(1), cb)
|
||||
}]}])
|
||||
},
|
||||
prompt: function(text) {
|
||||
return prompt(text)
|
||||
},
|
||||
confirm: function(text) {
|
||||
return confirm(text)
|
||||
},
|
||||
reload: function() {
|
||||
location.reload()
|
||||
ontoast: function(text, title, duration) {
|
||||
var args = typeof text == "object"? text: {text: text, title: title, duration: duration}
|
||||
var toast = kit.ModifyView("fieldset.toast", {
|
||||
display: "block", dialog: [args.width||200, args.height||40], padding: 10,
|
||||
})
|
||||
|
||||
var list = [{text: [args.text||""]}]
|
||||
args.inputs && args.inputs.forEach(function(input) {
|
||||
if (typeof input == "string") {
|
||||
list.push({inner: input, type: "label", style: {"margin-right": "5px"}})
|
||||
list.push({input: [input, page.oninput]})
|
||||
} else {
|
||||
list.push({inner: input[0], type: "label", style: {"margin-right": "5px"}})
|
||||
var option = []
|
||||
for (var i = 1; i < input.length; i++) {
|
||||
option.push({type: "option", inner: input[i]})
|
||||
}
|
||||
list.push({name: input[0], type: "select", list: option})
|
||||
}
|
||||
list.push({type: "br"})
|
||||
})
|
||||
args.button && args.button.forEach(function(input) {
|
||||
list.push({type: "button", inner: input, click: function(event) {
|
||||
var values = {}
|
||||
toast.querySelectorAll("input").forEach(function(input) {
|
||||
values[input.name] = input.value
|
||||
})
|
||||
toast.querySelectorAll("select").forEach(function(input) {
|
||||
values[input.name] = input.value
|
||||
})
|
||||
typeof args.cb == "function" && args.cb(input, values)
|
||||
toast.style.display = "none"
|
||||
}})
|
||||
})
|
||||
|
||||
kit.ModifyNode(toast.querySelector("legend"), args.title||"tips")
|
||||
var ui = kit.AppendChild(kit.ModifyNode(toast.querySelector("div.output"), ""), list)
|
||||
args.duration !=- 1 && setTimeout(function(){toast.style.display = "none"}, args.duration||3000)
|
||||
page.toast = toast
|
||||
},
|
||||
oninput: function(event, local) {
|
||||
var target = event.target
|
||||
@ -123,6 +152,7 @@ function Page(page) {
|
||||
if (event.ctrlKey) {
|
||||
if (typeof local == "function" && local(event)) {
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
return true
|
||||
}
|
||||
switch (event.key) {
|
||||
@ -168,212 +198,166 @@ function Page(page) {
|
||||
if (kit.HitText(target, "jk")) {
|
||||
kit.DelText(target, target.selectionStart-2, 2)
|
||||
target.blur()
|
||||
event.stopPropagation()
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
},
|
||||
ontoast: function(text, title, duration) {
|
||||
var args = typeof text == "object"? text: {text: text, title: title, duration: duration}
|
||||
var toast = kit.ModifyView("fieldset.toast", {
|
||||
display: "block", dialog: [args.width||200, args.height||40], padding: 10,
|
||||
})
|
||||
|
||||
var list = [{text: [args.text||""]}]
|
||||
args.inputs && args.inputs.forEach(function(input) {
|
||||
if (typeof input == "string") {
|
||||
list.push({inner: input, type: "label", style: {"margin-right": "5px"}})
|
||||
list.push({input: [input, page.oninput]})
|
||||
} else {
|
||||
list.push({inner: input[0], type: "label", style: {"margin-right": "5px"}})
|
||||
var option = []
|
||||
for (var i = 1; i < input.length; i++) {
|
||||
option.push({type: "option", inner: input[i]})
|
||||
}
|
||||
list.push({name: input[0], type: "select", list: option})
|
||||
}
|
||||
list.push({type: "br"})
|
||||
})
|
||||
args.button && args.button.forEach(function(input) {
|
||||
list.push({type: "button", inner: input, click: function(event) {
|
||||
var values = {}
|
||||
toast.querySelectorAll("input").forEach(function(input) {
|
||||
values[input.name] = input.value
|
||||
})
|
||||
toast.querySelectorAll("select").forEach(function(input) {
|
||||
values[input.name] = input.value
|
||||
})
|
||||
typeof args.cb == "function" && args.cb(input, values)
|
||||
toast.style.display = "none"
|
||||
}})
|
||||
})
|
||||
|
||||
kit.ModifyNode(toast.querySelector("legend"), args.title||"tips")
|
||||
var ui = kit.AppendChild(kit.ModifyNode(toast.querySelector("div.output"), ""), list)
|
||||
args.duration !=- 1 && setTimeout(function(){toast.style.display = "none"}, args.duration||3000)
|
||||
page.toast = toast
|
||||
},
|
||||
onscroll: function(event, target, action) {
|
||||
switch (action) {
|
||||
case "scroll":
|
||||
if (event.target == document.body) {
|
||||
kit.ScrollPage(event, page.conf)
|
||||
switch (event.key) {
|
||||
case "h":
|
||||
if (event.ctrlKey) {
|
||||
target.scrollBy(-conf.scroll_x*10, 0)
|
||||
} else {
|
||||
target.scrollBy(-conf.scroll_x, 0)
|
||||
}
|
||||
break
|
||||
case "H":
|
||||
target.scrollBy(-document.body.scrollWidth, 0)
|
||||
break
|
||||
case "l":
|
||||
if (event.ctrlKey) {
|
||||
target.scrollBy(conf.scroll_x*10, 0)
|
||||
} else {
|
||||
target.scrollBy(conf.scroll_x, 0)
|
||||
}
|
||||
break
|
||||
case "L":
|
||||
target.scrollBy(document.body.scrollWidth, 0)
|
||||
break
|
||||
case "j":
|
||||
if (event.ctrlKey) {
|
||||
target.scrollBy(0, conf.scroll_y*10)
|
||||
} else {
|
||||
target.scrollBy(0, conf.scroll_y)
|
||||
}
|
||||
break
|
||||
case "J":
|
||||
target.scrollBy(0, document.body.scrollHeight)
|
||||
break
|
||||
case "k":
|
||||
if (event.ctrlKey) {
|
||||
target.scrollBy(0, -conf.scroll_y*10)
|
||||
} else {
|
||||
target.scrollBy(0, -conf.scroll_y)
|
||||
}
|
||||
break
|
||||
case "K":
|
||||
target.scrollBy(0, -document.body.scrollHeight)
|
||||
break
|
||||
}
|
||||
},
|
||||
|
||||
initHeader: function(page, pane, form, output) {
|
||||
var state = {}, list = [], cb = function(event, item, value) {
|
||||
initHeader: function(page, field, option, output) {
|
||||
var state = {}, list = [], cb = function(event, item, value) {}
|
||||
field.onclick = function(event) {
|
||||
page.pane.scrollTo(0,0)
|
||||
}
|
||||
pane.Order = function(value, order, cbs) {
|
||||
state = value, list = order, cb = cbs || cb, pane.Show()
|
||||
}
|
||||
pane.Show = function() {
|
||||
output.innerHTML = "", kit.AppendChild(output, [
|
||||
{"view": ["title", "div", "shycontext"], click: function(event) {
|
||||
cb(event, "title", "shycontext")
|
||||
}},
|
||||
{"view": ["state"], list: list.map(function(item) {return {text: [state[item], "div"], click: function(event) {
|
||||
cb(event, item, state[item])
|
||||
}}})},
|
||||
])
|
||||
}
|
||||
pane.State = function(name, value) {
|
||||
state[name] = value, pane.Show()
|
||||
}
|
||||
return
|
||||
},
|
||||
initBanner: function(page, field, option, output) {
|
||||
field.querySelectorAll("li").forEach(function(item) {
|
||||
item.onclick = function(event) {
|
||||
ctx.Search("componet_group", item.innerText)
|
||||
if (item.innerText == "login") {
|
||||
ctx.Cookie("sessid", "")
|
||||
}
|
||||
}
|
||||
})
|
||||
return [{"text": ["shylinux", "div", "title"]}]
|
||||
},
|
||||
initFooter: function(page, pane, form, output) {
|
||||
var state = {}, list = [], cb = function(event, item, value) {
|
||||
}
|
||||
pane.Order = function(value, order, cbs) {
|
||||
state = value, list = order, cb = cbs || cb, pane.Show()
|
||||
}
|
||||
pane.State = function(name, value) {
|
||||
if (value != undefined) {
|
||||
state[name] = value, pane.Show()
|
||||
}
|
||||
if (name != undefined) {
|
||||
return state[name]
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
pane.Show = function() {
|
||||
output.innerHTML = "", kit.AppendChild(output, [
|
||||
{"view": ["title", "div", "<a href='mailto:shylinux@163.com'>shylinux@163.com</>"]},
|
||||
{"view": ["state"], list: list.map(function(item) {return {text: [item+":"+state[item], "div"]}})},
|
||||
])
|
||||
}
|
||||
return
|
||||
},
|
||||
initField: function(page, cb) {
|
||||
document.querySelectorAll("body>fieldset").forEach(function(pane) {
|
||||
var form = pane.querySelector("form.option")
|
||||
page[form.dataset.componet_name] = pane
|
||||
|
||||
// pane init
|
||||
pane.which = page.Sync(form.dataset.componet_name)
|
||||
pane.ShowDialog = function(width, height) {
|
||||
if (pane.style.display != "block") {
|
||||
page.dialog && page.dialog != pane && page.dialog.style.display == "block" && page.dialog.Show()
|
||||
pane.style.display = "block", page.dialog = pane
|
||||
kit.ModifyView(pane, {window: [width||80, height||200]})
|
||||
return true
|
||||
}
|
||||
pane.style.display = "none"
|
||||
delete(page.dialog)
|
||||
return false
|
||||
}
|
||||
pane.Size = function(width, height) {
|
||||
pane.style.display = (width<=0 || height<=0)? "none": "block"
|
||||
pane.style.width = width+"px"
|
||||
pane.style.height = height+"px"
|
||||
}
|
||||
|
||||
var conf = {}
|
||||
var conf_cb = {}
|
||||
pane.Conf = function(key, value, cb) {
|
||||
return {
|
||||
Order: function(value, order, cbs) {
|
||||
state = value, list = order, cb = cbs || cb, this.Show()
|
||||
},
|
||||
Show: function() {
|
||||
output.innerHTML = "", kit.AppendChild(output, [
|
||||
{"view": ["title", "div", "shycontext"], click: function(event) {
|
||||
cb(event, "title", "shycontext")
|
||||
}},
|
||||
{"view": ["state"], list: list.map(function(item) {return {text: [state[item], "div"], click: function(event) {
|
||||
cb(event, item, state[item])
|
||||
}}})},
|
||||
])
|
||||
},
|
||||
State: function(name, value) {
|
||||
if (value != undefined) {
|
||||
var old = conf[key]
|
||||
conf[key] = value
|
||||
conf_cb[key] && conf_cb[key](value, old)
|
||||
state[name] = value, this.Show()
|
||||
}
|
||||
if (cb != undefined) {
|
||||
conf_cb[key] = cb
|
||||
if (name != undefined) {
|
||||
return state[name]
|
||||
}
|
||||
if (key != undefined) {
|
||||
return conf[key]
|
||||
}
|
||||
return conf
|
||||
}
|
||||
|
||||
// form init
|
||||
pane.Run = form.Run = function(cmds, cb) {
|
||||
ctx.Run(page, form.dataset, cmds, cb)
|
||||
}
|
||||
pane.Runs = form.Runs = function(cmds, cb) {
|
||||
ctx.Run(page, form.dataset, cmds, function(msg) {
|
||||
ctx.Table(msg, function(line, index) {
|
||||
cb(line, index, msg)
|
||||
})
|
||||
})
|
||||
}
|
||||
pane.Time = form.Time = function(time, cmds, cb) {
|
||||
function loop() {
|
||||
ctx.Run(page, form.dataset, cmds, cb)
|
||||
setTimeout(loop, time)
|
||||
}
|
||||
setTimeout(loop, time)
|
||||
}
|
||||
|
||||
var timer = ""
|
||||
pane.Times = form.Times = function(time, cmds, cb) {
|
||||
timer && clearTimeout(timer)
|
||||
function loop() {
|
||||
!pane.Stop && ctx.Run(page, form.dataset, cmds, function(msg) {
|
||||
ctx.Table(msg, function(line, index) {
|
||||
cb(line, index, msg)
|
||||
})
|
||||
})
|
||||
timer = setTimeout(loop, time)
|
||||
}
|
||||
time && (timer = setTimeout(loop, time))
|
||||
}
|
||||
form.onsubmit = function(event) {
|
||||
event.preventDefault()
|
||||
}
|
||||
|
||||
cb(page[pane.dataset.init], pane, form)
|
||||
})
|
||||
|
||||
document.querySelectorAll("body>fieldset").forEach(function(pane) {
|
||||
for (var k in pane.Listen) {
|
||||
page[k].which.change(pane.Listen[k])
|
||||
}
|
||||
})
|
||||
return state
|
||||
},
|
||||
}
|
||||
},
|
||||
initFooter: function(page, field, option, output) {
|
||||
var state = {}, list = [], cb = function(event, item, value) {}
|
||||
field.onclick = function(event) {
|
||||
page.pane.scrollTo(0,page.pane.scrollHeight)
|
||||
}
|
||||
return {
|
||||
Order: function(value, order, cbs) {
|
||||
state = value, list = order, cb = cbs || cb, this.Show()
|
||||
},
|
||||
Show: function() {
|
||||
output.innerHTML = "", kit.AppendChild(output, [
|
||||
{"view": ["title", "div", "<a href='mailto:shylinux@163.com'>shylinux@163.com</>"]},
|
||||
{"view": ["state"], list: list.map(function(item) {return {text: [item+":"+state[item], "div"], click: function(item) {
|
||||
cb(event, item, state[item])
|
||||
}}})},
|
||||
])
|
||||
},
|
||||
State: function(name, value) {
|
||||
if (value != undefined) {
|
||||
state[name] = value, this.Show()
|
||||
}
|
||||
if (name != undefined) {
|
||||
return state[name]
|
||||
}
|
||||
return state
|
||||
},
|
||||
}
|
||||
},
|
||||
initLogin: function(page, field, option, output) {
|
||||
var ui = kit.AppendChild(option, [
|
||||
{label: "username"}, {input: ["username"]}, {type: "br"},
|
||||
{label: "password"}, {password: ["password"]}, {type: "br"},
|
||||
{button: ["login", function(event) {
|
||||
if (!ui.username.value) {
|
||||
ui.username.focus()
|
||||
return
|
||||
}
|
||||
if (!ui.password.value) {
|
||||
ui.password.focus()
|
||||
return
|
||||
}
|
||||
field.Pane.Run([ui.username.value, ui.password.value], function(msg) {
|
||||
if (msg.result && msg.result[0]) {
|
||||
field.Pane.ShowDialog(1, 1)
|
||||
ctx.Cookie("sessid", msg.result[0])
|
||||
kit.reload()
|
||||
return
|
||||
}
|
||||
kit.alert("用户或密码错误")
|
||||
})
|
||||
}]},
|
||||
{button: ["scan", function(event) {
|
||||
scan(event, function(text) {
|
||||
kit.alert(text)
|
||||
})
|
||||
}]},
|
||||
{type: "br"},
|
||||
{type: "img", data: {"src": "/chat/qrcode?text=hi"}}
|
||||
])
|
||||
return {
|
||||
Exit: function() {
|
||||
ctx.Cookie("sessid", "")
|
||||
kit.reload()
|
||||
|
||||
},
|
||||
}
|
||||
},
|
||||
Pane: Pane,
|
||||
}
|
||||
window.onload = function() {
|
||||
document.querySelectorAll("body>fieldset").forEach(function(field) {
|
||||
page.Pane(page, field)
|
||||
})
|
||||
page.init(page)
|
||||
|
||||
window.onresize = function(event) {
|
||||
page.onlayout && page.onlayout(event)
|
||||
}
|
||||
document.body.onkeydown = function(event) {
|
||||
page.onscroll && page.onscroll(event, document.body, "scroll")
|
||||
page.onscroll && page.onscroll(event, window, "scroll")
|
||||
}
|
||||
document.body.onkeyup = function(event) {
|
||||
page.oncontrol && page.oncontrol(event, document.body, "control")
|
||||
@ -381,74 +365,170 @@ function Page(page) {
|
||||
}
|
||||
return page
|
||||
}
|
||||
function Plugin(field, tool, args, plugin) {
|
||||
function Pane(page, field) {
|
||||
var option = field.querySelector("form.option")
|
||||
var action = field.querySelector("div.action")
|
||||
var output = field.querySelector("div.output")
|
||||
|
||||
var cache = []
|
||||
var timer = ""
|
||||
var list = [], last = -1
|
||||
var name = option.dataset.componet_name
|
||||
var pane = (page[field.dataset.init] || function() {
|
||||
})(page, field, option, output) || {}; pane.__proto__ = {
|
||||
__proto__: page,
|
||||
ShowDialog: function(width, height) {
|
||||
if (field.style.display != "block") {
|
||||
page.dialog && page.dialog != field && page.dialog.style.display == "block" && page.dialog.Show()
|
||||
page.dialog = field, field.style.display = "block", kit.ModifyView(field, {window: [width||80, height||200]})
|
||||
return true
|
||||
}
|
||||
field.style.display = "none"
|
||||
delete(page.dialog)
|
||||
return false
|
||||
},
|
||||
Size: function(width, height) {
|
||||
field.style.display = (width<=0 || height<=0)? "none": "block"
|
||||
field.style.width = width+"px"
|
||||
field.style.height = height+"px"
|
||||
},
|
||||
View: function(parent, type, line, key, cb) {
|
||||
var ui = page.View(parent, type, line, key, cb)
|
||||
if (type == "plugin" || type == "field") {
|
||||
pane.Plugin(page, pane, ui.field)
|
||||
}
|
||||
return ui
|
||||
},
|
||||
Run: function(cmds, cb) {
|
||||
ctx.Run(page, option.dataset, cmds, cb||this.ondaemon)
|
||||
},
|
||||
Runs: function(cmds, cb) {
|
||||
ctx.Run(page, option.dataset, cmds, function(msg) {
|
||||
ctx.Table(msg, function(line, index) {
|
||||
(cb||this.ondaemon)(line, index, msg)
|
||||
})
|
||||
})
|
||||
},
|
||||
Time: function(time, cmds, cb) {
|
||||
function loop() {
|
||||
ctx.Run(page, option.dataset, cmds, cb)
|
||||
setTimeout(loop, time)
|
||||
}
|
||||
setTimeout(loop, time)
|
||||
},
|
||||
Times: function(time, cmds, cb) {
|
||||
timer && clearTimeout(timer)
|
||||
function loop() {
|
||||
!pane.Stop() && ctx.Run(page, option.dataset, cmds, function(msg) {
|
||||
ctx.Table(msg, function(line, index) {
|
||||
cb(line, index, msg)
|
||||
})
|
||||
})
|
||||
timer = setTimeout(loop, time)
|
||||
}
|
||||
time && (timer = setTimeout(loop, 10))
|
||||
},
|
||||
|
||||
Clear: function() {
|
||||
output.innerHTML = "", list = [], last = -1
|
||||
},
|
||||
Select: function(index) {
|
||||
-1 < last && last < list.length && (list[last].className = "item")
|
||||
last = index, list[index] && (list[index].className = "item select")
|
||||
},
|
||||
Append: function(type, line, key, which, cb) {
|
||||
var index = list.length, ui = pane.View(output, line.type || type, line, key, function(event, cmds, cbs) {
|
||||
pane.Select(index), pane.which.set(line[which])
|
||||
typeof cb == "function" && cb(line, index, event, cmds, cbs)
|
||||
})
|
||||
list.push(ui.last), field.scrollBy(0, field.scrollHeight+100)
|
||||
return ui
|
||||
},
|
||||
Update: function(cmds, type, key, which, first, cb) {
|
||||
pane.Clear(), pane.Runs(cmds, function(line, index, msg) {
|
||||
var ui = pane.Append(type, line, key, which, cb)
|
||||
if (typeof first == "string") {
|
||||
(line.key == first || line.name == first || line[which] == first) && ui.first.click()
|
||||
} else {
|
||||
first && index == 0 && ui.first.click()
|
||||
}
|
||||
})
|
||||
},
|
||||
Share: function(objs) {
|
||||
objs = objs || {}
|
||||
objs.componet_name = option.dataset.componet_name
|
||||
objs.componet_group = option.dataset.componet_group
|
||||
return ctx.Share(objs)
|
||||
},
|
||||
Save: function(name, output) {
|
||||
var temp = document.createDocumentFragment()
|
||||
while (output.childNodes.length>0) {
|
||||
var item = output.childNodes[0]
|
||||
item.parentNode.removeChild(item)
|
||||
temp.appendChild(item)
|
||||
}
|
||||
cache[name] = temp
|
||||
return name
|
||||
},
|
||||
Back: function(name, output) {
|
||||
if (!cache[name]) {
|
||||
return
|
||||
}
|
||||
while (cache[name].childNodes.length>0) {
|
||||
item = cache[name].childNodes[0]
|
||||
item.parentNode.removeChild(item)
|
||||
output.appendChild(item)
|
||||
}
|
||||
delete(cache[name])
|
||||
return name
|
||||
},
|
||||
which: page.Sync(name), Listen: {},
|
||||
Action: {}, Button: [], Plugin: Plugin,
|
||||
}
|
||||
|
||||
for (var k in pane.Listen) {
|
||||
page.Sync(k).change(pane.Listen[k])
|
||||
}
|
||||
kit.InsertChild(field, output, "div", pane.Button.map(function(value) {
|
||||
return typeof value == "object"? {className: value[0], select: [value.slice(1), function(event) {
|
||||
value = event.target.value
|
||||
typeof pane.Action == "function"? pane.Action(value, event): pane.Action[value](event, value)
|
||||
}]}: value == "br"? {"type": "br"}: {"button": [value, function(event) {
|
||||
typeof pane.Action == "function"? pane.Action(value, event): pane.Action[value](event, value)
|
||||
}]}
|
||||
})).className="action "+name
|
||||
option.onsubmit = function(event) {
|
||||
event.preventDefault()
|
||||
};
|
||||
return page[name] = field, pane.Field = field, field.Pane = pane
|
||||
}
|
||||
function Plugin(page, pane, field) {
|
||||
var option = field.querySelector("form.option")
|
||||
var output = field.querySelector("div.output")
|
||||
|
||||
var exports = JSON.parse(tool.exports||'["",""]')
|
||||
var display = JSON.parse(tool.display||'{}')
|
||||
option.Runs = function(event) {
|
||||
option.Run(event, kit.Selector(option, ".args", function(item, index) {
|
||||
return item.value
|
||||
}), function(msg) {
|
||||
(option.ondaemon || function(msg) {
|
||||
output.innerHTML = ""
|
||||
!display.hide_append && msg.append && kit.OrderTable(kit.AppendTable(kit.AppendChild(output, "table"), ctx.Table(msg), msg.append), exports[1], function(event, value) {
|
||||
if (exports.length > 2) {
|
||||
if (value.endsWith("/")) {
|
||||
value = option[exports[2]].value + value
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
page.Sync("plugin_"+exports[0]).set(value)
|
||||
});
|
||||
(display.show_result || !msg.append) && msg.result && kit.AppendChild(output, [{view: ["code", "div", msg.Results()]}])
|
||||
})(msg)
|
||||
})
|
||||
}
|
||||
|
||||
var total = 0, count = 0
|
||||
plugin = plugin || {}, plugin.__proto__ = {
|
||||
show: function() {},
|
||||
init: function() {},
|
||||
Clone: function() {
|
||||
field.Meta.args = kit.Selector(option, ".args", function(item, index) {
|
||||
return item.value
|
||||
})
|
||||
page.View(field.parentNode, "plugin", field.Meta, [], option.Run)
|
||||
},
|
||||
Clear: function() {
|
||||
field.parentNode && field.parentNode.removeChild(field)
|
||||
},
|
||||
Check: function(event, index) {
|
||||
index == total-1 || (index == total-2 && event.target.parentNode.nextSibling.childNodes[1].type == "button")?
|
||||
option.Runs(event): event.target.parentNode.nextSibling.childNodes[1].focus()
|
||||
},
|
||||
Remove: function(who) {
|
||||
who.parentNode && who.parentNode.removeChild(who)
|
||||
},
|
||||
var count = 0
|
||||
var wait = false
|
||||
var plugin = field.Script || {}; plugin.__proto__ = {
|
||||
__proto__: pane,
|
||||
Append: function(item, name) {
|
||||
var index = total
|
||||
total += 1
|
||||
name = name || item.name
|
||||
|
||||
item.onfocus = function(event) {
|
||||
page.plugin = plugin
|
||||
page.input = event.target
|
||||
page.footer.State(".", field.id)
|
||||
page.footer.State(":", index)
|
||||
page.pane = pane.Field, page.plugin = field, page.input = event.target
|
||||
}
|
||||
item.onkeyup = function(event) {
|
||||
page.oninput(event, function(event) {
|
||||
switch (event.key) {
|
||||
case "p":
|
||||
action.Back()
|
||||
break
|
||||
case "i":
|
||||
var next = field.nextSibling;
|
||||
next && next.Select()
|
||||
next && next.Plugin.Select()
|
||||
break
|
||||
case "o":
|
||||
var prev = field.previousSibling;
|
||||
prev && prev.Select()
|
||||
prev && prev.Plugin.Select()
|
||||
break
|
||||
case "c":
|
||||
output.innerHTML = ""
|
||||
@ -456,23 +536,24 @@ function Plugin(field, tool, args, plugin) {
|
||||
case "r":
|
||||
output.innerHTML = ""
|
||||
case "j":
|
||||
run(event)
|
||||
plugin.Runs(event)
|
||||
break
|
||||
case "l":
|
||||
page.action.scrollTo(0, option.parentNode.offsetTop)
|
||||
break
|
||||
case "m":
|
||||
plugin.Clone()
|
||||
page.action.scrollTo(0, field.offsetTop)
|
||||
break
|
||||
case "b":
|
||||
plugin.Append(item, "args"+total).focus()
|
||||
plugin.Append(item).focus()
|
||||
break
|
||||
case "m":
|
||||
plugin.Clone().Plugin.Select()
|
||||
break
|
||||
default:
|
||||
return false
|
||||
}
|
||||
event.stopPropagation()
|
||||
return true
|
||||
})
|
||||
event.key == "Enter" && plugin.Check(event, index)
|
||||
event.key == "Enter" && plugin.Check(action)
|
||||
}
|
||||
|
||||
var input = {type: "input", name: name, data: item}
|
||||
@ -480,19 +561,16 @@ function Plugin(field, tool, args, plugin) {
|
||||
case "button":
|
||||
item.onclick = function(event) {
|
||||
action[item.click]? action[item.click](event, item, option, field):
|
||||
plugin[item.click]? plugin[item.click](event, item, option, field): option.Runs(event)
|
||||
plugin[item.click]? plugin[item.click](event, item, option, field): plugin.Runs(event)
|
||||
}
|
||||
break
|
||||
|
||||
case "select":
|
||||
input = {type: "select", name: name, data: {className: "args", onchange: function(event) {
|
||||
plugin.Check(event, index)
|
||||
|
||||
}}, list: item.values.map(function(value) {
|
||||
input.type = "select", input.list = item.values.map(function(value) {
|
||||
return {type: "option", value: value, inner: value}
|
||||
})}
|
||||
args && count < args.length && (item.value = args[count++])
|
||||
break
|
||||
}), item.onchange = function(event) {
|
||||
plugin.Check(action)
|
||||
}
|
||||
|
||||
default:
|
||||
args && count < args.length && (item.value = args[count++]||item.value||"")
|
||||
@ -502,39 +580,100 @@ function Plugin(field, tool, args, plugin) {
|
||||
var ui = kit.AppendChild(option, [{view: [item.view||""], list: [{type: "label", inner: item.label||""}, input]}])
|
||||
var action = ui[name] || {}
|
||||
|
||||
page.plugin = field
|
||||
page.input = action
|
||||
index == 0 && action && action.focus && action.focus()
|
||||
|
||||
action.History = []
|
||||
action.Goto = function(value) {
|
||||
action.value = value;
|
||||
(index == total-1 || (index == total-2 && action.parentNode.nextSibling.childNodes[1].type == "button")) && option.Runs(event)
|
||||
action.History.push(value)
|
||||
plugin.Back = function() {
|
||||
action.History.pop()
|
||||
action.History.length > 0 && action.Goto(action.History.pop())
|
||||
}
|
||||
action.History = [""], action.Goto = function(value) {
|
||||
action.History.push(action.value = value)
|
||||
plugin.Check(action)
|
||||
return value
|
||||
}
|
||||
}, action.Back = function() {
|
||||
action.History.pop(), action.History.length > 0 && action.Goto(action.History.pop())
|
||||
};
|
||||
|
||||
item.imports && typeof item.imports == "object" && item.imports.forEach(function(imports) {
|
||||
(typeof item.imports == "object"? item.imports: typeof item.imports == "string"? [item.imports]: []).forEach(function(imports) {
|
||||
page.Sync(imports).change(action.Goto)
|
||||
})
|
||||
item.imports && typeof item.imports == "string" && page.Sync(item.imports).change(action.Goto)
|
||||
return action
|
||||
},
|
||||
Select: function() {
|
||||
page.plugin = field
|
||||
page.footer.State(".", field.id)
|
||||
option.querySelectorAll("input")[1].focus()
|
||||
},
|
||||
Format: function() {
|
||||
arguments.length > 0 && (field.Meta.args = kit.List(arguments))
|
||||
return JSON.stringify(field.Meta)
|
||||
},
|
||||
Remove: function() {
|
||||
field.parentNode.removeChild(field)
|
||||
},
|
||||
Clone: function() {
|
||||
field.Meta.args = kit.Selector(option, "input.args", function(item, index) {
|
||||
return item.value
|
||||
})
|
||||
return pane.View(field.parentNode, "plugin", field.Meta, [], field.Run).field.Plugin
|
||||
},
|
||||
Check: function(target) {
|
||||
option.querySelectorAll(".args").forEach(function(item, index, list) {
|
||||
item == target && (index == list.length-1? plugin.Runs(event): page.plugin == field && list[index+1].focus())
|
||||
})
|
||||
},
|
||||
Runs: function(event) {
|
||||
field.Run(event, kit.Selector(option, ".args", function(item, index) {
|
||||
return item.value
|
||||
}), plugin.ondaemon)
|
||||
},
|
||||
Location: function(event) {
|
||||
output.className = "output long"
|
||||
page.getLocation(function(res) {
|
||||
field.Run(event, [parseInt(res.latitude*1000000+1400)/1000000.0, parseInt(res.longitude*1000000+6250)/1000000.0].concat(
|
||||
kit.Selector(option, ".args", function(item) {return item.value}))
|
||||
, plugin.ondaemon)
|
||||
})
|
||||
},
|
||||
|
||||
Clear: function() {
|
||||
output.innerHTML = ""
|
||||
},
|
||||
ondaemon: function(msg) {
|
||||
output.innerHTML = ""
|
||||
if (display.map) {
|
||||
var id = "map"+page.ID()
|
||||
kit.AppendChild(output, [{type: "view", data: {id: id}}])
|
||||
var mp = new BMap.Map(id);
|
||||
mp.centerAndZoom(new BMap.Point(121.491, 31.233), 11);
|
||||
return
|
||||
}
|
||||
output.innerHTML = ""
|
||||
!display.hide_append && msg.append && kit.OrderTable(kit.AppendTable(kit.AppendChild(output, "table"), ctx.Table(msg), msg.append), exports[1], function(event, value, name, line) {
|
||||
if (line["latitude"]) {
|
||||
page.openLocation(line.latitude, line.longitude, line.location)
|
||||
}
|
||||
page.Sync("plugin_"+exports[0]).set(plugin.onexport[exports[2]||""](value, name))
|
||||
});
|
||||
(display.show_result || !msg.append) && msg.result && kit.AppendChild(output, [{view: ["code", "div", msg.Results()]}])
|
||||
},
|
||||
onexport: {
|
||||
"": function(value, name) {
|
||||
return value
|
||||
},
|
||||
"pod": function(value, name) {
|
||||
if (option[exports[0]].value) {
|
||||
return option[exports[0]].value+"."+value
|
||||
}
|
||||
return value
|
||||
},
|
||||
"dir": function(value, name) {
|
||||
if (value.endsWith("/")) {
|
||||
return option[exports[0]] + value
|
||||
}
|
||||
},
|
||||
},
|
||||
init: function() {},
|
||||
}
|
||||
|
||||
var inputs = JSON.parse(tool.inputs || "[]")
|
||||
inputs.map(function(item, index, inputs) {
|
||||
plugin.Append(item)
|
||||
})
|
||||
var meta = field.Meta
|
||||
var args = meta.args || []
|
||||
var display = JSON.parse(meta.display||'{}')
|
||||
var exports = JSON.parse(meta.exports||'["",""]')
|
||||
JSON.parse(meta.inputs || "[]").map(plugin.Append)
|
||||
|
||||
plugin.init(page, page.action, field, option, output)
|
||||
page[field.id] = plugin
|
||||
plugin.init(page, pane, field, option, output)
|
||||
return page[field.id] = pane[field.id] = plugin.Field = field, field.Plugin = plugin
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
init: function(page, pane, plug, form, output) {
|
||||
form.Runs = function(event) {
|
||||
var url = "/chat/?componet_group=index&componet_name=login&cmds=qrcode&cmds="+form.content.value
|
||||
output.innerHTML = "", kit.AppendChild(output, [{img: [url]}])
|
||||
event.ctrlKey? page.target.Send("icon", url): form.Run(event, [form.content.value])
|
||||
}
|
||||
},
|
||||
}
|
||||
{init: function(page, pane, field, option, output) {
|
||||
this.Runs = function(event) {
|
||||
var value = option.content.value
|
||||
var url = page.login.Pane.Share({cmds: ["qrcode", value]})
|
||||
kit.AppendChilds(output, [{img: [url]}])
|
||||
event.ctrlKey && page.target.Pane.Send("icon", url)
|
||||
event.shiftKey && page.target.Pane.Send("field", this.Format(value))
|
||||
}
|
||||
}}
|
||||
|
@ -29,54 +29,6 @@ kit = toolkit = {
|
||||
return args
|
||||
},
|
||||
|
||||
Position: function(which) {
|
||||
return (parseInt((which.scrollTop + which.clientHeight) / which.scrollHeight * 100)||0)+"%"
|
||||
},
|
||||
ScrollPage: function(event, conf) {
|
||||
switch (event.key) {
|
||||
case "h":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(-conf.scroll_x*10, 0)
|
||||
} else {
|
||||
window.scrollBy(-conf.scroll_x, 0)
|
||||
}
|
||||
break
|
||||
case "H":
|
||||
window.scrollBy(-document.body.scrollWidth, 0)
|
||||
break
|
||||
case "l":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(conf.scroll_x*10, 0)
|
||||
} else {
|
||||
window.scrollBy(conf.scroll_x, 0)
|
||||
}
|
||||
break
|
||||
case "L":
|
||||
window.scrollBy(document.body.scrollWidth, 0)
|
||||
break
|
||||
case "j":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(0, conf.scroll_y*10)
|
||||
} else {
|
||||
window.scrollBy(0, conf.scroll_y)
|
||||
}
|
||||
break
|
||||
case "J":
|
||||
window.scrollBy(0, document.body.scrollHeight)
|
||||
break
|
||||
case "k":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(0, -conf.scroll_y*10)
|
||||
} else {
|
||||
window.scrollBy(0, -conf.scroll_y)
|
||||
}
|
||||
break
|
||||
case "K":
|
||||
window.scrollBy(0, -document.body.scrollHeight)
|
||||
break
|
||||
}
|
||||
return true
|
||||
},
|
||||
ModifyView: function(which, args) {
|
||||
var height = document.body.clientHeight-4
|
||||
var width = document.body.clientWidth-4
|
||||
@ -164,6 +116,7 @@ kit = toolkit = {
|
||||
//
|
||||
// dataset click
|
||||
// button input label img
|
||||
// select
|
||||
//
|
||||
// 树状结构: tree fork leaf
|
||||
// 普通视图: view text code
|
||||
@ -190,6 +143,9 @@ kit = toolkit = {
|
||||
if (child.inner) {
|
||||
child.data["innerHTML"] = child.inner
|
||||
}
|
||||
if (child.className) {
|
||||
child.data["className"] = child.className
|
||||
}
|
||||
if (typeof(child.style) == "object") {
|
||||
var str = []
|
||||
for (var k in child.style) {
|
||||
@ -213,6 +169,13 @@ kit = toolkit = {
|
||||
child.data["innerText"] = child.button[0]
|
||||
child.name = child.name || child.button[0]
|
||||
|
||||
} else if (child.select) {
|
||||
child.type = "select"
|
||||
child.list = child.select[0].map(function(value) {
|
||||
return {type: "option", value: value, inner: value}
|
||||
})
|
||||
child.data["onchange"] = child.select[1]
|
||||
|
||||
} else if (child.input) {
|
||||
child.type = "input"
|
||||
child.data["onkeyup"] = child.input[1]
|
||||
@ -272,14 +235,14 @@ kit = toolkit = {
|
||||
child.code.length > 2 && (child.data["className"] = child.code[2])
|
||||
|
||||
} else if (child.script) {
|
||||
child.data.innerHTML = child.script
|
||||
child.type = "script"
|
||||
child.data.innerHTML = child.script
|
||||
|
||||
} else if (child.include) {
|
||||
child.type = "script"
|
||||
child.data["src"] = child.include[0]
|
||||
child.data["type"] = "text/javascript"
|
||||
child.include.length > 1 && (child.data["onload"] = child.include[1])
|
||||
child.type = "script"
|
||||
|
||||
} else if (child.require) {
|
||||
child.data["href"] = child.require[0]
|
||||
@ -315,6 +278,9 @@ kit = toolkit = {
|
||||
})
|
||||
return subs
|
||||
},
|
||||
AppendChilds: function(parent, children, subs) {
|
||||
return parent.innerHTML = "", this.AppendChild(parent, children, subs)
|
||||
},
|
||||
InsertChild: function (parent, position, element, children) {
|
||||
var elm = this.CreateNode(element)
|
||||
this.AppendChild(elm, children)
|
||||
@ -332,6 +298,7 @@ kit = toolkit = {
|
||||
})
|
||||
data.forEach(function(row, i) {
|
||||
var tr = kit.AppendChild(table, "tr", {className: "normal"})
|
||||
tr.Meta = row
|
||||
fields.forEach(function(key, j) {
|
||||
var td = kit.AppendChild(tr, "td", row[key])
|
||||
if (typeof cb == "function") {
|
||||
@ -403,14 +370,133 @@ kit = toolkit = {
|
||||
kit.RangeTable(table, i, dataset["sort_asc"] == "1")
|
||||
return
|
||||
}
|
||||
if (field && head.childNodes[i].innerText.startsWith(field)) {
|
||||
typeof cb == "function" && cb(event, item.innerText)
|
||||
var name = head.childNodes[i].innerText
|
||||
if (name.startsWith(field)) {
|
||||
typeof cb == "function" && cb(event, item.innerText, name,item.parentNode.Meta)
|
||||
}
|
||||
kit.CopyText()
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
OrderCode: function(code) {
|
||||
if (!code) {return}
|
||||
|
||||
var kit = this
|
||||
code.onclick = function(event) {
|
||||
kit.CopyText()
|
||||
}
|
||||
},
|
||||
OrderLink: function(link) {
|
||||
link.target = "_blank"
|
||||
},
|
||||
OrderText: function(pane, text) {
|
||||
text.querySelectorAll("a").forEach(function(value, index, array) {
|
||||
kit.OrderLink(value, pane)
|
||||
})
|
||||
text.querySelectorAll("table").forEach(function(value, index, array) {
|
||||
kit.OrderTable(value)
|
||||
})
|
||||
|
||||
var i = 0, j = 0, k = 0
|
||||
var h0 = [], h2 = [], h3 = []
|
||||
text.querySelectorAll("h2,h3,h4").forEach(function(value, index, array) {
|
||||
var id = ""
|
||||
var text = value.innerText
|
||||
var ratio = parseInt(value.offsetTop/pane.scrollHeight*100)
|
||||
if (value.tagName == "H2") {
|
||||
j=k=0
|
||||
h2 = []
|
||||
id = ++i+"."
|
||||
text = id+" "+text
|
||||
h0.push({"fork": [text+" ("+ratio+"%)", h2, function(event) {
|
||||
location.hash = id
|
||||
}]})
|
||||
} else if (value.tagName == "H3") {
|
||||
k=0
|
||||
h3 = []
|
||||
id = i+"."+(++j)
|
||||
text = id+" "+text
|
||||
h2.push({"fork": [text+" ("+ratio+"%)", h3, function(event) {
|
||||
location.hash = id
|
||||
}]})
|
||||
} else if (value.tagName == "H4") {
|
||||
id = i+"."+j+"."+(++k)
|
||||
text = id+" "+text
|
||||
h3.push({"leaf": [text+" ("+ratio+"%)", function(event) {
|
||||
location.hash = id
|
||||
}]})
|
||||
}
|
||||
value.innerText = text
|
||||
value.id = id
|
||||
})
|
||||
return h0
|
||||
|
||||
text.querySelectorAll("table.wiki_list").forEach(function(value, index, array) {
|
||||
kit.OrderTable(value, "path", function(event) {
|
||||
var text = event.target.innerText
|
||||
ctx.Search({"wiki_class": text})
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
CopyText: function(text) {
|
||||
text = window.getSelection().toString()
|
||||
if (text == "") {return}
|
||||
kit.History.add("txt", text)
|
||||
document.execCommand("copy")
|
||||
},
|
||||
DelText: function(target, start, count) {
|
||||
target.value = target.value.substring(0, start)+target.value.substring(start+(count||target.value.length), target.value.length)
|
||||
target.setSelectionRange(start, start)
|
||||
},
|
||||
HitText: function(target, text) {
|
||||
var start = target.selectionStart
|
||||
for (var i = 1; i < text.length+1; i++) {
|
||||
var ch = text[text.length-i]
|
||||
if (target.value[start-i] != ch && kit.History.get("key", -i).data != ch) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
},
|
||||
|
||||
Selector: function(obj, item, cb) {
|
||||
var list = []
|
||||
obj.querySelectorAll(item).forEach(function(item, index) {
|
||||
if (typeof cb == "function") {
|
||||
var value = cb(item)
|
||||
value != undefined && list.push(value)
|
||||
} else {
|
||||
list.push(item)
|
||||
}
|
||||
})
|
||||
for (var i = list.length-1; i >= 0; i--) {
|
||||
if (list[i] == "") {
|
||||
list.pop()
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return list
|
||||
},
|
||||
Position: function(which) {
|
||||
return (parseInt((which.scrollTop + which.clientHeight) / which.scrollHeight * 100)||0)+"%"
|
||||
},
|
||||
|
||||
alert: function(text) {
|
||||
alert(JSON.stringify(text))
|
||||
},
|
||||
prompt: function(text) {
|
||||
return prompt(text)
|
||||
},
|
||||
confirm: function(text) {
|
||||
return confirm(text)
|
||||
},
|
||||
reload: function() {
|
||||
location.reload()
|
||||
},
|
||||
|
||||
OrderForm: function(page, field, option, append, result) {
|
||||
if (!option) {return}
|
||||
option.ondaemon = option.ondaemon || function(msg) {
|
||||
@ -477,106 +563,17 @@ kit = toolkit = {
|
||||
}
|
||||
})
|
||||
},
|
||||
OrderCode: function(code) {
|
||||
if (!code) {return}
|
||||
|
||||
var kit = this
|
||||
code.onclick = function(event) {
|
||||
kit.CopyText()
|
||||
}
|
||||
},
|
||||
OrderText: function(pane, text) {
|
||||
text.querySelectorAll("a").forEach(function(value, index, array) {
|
||||
kit.OrderLink(value, pane)
|
||||
})
|
||||
text.querySelectorAll("table").forEach(function(value, index, array) {
|
||||
kit.OrderTable(value)
|
||||
})
|
||||
|
||||
var i = 0, j = 0, k = 0
|
||||
var h0 = [], h2 = [], h3 = []
|
||||
text.querySelectorAll("h2,h3,h4").forEach(function(value, index, array) {
|
||||
var id = ""
|
||||
var text = value.innerText
|
||||
var ratio = parseInt(value.offsetTop/pane.scrollHeight*100)
|
||||
if (value.tagName == "H2") {
|
||||
j=k=0
|
||||
h2 = []
|
||||
id = ++i+"."
|
||||
text = id+" "+text
|
||||
h0.push({"fork": [text+" ("+ratio+"%)", h2, function(event) {
|
||||
location.hash = id
|
||||
}]})
|
||||
} else if (value.tagName == "H3") {
|
||||
k=0
|
||||
h3 = []
|
||||
id = i+"."+(++j)
|
||||
text = id+" "+text
|
||||
h2.push({"fork": [text+" ("+ratio+"%)", h3, function(event) {
|
||||
location.hash = id
|
||||
}]})
|
||||
} else if (value.tagName == "H4") {
|
||||
id = i+"."+j+"."+(++k)
|
||||
text = id+" "+text
|
||||
h3.push({"leaf": [text+" ("+ratio+"%)", function(event) {
|
||||
location.hash = id
|
||||
}]})
|
||||
}
|
||||
value.innerText = text
|
||||
value.id = id
|
||||
})
|
||||
return h0
|
||||
|
||||
text.querySelectorAll("table.wiki_list").forEach(function(value, index, array) {
|
||||
kit.OrderTable(value, "path", function(event) {
|
||||
var text = event.target.innerText
|
||||
ctx.Search({"wiki_class": text})
|
||||
})
|
||||
})
|
||||
},
|
||||
OrderLink: function(link) {
|
||||
link.target = "_blank"
|
||||
},
|
||||
|
||||
CopyText: function(text) {
|
||||
text = window.getSelection().toString()
|
||||
if (text == "") {return}
|
||||
kit.History.add("txt", text)
|
||||
document.execCommand("copy")
|
||||
},
|
||||
DelText: function(target, start, count) {
|
||||
target.value = target.value.substring(0, start)+target.value.substring(start+(count||target.value.length), target.value.length)
|
||||
target.setSelectionRange(start, start)
|
||||
},
|
||||
HitText: function(target, text) {
|
||||
var start = target.selectionStart
|
||||
for (var i = 1; i < text.length+1; i++) {
|
||||
var ch = text[text.length-i]
|
||||
if (target.value[start-i] != ch && kit.History.get("key", -i).data != ch) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
},
|
||||
Selector: function(obj, item, cb) {
|
||||
List: function(obj, cb) {
|
||||
var list = []
|
||||
obj.querySelectorAll(item).forEach(function(item, index) {
|
||||
if (typeof cb == "function") {
|
||||
var value = cb(item)
|
||||
value != undefined && list.push(value)
|
||||
} else {
|
||||
list.push(item)
|
||||
}
|
||||
})
|
||||
for (var i = list.length-1; i >= 0; i--) {
|
||||
if (list[i] == "") {
|
||||
list.pop()
|
||||
} else {
|
||||
break
|
||||
}
|
||||
for (var i = 0; i < obj.length; i++) {
|
||||
list.push(typeof cb == "function"? cb(obj[i]): obj[i])
|
||||
}
|
||||
return list
|
||||
},
|
||||
Format: function(objs) {
|
||||
return json.stringify(objs)
|
||||
},
|
||||
}
|
||||
|
||||
function right(arg) {
|
||||
|
@ -43,6 +43,7 @@
|
||||
{{range $index, $lib := option . "scripts"}}
|
||||
<script src="/static/librarys/{{$lib}}"></script>
|
||||
{{end}}
|
||||
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=LTkHoAidsaDWfEEIwY7u4Lx3Vuo05Iq6"></script>
|
||||
</body>
|
||||
{{end}}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user