diff --git a/LICENSE b/LICENSE index e2ef4bdb..81259a6c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 码神 +Copyright (c) 2021 码神 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/frame.js b/frame.js index 28c95224..663faed3 100644 --- a/frame.js +++ b/frame.js @@ -14,6 +14,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, }, function() { can.onlayout.topic(can) can.misc.Log(can.user.title(), "run", can) can.base.Copy(can.onengine.river, can.Conf("river")) + can.onmotion._init(can, target), can.onkeypop._init(can, target) can.onengine.signal(can, "onmain", can.request()) }) }, @@ -477,9 +478,11 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe topic: function(can, topic) { topic && (can._topic = topic) can.user.topic(can, can._topic || can.user.Search(can, "topic") || ((can.user.Search(can, "pod")||can.base.isNight())? "black": "white")) }, - figure: function(event, can, target) { target = target||can._target - if (!event.target) { return } - var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight + figure: function(event, can, target, right) { target = target||can._target; if (!event || !event.target) { return } + var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight; if (right) { + var left = event.clientX-event.offsetX+event.target.offsetWidth, top = event.clientY-event.offsetY + } + if (left+target.offsetWidth>window.innerWidth) { left = window.innerWidth - target.offsetWidth } if (top+target.offsetHeight>window.innerHeight) { top = window.innerHeight - target.offsetHeight } @@ -555,6 +558,11 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe float: { _hash: {}, del: function(can, key) { + if (key == "carte") { + can.page.Select(can, document.body, "div.carte", function(item) { + can.page.Remove(can, item) + }) + } this._hash[key] && can.page.Remove(can, this._hash[key]._target) }, add: function(can, key, value) { diff --git a/lib/page.js b/lib/page.js index 4a1c2864..517844f4 100644 --- a/lib/page.js +++ b/lib/page.js @@ -3,7 +3,8 @@ Volcanos("page", {help: "网页模块", ClassList: { return list.indexOf(key) > -1 }, add: function(can, obj, key) { var list = obj.className? obj.className.split(" "): [] - return obj.className = can.base.AddUniq(list, key).join(" ").trim() + var value = can.base.AddUniq(list, key).join(" ").trim() + return value != obj.className && (obj.className = value), value }, del: function(can, obj, key) { var list = obj.className? obj.className.split(" "): [] return obj.className = can.core.List(list, function(value) { @@ -145,9 +146,10 @@ Volcanos("page", {help: "网页模块", ClassList: { if (type == "input") { data.type == "button" && (data.value = can.user.trans(can, data.value)) - data.type == "text" && (data.autocomplete = data.autocomplete||"off") - data.placeholder = can.user.trans(can, (data.placeholder||data.name||"").split(".").pop()) - data.title = can.user.trans(can, data.title||data.placeholder) + if (data.type == "text") { data.autocomplete = data.autocomplete||"off" + data.placeholder = can.user.trans(can, (data.placeholder||data.name||"").split(".").pop()) + data.title = can.user.trans(can, data.title||data.placeholder) + } } // 创建节点 diff --git a/lib/user.js b/lib/user.js index e0e6793d..d540fac8 100644 --- a/lib/user.js +++ b/lib/user.js @@ -33,9 +33,8 @@ Volcanos("user", {help: "用户操作", agent: { title: function(text) { return text && (document.title = text), document.title }, topic: function(can, name) { + can.user.isMobile && (name += " mobile") && can.user.isLandscape && (name += " landscape") can.page.Modify(can, document.body, {className: name}) - can.user.isMobile && can.page.ClassList.add(can, document.body, "mobile") - can.user.isMobile && can.page.ClassList.set(can, document.body, "landscape", can.user.isLandscape) }, trans: function(can, text) { if (typeof text == "function") { text = text.name || "" } return can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature.trans."+text) || { @@ -136,21 +135,28 @@ Volcanos("user", {help: "用户操作", agent: { can.page.Remove(can, input), can.user.toast(can, text, "复制成功") event.stopPropagation(), event.preventDefault() }, - carte: function(event, can, meta, list, cb) { + carte: function(event, can, meta, list, cb, parent) { 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.base.isFunc(cb) && cb(event, can, item) } + cb = cb||function(event, item, meta) { var cb = meta[item]; can.base.isFunc(cb) && cb(event, can, item) } var ui = can.page.Append(can, document.body, [{view: "carte", style: {left: 0, top: 0}, onmouseleave: function(event) { - can.page.Remove(can, ui._target) + // can.page.Remove(can, ui._target) }, list: can.core.List(list, function(item) { - return {view: "item", list: [{text: can.user.trans(can, item), click: function(event) { + return typeof item == "string"? {view: "item", list: [{text: can.user.trans(can, item), click: function(event) { can.user.isMobile && can.page.Remove(can, ui._target) can.base.isFunc(cb) && cb(event, item, meta) - } }] } + }, onmouseenter: function(event) { + carte._float && can.page.Remove(can, carte._float._target) + } }] }: {view: "item", list: [{text: can.user.trans(can, item[0])}], onmouseenter: function(event) { + var sub = can.user.carte(event, can, meta, item.slice(1), cb, carte) + carte._float && can.page.Remove(can, carte._float._target), carte._float = sub + can.onlayout.figure(event, can, sub._target, true) + } } }) }] ); can.onlayout.figure(event, can, ui._target) - can.onmotion.float.add(can, "carte", ui) - return event.stopPropagation(), event.preventDefault(), {_target: ui._target} + var carte = {_target: ui._target, _parent: parent} + null && can.onmotion.float.add(can, "carte", carte) + return event.stopPropagation(), event.preventDefault(), carte }, input: function(event, can, form, cb, button) { // form [ string, array, object, {_input: "select", values: []} var msg = can.request(event, can.Option()) diff --git a/page/index.html b/page/index.html index 17c00c2f..793a42ef 100644 --- a/page/index.html +++ b/page/index.html @@ -1,9 +1,7 @@ - volcanos - diff --git a/panel/River.js b/panel/River.js index c38ec0d2..48ea3be8 100644 --- a/panel/River.js +++ b/panel/River.js @@ -173,8 +173,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 can.user.input(event, can, [ {name: "name", value: river}, ], function(event, button, meta, list) { - var msg = can.request(event) - can.user.share(can, msg, [river, "action", "share", "type", can._RIVER, "name", meta.name]) + can.user.share(can, can.request(event), [river, "action", "share", "type", can._RIVER, "name", meta.name]) }) }, "添加用户": function(event, can, button, river) { @@ -284,8 +283,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 "共享主机": function(event, can, button, river, storm) { can.run(event, ["action", "invite"], function(msg) { can.user.toast(can, { - title: "共享主机", content: msg.Result(), - button: ["close"], duration: -1, width: -100, + title: "共享主机", duration: -1, width: -100, + content: msg.Result(), action: ["close"], }) }) }, diff --git a/panel/Search.js b/panel/Search.js index 10956cfd..97482584 100644 --- a/panel/Search.js +++ b/panel/Search.js @@ -39,6 +39,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] can.base.isFunc(cb) && cb() }, onlogin: function(can, msg) { + can.onappend._action(can, can.Conf("action")||can.onaction.list) can.ui = can.page.Append(can, can._output, [ {input: ["word", function(event) { can.onkeypop.input(event, can) if (event.key == "Escape") { can.onmotion.hide(can) } diff --git a/plugin/state.js b/plugin/state.js index d5619ccd..1d193799 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -61,7 +61,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, return true }, }) -Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数", "共享工具", "刷新数据", "复制数据", "下载数据", "清空数据"], _init: function(can, msg, list, cb, target) { +Volcanos("onaction", {help: "交互操作", list: [ + "保存参数", "清空参数", "共享工具", "删除工具", "刷新数据", "清空数据", [ + "其它", "复制数据", "下载数据", [ + "其它", "复制数据", "下载数据", + ], [ + "其它", "复制数据", "下载数据", + ], + ]], _init: function(can, msg, list, cb, target) { }, "保存参数": function(event, can) { var meta = can.Conf() var msg = can.request(event, {river: can.Conf("river"), storm: can.Conf("storm"), id: meta.id}) @@ -73,7 +80,7 @@ Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数 can.page.Select(can, can._option, '.args', function(item) { return item.value = "" }) }, "共享工具": function(event, can) { var meta = can.Conf() - can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) { + var ui = can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) { var msg = can.request(event, {arg: [ "type", "field", "name", list[0], "text", JSON.stringify(can.Pack([], true)), @@ -81,6 +88,10 @@ Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数 ]}) can.search(event, ["Header.onaction.share"]) }) + can.onlayout.figure(event, can, ui._target, true) + }, + "删除工具": function(event, can) { + can.page.Remove(can, can._target) }, "刷新数据": function(event, can) { var meta = can.Conf() can.onappend._output(can, meta, {}, can.Pack([], true))