mirror of
https://github.com/lxsang/antos-frontend.git
synced 2025-07-26 18:59:45 +02:00
switch to es6 from coffeescript
This commit is contained in:
@ -1,41 +0,0 @@
|
||||
# Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
# AnTOS Web desktop is is licensed under the GNU General Public
|
||||
# License v3.0, see the LICENCE file for more information
|
||||
|
||||
# This program is free software: you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of
|
||||
# the License, or (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
#along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
class Calendar extends this.OS.GUI.BaseService
|
||||
constructor: (args) ->
|
||||
super "Calendar", args
|
||||
#@iconclass = "fa fa-commenting"
|
||||
@text = ""
|
||||
@iconclass = "fa fa-calendar"
|
||||
init: ->
|
||||
#update time each second
|
||||
@watch 1000, () =>
|
||||
now = new Date
|
||||
@text = now.toString()
|
||||
@domel.set "text", @text
|
||||
|
||||
|
||||
awake: (e) ->
|
||||
@.openDialog("CalendarDialog" )
|
||||
.then (d) ->
|
||||
console.log d
|
||||
# do nothing
|
||||
cleanup: (evt) ->
|
||||
console.log "cleanup for quit"
|
||||
# do nothing
|
||||
|
||||
this.OS.register "Calendar", Calendar
|
52
src/packages/Syslog/Calendar.js
Normal file
52
src/packages/Syslog/Calendar.js
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
// License v3.0, see the LICENCE file for more information
|
||||
|
||||
// This program is free software: you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
//along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
class Calendar extends this.OS.GUI.BaseService {
|
||||
constructor(args) {
|
||||
super("Calendar", args);
|
||||
//@iconclass = "fa fa-commenting"
|
||||
this.text = "";
|
||||
this.iconclass = "fa fa-calendar";
|
||||
}
|
||||
init() {
|
||||
//update time each second
|
||||
return this.watch(1000, () => {
|
||||
const now = new Date;
|
||||
this.text = now.toString();
|
||||
return this.domel.set("text", this.text);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
awake(e) {
|
||||
return this.openDialog("CalendarDialog" )
|
||||
.then(d => console.log(d));
|
||||
}
|
||||
// do nothing
|
||||
cleanup(evt) {
|
||||
return console.log("cleanup for quit");
|
||||
}
|
||||
}
|
||||
// do nothing
|
||||
|
||||
this.OS.register("Calendar", Calendar);
|
@ -1,6 +1,6 @@
|
||||
coffee_files = Calendar.coffee PushNotification.coffee Syslog.coffee
|
||||
module_files = Calendar.js PushNotification.js Syslog.js
|
||||
|
||||
jsfiles =
|
||||
libfiles =
|
||||
|
||||
cssfiles = main.css
|
||||
|
||||
|
@ -1,149 +0,0 @@
|
||||
# Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
# AnTOS Web desktop is is licensed under the GNU General Public
|
||||
# License v3.0, see the LICENCE file for more information
|
||||
|
||||
# This program is free software: you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of
|
||||
# the License, or (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
#along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
class PushNotification extends this.OS.GUI.BaseService
|
||||
constructor: (args) ->
|
||||
super "PushNotification", args
|
||||
@iconclass = "fa fa-bars"
|
||||
@cb = undefined
|
||||
@pending = []
|
||||
@logs = []
|
||||
@logmon = undefined
|
||||
init: ->
|
||||
@view = false
|
||||
@_gui.htmlToScheme PushNotification.scheme, @, @host
|
||||
|
||||
spin: (b) ->
|
||||
if b and @iconclass is "fa fa-bars"
|
||||
@iconclass = "fa fa-spinner fa-spin"
|
||||
@update()
|
||||
$(@_gui.workspace).css "cursor", "wait"
|
||||
else if not b and @iconclass is "fa fa-spinner fa-spin"
|
||||
@iconclass = "fa fa-bars"
|
||||
@update()
|
||||
$(@_gui.workspace).css "cursor", "auto"
|
||||
|
||||
main: ->
|
||||
@mlist = @find "notifylist"
|
||||
@mfeed = @find "notifeed"
|
||||
@nzone = @find "notifyzone"
|
||||
@fzone = @find "feedzone"
|
||||
(@find "btclear").set "onbtclick", (e) => @mlist.set "data", []
|
||||
(@find "bterrlog").set "onbtclick", (e) => @showLogReport()
|
||||
@subscribe "notification", (o) => @pushout 'INFO', o
|
||||
@subscribe "fail", (o) => @pushout 'FAIL', o
|
||||
@subscribe "error", (o) => @pushout 'ERROR', o
|
||||
@subscribe "info", (o) => @pushout 'INFO', o
|
||||
|
||||
|
||||
@subscribe "loading", (o) =>
|
||||
@pending.push o.id
|
||||
@spin true
|
||||
|
||||
@subscribe "loaded", (o) =>
|
||||
i = @pending.indexOf o.id
|
||||
@pending.splice i, 1 if i >= 0
|
||||
@spin false if @pending.length is 0
|
||||
|
||||
@nzone.set "height", "100%"
|
||||
@fzone.set "height", "100%"
|
||||
|
||||
($ @nzone).css "right", 0
|
||||
.css "top", "0"
|
||||
.css "bottom", "0"
|
||||
.hide()
|
||||
($ @fzone)
|
||||
#.css("z-index", 99999)
|
||||
.css("bottom", "0")
|
||||
.css "bottom", "0"
|
||||
.hide()
|
||||
|
||||
showLogReport: () ->
|
||||
@_gui.launch "Syslog"
|
||||
|
||||
addLog: (s, o) ->
|
||||
logtime = new Date()
|
||||
log = {
|
||||
type: s,
|
||||
name: o.name,
|
||||
text: "#{o.data.m}",
|
||||
id: o.id,
|
||||
icon: o.data.icon,
|
||||
iconclass: o.data.iconclass,
|
||||
error: o.data.e,
|
||||
time: logtime,
|
||||
closable: true,
|
||||
tag: "afx-bug-list-item"
|
||||
}
|
||||
if @logmon
|
||||
@logmon.addLog log
|
||||
else
|
||||
@logs.push log
|
||||
|
||||
pushout: (s, o) ->
|
||||
d = {
|
||||
text: "[#{s}] #{o.name} (#{o.id}): #{o.data.m}",
|
||||
icon: o.data.icon,
|
||||
iconclass: o.data.iconclass,
|
||||
closable: true
|
||||
}
|
||||
@addLog s, o unless s is "INFO"
|
||||
@mlist.unshift d
|
||||
@notifeed d
|
||||
|
||||
notifeed: (d) ->
|
||||
@mfeed.unshift d, true
|
||||
($ @fzone).show()
|
||||
timer = setTimeout () =>
|
||||
@mfeed.remove d.domel
|
||||
($ @fzone).hide() if @mfeed.get("data").length is 0
|
||||
clearTimeout timer
|
||||
, 3000
|
||||
|
||||
awake: (evt) ->
|
||||
if @view then ($ @nzone).hide() else ($ @nzone).show()
|
||||
@view = not @view
|
||||
if not @cb
|
||||
@cb = (e) =>
|
||||
if not ($ e.target).closest($ @nzone).length and not ($ e.target).closest(evt.data.item).length
|
||||
($ @nzone).hide()
|
||||
$(document).unbind "click", @cb
|
||||
@view = not @view
|
||||
if @view
|
||||
$(document).on "click", @cb
|
||||
else
|
||||
$(document).unbind "click", @cb
|
||||
|
||||
cleanup: (evt) ->
|
||||
# do nothing
|
||||
PushNotification.scheme = """
|
||||
<div>
|
||||
<afx-overlay data-id = "notifyzone" width = "250px">
|
||||
<afx-hbox data-height="30">
|
||||
<afx-button text = "__(Clear all)" data-id = "btclear" ></afx-button>
|
||||
<afx-button iconclass = "fa fa-bug" data-id = "bterrlog" data-width = "25"></afx-button>
|
||||
</afx-hbox>
|
||||
<afx-list-view data-id="notifylist"></afx-list-view>
|
||||
</afx-overlay>
|
||||
<afx-overlay data-id = "feedzone" width = "250">
|
||||
<afx-list-view data-id = "notifeed">
|
||||
</afx-list-view>
|
||||
</afx-overlay>
|
||||
</div>
|
||||
"""
|
||||
this.OS.register "PushNotification", PushNotification
|
175
src/packages/Syslog/PushNotification.js
Normal file
175
src/packages/Syslog/PushNotification.js
Normal file
@ -0,0 +1,175 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
// License v3.0, see the LICENCE file for more information
|
||||
|
||||
// This program is free software: you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
//along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
class PushNotification extends this.OS.GUI.BaseService {
|
||||
constructor(args) {
|
||||
super("PushNotification", args);
|
||||
this.iconclass = "fa fa-bars";
|
||||
this.cb = undefined;
|
||||
this.pending = [];
|
||||
this.logs = [];
|
||||
this.logmon = undefined;
|
||||
}
|
||||
init() {
|
||||
this.view = false;
|
||||
return this._gui.htmlToScheme(PushNotification.scheme, this, this.host);
|
||||
}
|
||||
|
||||
spin(b) {
|
||||
if (b && (this.iconclass === "fa fa-bars")) {
|
||||
this.iconclass = "fa fa-spinner fa-spin";
|
||||
this.update();
|
||||
return $(this._gui.workspace).css("cursor", "wait");
|
||||
} else if (!b && (this.iconclass === "fa fa-spinner fa-spin")) {
|
||||
this.iconclass = "fa fa-bars";
|
||||
this.update();
|
||||
return $(this._gui.workspace).css("cursor", "auto");
|
||||
}
|
||||
}
|
||||
|
||||
main() {
|
||||
this.mlist = this.find("notifylist");
|
||||
this.mfeed = this.find("notifeed");
|
||||
this.nzone = this.find("notifyzone");
|
||||
this.fzone = this.find("feedzone");
|
||||
(this.find("btclear")).set("onbtclick", e => this.mlist.set("data", []));
|
||||
(this.find("bterrlog")).set("onbtclick", e => this.showLogReport());
|
||||
this.subscribe("notification", o => this.pushout('INFO', o));
|
||||
this.subscribe("fail", o => this.pushout('FAIL', o));
|
||||
this.subscribe("error", o => this.pushout('ERROR', o));
|
||||
this.subscribe("info", o => this.pushout('INFO', o));
|
||||
|
||||
|
||||
this.subscribe("loading", o => {
|
||||
this.pending.push(o.id);
|
||||
return this.spin(true);
|
||||
});
|
||||
|
||||
this.subscribe("loaded", o => {
|
||||
const i = this.pending.indexOf(o.id);
|
||||
if (i >= 0) { this.pending.splice(i, 1); }
|
||||
if (this.pending.length === 0) { return this.spin(false); }
|
||||
});
|
||||
|
||||
this.nzone.set("height", "100%");
|
||||
this.fzone.set("height", "100%");
|
||||
|
||||
($(this.nzone)).css("right", 0)
|
||||
.css("top", "0")
|
||||
.css("bottom", "0")
|
||||
.hide();
|
||||
return ($(this.fzone))
|
||||
//.css("z-index", 99999)
|
||||
.css("bottom", "0")
|
||||
.css("bottom", "0")
|
||||
.hide();
|
||||
}
|
||||
|
||||
showLogReport() {
|
||||
return this._gui.launch("Syslog");
|
||||
}
|
||||
|
||||
addLog(s, o) {
|
||||
const logtime = new Date();
|
||||
const log = {
|
||||
type: s,
|
||||
name: o.name,
|
||||
text: `${o.data.m}`,
|
||||
id: o.id,
|
||||
icon: o.data.icon,
|
||||
iconclass: o.data.iconclass,
|
||||
error: o.data.e,
|
||||
time: logtime,
|
||||
closable: true,
|
||||
tag: "afx-bug-list-item"
|
||||
};
|
||||
if (this.logmon) {
|
||||
return this.logmon.addLog(log);
|
||||
} else {
|
||||
return this.logs.push(log);
|
||||
}
|
||||
}
|
||||
|
||||
pushout(s, o) {
|
||||
const d = {
|
||||
text: `[${s}] ${o.name} (${o.id}): ${o.data.m}`,
|
||||
icon: o.data.icon,
|
||||
iconclass: o.data.iconclass,
|
||||
closable: true
|
||||
};
|
||||
if (s !== "INFO") { this.addLog(s, o); }
|
||||
this.mlist.unshift(d);
|
||||
return this.notifeed(d);
|
||||
}
|
||||
|
||||
notifeed(d) {
|
||||
let timer;
|
||||
this.mfeed.unshift(d, true);
|
||||
($(this.fzone)).show();
|
||||
return timer = setTimeout(() => {
|
||||
this.mfeed.remove(d.domel);
|
||||
if (this.mfeed.get("data").length === 0) { ($(this.fzone)).hide(); }
|
||||
return clearTimeout(timer);
|
||||
}
|
||||
, 3000);
|
||||
}
|
||||
|
||||
awake(evt) {
|
||||
if (this.view) { ($(this.nzone)).hide(); } else { ($(this.nzone)).show(); }
|
||||
this.view = !this.view;
|
||||
if (!this.cb) {
|
||||
this.cb = e => {
|
||||
if (!($(e.target)).closest($(this.nzone)).length && !($(e.target)).closest(evt.data.item).length) {
|
||||
($(this.nzone)).hide();
|
||||
$(document).unbind("click", this.cb);
|
||||
return this.view = !this.view;
|
||||
}
|
||||
};
|
||||
}
|
||||
if (this.view) {
|
||||
return $(document).on("click", this.cb);
|
||||
} else {
|
||||
return $(document).unbind("click", this.cb);
|
||||
}
|
||||
}
|
||||
|
||||
cleanup(evt) {}
|
||||
}
|
||||
// do nothing
|
||||
PushNotification.scheme = `\
|
||||
<div>
|
||||
<afx-overlay data-id = "notifyzone" width = "250px">
|
||||
<afx-hbox data-height="30">
|
||||
<afx-button text = "__(Clear all)" data-id = "btclear" ></afx-button>
|
||||
<afx-button iconclass = "fa fa-bug" data-id = "bterrlog" data-width = "25"></afx-button>
|
||||
</afx-hbox>
|
||||
<afx-list-view data-id="notifylist"></afx-list-view>
|
||||
</afx-overlay>
|
||||
<afx-overlay data-id = "feedzone" width = "250">
|
||||
<afx-list-view data-id = "notifeed">
|
||||
</afx-list-view>
|
||||
</afx-overlay>
|
||||
</div>\
|
||||
`;
|
||||
this.OS.register("PushNotification", PushNotification);
|
@ -1,105 +0,0 @@
|
||||
Ant = this
|
||||
|
||||
class BugListItemTag extends this.OS.GUI.tag["afx-list-item-proto"]
|
||||
constructor: (r, o) ->
|
||||
super r, o
|
||||
|
||||
__data__: (v) ->
|
||||
return unless v
|
||||
@refs.error.set "text", v.text
|
||||
@refs.time.set "text", v.time
|
||||
@refs.error.set "icon", v.icon if v.icon
|
||||
if not v.icon
|
||||
@refs.error.set "iconclass", if v.iconclass then v.iconclass else "fa fa-bug"
|
||||
@set "closable", v.closable
|
||||
|
||||
__selected: (v) ->
|
||||
@get("data").selected = v
|
||||
|
||||
|
||||
itemlayout: () ->
|
||||
{ el: "div", children: [
|
||||
{ el: "afx-label", ref: "error", class: "afx-bug-list-item-error" },
|
||||
{ el: "afx-label", ref: "time", class: "afx-bug-list-item-time" }
|
||||
|
||||
] }
|
||||
|
||||
|
||||
this.OS.GUI.define "afx-bug-list-item", BugListItemTag
|
||||
|
||||
class Syslog extends this.OS.GUI.BaseApplication
|
||||
constructor: (args) ->
|
||||
super "Syslog", args
|
||||
|
||||
main: () ->
|
||||
@loglist = @find "loglist"
|
||||
@logdetail = @find "logdetail"
|
||||
|
||||
@_gui.pushService "Syslog/PushNotification"
|
||||
.then (srv) =>
|
||||
@srv = srv
|
||||
@loglist.set "data", @srv.logs if @srv and @srv.logs
|
||||
@srv.logmon = @
|
||||
.catch (e) =>
|
||||
@error __("Unable to load push notification service"), e
|
||||
@quit()
|
||||
|
||||
$(@find("txturi")).val Ant.OS.setting.system.error_report
|
||||
@loglist.set "onlistselect", (e) =>
|
||||
data = e.data.item.get("data") if e and e.data
|
||||
return unless data
|
||||
stacktrace = "None"
|
||||
stacktrace = data.error.stack if data.error
|
||||
$(@logdetail).text Syslog.template.format(
|
||||
data.text,
|
||||
data.type,
|
||||
data.time,
|
||||
data.name,
|
||||
data.id,
|
||||
stacktrace
|
||||
)
|
||||
@loglist.set "onitemclose", (e) =>
|
||||
el = e.data.item if e and e.data
|
||||
return true unless el
|
||||
data = el.get "data"
|
||||
console.log data
|
||||
return true unless data.selected
|
||||
$(@logdetail).text("")
|
||||
return true
|
||||
|
||||
@find("btnreport").set "onbtclick", (e) =>
|
||||
uri = $(@find("txturi")).val()
|
||||
return if uri is ""
|
||||
el = @loglist.get "selectedItem"
|
||||
return unless el
|
||||
data = el.get("data")
|
||||
return unless data
|
||||
Ant.OS.API.post uri, data
|
||||
.then (d) =>
|
||||
@notify __("Error reported")
|
||||
.catch (e) =>
|
||||
@notify __("Unable to report error: {0}", e.toString())
|
||||
|
||||
@find("btclean").set "onbtclick", (e) =>
|
||||
return unless @srv
|
||||
@srv.logs = []
|
||||
@loglist.set "data", @srv.logs
|
||||
$(@logdetail).text("")
|
||||
|
||||
addLog: (log) ->
|
||||
@loglist.push log
|
||||
|
||||
cleanup: () ->
|
||||
@srv.logmon = undefined if @srv
|
||||
|
||||
Syslog.template = """
|
||||
{0}
|
||||
Log type: {1}
|
||||
Log time: {2}
|
||||
Process: {3} ({4})
|
||||
detail:
|
||||
|
||||
{5}
|
||||
"""
|
||||
Syslog.singleton = true
|
||||
this.OS.register "Syslog", Syslog
|
132
src/packages/Syslog/Syslog.js
Normal file
132
src/packages/Syslog/Syslog.js
Normal file
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
Ant = this
|
||||
|
||||
class BugListItemTag extends this.OS.GUI.tag["afx-list-item-proto"] {
|
||||
constructor(r, o) {
|
||||
super(r, o);
|
||||
}
|
||||
|
||||
__data__(v) {
|
||||
if (!v) { return; }
|
||||
this.refs.error.set("text", v.text);
|
||||
this.refs.time.set("text", v.time);
|
||||
if (v.icon) { this.refs.error.set("icon", v.icon); }
|
||||
if (!v.icon) {
|
||||
this.refs.error.set("iconclass", v.iconclass ? v.iconclass : "fa fa-bug");
|
||||
}
|
||||
return this.set("closable", v.closable);
|
||||
}
|
||||
|
||||
__selected(v) {
|
||||
return this.get("data").selected = v;
|
||||
}
|
||||
|
||||
|
||||
itemlayout() {
|
||||
return {
|
||||
el: "div", children: [
|
||||
{ el: "afx-label", ref: "error", class: "afx-bug-list-item-error" },
|
||||
{ el: "afx-label", ref: "time", class: "afx-bug-list-item-time" }
|
||||
]
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.OS.GUI.define("afx-bug-list-item", BugListItemTag);
|
||||
|
||||
class Syslog extends this.OS.GUI.BaseApplication {
|
||||
constructor(args) {
|
||||
super("Syslog", args);
|
||||
}
|
||||
|
||||
main() {
|
||||
this.loglist = this.find("loglist");
|
||||
this.logdetail = this.find("logdetail");
|
||||
|
||||
this._gui.pushService("Syslog/PushNotification")
|
||||
.then(srv => {
|
||||
this.srv = srv;
|
||||
if (this.srv && this.srv.logs) { this.loglist.set("data", this.srv.logs); }
|
||||
return this.srv.logmon = this;
|
||||
}).catch(e => {
|
||||
this.error(__("Unable to load push notification service"), e);
|
||||
return this.quit();
|
||||
});
|
||||
|
||||
$(this.find("txturi")).val(Ant.OS.setting.system.error_report);
|
||||
this.loglist.set("onlistselect", e => {
|
||||
let data;
|
||||
if (e && e.data) { data = e.data.item.get("data"); }
|
||||
if (!data) { return; }
|
||||
let stacktrace = "None";
|
||||
if (data.error) { stacktrace = data.error.stack; }
|
||||
return $(this.logdetail).text(Syslog.template.format(
|
||||
data.text,
|
||||
data.type,
|
||||
data.time,
|
||||
data.name,
|
||||
data.id,
|
||||
stacktrace
|
||||
)
|
||||
);
|
||||
});
|
||||
this.loglist.set("onitemclose", e => {
|
||||
let el;
|
||||
if (e && e.data) { el = e.data.item; }
|
||||
if (!el) { return true; }
|
||||
const data = el.get("data");
|
||||
console.log(data);
|
||||
if (!data.selected) { return true; }
|
||||
$(this.logdetail).text("");
|
||||
return true;
|
||||
});
|
||||
|
||||
this.find("btnreport").set("onbtclick", e => {
|
||||
const uri = $(this.find("txturi")).val();
|
||||
if (uri === "") { return; }
|
||||
const el = this.loglist.get("selectedItem");
|
||||
if (!el) { return; }
|
||||
const data = el.get("data");
|
||||
if (!data) { return; }
|
||||
return Ant.OS.API.post(uri, data)
|
||||
.then(d => {
|
||||
return this.notify(__("Error reported"));
|
||||
}).catch(e => {
|
||||
return this.notify(__("Unable to report error: {0}", e.toString()));
|
||||
});
|
||||
});
|
||||
|
||||
return this.find("btclean").set("onbtclick", e => {
|
||||
if (!this.srv) { return; }
|
||||
this.srv.logs = [];
|
||||
this.loglist.set("data", this.srv.logs);
|
||||
return $(this.logdetail).text("");
|
||||
});
|
||||
}
|
||||
|
||||
addLog(log) {
|
||||
return this.loglist.push(log);
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
if (this.srv) { return this.srv.logmon = undefined; }
|
||||
}
|
||||
}
|
||||
|
||||
Syslog.template = `\
|
||||
{0}
|
||||
Log type: {1}
|
||||
Log time: {2}
|
||||
Process: {3} ({4})
|
||||
detail:
|
||||
|
||||
{5}\
|
||||
`;
|
||||
Syslog.singleton = true;
|
||||
this.OS.register("Syslog", Syslog);
|
Reference in New Issue
Block a user