1
0
forked from x/ContextOS

add searchs

This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-05-03 16:46:48 +08:00
parent 8e3f3f8f15
commit d542864c2b
14 changed files with 205 additions and 55 deletions

View File

@ -26,6 +26,7 @@ func init() {
AppInstall(m, "Grapher", web.WIKI_DRAW)
AppInstall(m, "Photos", web.WIKI_FEEL)
AppInstall(m, "Books", web.WIKI_WORD)
m.Cmd(NOTIFICATIONS, mdb.CREATE, mdb.NAME, "runtime", mdb.TEXT, "系统启动成功", ctx.INDEX, "cli.runtime")
}},
code.INSTALL: {Hand: func(m *ice.Message, arg ...string) { AppInstall(m, arg[0], arg[1], arg[2:]...) }},
}, CmdHashAction("index,args"))},

View File

@ -1,40 +1,56 @@
fieldset.macos.desktop { background-size:cover; background-position:center; }
fieldset.macos.desktop>div.output>fieldset.macos { background-color:transparent; }
fieldset.macos.desktop>div.output>fieldset.macos>div.output { background-color:transparent; }
fieldset.macos.desktop>div.output>fieldset.macos.menu { line-height:25px; height:25px; width:100%; position:absolute; top:0; }
fieldset.macos.desktop>div.output>fieldset.macos.menu { line-height:25px; border-radius:0; height:25px; width:100%; position:absolute; top:0; }
fieldset.macos.desktop>div.output>fieldset.macos.searchs { position:absolute; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications { height:calc(100% - 25px); width:250px; overflow:auto; position:absolute; top:25px; right:0; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item { margin-top:10px; margin-right:10px; min-height:60px; clear:both; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item div.title { padding-top:10px; height:24px; width:132px; overflow:hidden; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item div.time { font-size:12px; color:gray; padding:5px; padding-top:10px; height:24px; width:48px; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item div.content { width:180px; }
fieldset.macos.desktop>div.output>fieldset.macos.dock { border:#ffffff3d solid 1px; border-radius:20px; position:absolute; bottom:10px; z-index:11; transition:margin-left 0.3s; }
fieldset.macos.desktop>div.output>fieldset.macos.dock:hover { margin-left:-40px; transition:margin-left 0.3s; }
fieldset.macos.desktop>div.output>div.desktop:not(.select) { display:none; }
fieldset.macos.desktop>div.output>div.desktop { padding-top:25px; }
fieldset.macos.desktop>div.output>div.desktop>div.item { position:absolute; text-align:center; }
fieldset.macos.desktop>div.output>div.desktop>div.item:hover { background-color:unset; }
fieldset.macos.desktop>div.output>div.desktop>div.item img { width:80px; border-radius:80px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset { border-radius:10px; position:absolute; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>div.item.button { border-radius:20px; height:20px; width:20px; scale:0.7; position:absolute; top:15px; right:10px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>legend { background-color:unset; padding-right:10px; margin:10px 0; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>* { margin:10px 0px 10px 10px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item:last-child { margin-right:80px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon { margin-top:12px; margin-bottom:8px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.icons>span.icon { margin-left:5px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon { margin-left:0; margin-top:12px; margin-bottom:8px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.icons { margin-left:0; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item:last-child { margin-right:20px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>div.action>* { margin:10px 0px 10px 10px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>div.action>div.item.icons>span.icon { margin-top:12px; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>div.action>div.item:last-child { margin-right:80px; }
fieldset.macos.menu>div.output img { margin-bottom:-8px; }
fieldset.macos.menu>div.output>div.item { padding:0 5px; float:right; cursor:pointer; }
fieldset.macos.menu>div.output>div.item img { height:25px; }
fieldset.macos.menu>div.output>div.icon { padding:0 5px; float:right; cursor:pointer; }
fieldset.macos.menu>div.output>div.menu { float:left; padding:0 20px; cursor:pointer; }
fieldset.macos.dock>div.output { height:80px; overflow:visible; display:flex; }
fieldset.macos.dock>div.output>div.space { background-color:#ececec36; margin:10px; height:calc(100% - 20px); width:2px; }
fieldset.macos.dock>div.output>div.item { text-align:center; align-self:baseline; transition:margin-top 0.3s; }
fieldset.macos.dock>div.output>div.item:hover { background-color:unset; margin-top:-80px; transition:margin-top 0.3s; }
fieldset.macos.dock>div.output>div.item img { width:80px; transition:width 0.3s; }
fieldset.macos.dock>div.output>div.item img:hover { width:160px; transition:width 0.3s; }
fieldset.macos.finder>div.output div.content>div.item { float:left; text-align:center; }
fieldset.macos.finder>div.output div.content>div.item img { width:84px; }
fieldset.macos.finder>div.output div.content>div.item img { width:80px; border-radius:80px; }
fieldset.macos.finder>div.output div.content>div.item div.name { text-align:center; }
div.carte.macos.float { font-size:14px; padding:10px; border:#ffffff5e solid 1px; border-radius:8px; }
div.carte.macos.float div.item { background:transparent; }
div.carte.macos.float hr { border-bottom:gray solid 1px; }
div.carte.macos.float { background:#e1e5ea; }
body.dark div.carte.macos.float { background:#29323beb; color:#e8eaed; }
fieldset.macos.desktop>div.output { color:white; }
fieldset.macos.desktop>div.output>fieldset.macos.dock { background-color:#e9f1f594; }
fieldset.macos.desktop>div.output>fieldset.macos.menu { background-color:#08234ad1; color:#e8eaed; }
fieldset.macos.desktop>div.output>fieldset.macos.menu { background-color:#daefff99; color:black; }
fieldset.macos.desktop>div.output>fieldset.macos.controls { background-color:#08234ad1; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications { background-color:#08234ad1; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item { background-color:#daefff99; color:black; }
fieldset.macos.desktop>div.output>div.search { background-color:#daefff99; color:black; }
fieldset.macos.desktop>div.output>fieldset.macos.searchs { background-color:#daefff99; }
fieldset.macos.desktop>div.output>div.desktop fieldset { background-color:#dee1e6; }
fieldset.macos.desktop>div.output>div.desktop>fieldset>div.output { background-color:white; }
fieldset.macos.desktop>div.output>div.desktop fieldset>div.status { border-top:#dddede solid 1px; }
@ -43,14 +59,14 @@ fieldset.macos.desktop>div.output>div.desktop fieldset table.content tr:nth-chil
fieldset.macos.desktop>div.output>div.desktop fieldset input { background-color:white; border:#e4e5e5 solid 1px; color:black; caret-color:black; }
fieldset.macos.desktop>div.output>div.desktop fieldset>div.output.card>div.item { border:#d3d4d4 solid 1px; }
fieldset.macos.desktop>div.output>div.desktop fieldset>div.output.card>div.item>div.title { border-bottom:#d3d4d4 solid 1px; }
body.dark fieldset.macos.desktop { color:#e8eaed; }
body.dark fieldset.macos.desktop input { color:#e8eaed; }
body.dark fieldset.macos.desktop input[type=button] { background-color:#5e5f5f; }
body.dark fieldset.macos.desktop>div.output { color:white; }
body.dark fieldset.macos.desktop>div.output { background-color:unset; }
body.dark fieldset.macos.desktop>div.output>fieldset.macos.dock { background-color:#0e202e70; }
body.dark fieldset.macos.desktop>div.output>fieldset.macos.menu { background-color:#08234ad1; color:#e8eaed; }
body.dark fieldset.macos.desktop>div.output>fieldset.macos.controls { background-color:#08234ad1; }
body.dark fieldset.macos.desktop>div.output>fieldset.macos.notifications { background-color:#08234ad1; }
body.dark fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item { background-color:#08234ad1; color:white; }
body.dark fieldset.macos.desktop>div.output>div.desktop fieldset { background-color:#333434; }
body.dark fieldset.macos.desktop>div.output>div.desktop>fieldset>div.output { background-color:#1a1d1d; }
body.dark fieldset.macos.desktop>div.output>div.desktop fieldset>div.status { border-top:#3e4040 solid 1px; }

View File

@ -2,39 +2,75 @@ Volcanos(chat.ONIMPORT, {
_init: function(can, msg, cb) { if (can.isCmdMode()) { can.onappend.style(can, html.OUTPUT), can.ConfHeight(can.page.height()) }
can.ui = {}, can.base.isFunc(cb) && cb(msg), can.onmotion.clear(can), can.page.styleHeight(can, can._output, can.ConfHeight())
can.onimport._menu(can), can.onimport._dock(can), can.onimport._desktop(can, msg), can.onlayout.background(can, can.user.info.background, can._fields)
can.onimport._notifications(can)
},
_menu: function(can) { can.onappend.plugin(can, {index: "web.chat.macos.menu", style: html.OUTPUT}, function(sub) { can.ui.menu = sub
sub.onexport.record = function(_, value, key, item) {
sub.onexport.record = function(_, value, key, item) { delete(can.onfigure._path)
switch (value) {
case "system":
var carte = can.user.carte(event, can, {}, can.core.Item(can.onfigure), function(event, button, meta, carte) {
can.onfigure[button](event, can, carte)
}); break
case "system": var carte = can.user.carte(event, can, {}, can.core.Item(can.onfigure), function(event, button, meta, carte) { can.onfigure[button](event, can, carte) }); break
case "searchs": can.onimport._searchs(can); break
case "notifications": can.onmotion.toggle(can, can.ui.notifications._target); break
}
}
}) },
_searchs: function(can) { can.onappend.plugin(can, {index: "web.chat.macos.searchs"}, function(sub) { can.ui.searchs = sub
can.page.style(can, sub._target, html.LEFT, can.ConfWidth()/4, html.TOP, can.ConfHeight()/4)
sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth()/2, true)
sub.onexport.record = function(sub, value, key, item) {
if (item.cmd == ctx.COMMAND) {
can.onimport._window(can, {index: can.core.Keys(item.type, item.name.split(lex.SP)[0])})
}
}
}) },
_notifications: function(can) { can.onappend.plugin(can, {index: "web.chat.macos.notifications", style: html.OUTPUT}, function(sub) { can.ui.notifications = sub
sub.onexport.record = function(sub, value, key, item) { can.onimport._window(can, item) }
}) },
_dock: function(can) { can.onappend.plugin(can, {index: "web.chat.macos.dock", style: html.OUTPUT}, function(sub) { can.ui.dock = sub
sub.onexport.output = function(sub, msg) { can.page.style(can, sub._target, html.LEFT, (can.ConfWidth()-msg.Length()*80)/2) }
sub.onexport.record = function(sub, value, key, item) { can.onimport._window(can, item) }
}) },
_desktop: function(can, msg) { var target = can.page.Append(can, can._output, [{view: "desktop"}])._target
msg = msg||can._msg, msg.Table(function(item) { can.page.Append(can, target, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon)}]}, {view: [mdb.NAME, "", item.name]}]}]) })
can.onimport.tabs(can, [{name: "desktop"+(can.page.Select(can, can._output, "div.desktop").length-1)}], function() { can.onmotion.select(can, can._output, "div.desktop", target), can.ui.desktop = target }, function() { can.page.Remove(can, target) })._desktop = target
_item: function(can, item) { can.runAction(can.request(event, item), mdb.CREATE, [], function() { can.run(event, [], function(msg) {
can.page.SelectChild(can, can.ui.desktop, html.DIV_ITEM, function(target) { can.page.Remove(can, target) })
can.onimport.__item(can, msg, can.ui.desktop)
}) }) },
__item: function(can, msg, target) { msg = msg||can._msg, msg.Table(function(item, index) {
can.page.Append(can, target, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon)}]}, {view: [mdb.NAME, "", item.name]}],
onclick: function(event) { can.onimport._window(can, item) }, style: can.onexport.position(can, index),
oncontextmenu: function(event) { var carte = can.user.carteRight(event, can, {
remove: function() { can.runAction(event, mdb.REMOVE, [item.hash]) },
}); can.page.style(can, carte._target, html.TOP, event.y) },
}])
}) },
_desktop: function(can, msg) { var target = can.page.Append(can, can._output, [{view: html.DESKTOP}])._target; can.onimport.__item(can, msg, target)
target._tabs = can.onimport.tabs(can, [{name: html.DESKTOP+(can.page.Select(can, can._output, html.DIV_DESKTOP).length-1)}], function() { can.onmotion.select(can, can._output, "div.desktop", target), can.ui.desktop = target }, function() { can.page.Remove(can, target) }), target._tabs._desktop = target
target.ondragend = function() { can.onimport._item(can, window._drag_item) }
can.ui.desktop = target
return target
},
_window: function(can, item) {
item.height = can.base.Min(can.ConfHeight()-400, 320, 800), item.width = can.base.Min(can.ConfWidth()-400, 480, 1000)
can.onappend.plugin(can, item, function(sub) { can.ondetail.select(can, sub._target)
var index = 0; can.core.Item({
"#f95f57": function(event) { sub.onaction.close(event, sub) },
"#fcbc2f": function(event) { sub.onmotion.hidden(sub, sub._target) },
"#fcbc2f": function(event) {
var dock = can.page.Append(can, can.ui.dock._output, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon)}]}], onclick: function() {
can.onmotion.toggle(can, sub._target, true), can.page.Remove(can, dock)
}}])._target; sub.onmotion.hidden(sub, sub._target)
},
"#32c840": function(event) { sub.onaction.full(event, sub) },
}, function(color, cb) { can.page.insertBefore(can, [{view: [[html.ITEM, html.BUTTON]], style: {"background-color": color, right: 10+20*index++}, onclick: cb}], sub._output) })
sub.onexport.marginTop = function() { return 25 }
sub.onimport.size(sub, item.height, item.width, true), can.onmotion.move(can, sub._target, {"z-index": 10, top: 125, left: 100})
sub.onmotion.resize(can, sub._target, function(height, width) { sub.onimport.size(sub, height, width) }, 25)
sub.onexport.actionHeight = function(sub) { return can.page.ClassList.has(can, sub._target, html.OUTPUT)? 0: html.ACTION_HEIGHT+20 },
sub.onexport.record = function(sub, value, key, item) { can.onimport._window(can, item) }
sub.onappend.dock = function(item) { can.ui.dock.runAction(can.request(event, item), mdb.CREATE, [], function() { can.ui.dock.Update() }) }
sub.onappend.desktop = function(item) { can.onimport._item(can, item) }
}, can.ui.desktop)
},
session: function(can, list) { can.page.Select(can, can._output, html.DIV_DESKTOP, function(target) { can.page.Remove(can, target) }), can.onmotion.clear(can, can._action)
can.core.List(list, function(item) { can.onimport._desktop(can), can.core.List(item.list, function(item) { can.onimport._window(can, item) }) })
},
layout: function(can) { can.page.styleHeight(can, can._output, can.ConfHeight()) },
}, [""])
Volcanos(chat.ONACTION, {list: ["full"],
@ -42,23 +78,41 @@ Volcanos(chat.ONACTION, {list: ["full"],
full: function(event, can) { document.body.requestFullscreen() },
})
Volcanos(chat.ONDETAIL, {
select: function(can, target) {
can.page.SelectChild(can, can.ui.desktop, "fieldset", function(fieldset) {
can.page.style(can, fieldset, "z-index", fieldset == target? "10": "9")
fieldset == target && can.onmotion.toggle(can, fieldset, true)
})
},
select: function(can, target) { can.page.SelectChild(can, can.ui.desktop, html.FIELDSET, function(fieldset) {
can.page.style(can, fieldset, "z-index", fieldset == target? "10": "9"), fieldset == target && can.onmotion.toggle(can, fieldset, true)
}) },
})
Volcanos(chat.ONFIGURE, {
"session\t>": function(event, can, carte) { can.runActionCommand(event, "session", [], function(msg) {
var _carte = can.user.carteRight(event, can, {}, [{view: [html.ITEM, "", mdb.CREATE], onclick: function(event) {
can.user.input(event, can, [mdb.NAME], function(list) {
var args = can.page.SelectChild(can, can._output, html.DIV_DESKTOP, function(target) {
return {name: can.page.Select(can, target._tabs, html.SPAN_NAME).innerText, list: can.page.SelectChild(can, target, html.FIELDSET, function(target) {
return {index: target._can._index, args: target._can.onexport.args(target._can), style: {left: target.offsetLeft, top: target.offsetTop}}
})}
})
can.runActionCommand(event, "session", [ctx.ACTION, mdb.CREATE, mdb.NAME, list[0], ctx.ARGS, JSON.stringify(args)], function(msg) {
can.user.toastSuccess(can, "session created")
})
})
}}].concat("", msg.Table(function(value) {
return {view: [html.ITEM, "", value.name],
onclick: function() { can.onimport.session(can, can.base.Obj(value.args, [])) },
oncontextmenu: function(event) { can.user.carteRight(event, can, {
remove: function() { can.runActionCommand(event, "session", [mdb.REMOVE, value.name], function() { can.user.toastSuccess(can, "session removed") }) },
}, [], function() {}, _carte) },
}
})), function(event) {}, carte)
}) },
"desktop\t>": function(event, can, carte) {
can.user.carteRight(event, can, {}, [{view: [html.ITEM, "", mdb.CREATE], onclick: function(event) {
can.onaction.create(event, can)
}}].concat(can.page.Select(can, can._action, "div.tabs>span.name", function(target) {
var _carte = can.user.carteRight(event, can, {}, [{view: [html.ITEM, "", mdb.CREATE], onclick: function(event) {
can.onaction.create(event, can), can.user.toastSuccess(can, "desktop created")
}}].concat("", can.page.Select(can, can._action, "div.tabs>span.name", function(target) {
return {view: [html.ITEM, "", target.innerText+(can.page.ClassList.has(can, target.parentNode, html.SELECT)? " *": "")],
onclick: function(event) { target.click() },
oncontextmenu: function(event) { can.user.carteRight(event, can, {
remove: function() { target.parentNode._close() },
}, [], function() {}, carte) },
remove: function() { target.parentNode._close(), can.user.toastSuccess(can, "desktop removed") },
}, [], function() {}, _carte) },
}
})), function(event) {}, carte)
},
@ -80,7 +134,13 @@ Volcanos(chat.ONFIGURE, {
free: function(event) { can.core.List(list, function(target, index) {
can.page.style(can, target, html.TOP, can.ConfHeight()/2/list.length*index+25, html.LEFT, can.ConfWidth()/2/list.length*index)
}) },
full: function(event) { can.onaction.full(event, can) },
}, [], function(event) {}, carte)
},
full: function(event, can, carte) { can.onaction.full(event, can) },
})
Volcanos(chat.ONEXPORT, {
position: function(can, index) { var top = 25, margin = 20, height = 100, width = 80
var n = parseInt((can.ConfHeight()-top)/(height+margin))
return {top: index%n*height+top+margin/2, left: parseInt(index/n)*(width+margin)+margin/2}
}
})

View File

@ -1,15 +1,26 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg) {
msg.Table(function(item) { can.page.Append(can, can._output, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon)}] }], onclick: function(event) {
can.sup.onexport.record(can, item.name, mdb.NAME, item)
} }]) })
function show(msg) { can.onmotion.clear(can)
msg.Table(function(item) { can.page.Append(can, can._output, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon)}] }],
onclick: function(event) { can.sup.onexport.record(can, item.name, mdb.NAME, item) },
oncontextmenu: function(event) {
var carte = can.user.carte(event, can, {
remove: function() { item.name != "Finder" && can.runAction(event, mdb.REMOVE, [item.hash]) },
}); can.page.style(can, carte._target, html.LEFT, event.x)
},
}]) })
} show(msg)
can.page.Append(can, can._output, [{view: "space"}])
can._output.ondragend = function() {
var args = []; can.core.Item(window._drag_item, function(key, value) { args.push(key, value) })
can.runAction(event, mdb.CREATE, args, function() { can.run(event, [], function(msg) { can.onmotion.clear(can, target), show(msg) }) })
}
return
var current = null, before, begin
can.page.SelectChild(can, can._output, mdb.FOREACH, function(target) { target.draggable = true
target.ondragstart = function() { current = target, can.page.style(can, target, "visibility", html.HIDDEN) }
target.ondragenter = function(event) { before = target, begin = {x: event.x, y: event.y} }
target.ondragover = function(event) { var offset = event.x - begin.x
can.page.style(can, target, {position: "relative", left: -offset})
}
target.ondragover = function(event) { var offset = event.x - begin.x; can.page.style(can, target, {position: "relative", left: -offset}) }
target.ondragleave = function(event) { }
target.ondragend = function(event) { before && can.page.insertBefore(can, current, before)
can.page.SelectChild(can, can._output, mdb.FOREACH, function(target) { can.page.style(can, target, {position: "", left: "", visibility: html.VISIBLE}) })

View File

@ -14,7 +14,7 @@ func init() {
FINDER: {Name: "finder list", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
if m.Cmd(DOCK).Length() == 0 {
DockAppend(m, FINDER, m.PrefixKey())
DockAppend(m, "Finder", m.PrefixKey())
DockAppend(m, "Safari", web.CHAT_IFRAME)
DockAppend(m, "Terminal", web.CODE_XTERM)
DockAppend(m, "", web.CODE_VIMER)

View File

@ -9,9 +9,19 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onmotion.clear(can), c
}); index == 0 && item.click()
}), can.onmotion.hidden(can, can.ui.profile), can.onmotion.hidden(can, can.ui.display) },
icons: function(can, msg, target) { msg.Table(function(value) { value.icon = can.misc.PathJoin(value.icon||can.page.drawText(can, value.name, 80))
can.page.Append(can, target, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: value.icon}]}, {view: [mdb.NAME, "", value.name]}], onclick: function(event) {
var item = can.page.Append(can, target, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: value.icon}]}, {view: [mdb.NAME, "", value.name]}], onclick: function(event) {
can.sup.onexport.record(can.sup, value.name, mdb.NAME, value)
}}])
}, oncontextmenu: function(event) {
can.user.carteRight(event, can, {
"add to desktop": function() {
can.sup.onappend.desktop(value)
},
"add to dock": function() {
can.sup.onappend.dock(value)
},
}, [])
}}])._target
item.draggable = true, item.ondragstart = function(event) { window._drag_item = value }
}) },
layout: function(can) { can.ui.layout(can.ConfHeight(), can.ConfWidth()) },
})

