Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can), can.onappend.style(can, code.INNER) if (msg.Option(nfs.FILE)) { can.Option(nfs.FILE, msg.Option(nfs.FILE)) msg.Option(nfs.PATH) && can.Option(nfs.PATH, msg.Option(nfs.PATH)) msg.Option(nfs.LINE) && can.Option(nfs.LINE, msg.Option(nfs.LINE)) } if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return } var files = can.core.Split(can.Option(nfs.FILE), ice.FS); can.Option(nfs.FILE, files[0]) var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0]) can.core.List(paths.concat(can.core.Split(msg.Option(nfs.REPOS))), function(p) { if (p && paths.indexOf(p) == -1 && p[0] != ice.PS) { paths.push(p) } }) can.db = {paths: paths, tabview: {}, history: [], profile_size: {}, display_size: {}, toolkit: {}, extentions: {}}, can.onengine.plugin(can, can.onplugin) can.ui = can.onappend.layout(can, can._output, "", [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY, html.PLUG]]) can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display switch (can.Mode()) { case chat.SIMPLE: can.onmotion.hidden(can, can.ui.project); break case chat.FLOAT: can.onmotion.hidden(can, can.ui.project); break case chat.CMD: can.page.style(can, document.body, html.OVERFLOW, html.HIDDEN) can.onmotion.hidden(can, can._status), can.onimport._keydown(can) // no break case chat.FULL: // no break default: can.onimport.project(can, paths), can.onimport._tabs(can) can.onmotion.delay(can, function() { can.core.Next(files.slice(1), function(file, next) { can.onimport._tabview(can, can.Option(nfs.PATH), file, "", next) }, function() { files.length > 1 && can.onimport._tabview(can, paths[0], files[0], "") if (can.user.isWebview) { var last = can.misc.localStorage(can, "web.code.inner:currentFile"); if (!last) { return } } var ls = can.core.Split(last, ice.DF); ls.length > 0 && can.onmotion.delayLong(can, function() { can.onimport._tabview(can, ls[0], ls[1], ls[2]) }) }) }) } var hash = location.hash; can.db.tabview[can.onexport.keys(can)] = msg can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE), function() { if (can.isCmdMode() && hash) { var args = can.core.Split(decodeURIComponent(hash).slice(1), ice.DF) can.onmotion.delayLong(can, function() { can.onimport._tabview(can, args[args.length-3]||can.Option(nfs.PATH), args[args.length-2]||can.Option(nfs.FILE), args[args.length-1]) }) } }), can.base.isFunc(cb) && cb(msg) }, _tabview: function(can, path, file, line, cb) { var key = can.onexport.keys(can, path, file) if (!can.user.isWebview) { can.onimport.tabview(can, path, file, line, cb) } else if (!can.db.tabview[key]) { can.onimport.tabview(can, path, file, line, cb), can.db.tabview[key] = true } }, _keydown: function(can) { can.onkeymap._build(can), can._root.onengine.listen(can, chat.ONKEYDOWN, function(event) { if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs, html.DIV_TABS)) { return } can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content) }) }, _tabs: function(can) { if (!can.isCmdMode()) { return can.ui.tabs = can._action } can.page.Append(can, can.ui.tabs, [{view: [[html.ICON, mdb.CREATE], html.DIV, "\u2630"], onclick: function() { can.user.carte(event, can, can.onaction, can.onaction.list) }}]) can.page.Append(can, can.ui.tabs, [{view: [mdb.TIME], _init: function(target) { can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.user.time(can, null, "%y-%m-%d %H:%M:%S %w")) }) can.onappend.figure(can, {action: "date", _hold: true}, target, function(sub, value) {}) }}]) can.user.info.avatar && can.page.Append(can, can.ui.tabs, [{view: [aaa.AVATAR], list: [{img: can.user.info.avatar}]}]) }, _tabInputs: function(can, ps, key, value, cb, target) { can.core.List(can.core.Split(value, ps), function(value, index, array) { can.page.Append(can, target, [{text: [value+(index 4) { ls = [ls.slice(0, 2).join(ice.PS)+"/.../"+ls.slice(-2).join(ice.PS)] } can.Status(kit.Dict("文件", ls.join(ice.PS), "类型", can.parse)), can.onimport.layout(can) if (!skip) { can.onaction.selectLine(can, can.Option(nfs.LINE), true) } can.base.isFunc(cb) && cb(), cb = null }) } function load(msg) { var skip = false; can.db.tabview[key] = msg can.onimport.tabs(can, [{name: file.split(isCommand()? ice.PT: ice.PS).pop(), text: file}], function(event, tabs) { can._tab = msg._tab = tabs._target, show(skip), skip = true }, function(item) { can.onengine.signal(can, "tabview.view.delete", msg) msg._content != can.ui._content && can.page.Remove(can, msg._content), msg._profile != can.ui._profile && can.page.Remove(can, msg._profile) delete(can.ui._content._cache[key]), delete(can.ui._profile._cache[key]), delete(can.ui.display._cache[key]) delete(can._cache_data[key]), delete(can.db.tabview[key]) }, can.ui.tabs).ondblclick = function(event) { can.onaction.clear(event, can) } } if (can.db.tabview[key]) { return !can._msg._tab && !can.isSimpleMode()? load(can.db.tabview[key]): show() } isCommand()||isDream()? load(can.request({}, {index: file, line: line})): can.run({}, [path, file], load, true) }, history: function(can, record) { can.base.Eq(record, can.db.history[can.db.history.length-1]) || can.db.history.push(record) return can.Status("跳转", can.db.history.length), record }, project: function(can, path) { can.onimport.zone(can, can.core.Item(can.onfigure, function(name, cb) { if (can.base.isFunc(cb)) { return {name: name, _trans: can.onfigure._trans? can.onfigure._trans[name]||"": "", _init: function(target, zone) { return cb(can, target, zone, path) }} } }), can.ui.project), can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project) }, profile: function(can, msg) { var sup = can.db.tabview[can.onexport.keys(can)] if (msg.Result().indexOf("