diff --git a/frame.js b/frame.js index ab25241a..733d12b2 100644 --- a/frame.js +++ b/frame.js @@ -32,10 +32,12 @@ var can = Volcanos("chat", { action: field.querySelector("div.action"), output: field.querySelector("div.output"), Plugin: can.Plugin, Inputs: can.Inputs, Output: can.Output, + _plugins: [], Export: function(event, value, key) {can.Report(event, value, key)}, Import: function(event, value, key) {var cb = pane.onimport[key]; typeof cb == "function" && cb(event, pane, value, key, pane.output); + can.core.List(pane._plugins, function(item) {item.Import(event, value, key)}) }, Size: function(event, width, height) {var cb = pane.onimport["size"]; @@ -117,6 +119,7 @@ var can = Volcanos("chat", { Import: function(event, value, key) {var cb = plugin.onimport[key]; typeof cb == "function" && cb(event, plugin, value, key, plugin.output); + key && plugin[key] && plugin[key].target && plugin[key].Import(event, value, key) }, Remove: function(event) {var list = can.page.Select(can, option, "input.temp") @@ -156,7 +159,7 @@ var can = Volcanos("chat", { }, Check: function(event, target, cb) { plugin.page.Select(can, option, ".args", function(item, index, list) { - if (item == target && index < list.length-1) {can._plugin.target == field && list[index+1].focus(); return item} + if (item == target && index < list.length-1) {can._plugin && can._plugin.target == field && list[index+1].focus(); return item} }).length == 0 && plugin.Runs(event, cb) }, Last: function(event) { diff --git a/lib/page.js b/lib/page.js index 1275d15c..345afba1 100644 --- a/lib/page.js +++ b/lib/page.js @@ -187,6 +187,40 @@ Volcanos("page", {help: "网页模块", })) return table; }), + RangeTable: function(can, table, index, sort_asc) { + var list = can.page.Select(can, table, "tr", function(tr) { + return tr.style.display == "none" || can.page.ClassList.has(can, tr, "hide")? null: tr + }).slice(1) + + var is_time = true, is_number = true + can.core.List(list, function(tr) { + var text = tr.childNodes[index].innerText + is_time = is_time && Date.parse(text) > 0 + is_number = is_number && !isNaN(parseInt(text)) + }) + + var num_list = can.core.List(list, function(tr) { + var text = tr.childNodes[index].innerText + return is_time? Date.parse(text): + is_number? parseInt(text): text + }) + + for (var i = 0; i < num_list.length; i++) { + for (var j = i+1; j < num_list.length; j++) { + if (sort_asc? num_list[i] < num_list[j]: num_list[i] > num_list[j]) { + var temp = num_list[i] + num_list[i] = num_list[j] + num_list[j] = temp + var temp = list[i] + list[i] = list[j] + list[j] = temp + } + } + var tbody = list[i].parentElement + list[i].parentElement && tbody.removeChild(list[i]) + tbody.appendChild(list[i]) + } + }, Display: function(text) { if (text.startsWith("http")) {return ""+text+""} diff --git a/pane/Action.js b/pane/Action.js index d497ed05..07767d4b 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -1,9 +1,9 @@ Volcanos("onimport", {help: "导入数据", list: [], init: function(event, can, msg, cmd, output) {output.innerHTML = ""; msg.Table(function(item, index) {if (!item.name) {return} - can[item.name] = can.Plugin(can, item.name, item, function(event, cmds, cbs) { + can._plugins.push(can[item.name] = can.Plugin(can, item.name, item, function(event, cmds, cbs) { can.run(event, [item.river, item.storm, item.action].concat(cmds), cbs) - }, can.page.AppendField(can, output, "item "+item.group+" "+item.name, item)) + }, can.page.AppendField(can, output, "item "+item.group+" "+item.name, item))) }) }, size: function(event, can, value, cmd, output) { @@ -30,7 +30,7 @@ Volcanos("onimport", {help: "导入数据", list: [], }, you: function(event, can, value, cmd, output) { can.page.Select(can, can.action, "input."+cmd, function(item) { - item.value = value + document.title = item.value = value; }) }, layout: function(event, can, value, cmd, output) {can.layout = value; diff --git a/pane/Toast.js b/pane/Toast.js index 02f96cde..95eac1b2 100644 --- a/pane/Toast.js +++ b/pane/Toast.js @@ -1,5 +1,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, output) { + can.Show(200, 100, -100) + can.target.style.height = "" + can.target.style.width = "" + can.user.toast = function(text, title, duration, list) {if (!text) {return can.Hide()} text = typeof text == "object"? text: {list: list, text: text, title: title||""} text.duration = text.duration || conf.duration || 3000 @@ -30,8 +34,6 @@ Volcanos("onimport", {help: "导入数据", list: [], return timer } }, - show: function(event, can, value, cmd, output) { - } }) Volcanos("onaction", {help: "组件交互", list: []}) Volcanos("onchoice", {help: "组件菜单", list: []}) diff --git a/plugin/table.js b/plugin/table.js index 635c9d8d..acdce21c 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -14,6 +14,12 @@ Volcanos("onimport", {help: "导入数据", list: [], }) break case "TH": + var index = 0; + can.page.Select(can, table, "th", function(item, i) {if (item == event.target) {index = i}}) + var dataset = event.target.dataset + dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1 + can.page.RangeTable(can, table, index, dataset["sort_asc"] == "1") + break case "TR": case "TABLE": }}