View File

@ -29,8 +29,11 @@ func CmdHashAction(arg ...string) ice.Actions {
m.Cmd(nfs.DIR, USR_ICONS, func(value ice.Maps) { m.Push(arg[0], kit.TrimExt(value[nfs.PATH], nfs.PNG)) })
case mdb.ICON:
m.Cmd(nfs.DIR, USR_ICONS, func(value ice.Maps) { m.Push(arg[0], value[nfs.PATH]) })
case mdb.SEARCH:
m.OptionFields("type,name,text")
m.Cmdy(mdb.SEARCH, "*", "")
}
}},
mdb.SELECT: {Name: "list hash auto create", Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).Sort(mdb.NAME).Display(file) }},
}, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, kit.Select("", arg, 0), mdb.FIELD, kit.Select("time,hash,name,icon,index,args", arg, 1), kit.Slice(arg, 2)))
}, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, kit.Select("", arg, 0), mdb.FIELD, kit.Select("time,hash,name,icon,text,index,args", arg, 1), kit.Slice(arg, 2)))
}

View File

@ -2,21 +2,14 @@ title "MacOS"
chain `
desktop
menu
Notifications
Control_Center
Spotlight_Search
session
desktop
window
layout
dock
Finder
Desktop
Recents
Downloads
Applications
Documents
Pictures
Movies
Music
Trash
Safari
Preview
Terminal
`

