diff --git a/const.js b/const.js new file mode 100644 index 00000000..39d192b1 --- /dev/null +++ b/const.js @@ -0,0 +1,291 @@ +var kit = {proto: function(sub, sup) { return sub.__proto__ = sup, sub }, + Dict: function() { var res = {}, arg = arguments; for (var i = 0; i < arg.length; i += 2) { var key = arg[i] + if (typeof key == "object") { i--; + if (key.length == undefined) { + for (var k in key) { res[k] = key[k] } + } else { + for (var j = 0; j < key.length; j += 2) { res[key[j]] = key[j+1] } + } + } else if (typeof key == "string" && key) { res[key] = arg[i+1] } + } return res }, +} +var ice = { + TB: "\t", SP: " ", DF: ":", EQ: "=", AT: "@", PS: "/", PT: ".", FS: ",", QS: "?", NL: "\n", LT: "<", GT: ">", + OK: "ok", TRUE: "true", FALSE: "false", SUCCESS: "success", FAILURE: "failure", PROCESS: "process", + + HTTP: "http", HTML: "html", + HOME: "home", MAIN: "main", + LIST: "list", BACK: "back", + SHOW: "show", HIDE: "hide", + VIEW: "view", MODE: "mode", + COPY: "copy", HELP: "help", + AUTO: "auto", EXEC: "exec", + SHIP: "ship", + + DEV: "dev", POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", + CAN: "can", MSG: "msg", RUN: "run", RES: "res", ERR: "err", + + MSG_DETAIL: "detail", MSG_OPTION: "option", MSG_APPEND: "append", MSG_RESULT: "result", + MSG_SESSID: "sessid", MSG_FIELDS: "fields", + + MSG_SOURCE: "_source", MSG_TARGET: "_target", + MSG_HANDLE: "_handle", MSG_UPLOAD: "_upload", + MSG_ACTION: "_action", MSG_STATUS: "_status", + + MSG_INDEX: "_index", + MSG_DISPLAY: "_display", + MSG_TOOLKIT: "_toolkit", + MSG_PROCESS: "_process", + PROCESS_AGAIN: "_again", + PROCESS_FIELD: "_field", + PROCESS_REWRITE: "_rewrite", + MSG_PREFIX: "_prefix", + + MSG_USERNICK: "user.nick", MSG_USERNAME: "user.name", MSG_USERROLE: "user.role", MSG_LANGUAGE: "user.lang", + MSG_TITLE: "sess.title", MSG_THEME: "sess.theme", MSG_RIVER: "sess.river", MSG_STORM: "sess.storm", + MSG_HEIGHT: "sess.height", MSG_WIDTH: "sess.width", MSG_MODE: "sess.mode", MSG_DAEMON: "sess.daemon", + LOG_DISABLE: "log.disable", + + ErrWarn: "warn: ", ErrNotLogin: "not login: ", ErrNotRight: "not right: ", ErrNotFound: "not found: ", ErrNotValid: "not valid: ", + CAN_PLUGIN: "can._plugin", CAN_DEBUG: "can.debug", LOG_DEBUG: "log.debug", + NFS: "nfs", USR: "usr", USR_VOLCANOS: "usr/volcanos/", +} + +var ctx = { + CONTEXT: "context", COMMAND: "command", CONFIG: "config", INPUTS: "inputs", FEATURE: "feature", + INDEX: "index", ARGS: "args", STYLE: "style", DISPLAY: "display", ACTION: "action", + EXTRA_INDEX: "extra.index", EXTRA_ARGS: "extra.args", + RUN: "run", +} +var mdb = { + DICT: "dict", META: "meta", HASH: "hash", LIST: "list", + ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text", + DATA: "data", VIEW: "view", ICON: "icon", LINK: "link", SCAN: "scan", HELP: "help", + SHORT: "short", FIELD: "field", TOTAL: "total", COUNT: "count", LIMIT: "limit", + INDEX: "index", VALUE: "value", EXTRA: "extra", ALIAS: "alias", EXPIRE: "expire", + + CREATE: "create", REMOVE: "remove", INSERT: "insert", DELETE: "delete", MODIFY: "modify", SELECT: "select", + INPUTS: "inputs", PRUNES: "prunes", EXPORT: "export", IMPORT: "import", REVERT: "revert", NORMAL: "normal", + SEARCH: "search", ENGINE: "engine", RENDER: "render", PLUGIN: "plugin", + DETAIL: "detail", + PRUNE: "prune", + + KEYS: "keys", + MAIN: "main", PAGE: "page", NEXT: "next", PREV: "prev", LIMIT: "limit", OFFEND: "offend", + FOREACH: "*", RANDOMS: "%", + QS: ice.QS, AT: ice.AT, + EQ: ice.EQ, FS: ice.FS, +} +var web = {CHAT: "chat", + DREAM: "dream", SPACE: "space", ROUTE: "route", SPIDE: "spide", COUNT: "count", SHARE: "share", + WEBSITE: "website", DRAW: "draw", PLAY: "play", CLEAR: "clear", REFRESH: "refresh", RESIZE: "resize", FILTER: "filter", INPUT: "input", + CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", DOWNLOAD: "download", TOIMAGE: "toimage", + CONFIRM: "confirm", + SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/", + WORKER: "worker", SERVER: "server", GATEWAY: "gateway", + + AT: "@", QS: "?", LINK: "link", HTTP: "http", + GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE", + Accept: "Accept", ContentType: "Content-Type", ContentJSON: "application/json", ContentFORM: "application/x-www-form-urlencoded", + IMAGE_PNG: "image/png", VIDEO_WEBM: "video/webm", + + CODE_GIT_STATUS: "web.code.git.status", + CODE_GIT_REPOS: "web.code.git.repos", + CODE_COMPILE: "web.code.compile", + CODE_VIMER: "web.code.vimer", + CODE_INNER: "web.code.inner", + CODE_XTERM: "web.code.xterm", + WIKI_WORD: "web.wiki.word", + WIKI_DRAW: "web.wiki.draw", + WIKI_PORTAL: "web.wiki.portal", + CHAT_MACOS_DESKTOP: "web.chat.macos.desktop", + CHAT_MACOS_SESSION: "web.chat.macos.session", + CHAT_IFRAME: "web.chat.iframe", + CHAT_FAVOR: "web.chat.favor", + CHAT_FLOWS: "web.chat.flows", + TEAM_PLAN: "web.team.plan", +} +var aaa = { + USER: "user", + LOGIN: "login", LOGOUT: "logout", INVITE: "invite", TOKEN: "token", + USERNICK: "usernick", USERNAME: "username", PASSWORD: "password", USERROLE: "userrole", BACKGROUND: "background", AVATAR: "avatar", + LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese", + VOID: "void", TECH: "tech", ROOT: "root", +} +var lex = { + SPLIT: "split", PREFIX: "prefix", SUFFIX: "suffix", + PARSE: "parse", + TB: ice.TB, SP: ice.SP, NL: ice.NL, +} +var yac = { + STASK: "stack", +} +var ssh = { + SHELL: "shell", +} +var gdb = { + SIGNAL: "signal", +} +var tcp = { + HOST: "host", PORT: "port", +} +var nfs = { + DIR: "dir", CAT: "cat", DEFS: "defs", PACK: "pack", TRASH: "trash", DIR_ROOT: "dir_root", + COPY: "copy", EDIT: "edit", SAVE: "save", LOAD: "load", FIND: "find", GREP: "grep", TAGS: "tags", + CONTENT: "content", RECENT: "recent", SCRIPT: "script", MODULE: "module", SOURCE: "source", TARGET: "target", REPOS: "repos", MASTER: "master", + PATH: "path", FILE: "file", LINE: "line", SIZE: "size", + PUSH: "push", PULL: "pull", + REPLACE: "replace", FROM: "from", TO: "to", + SVG: "svg", HTML: "html", CSS: "css", JS: "js", SH: "sh", GO: "go", CSV: "csv", JSON: "json", SHY: "shy", + TXT: "txt", PNG: "png", WEBM: "webm", + _CSS: ".css", _JS: ".js", + PWD: "./", SRC: "src/", USR: "usr/", USR_LOCAL_WORK: "usr/local/work/", SRC_DOCUMENT: "src/document/", + DF: ice.DF, PS: ice.PS, PT: ice.PT, +} +var cli = { + OPENS: "opens", SYSTEM: "system", DAEMON: "daemon", ORDER: "order", BUILD: "build", + BEGIN: "begin", START: "start", OPEN: "open", CLOSE: "close", STOP: "stop", END: "end", RESTART: "restart", + COLOR: "color", BLACK: "black", WHITE: "white", BLUE: "blue", RED: "red", GRAY: "gray", CYAN: "cyan", GREEN: "green", PURPLE: "purple", YELLOW: "yellow", + MAGENTA: "magenta", SILVER: "silver", ALICEBLUE: "aliceblue", TRANSPARENT: "transparent", + MAKE: "make", EXEC: "exec", DONE: "done", COST: "cost", FROM: "from", CLEAR: "clear", + LINUX: "linux", DARWIN: "darwin", WINDOWS: "windows", + PWD: "pwd", +} +var log = { + INFO: "info", WARN: "warn", ERROR: "error", DEBUG: "debug", TRACE: "trace", +} + +var code = { + FAVOR: "favor", XTERM: "xterm", INNER: "inner", VIMER: "vimer", + WEBPACK: "webpack", BINPACK: "binpack", AUTOGEN: "autogen", COMPILE: "compile", PUBLISH: "publish", + TEMPLATE: "template", COMPLETE: "complete", NAVIGATE: "navigate", CURRENT: "current", + PULL: "pull", PUSH: "push", + COMMENT: "comment", KEYWORD: "keyword", + UPGRADE: "upgrade", + PACKAGE: "package", DATATYPE: "datatype", FUNCTION: "function", CONSTANT: "constant", + STRING: "string", NUMBER: "number", BOOLEAN: "boolean", OBJECT: "object", ARRAY: "array", UNDEFINED: "undefined", + + META: "Meta", ALT: "Alt", CONTROL: "Control", SHIFT: "Shift", TAB: "Tab", ESCAPE: "Escape", ENTER: "Enter", + CMD: "Cmd", CTRL: "Ctrl", SPACE: "Space", BACKSPACE: "Backspace", ESC: "Esc", PS: "/", +} +var wiki = { + TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark", SHELL: "shell", + ORDER: "order", TABLE: "table", CHART: "chart", IMAGE: "image", VIDEO: "video", + FIELD: "field", LOCAL: "local", PARSE: "parse", + NAVMENU: "navmenu", PREMENU: "premenu", CONTENT: "content", + STORY_ITEM: ".story", H2: "h2.story", H3: "h3.story", + DRAW: "draw", +} +var chat = { + LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", STORY: "story", PLUG: "plug", + TOAST: "toast", CARTE: "carte", INPUT: "input", UPLOAD: "upload", CONTEXTS: "contexts", + LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile", ACTIONS: "actions", + TITLE: "title", THEME: "theme", BLACK: "black", WHITE: "white", PRINT: "print", LIGHT: "light", DARK: "dark", + SHARE: "share", RIVER: "river", STORM: "storm", FIELD: "field", TOOL: "tool", + STATE: "state", MENUS: "menus", SSO: "sso", LOCATION: "location", IFRAME: "iframe", + OUTPUT: "output", SIMPLE: "simple", FLOAT: "float", FULL: "full", CMD: "cmd", + + HEADER: "Header", ACTION: "Action", FOOTER: "Footer", + libs: ["base.js", "core.js", "date.js", "misc.js", "page.js", "user.js"].map(function(p) { return "/volcanos/lib/"+p }), + panel_list: [{name: "Header", style: "head"}, {name: "River", style: "left"}, {name: "Action", style: "main"}, {name: "Search", style: "auto"}, {name: "Footer", style: "foot"}], + plugin_list: [ + "state.js", + "input.js", + "table.js", + "input/key.js", + "input/date.js", + "story/json.js", + "story/spide.js", + "story/trend.js", + "local/code/xterm.js", + "local/code/vimer.js", + "local/code/inner.js", + "local/code/inner/syntax.js", + "local/wiki/draw/path.js", + "local/wiki/draw.js", + "local/wiki/feel.js", + "local/wiki/word.js", + "local/team/plan.js", + "local/mall/goods.js", + ].map(function(p) { return "/volcanos/plugin/"+p }), PLUGIN_INPUT: "/volcanos/plugin/input/", PLUGIN_STORY: "/volcanos/plugin/story/", PLUGIN_LOCAL: "/volcanos/plugin/local/", + PLUGIN_STATE_JS: "/volcanos/plugin/state.js", PLUGIN_INPUT_JS: "/volcanos/plugin/input.js", PLUGIN_TABLE_JS: "/volcanos/plugin/table.js", FRAME_JS: "/volcanos/frame.js", + ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap", + ONIMPORT: "onimport", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport", + ONSYNTAX: "onsyntax", ONFIGURE: "onfigure", ONPLUGIN: "onplugin", + + ONSIZE: "onsize", ONMAIN: "onmain", ONLOGIN: "onlogin", ONREMOTE: "onremote", ONSEARCH: "onsearch", + ONRESIZE: "onresize", ONKEYUP: "onkeyup", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange", + ONSTORM_SELECT: "onstorm_select", ONACTION_NOSTORM: "onaction_nostorm", ONACTION_NOTOOL: "onaction_notool", ONACTION_TOUCH: "onaction_touch", ONACTION_CMD: "onaction_cmd", ONACTION_REMOVE: "onaction_remove", + ONOPENSEARCH: "onopensearch", ONSEARCH_FOCUS: "onsearch_focus", ONCOMMAND_FOCUS: "oncommand_focus", + ONTHEMECHANGE: "onthemechange", ONLAYOUT: "onlayout", ONUNLOAD: "onunload", ONWEBPACK: "onwebpack", + ONTOAST: "ontoast", ONDEBUG: "ondebug", ONSHARE: "onshare", ONPRINT: "onprint", + + _INIT: "_init", _DELAY_INIT: "_delay_init", + _TRANS: "_trans", _STYLE: "_style", _ENGINE: "_engine", _SEARCH: "_search", _NAMES: "_names", _TOAST: "_toast", +} +var team = { + TASK: "task", PLAN: "plan", + BEGIN_TIME: "begin_time", + LONG: "long", YEAR: "year", MONTH: "month", WEEK: "week", DAY: "day", HOUR: "hour", + TASK_POD: "task.pod", TASK_ZONE: "task.zone", TASK_ID: "task.id", +} +var mall = { + COUNT: "count", PRICE: "price", + ASSET: "asset", SALARY: "salary", +} + +var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 32, ACTION_MARGIN: 200, + FIELDSET: "fieldset", LEGEND: "legend", OPTION: "option", ACTION: "action", OUTPUT: "output", STATUS: "status", + OPTION_ARGS: "select.args,input.args,textarea.args", INPUT_ARGS: "input.args,textarea.args", INPUT_BUTTON: "input[type=button]", INPUT_FILE: "input[type=file]", + FORM_OPTION: "form.option", DIV_ACTION: "div.action", DIV_OUTPUT: "div.output", DIV_STATUS: "div.status", + FIELDSET_HEAD: "fieldset.head", FIELDSET_FOOT: "fieldset.foot", FIELDSET_LEFT: "fieldset.left", FIELDSET_MAIN: "fieldset.main", + FIELDSET_PANEL: "fieldset.panel", FIELDSET_PLUGIN: "fieldset.plugin", FIELDSET_STORY: "fieldset.story", FIELDSET_PLUG: "fieldset.plug", + FIELDSET_FLOAT: "fieldset.float", FIELDSET_INPUT: "fieldset.input", + + H1: "h1", H2: "h2", H3: "h3", UL: "ul", OL: "ol", LI: "li", BR: "br", HR: "hr", + A: "a", SPAN: "span", CODE: "code", DIV: "div", + SVG: "svg", IMG: "img", VIDEO: "video", AUDIO: "audio", CANVAS: "canvas", IFRAME: "iframe", + WSS: "wss", WEBVIEW: "webview", CHROME: "chrome", MOBILE: "mobile", LANDSCAPE: "landscape", + BODY: "body", FORM: "form", LABEL: "label", TITLE: "title", INNER: "inner", SPACE: "space", CLICK: "click", + SELECT: "select", INPUT: "input", TEXT: "text", FILE: "file", TEXTAREA: "textarea", BUTTON: "button", + CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", USERNAME: "username", PASSWORD: "password", + TABLE: "table", THEAD: "thead", TBODY: "tbody", TR: "tr", TH: "th", TD: "td", + HEADER: "header", NAV: "nav", MAIN: "main", ASIDE: "aside", FOOTER: "footer", + + BACKGROUND_COLOR: "background-color", COLOR: "color", + PADDING: "padding", BORDER: "border", MARGIN: "margin", MARGIN_TOP: "margin-top", MARGIN_X: "margin-x", MARGIN_Y: "margin-y", + HEIGHT: "height", WIDTH: "width", MIN_HEIGHT: "min-height", MAX_HEIGHT: "max-height", MIN_WIDTH: "min-width", MAX_WIDTH: "max-width", + DISPLAY: "display", BLOCK: "block", NONE: "none", OVERFLOW: "overflow", HIDDEN: "hidden", SCROLL: "scroll", FLOAT: "float", CLEAR: "clear", BOTH: "both", + LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom", + FLEX: "flex", FLOW: "flow", + SCROLLBAR: "scrollbar", + VISIBILITY: "visibility", + VERTICAL: "vertical", HORIZON: "horizon", + + SIZE: "size", OPACITY: "opacity", VISIBLE: "visible", + CLASS: "class", LIGHT: "light", DARK: "dark", + FILTER: "filter", TOGGLE: "toggle", EXPAND: "expand", SPEED: "speed", HOVER: "hover", HOVER_SELECT: "hover,select", + NOT_HIDE: ":not(.hide)", + + PAGE: "page", TABS: "tabs", MENU: "menu", NODE: "node", PLUG: "plug", + ZONE: "zone", LIST: "list", ITEM: "item", NAME: "name", ICON: "icon", VIEW: "view", + HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", AUTO: "auto", SHOW: "show", HIDE: "hide", + PLUGIN: "plugin", LAYOUT: "layout", PROJECT: "project", DISPLAY: "display", PROFILE: "profile", CONTENT: "content", + DIV_PAGE: "div.page", DIV_TABS: "div.tabs", DIV_PATH: "div.path", DIV_CODE: "div.code", DIV_PLUG: "div.plug", + DIV_ZONE: "div.zone", DIV_LIST: "div.list", DIV_ITEM: "div.item", DIV_NAME: "div.name", SPAN_ITEM: "span.item", SPAN_ICON: "span.icon", SPAN_NAME: "span.name", + DIV_CONTENT: "div.content", TABLE_CONTENT: "table.content", TABLE_LAYOUT: "table.layout", DIV_TOGGLE: "div.toggle", + DIV_LAYOUT: "div.layout", DIV_LAYOUT_HEAD: "div.layout.head", DIV_LAYOUT_FOOT: "div.layout.foot", DIV_LAYOUT_LEFT: "div.layout.left", + DIV_FLOAT: "div.float", DIV_TOAST: "div.toast", DIV_CARTE: "div.carte", + DESKTOP: "desktop", DIV_DESKTOP: "div.desktop", DIV_EXPAND: "div.expand", +} +var svg = { + GROUP: "group", PID: "pid", GRID: "grid", + FIGURE: "figure", DATA: "data", SHIP: "ship", TRANS: "trans", + GO: "go", + SHAPE: "shape", TEXT: "text", RECT: "rect", LINE: "line", CIRCLE: "circle", ELLIPSE: "ellipse", BLOCK: "block", + STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", FONT_FAMILY: "font-family", TEXT_ANCHOR: "text-anchor", + G: "g", X: "x", Y: "y", R: "r", RX: "rx", RY: "ry", CX: "cx", CY: "cy", X1: "x1", Y1: "y1", X2: "x2", Y2: "y2", + PATH: "path", PATH2V: "path2v", PATH2H: "path2h", + M: "M", Q: "Q", T: "T", + TEXT_LENGTH: "textLength", +} diff --git a/frame.js b/frame.js index ba529e76..38155421 100644 --- a/frame.js +++ b/frame.js @@ -106,6 +106,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { var action = can.page.SelectOne(can, field, html.DIV_ACTION) var output = can.page.SelectOne(can, field, html.DIV_OUTPUT) var status = can.page.SelectOne(can, field, html.DIV_STATUS) + legend.innerHTML = legend.innerHTML || meta.index can.base.isIn(meta.index, web.WIKI_PORTAL) && can.onappend.style(can, html.OUTPUT, field) var sub = Volcanos(meta.name, {_root: can._root||can, _follow: can.core.Keys(can._follow, meta.name), _target: field, _legend: legend, _option: option, _action: action, _output: output, _status: status, _history: [], @@ -219,8 +220,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, db: {}, ui: {}, }, [display, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf()) var last = can.sub; last && can.core.CallFunc([last, "onaction.hidden"], {can: last}) - sub.run = function(event, cmds, cb, silent) { - sub.request(event)._caller().RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) + sub.run = function(event, cmds, cb, silent) { var msg = sub.request(event)._caller() + msg.RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) }, can._outputs = can._outputs||[], can._outputs.push(sub), sub.sup = can, can.sub = sub sub._index = can._index, can._msg = sub._msg = msg, sub.Conf(sub._args = can.base.ParseURL(display)) sub._trans = can.base.Copy(can.base.Copy(sub._trans||{}, can._trans), can.core.Value(sub, [chat.ONACTION, chat._TRANS])) @@ -248,7 +249,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { field: function(can, type, item, target) { type = type||html.STORY, item = item||{} var name = can.core.Split(item.nick||item.name||"").pop()||""; name = can.core.Keys(item.space, name) - var title = !item.help || item.help == name || can.user.language(can) == "en"? name: name+"("+can.core.Split(item.help)[0]+")" + var title = item.help && item.help != name && !can.user.isEnglish(can)? name+"("+can.core.Split(item.help)[0]+")": name return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{type: html.LEGEND, list: [{icon: item.icon}, {text: title}]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}]) }, input: function(can, item, value, target, style) { if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) } @@ -412,7 +413,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) { value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) }, target, field); return res } - can.runAction(can.request({}, {pod: meta.space})._caller(), ctx.COMMAND, [meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) })}); return res + can.runAction(can.request({}, {_method: web.GET, pod: meta.space})._caller(), ctx.COMMAND, [meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) })}); return res }, _plugin: function(can, value, meta, cb, target, field) { can.base.Copy(meta, value, true) meta.type = meta.type||chat.STORY, meta.name = meta.name||value.meta&&value.meta.name||"", meta.help = meta.help||value.help||"", meta.height = meta.height||can.ConfHeight()-2*html.ACTION_HEIGHT, meta.width = meta.width||can.ConfWidth() diff --git a/lib/misc.js b/lib/misc.js index 592c41b9..b614e298 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -1,6 +1,17 @@ Volcanos("misc", { Message: function(event, can) { var msg = kit.proto({}, {_event: event, _can: can, _target: can._target, RunAction: function(event, sub, cmds, meta) { var msg = can.request(event); meta = meta || sub&&sub.onaction || {} + if (!msg._method) { + if (!cmds || cmds.length == 0 || cmds[0] != ctx.ACTION) { + msg._method = web.GET + } else if (can.base.isIn(cmds[1], mdb.CREATE, mdb.INSERT)) { + msg._method = web.PUT + } else if (can.base.isIn(cmds[1], mdb.REMOVE, mdb.DELETE)) { + msg._method = web.DELETE + } else { + msg._method = web.POST + } + } if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && can.base.isFunc(meta[cmds[1]])) { msg.Option(ice.MSG_HANDLE, ice.TRUE) return can.core.CallFunc(meta[cmds[1]], {event: event._event||event, can: sub, msg: msg, button: cmds[1], cmd: cmds[1]}), true } @@ -75,6 +86,8 @@ Volcanos("misc", { can.misc.POST(can, msg, can.base.MergeURL(dataset.names.toLowerCase(), ice.MSG_INDEX, _can._index), form, cb) }, POST: function(can, msg, url, form, cb, cbs) { var xhr = new XMLHttpRequest(), begin = new Date(); msg._xhr = xhr + var data = can.core.ItemForm(form, function(v, i, k) { return k+mdb.EQ+encodeURIComponent(v) }).join("&") + if (msg._method == web.GET) { url += (url.indexOf("?") == -1? "?": "&")+data, data = "" } xhr.open(msg._method||web.POST, url), xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return } try { var res = JSON.parse(xhr.responseText) } catch (e) { var res = {result: [xhr.responseText]} } msg.Option("_cost", new Date() - begin) if (xhr.status == 200) { return msg.detail || (msg.detail = res.detail), can.base.isFunc(cb) && cb(msg.Copy(res)) } @@ -84,9 +97,7 @@ Volcanos("misc", { if (msg._upload) { var data = new FormData(); can.core.ItemForm(form, function(v, i, k) { data.append(k, v) }) data.append(ice.MSG_UPLOAD, web.UPLOAD), data.append(web.UPLOAD, msg._upload) xhr.upload.onprogress = function(event) { can.base.isFunc(msg._progress) && msg._progress(event, parseInt(event.loaded*100/event.total), event.total, event.loaded) } - } else if (can.user.isMailMaster) { var data = can.core.ItemForm(form, function(value, index, key) { return key+mdb.EQ+encodeURIComponent(value) }).join("&") - if (data) { xhr.open(msg._method||web.GET, url += (url.indexOf(ice.QS) == -1? ice.QS: "&")+data) } - } else { var data = can.core.ItemForm(form, function(v, i, k) { return k+mdb.EQ+encodeURIComponent(v) }).join("&") + } else { xhr.setRequestHeader(web.ContentType, web.ContentFORM) } try { xhr.send(data) } catch(e) { can.misc.Warn(e), cbs && cbs(e) } }, diff --git a/lib/page.js b/lib/page.js index 157363e9..1f63d208 100644 --- a/lib/page.js +++ b/lib/page.js @@ -327,7 +327,7 @@ Volcanos("page", { libs[i] = "/require/modules/"+libs[i] } can.require(libs, cb, cbs) }, - requireDraw: function(can, cb) { can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() { + requireDraw: function(can, cb) { can.require([chat.PLUGIN_LOCAL+"wiki/draw.js", chat.PLUGIN_LOCAL+"wiki/draw/path.js"], function() { can.onimport._last_init(can, can.request(), can._output), can.onappend.style(can, wiki.DRAW, can._fields), cb() }, function(can, mod, sub) { mod == chat.ONIMPORT && (can[mod]._last_init = sub._init) }) }, drawText: function(can, text, size, margin, fonts) { text = text.slice(0, 1), size = size||80, margin = margin == undefined? 10: margin diff --git a/lib/user.js b/lib/user.js index 0521653d..15d706b4 100644 --- a/lib/user.js +++ b/lib/user.js @@ -53,41 +53,19 @@ Volcanos("user", { close: function(url) { return window.close() }, theme: function(can, name) { can.base.isString(name) && (name = [name]) || name || [] name.indexOf(chat.BLACK) > -1 && name.push(html.DARK), name.indexOf(chat.WHITE) > -1 && name.push(chat.BLACK, html.LIGHT) - can.user.language(can) && name.push(can.user.language(can)), can.user.mod.isCmd && name.push(chat.CMD), can.user.isWebview && name.push(html.WEBVIEW) + can.user.language(can) && name.push(can.core.Split(can.user.language(can), "-")[0]), can.user.mod.isCmd && name.push(chat.CMD), can.user.isWebview && name.push(html.WEBVIEW) can.user.isWindows && name.push("windows"), can.user.isMobile && name.push(html.MOBILE) && can.user.isLandscape() && name.push(html.LANDSCAPE) can.page.styleClass(can, document.body, name.join(lex.SP)) }, title: function(text) { if (window.webview) { return title(text) } return text && (document.title = text), document.title }, - language: function(can) { return can.misc.SearchOrConf(can, aaa.LANGUAGE)||can.user.info.language||"zh" }, - trans: function(can, text, list) { if (can.base.isNumber(text)) { return text+"" } if (can.user.language(can) != "zh") { return text } + language: function(can) { return (can.misc.SearchOrConf(can, aaa.LANGUAGE)||can.user.info.language||"") }, + isEnglish: function(can) { return can.base.isIn(can.user.language(can), "en", "en-US") }, + trans: function(can, text, list) { if (can.base.isNumber(text)) { return text+"" } if (can.user.isEnglish(can)) { return text } if (can.base.isObject(text)) { return can.core.Item(text, function(k, v) { can.core.Value(can._trans, k, v) }) } if (can.base.isFunc(text)) { text = text.name||"" } if (can.base.isString(list)) { return list } - return list&&list[text] || can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || kit.Dict( - mdb.CREATE, "创建", mdb.REMOVE, "删除", mdb.INSERT, "添加", mdb.DELETE, "删除", mdb.MODIFY, "修改", mdb.PRUNES, "清理", mdb.PRUNE, "清理", mdb.REVERT, "恢复", mdb.EXPORT, "导出", mdb.IMPORT, "导入", mdb.SEARCH, "搜索", - aaa.INVITE, "邀请", ctx.ACTION, "操作", ice.RUN, "执行", ice.LIST, "查看", ice.BACK, "返回", mdb.PREV, "上一页", mdb.NEXT, "下一页", mdb.LINK, "链接", - web.CLEAR, "清空", web.REFRESH, "刷新", web.SUBMIT, "提交", web.CANCEL, "取消", web.UPLOAD, "上传", web.DOWNLOAD, "下载", web.TOIMAGE, "截图", web.SHARE, "共享", - nfs.SAVE, "保存", nfs.LOAD, "加载", nfs.COPY, "复制", nfs.EDIT, "编辑", nfs.SAVE, "保存", nfs.TRASH, "清理", nfs.SOURCE, "源码", nfs.MODULE, "模块", nfs.RECENT, "最近", - cli.BEGIN, "开始", cli.START, "启动", cli.OPEN, "打开", cli.CLOSE, "关闭", cli.STOP, "停止", cli.END, "结束", cli.EXEC, "执行", cli.DONE, "完成", cli.RESTART, "重启", - cli.SYSTEM, "命令", cli.ORDER, "加载", cli.BUILD, "构建", - code.XTERM, "终端", code.INNER, "源码", chat.IFRAME, "浏览", chat.LOCATION, "地图", - html.PLUGIN, "插件", html.LABEL, "标签", html.HEIGHT, "高度", html.WIDTH, "宽度", ice.SHOW, "显示", ice.HIDE, "隐藏", chat.PROJECT, "项目", chat.PROFILE, "详情", chat.ACTIONS, "操作", - "full", "全屏", "Close", "关闭", "Close Other", "关闭其它", "Rename Tabs", "重命名", - "add", "添加", "opt", "优化", "fix", "修复", "message", "信息", - "max", "最大", "auto", "自动", - "push", "上传", "pull", "下载", - "logs", "日志", - "configs", "配置", - "inspect", "详情", - "portal", "首页", - "confirm", "确定", - "upgrade", "升级", - "compile", "编译", - "prepare", "准备", "process", "处理", "finish", "完成", - "today", "今天", - )[text]||text - }, - time: function(can, time, fmt) { var now = can.base.Date(time) - var list = can.user.language(can) == "en"? ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] + return list&&list[text] || can.user._trans[text] || can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || text + }, _trans: {"_week_header": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]}, + time: function(can, time, fmt) { var now = can.base.Date(time), list = can.user._trans["_week_header"] return fmt == "%W"? list: can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()])) }, toastConfirm: function(can, content, title, action) { diff --git a/panel/action.js b/panel/action.js index b8e517df..ca88d3e8 100644 --- a/panel/action.js +++ b/panel/action.js @@ -51,7 +51,7 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { }, can._output, can._action, can._header_tabs)) { if (msg.Option("refresh") != "true") { return can.onaction.layout(can) } } - can.run(msg, [river, storm], function(msg) { + can.run(can.request({}, {_method: web.GET}), [river, storm], function(msg) { if (msg.Length() == 0) { return can.user.isLocalFile? can.user.toastFailure(can, "miss data"): can.onengine.signal(can, chat.ONACTION_NOTOOL, can.request({}, {river: river, storm: storm})) } return can.onimport._init(can, msg) }) diff --git a/panel/footer.js b/panel/footer.js index 1d7aba64..6aa4bc0d 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -31,7 +31,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(NKEY, can. }) Volcanos(chat.ONACTION, {_init: function(can) { can.ui = {}, can.db = {} }, onsize: function(can) { can.ConfHeight(can._target.offsetHeight), can.ConfWidth(can._target.offsetWidth) }, - onlogin: function(can, msg) { var msg = can.request(); msg._method = web.GET, can.run(msg._event, [], function(msg) { can.onmotion.clear(can), can.onimport._init(can, msg, can._output) }) }, + onlogin: function(can, msg) { can.run(can.request({}, {_method: web.GET}), [], function(msg) { can.onmotion.clear(can), can.onimport._init(can, msg, can._output) }) }, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.ntip, {can: can, msg: msg}) }, onremote: function(can, msg) { can.core.CallFunc(can.onimport.ncmd, {can: can, msg: msg}) }, onlayout: function(can, layout) { can.onmotion.toggle(can, can._target, !layout || layout == html.TABS) }, diff --git a/panel/header.js b/panel/header.js index e77278b4..2e0875ec 100644 --- a/panel/header.js +++ b/panel/header.js @@ -49,31 +49,27 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { }) Volcanos(chat.ONACTION, {_init: function(can) { can.page.theme(function(theme) { can.onengine.signal(can, chat.ONTHEMECHANGE, can.request(event, {theme: can.__theme = theme})) }), can.onimport.theme(can) - return can.require([ - "src/template/web.chat.header/dark.css", - "src/template/web.chat.header/light.css", - "src/template/web.chat.header/black.css", - "src/template/web.chat.header/white.css", - "src/template/web.chat.header/mobile.css", - ]) }, onsize: function(can) { can.ConfHeight(can._target.offsetHeight), can.ConfWidth(can._target.offsetWidth) }, onmain: function(can) { - function show(msg) { var p = can.misc.Search(can, "redirect_uri"); + function lang(msg, cb) { can.user.info.language = msg.SearchOrOption(aaa.LANGUAGE) + can.user.info.language && can.require(["src/template/web.chat.header/language/"+can.user.info.language+".js"], cb, function(can, name, sub) { can.base.Copy(can.user._trans, sub._trans) }) + } + function show(msg) { var p = can.misc.Search(can, "redirect_uri") if (location.pathname == "/login" && p) { return location.replace(can.base.MergeURL(p, ice.MSG_SESSID, can.misc.CookieSessid(can))) } can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.userrole = msg.Option(ice.MSG_USERROLE), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) - can.user.info.language = msg.SearchOrOption(aaa.LANGUAGE), msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) - // can.user.info.language = msg.SearchOrOption(aaa.LANGUAGE)||navigator.language.split("-")[0], msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) - can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) + msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) + lang(msg, function() { can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) }) } - var msg = can.request(); msg._method = web.GET - can.base.beginWith(location.pathname, "/wiki/portal/", "/chat/cmd/web.wiki.portal/")? show(can.request()): - can.run(msg._event, [], function(msg) { + can.base.beginWith(location.pathname, "/wiki/portal/", "/chat/cmd/web.wiki.portal/", "/chat/cmd/web.chat.oauth.client", "/chat/pod/20230511-golang-story/cmd/web.code.gitea.client")? show(can.request()): + can.run(can.request({}, {_method: web.GET}), [], function(msg) { lang(msg) + can.require(can.core.List(msg["theme.list"], function(item) { return "src/template/web.chat.header/theme/"+item })) + can.onaction._menus[1] = can.onaction._menus[1].concat(can.core.List(msg["theme.list"], function(item) { return can.base.trimSuffix(item, ".css") })) + can.onaction._menus[2] = can.onaction._menus[2].concat(can.core.List(msg["language.list"], function(item) { return can.base.trimSuffix(item, ".js") })) if (location.pathname == "/" && can.base.beginWith(msg.Option(ice.MAIN)||"", "/wiki/portal/", "/chat/cmd/web.wiki.portal/")) { return show(msg) } if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) { return msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() { can.onengine.signal(can, chat.ONMAIN, msg) }, msg.Option(aaa.LOGIN)) - } - show(msg) + } show(msg) }) }, onstorm_select: function(can, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) }, @@ -111,8 +107,8 @@ Volcanos(chat.ONACTION, {_init: function(can) { _params: [log.DEBUG, chat.TITLE], _menus: ["shareuser", - [chat.THEME, ice.AUTO, html.DARK, html.LIGHT, "print", cli.WHITE, cli.BLACK], - [aaa.LANGUAGE, ice.AUTO, "zh", "en"], + [chat.THEME, ice.AUTO], + [aaa.LANGUAGE, ice.AUTO], [nfs.SAVE, web.TOIMAGE, code.WEBPACK], [aaa.USER, "setnick", aaa.PASSWORD, cli.CLEAR, aaa.LOGOUT], ], diff --git a/panel/river.js b/panel/river.js index 1e39fcbe..a5c873e6 100644 --- a/panel/river.js +++ b/panel/river.js @@ -18,9 +18,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onimport._main(can, msg _menu: function(can, msg) { can.user.isMobile || can.user.mod.isPod || can.onappend._action(can, can.onaction.list, can._action) }, }) Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can) { can.onmotion.hidden(can) }, - onlogin: function(can, msg) { - var msg = can.request(); msg._method = web.GET - can.run(msg._event, [], function(msg) { if (msg.Option(ice.MSG_RIVER)) { return can.page.Remove(can, can._target) } + onlogin: function(can, msg) { can.run(can.request({}, {_method: web.GET}), [], function(msg) { if (msg.Option(ice.MSG_RIVER)) { return can.page.Remove(can, can._target) } can.onimport._init(can, msg); if (can.user.isMobile || can.user.isExtension) { return } can.onmotion.toggle(can, can._target, true), can.onlayout._init(can) }) }, @@ -119,11 +117,11 @@ Volcanos(chat.ONEXPORT, {width: function(can) { return can._target.offsetWidth } Volcanos(chat.ONENGINE, {_engine: function(event, can, msg, panel, cmds, cb) { var list = can.river cmds.length == 0 && can.core.ItemOrder(list, "order", function(key, value) { if (can.user.info.userrole == aaa.ROOT || can.base.isIn(value.type||"", "", aaa.VOID, can.user.info.userrole)) { - can.core.Item(value.storm).length > 0 && msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name, icon: value.icon||""}) + can.core.Item(value.storm).length > 0 && msg.Push({hash: key, name: can.user.isEnglish(can)? key: value.name, icon: value.icon||""}) } }) if (cmds.length != 1 && cmds[1] != chat.STORM) { return false } var river = list[cmds[0]]; if (!river) { return false } - can.core.ItemOrder(river.storm, "order", function(key, value) { msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name, icon: value.icon||""}) }) + can.core.ItemOrder(river.storm, "order", function(key, value) { msg.Push({hash: key, name: can.user.isEnglish(can)? key: value.name, icon: value.icon||""}) }) can.base.isFunc(cb) && cb(msg); return true }}) })() diff --git a/plugin/input.js b/plugin/input.js index ff711046..51aed977 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -1,6 +1,6 @@ Volcanos(chat.ONACTION, { - run: function(event, can) { can.run(event) }, refresh: function(event, can) { can.run(event) }, - list: function(event, can) { can.sup.isSimpleMode() || can.run(event) }, back: function(event, can) { can.sup.onimport._back(can.sup) }, + run: function(event, can) { can.run(can.request(event, {_method: web.POST})) }, refresh: function(event, can) { can.run(can.request(event, {_method: web.GET})) }, + list: function(event, can) { can.sup.isSimpleMode() || can.run(can.request(event, {_method: web.GET})) }, back: function(event, can) { can.sup.onimport._back(can.sup) }, onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())), can.onkeymap.prevent(event) }, onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(event) }, onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target); if (can.Conf(mdb.TYPE) == html.TEXTAREA && !event.ctrlKey) { return } diff --git a/plugin/input/date.js b/plugin/input/date.js index b2d01bbc..4049151f 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -2,6 +2,7 @@ Volcanos(chat.ONFIGURE, {date: { onclick: function(event, can, meta, target, cbs) { cbs(function(can, cb) { if (can._output.innerHTML) { return } const TODAY = "today", YEAR = "year", MONTH = "month", HOUR = "hour", MINUTE = "minute", SECOND = "second" var today = new Date(), now = can.base.Date((target.value||"").trim()); function _cb(_now) { cb(can, can.user.time(can, now = _now), target.value) } + can.base.Copy(can._trans, kit.Dict(TODAY, "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月")) can.onappend._action(can, [cli.CLOSE, [HOUR].concat(can.core.List(24)), [MINUTE].concat(can.core.List(0, 60, 5)), [SECOND].concat(can.core.List(0, 60, 5)), TODAY, "", mdb.PREV, [YEAR].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)), [MONTH].concat(can.core.List(1, 13)), mdb.NEXT, ], can.onmotion.clear(can, can._action), kit.Dict(cli.CLOSE, function() { can.close() }, @@ -13,7 +14,6 @@ Volcanos(chat.ONFIGURE, {date: { YEAR, function(event, can, button, value) { now.setFullYear(parseInt(value)), show(now) }, MONTH, function(event, can, button, value) { now.setMonth(parseInt(value)-1), show(now) }, mdb.NEXT, function() { now.setMonth(now.getMonth()+1), show(now) }, - chat._TRANS, kit.Dict(TODAY, "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月"), )), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE], list: [{type: html.TBODY}]}]).tbody target.value == "" && (now.setMinutes(now.getMinutes()>30? 30: 0), now.setSeconds(0)) function show(now) { can.Action(YEAR, now.getFullYear()), can.Action(MONTH, now.getMonth()+1) diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 63038a30..c630d547 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -343,7 +343,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { var key = can.onexport. } can.onmotion.delay(can, function() { can.onappend.scroll(can, can.ui.content) }) can.onengine.signal(can, VIEW_CREATE, msg), can.base.isFunc(cb) && cb(msg._content = content._root? content._root: content) - } can.require(["/plugin/local/code/inner/syntax.js"], function() { var parse = can.onexport.parse(can); can.Conf(chat.PLUG) && (can.onsyntax[parse] = can.Conf(chat.PLUG)) + } can.require([chat.PLUGIN_LOCAL+"code/inner/syntax.js"], function() { var parse = can.onexport.parse(can); can.Conf(chat.PLUG) && (can.onsyntax[parse] = can.Conf(chat.PLUG)) var p = can.onsyntax[parse]; !p? can.runAction({}, mdb.PLUGIN, [parse, file, path], function(msg) { p = can.base.Obj(msg.Result()) if (p && p.script) { can._msg.Option(lex.PARSE, msg.Option(lex.PARSE)) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index d388dcd4..9cc5836d 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -26,7 +26,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { Volcanos(chat.ONFIGURE, { source: function(can, target, zone, path) { var args = can.base.getValid(can.misc.SearchHash(can), [can.Option(nfs.PATH), can.Option(nfs.FILE)]) - function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) { + function show(target, zone, path) { can.run(can.request({}, {_method: web.GET, dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) { zone._icon(kit.Dict( web.REFRESH, function(event) { show(target, zone, path) }, mdb.CREATE, function(event, button) { can.onaction.module(event, can, nfs.MODULE) }, diff --git a/proto.js b/proto.js index f7bfa927..f99e30c5 100644 --- a/proto.js +++ b/proto.js @@ -1,304 +1,15 @@ -var kit = {proto: function(sub, sup) { return sub.__proto__ = sup, sub }, - Dict: function() { var res = {}, arg = arguments; for (var i = 0; i < arg.length; i += 2) { var key = arg[i] - if (typeof key == "object") { i--; - if (key.length == undefined) { - for (var k in key) { res[k] = key[k] } - } else { - for (var j = 0; j < key.length; j += 2) { res[key[j]] = key[j+1] } - } - } else if (typeof key == "string" && key) { res[key] = arg[i+1] } - } return res }, -} -var ice = { - TB: "\t", SP: " ", DF: ":", EQ: "=", AT: "@", PS: "/", PT: ".", FS: ",", QS: "?", NL: "\n", LT: "<", GT: ">", - OK: "ok", TRUE: "true", FALSE: "false", SUCCESS: "success", FAILURE: "failure", PROCESS: "process", - - HTTP: "http", HTML: "html", - HOME: "home", MAIN: "main", - LIST: "list", BACK: "back", - SHOW: "show", HIDE: "hide", - VIEW: "view", MODE: "mode", - COPY: "copy", HELP: "help", - AUTO: "auto", EXEC: "exec", - SHIP: "ship", - - DEV: "dev", POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", - CAN: "can", MSG: "msg", RUN: "run", RES: "res", ERR: "err", - - MSG_DETAIL: "detail", MSG_OPTION: "option", MSG_APPEND: "append", MSG_RESULT: "result", - MSG_SESSID: "sessid", MSG_FIELDS: "fields", - - MSG_SOURCE: "_source", MSG_TARGET: "_target", - MSG_HANDLE: "_handle", MSG_UPLOAD: "_upload", - MSG_ACTION: "_action", MSG_STATUS: "_status", - - MSG_INDEX: "_index", - MSG_DISPLAY: "_display", - MSG_TOOLKIT: "_toolkit", - MSG_PROCESS: "_process", - PROCESS_AGAIN: "_again", - PROCESS_FIELD: "_field", - PROCESS_REWRITE: "_rewrite", - MSG_PREFIX: "_prefix", - - MSG_USERNICK: "user.nick", MSG_USERNAME: "user.name", MSG_USERROLE: "user.role", MSG_LANGUAGE: "user.lang", - MSG_TITLE: "sess.title", MSG_THEME: "sess.theme", MSG_RIVER: "sess.river", MSG_STORM: "sess.storm", - MSG_HEIGHT: "sess.height", MSG_WIDTH: "sess.width", MSG_MODE: "sess.mode", MSG_DAEMON: "sess.daemon", - LOG_DISABLE: "log.disable", - - ErrWarn: "warn: ", ErrNotLogin: "not login: ", ErrNotRight: "not right: ", ErrNotFound: "not found: ", ErrNotValid: "not valid: ", - CAN_PLUGIN: "can._plugin", CAN_DEBUG: "can.debug", LOG_DEBUG: "log.debug", - NFS: "nfs", USR: "usr", USR_VOLCANOS: "usr/volcanos/", -} - -var ctx = { - CONTEXT: "context", COMMAND: "command", CONFIG: "config", INPUTS: "inputs", FEATURE: "feature", - INDEX: "index", ARGS: "args", STYLE: "style", DISPLAY: "display", ACTION: "action", - EXTRA_INDEX: "extra.index", EXTRA_ARGS: "extra.args", - RUN: "run", -} -var mdb = { - DICT: "dict", META: "meta", HASH: "hash", LIST: "list", - ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text", - DATA: "data", VIEW: "view", ICON: "icon", LINK: "link", SCAN: "scan", HELP: "help", - SHORT: "short", FIELD: "field", TOTAL: "total", COUNT: "count", LIMIT: "limit", - INDEX: "index", VALUE: "value", EXTRA: "extra", ALIAS: "alias", EXPIRE: "expire", - - CREATE: "create", REMOVE: "remove", INSERT: "insert", DELETE: "delete", MODIFY: "modify", SELECT: "select", - INPUTS: "inputs", PRUNES: "prunes", EXPORT: "export", IMPORT: "import", REVERT: "revert", NORMAL: "normal", - SEARCH: "search", ENGINE: "engine", RENDER: "render", PLUGIN: "plugin", - DETAIL: "detail", - PRUNE: "prune", - - KEYS: "keys", - MAIN: "main", PAGE: "page", NEXT: "next", PREV: "prev", LIMIT: "limit", OFFEND: "offend", - FOREACH: "*", RANDOMS: "%", - QS: ice.QS, AT: ice.AT, - EQ: ice.EQ, FS: ice.FS, -} -var web = {CHAT: "chat", - DREAM: "dream", SPACE: "space", ROUTE: "route", SPIDE: "spide", COUNT: "count", SHARE: "share", - WEBSITE: "website", DRAW: "draw", PLAY: "play", CLEAR: "clear", REFRESH: "refresh", RESIZE: "resize", FILTER: "filter", INPUT: "input", - CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", DOWNLOAD: "download", TOIMAGE: "toimage", - SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/", - WORKER: "worker", SERVER: "server", GATEWAY: "gateway", - - AT: "@", QS: "?", LINK: "link", HTTP: "http", - GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE", - Accept: "Accept", ContentType: "Content-Type", ContentJSON: "application/json", ContentFORM: "application/x-www-form-urlencoded", - IMAGE_PNG: "image/png", VIDEO_WEBM: "video/webm", - - CODE_GIT_STATUS: "web.code.git.status", - CODE_GIT_REPOS: "web.code.git.repos", - CODE_COMPILE: "web.code.compile", - CODE_VIMER: "web.code.vimer", - CODE_INNER: "web.code.inner", - CODE_XTERM: "web.code.xterm", - WIKI_WORD: "web.wiki.word", - WIKI_DRAW: "web.wiki.draw", - WIKI_PORTAL: "web.wiki.portal", - CHAT_MACOS_DESKTOP: "web.chat.macos.desktop", - CHAT_MACOS_SESSION: "web.chat.macos.session", - CHAT_IFRAME: "web.chat.iframe", - CHAT_FAVOR: "web.chat.favor", - CHAT_FLOWS: "web.chat.flows", - TEAM_PLAN: "web.team.plan", -} -var aaa = { - USER: "user", - LOGIN: "login", LOGOUT: "logout", INVITE: "invite", TOKEN: "token", - USERNICK: "usernick", USERNAME: "username", PASSWORD: "password", USERROLE: "userrole", BACKGROUND: "background", AVATAR: "avatar", - LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese", - VOID: "void", TECH: "tech", ROOT: "root", -} -var lex = { - SPLIT: "split", PREFIX: "prefix", SUFFIX: "suffix", - PARSE: "parse", - TB: ice.TB, SP: ice.SP, NL: ice.NL, -} -var yac = { - STASK: "stack", -} -var ssh = { - SHELL: "shell", -} -var gdb = { - SIGNAL: "signal", -} -var tcp = { - HOST: "host", PORT: "port", -} -var nfs = { - DIR: "dir", CAT: "cat", DEFS: "defs", PACK: "pack", TRASH: "trash", DIR_ROOT: "dir_root", - COPY: "copy", EDIT: "edit", SAVE: "save", LOAD: "load", FIND: "find", GREP: "grep", TAGS: "tags", - CONTENT: "content", RECENT: "recent", SCRIPT: "script", MODULE: "module", SOURCE: "source", TARGET: "target", REPOS: "repos", MASTER: "master", - PATH: "path", FILE: "file", LINE: "line", SIZE: "size", - REPLACE: "replace", FROM: "from", TO: "to", - SVG: "svg", HTML: "html", CSS: "css", JS: "js", SH: "sh", GO: "go", CSV: "csv", JSON: "json", SHY: "shy", - TXT: "txt", PNG: "png", WEBM: "webm", - _CSS: ".css", _JS: ".js", - PWD: "./", SRC: "src/", USR: "usr/", USR_LOCAL_WORK: "usr/local/work/", SRC_DOCUMENT: "src/document/", - DF: ice.DF, PS: ice.PS, PT: ice.PT, -} -var cli = { - OPENS: "opens", SYSTEM: "system", DAEMON: "daemon", ORDER: "order", BUILD: "build", - BEGIN: "begin", START: "start", OPEN: "open", CLOSE: "close", STOP: "stop", END: "end", RESTART: "restart", - COLOR: "color", BLACK: "black", WHITE: "white", BLUE: "blue", RED: "red", GRAY: "gray", CYAN: "cyan", GREEN: "green", PURPLE: "purple", YELLOW: "yellow", - MAGENTA: "magenta", SILVER: "silver", ALICEBLUE: "aliceblue", TRANSPARENT: "transparent", - MAKE: "make", EXEC: "exec", DONE: "done", COST: "cost", FROM: "from", CLEAR: "clear", - LINUX: "linux", DARWIN: "darwin", WINDOWS: "windows", - PWD: "pwd", -} -var log = { - INFO: "info", WARN: "warn", ERROR: "error", DEBUG: "debug", TRACE: "trace", -} - -var code = { - FAVOR: "favor", XTERM: "xterm", INNER: "inner", VIMER: "vimer", - WEBPACK: "webpack", BINPACK: "binpack", AUTOGEN: "autogen", COMPILE: "compile", PUBLISH: "publish", - TEMPLATE: "template", COMPLETE: "complete", NAVIGATE: "navigate", CURRENT: "current", - PULL: "pull", PUSH: "push", - COMMENT: "comment", KEYWORD: "keyword", - PACKAGE: "package", DATATYPE: "datatype", FUNCTION: "function", CONSTANT: "constant", - STRING: "string", NUMBER: "number", BOOLEAN: "boolean", OBJECT: "object", ARRAY: "array", UNDEFINED: "undefined", - - META: "Meta", ALT: "Alt", CONTROL: "Control", SHIFT: "Shift", TAB: "Tab", ESCAPE: "Escape", ENTER: "Enter", - CMD: "Cmd", CTRL: "Ctrl", SPACE: "Space", BACKSPACE: "Backspace", ESC: "Esc", PS: "/", -} -var wiki = { - TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark", SHELL: "shell", - ORDER: "order", TABLE: "table", CHART: "chart", IMAGE: "image", VIDEO: "video", - FIELD: "field", LOCAL: "local", PARSE: "parse", - NAVMENU: "navmenu", PREMENU: "premenu", CONTENT: "content", - STORY_ITEM: ".story", H2: "h2.story", H3: "h3.story", - DRAW: "draw", -} -var chat = { - LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", STORY: "story", PLUG: "plug", - TOAST: "toast", CARTE: "carte", INPUT: "input", UPLOAD: "upload", CONTEXTS: "contexts", - LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile", ACTIONS: "actions", - TITLE: "title", THEME: "theme", BLACK: "black", WHITE: "white", PRINT: "print", LIGHT: "light", DARK: "dark", - SHARE: "share", RIVER: "river", STORM: "storm", FIELD: "field", TOOL: "tool", - STATE: "state", MENUS: "menus", SSO: "sso", LOCATION: "location", IFRAME: "iframe", - OUTPUT: "output", SIMPLE: "simple", FLOAT: "float", FULL: "full", CMD: "cmd", - - HEADER: "Header", ACTION: "Action", FOOTER: "Footer", - libs: ["/lib/base.js", "/lib/core.js", "/lib/date.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], - panel_list: [{name: "Header", style: "head"}, {name: "River", style: "left"}, {name: "Action", style: "main"}, {name: "Search", style: "auto"}, {name: "Footer", style: "foot"}], - plugin_list: [ - "/plugin/state.js", - "/plugin/input.js", - "/plugin/table.js", - "/plugin/input/key.js", - "/plugin/input/date.js", - "/plugin/story/json.js", - "/plugin/story/spide.js", - "/plugin/story/trend.js", - "/plugin/local/code/xterm.js", - "/plugin/local/code/vimer.js", - "/plugin/local/code/inner.js", - "/plugin/local/code/inner/syntax.js", - "/plugin/local/wiki/draw/path.js", - "/plugin/local/wiki/draw.js", - "/plugin/local/wiki/feel.js", - "/plugin/local/wiki/word.js", - "/plugin/local/team/plan.js", - "/plugin/local/mall/goods.js", - ], PLUGIN_INPUT: "/plugin/input/", PLUGIN_STORY: "/plugin/story/", PLUGIN_LOCAL: "/plugin/local/", - PLUGIN_STATE_JS: "/plugin/state.js", PLUGIN_INPUT_JS: "/plugin/input.js", PLUGIN_TABLE_JS: "/plugin/table.js", - ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap", - ONIMPORT: "onimport", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport", - ONSYNTAX: "onsyntax", ONFIGURE: "onfigure", ONPLUGIN: "onplugin", - - ONSIZE: "onsize", ONMAIN: "onmain", ONLOGIN: "onlogin", ONREMOTE: "onremote", ONSEARCH: "onsearch", - ONRESIZE: "onresize", ONKEYUP: "onkeyup", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange", - ONSTORM_SELECT: "onstorm_select", ONACTION_NOSTORM: "onaction_nostorm", ONACTION_NOTOOL: "onaction_notool", ONACTION_TOUCH: "onaction_touch", ONACTION_CMD: "onaction_cmd", ONACTION_REMOVE: "onaction_remove", - ONOPENSEARCH: "onopensearch", ONSEARCH_FOCUS: "onsearch_focus", ONCOMMAND_FOCUS: "oncommand_focus", - ONTHEMECHANGE: "onthemechange", ONLAYOUT: "onlayout", ONUNLOAD: "onunload", ONWEBPACK: "onwebpack", - ONTOAST: "ontoast", ONDEBUG: "ondebug", ONSHARE: "onshare", ONPRINT: "onprint", - - _INIT: "_init", _DELAY_INIT: "_delay_init", - _TRANS: "_trans", _STYLE: "_style", _ENGINE: "_engine", _SEARCH: "_search", _NAMES: "_names", _TOAST: "_toast", -} -var team = { - TASK: "task", PLAN: "plan", - BEGIN_TIME: "begin_time", - LONG: "long", YEAR: "year", MONTH: "month", WEEK: "week", DAY: "day", HOUR: "hour", - TASK_POD: "task.pod", TASK_ZONE: "task.zone", TASK_ID: "task.id", -} -var mall = { - COUNT: "count", PRICE: "price", - ASSET: "asset", SALARY: "salary", -} - -var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 32, ACTION_MARGIN: 200, - FIELDSET: "fieldset", LEGEND: "legend", OPTION: "option", ACTION: "action", OUTPUT: "output", STATUS: "status", - OPTION_ARGS: "select.args,input.args,textarea.args", INPUT_ARGS: "input.args,textarea.args", INPUT_BUTTON: "input[type=button]", INPUT_FILE: "input[type=file]", - FORM_OPTION: "form.option", DIV_ACTION: "div.action", DIV_OUTPUT: "div.output", DIV_STATUS: "div.status", - FIELDSET_HEAD: "fieldset.head", FIELDSET_FOOT: "fieldset.foot", FIELDSET_LEFT: "fieldset.left", FIELDSET_MAIN: "fieldset.main", - FIELDSET_PANEL: "fieldset.panel", FIELDSET_PLUGIN: "fieldset.plugin", FIELDSET_STORY: "fieldset.story", FIELDSET_PLUG: "fieldset.plug", - FIELDSET_FLOAT: "fieldset.float", FIELDSET_INPUT: "fieldset.input", - - H1: "h1", H2: "h2", H3: "h3", UL: "ul", OL: "ol", LI: "li", BR: "br", HR: "hr", - A: "a", SPAN: "span", CODE: "code", DIV: "div", - SVG: "svg", IMG: "img", VIDEO: "video", AUDIO: "audio", CANVAS: "canvas", IFRAME: "iframe", - WSS: "wss", WEBVIEW: "webview", CHROME: "chrome", MOBILE: "mobile", LANDSCAPE: "landscape", - BODY: "body", FORM: "form", LABEL: "label", TITLE: "title", INNER: "inner", SPACE: "space", CLICK: "click", - SELECT: "select", INPUT: "input", TEXT: "text", FILE: "file", TEXTAREA: "textarea", BUTTON: "button", - CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", USERNAME: "username", PASSWORD: "password", - TABLE: "table", THEAD: "thead", TBODY: "tbody", TR: "tr", TH: "th", TD: "td", - HEADER: "header", NAV: "nav", MAIN: "main", ASIDE: "aside", FOOTER: "footer", - - BACKGROUND_COLOR: "background-color", COLOR: "color", - PADDING: "padding", BORDER: "border", MARGIN: "margin", MARGIN_TOP: "margin-top", MARGIN_X: "margin-x", MARGIN_Y: "margin-y", - HEIGHT: "height", WIDTH: "width", MIN_HEIGHT: "min-height", MAX_HEIGHT: "max-height", MIN_WIDTH: "min-width", MAX_WIDTH: "max-width", - DISPLAY: "display", BLOCK: "block", NONE: "none", OVERFLOW: "overflow", HIDDEN: "hidden", SCROLL: "scroll", FLOAT: "float", CLEAR: "clear", BOTH: "both", - LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom", - FLEX: "flex", FLOW: "flow", - SCROLLBAR: "scrollbar", - VISIBILITY: "visibility", - VERTICAL: "vertical", HORIZON: "horizon", - - SIZE: "size", OPACITY: "opacity", VISIBLE: "visible", - CLASS: "class", LIGHT: "light", DARK: "dark", - FILTER: "filter", TOGGLE: "toggle", EXPAND: "expand", SPEED: "speed", HOVER: "hover", HOVER_SELECT: "hover,select", - NOT_HIDE: ":not(.hide)", - - PAGE: "page", TABS: "tabs", MENU: "menu", NODE: "node", PLUG: "plug", - ZONE: "zone", LIST: "list", ITEM: "item", NAME: "name", ICON: "icon", VIEW: "view", - HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", AUTO: "auto", SHOW: "show", HIDE: "hide", - PLUGIN: "plugin", LAYOUT: "layout", PROJECT: "project", DISPLAY: "display", PROFILE: "profile", CONTENT: "content", - DIV_PAGE: "div.page", DIV_TABS: "div.tabs", DIV_PATH: "div.path", DIV_CODE: "div.code", DIV_PLUG: "div.plug", - DIV_ZONE: "div.zone", DIV_LIST: "div.list", DIV_ITEM: "div.item", DIV_NAME: "div.name", SPAN_ITEM: "span.item", SPAN_ICON: "span.icon", SPAN_NAME: "span.name", - DIV_CONTENT: "div.content", TABLE_CONTENT: "table.content", TABLE_LAYOUT: "table.layout", DIV_TOGGLE: "div.toggle", - DIV_LAYOUT: "div.layout", DIV_LAYOUT_HEAD: "div.layout.head", DIV_LAYOUT_FOOT: "div.layout.foot", DIV_LAYOUT_LEFT: "div.layout.left", - DIV_FLOAT: "div.float", DIV_TOAST: "div.toast", DIV_CARTE: "div.carte", - DESKTOP: "desktop", DIV_DESKTOP: "div.desktop", DIV_EXPAND: "div.expand", -} -var svg = { - GROUP: "group", PID: "pid", GRID: "grid", - FIGURE: "figure", DATA: "data", SHIP: "ship", TRANS: "trans", - GO: "go", - SHAPE: "shape", TEXT: "text", RECT: "rect", LINE: "line", CIRCLE: "circle", ELLIPSE: "ellipse", BLOCK: "block", - STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", FONT_FAMILY: "font-family", TEXT_ANCHOR: "text-anchor", - G: "g", X: "x", Y: "y", R: "r", RX: "rx", RY: "ry", CX: "cx", CY: "cy", X1: "x1", Y1: "y1", X2: "x2", Y2: "y2", - PATH: "path", PATH2V: "path2v", PATH2H: "path2h", - M: "M", Q: "Q", T: "T", - TEXT_LENGTH: "textLength", -} - function shy(help, meta, list, cb) { var arg = arguments, i = 0; function next(type) { if (type == code.OBJECT) { if (typeof arg[i] == code.OBJECT && arg[i].length == undefined) { return arg[i++] } } else if (type == code.ARRAY) { if (typeof arg[i] == code.OBJECT && arg[i].length != undefined) { return arg[i++] } } else if (i < arg.length && (!type || type == typeof arg[i])) { return arg[i++] } } return cb = typeof arg[arg.length-1] == code.FUNCTION? arg[arg.length-1]: function() {}, cb.help = next(code.STRING)||"", cb.meta = next(code.OBJECT)||{}, cb.list = next(code.ARRAY)||[], cb }; var _can_name = "", _can_path = "" -var Volcanos = shy({iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {}, args: {}}, function(name, can, libs, cb) { +var Volcanos = shy({iceberg: "/chat/", volcano: chat.FRAME_JS, cache: {}, pack: {}, args: {}}, function(name, can, libs, cb) { var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == code.OBJECT) { if (name.length > 0) { return Volcanos({panels: [{name: chat.HEADER, style: html.HIDE, state: [mdb.TIME, aaa.USERNICK]}, {name: chat.ACTION, style: html.MAIN, tool: name}, {name: chat.FOOTER, style: html.HIDE}]}) } var Config = name; name = Config.name||ice.CAN, _can_name = "" meta.iceberg = Config.iceberg||meta.iceberg, meta.libs = (Config.libs||chat.libs).concat(Config.list), panels = Config.panels||chat.panel_list, delete(Config.panels) - libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugin||chat.plugin_list) + libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/volcanos/panel/"+p.name+nfs._JS, "/volcanos/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugin||chat.plugin_list) cb = can||function(can) { can.onengine._init(can, can.Conf(Config), panels, Config._init||meta._init, can._target) } can = Config, can._follow = name, can._target = Config.target||meta.target, can._height = Config.height||meta._height, can._width = Config.width||meta._width } @@ -323,7 +34,9 @@ var Volcanos = shy({iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {} }, request: function(event) { event = event||{}, event = event._event||event var msg = event._msg||can.misc.Message(event, can); event._msg = msg - function set(key, value) { value == "" || msg.Option(key) || msg.Option(key, value) } + function set(key, value) { + if (key == "_method") { return msg._method = value } + value == "" || msg.Option(key) || msg.Option(key, value) } can.core.List(arguments, function(item, index) { if (!item || index == 0) { return } can.base.isFunc(item.Option)? can.core.List(item.Option(), function(key) { key.indexOf("_") == 0 || key.indexOf("user.") == 0 || set(key, item.Option(key))