View File

@ -1,8 +1,11 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { msg.Dump(can), can.page.Append(can, can._output, can.user.header(can))
can.page.Append(can, can._output, [{view: ["icon"], list: [{img: can.misc.PathJoin("usr/icons/", "menu", nfs.PNG)}], onclick: function(event) {
can.sup.onexport.record(can, "controls", mdb.NAME, {})
}}])
can.page.Append(can, can._output, [{view: ["menu"], list: [{img: can.misc.PathJoin("usr/icons/", "menu0", nfs.PNG)}], onclick: function(event) {
can.page.Append(can, can._output, [{view: ["menu", "", "desktop"], onclick: function(event) {
can.sup.onexport.record(can, "system", mdb.NAME, {})
}}])
can.page.Append(can, can._output, [{view: ["item", "", "notifications"], onclick: function(event) {
can.sup.onexport.record(can, "notifications", mdb.NAME, {})
}}])
can.page.Append(can, can._output, [{view: ["item", "", "searchs"], onclick: function(event) {
can.sup.onexport.record(can, "searchs", mdb.NAME, {})
}}])
}})

View File

@ -0,0 +1,14 @@
package macos
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb"
)
const NOTIFICATIONS = "notifications"
func init() {
Index.MergeCommands(ice.Commands{NOTIFICATIONS: {Name: "notifications list", Actions: CmdHashAction(), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...).SortStrR(mdb.TIME).Display("")
}}})
}

View File

@ -0,0 +1,11 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.page.Append(can, can._output, msg.Table(function(item) {
return {view: html.ITEM, _init: function(target) {
target.onclick = function(event) { can.sup.onexport.record(can.sup, item.index, ctx.INDEX, item)
can.runAction(event, mdb.REMOVE, [item.hash], function() { can.page.Remove(can, target) })
}
var ui = can.onappend.layout(can, [html.ICON, [[wiki.TITLE, mdb.TIME], wiki.CONTENT]], "", target)
can.page.Append(can, ui.icon, [{img: can.misc.PathJoin(item.icon||can.page.drawText(can, item.index, 60))}])
ui.time.innerHTML = item.time.split(lex.SP).pop().split(nfs.DF).slice(0, 2).join(nfs.DF)
ui.title.innerHTML = item.name||"", ui.content.innerHTML = item.text||""
}}
})) }})

17
src/macos/searchs.go Normal file
View File

@ -0,0 +1,17 @@
package macos
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb"
kit "shylinux.com/x/toolkits"
)
const SEARCHS = "searchs"
func init() {
Index.MergeCommands(ice.Commands{
SEARCHS: {Name: "search keyword list", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.SEARCH, "*", kit.Select("", arg, 0), "ctx,cmd,type,name,text")
}},
})
}

10
src/macos/session.go Normal file
View File

@ -0,0 +1,10 @@
package macos
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb"
)
const SESSION = "session"
func init() { Index.MergeCommands(ice.Commands{SESSION: {Actions: CmdHashAction(mdb.NAME)}}) }

View File

@ -15,3 +15,4 @@ body.black div.zone>div.list>div.zone>div.item { background-color:#09466fc2; }
body.black div.tabs div:hover { background-color:unset; color:white }
body.black div.tabs div.select { background-color:unset; color:white }
body.black select, body.black input[type=text], body.black textarea { box-shadow:4px 4px 20px 4px #626bd0; }
body.dark fieldset:not(.panel) { background-color:#061c3ceb; border-radius:10px; }