mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2024-11-14 01:18:24 +01:00
Compare commits
No commits in common. "4a0a611acc3124b8875928acece87c8af1d16334" and "7cbd4ce979aedf8ad6b12cc32f0cece3a495eb1f" have entirely different histories.
4a0a611acc
...
7cbd4ce979
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
Binary file not shown.
@ -5,7 +5,4 @@ It's built on top of google-diff-match-patch library. That lib handles the hard
|
||||
|
||||
Github page: [https://github.com/ace-diff/ace-diff](https://github.com/ace-diff/ace-diff).
|
||||
|
||||
The ACE diff depends on the ACECore package.
|
||||
|
||||
## Change logs
|
||||
- v0.1.1-a: add dependencies
|
||||
The ACE diff depends on the ACECore package.
|
Binary file not shown.
Binary file not shown.
@ -27,10 +27,8 @@
|
||||
"require":["ts"],
|
||||
"jobs": [
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -59,7 +59,8 @@ namespace OS {
|
||||
});
|
||||
}
|
||||
|
||||
protected _wr(t: string): Promise<any> {
|
||||
protected _wr(t: string, d: any): Promise<any> {
|
||||
this.cache = d;
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
resolve({
|
||||
|
@ -817,7 +817,7 @@ namespace OS {
|
||||
dataid: "recent",
|
||||
nodes: recent,
|
||||
onchildselect: (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>,
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>,
|
||||
r: Antedit
|
||||
) => {
|
||||
const handle = e.data.item.data.text.asFileHandle();
|
||||
@ -849,7 +849,7 @@ namespace OS {
|
||||
},
|
||||
],
|
||||
onchildselect: (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>,
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>,
|
||||
r: Antedit
|
||||
) => {
|
||||
return this.menuAction(e.data.item.data.dataid, r);
|
||||
@ -866,9 +866,9 @@ namespace OS {
|
||||
* @memberof Antedit
|
||||
*/
|
||||
private ctxFileMenuHandle(
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>
|
||||
): void {
|
||||
const el = e.data.item;
|
||||
const el = e.data.item as GUI.tag.MenuEntryTag;
|
||||
if (!el) {
|
||||
return;
|
||||
}
|
||||
@ -1150,7 +1150,7 @@ namespace OS {
|
||||
}
|
||||
],
|
||||
onchildselect: (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>,
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>,
|
||||
r: EditorFileHandle
|
||||
) => {
|
||||
switch (e.data.item.data.dataid) {
|
||||
|
Binary file not shown.
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
@ -244,7 +244,7 @@ namespace OS {
|
||||
{
|
||||
text: __("Change theme"),
|
||||
onmenuselect: async (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>
|
||||
) => {
|
||||
try{
|
||||
const themes = this.eum.active.getThemes();
|
||||
@ -263,7 +263,7 @@ namespace OS {
|
||||
{
|
||||
text: __("Change language mode"),
|
||||
onmenuselect: async (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>
|
||||
) => {
|
||||
try{
|
||||
const modes = this.eum.active.getModes().map(v => {
|
||||
@ -284,7 +284,7 @@ namespace OS {
|
||||
text: __("Build with AntOSDK"),
|
||||
shortcut: " (CTRL-ALT-B)",
|
||||
onmenuselect: async (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>
|
||||
) => {
|
||||
try{
|
||||
this.build();
|
||||
@ -542,7 +542,7 @@ namespace OS {
|
||||
dataid: "recent",
|
||||
nodes: recent,
|
||||
onchildselect: (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>,
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>,
|
||||
r: CodePad
|
||||
) => {
|
||||
const handle = e.data.item.data.text.asFileHandle();
|
||||
@ -574,7 +574,7 @@ namespace OS {
|
||||
},
|
||||
],
|
||||
onchildselect: (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>,
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>,
|
||||
r: CodePad
|
||||
) => {
|
||||
return this.menuAction(e.data.item.data.dataid, r);
|
||||
@ -591,9 +591,9 @@ namespace OS {
|
||||
* @memberof CodePad
|
||||
*/
|
||||
private ctxFileMenuHandle(
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>
|
||||
): void {
|
||||
const el = e.data.item;
|
||||
const el = e.data.item as GUI.tag.MenuEntryTag;
|
||||
if (!el) {
|
||||
return;
|
||||
}
|
||||
@ -845,7 +845,7 @@ namespace OS {
|
||||
}
|
||||
],
|
||||
onchildselect: (
|
||||
e: GUI.TagEventType<GUI.tag.StackMenuEventData>,
|
||||
e: GUI.TagEventType<GUI.tag.MenuEventData>,
|
||||
r: EditorFileHandle
|
||||
) => {
|
||||
switch (e.data.item.data.dataid) {
|
||||
|
Binary file not shown.
@ -33,10 +33,8 @@
|
||||
],
|
||||
"jobs": [
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
Binary file not shown.
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
@ -17,10 +17,8 @@
|
||||
"data": ["build","build/debug","build/release"]
|
||||
},
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
@ -48,4 +48,8 @@ afx-app-window[data-id="ServerLogClient"] afx-hbox[data-id="top-header"] afx-lab
|
||||
text-align: right;
|
||||
padding-top: 5px;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="ServerLogClient"] afx-hbox[data-id="top-header"] afx-label.field-label i.label-text{
|
||||
font-weight: bold;
|
||||
}
|
@ -1 +1 @@
|
||||
var OS;!function(t){let e;!function(t){class e extends t.BaseApplication{constructor(t){super("ServerLogClient",t)}check(t){return!(!this.filter.record||!this.filter[t.severity_label]||this.filter.pattern&&!t.message.match(this.filter.pattern))}log(t){if(this.check(t)){if(this.logs.length>=this.filter.max_log){let t=this.logs.shift();$(t.el).remove()}t.el=$("<p />").addClass(t.severity_label),t.el.text(t.message),$(this.log_container).append(t.el),this.log_container.scrollTop=this.log_container.scrollHeight,this.logs.push(t)}}openSession(){this.sub=new Antunnel.Subscriber(this.setting.topic),this.sub.onopen=()=>{console.log("Subscribed")},this.sub.onerror=t=>{this.error(__("Unable to connect to: syslog"),t),this.sub=void 0},this.sub.onmessage=t=>{if(t.data){let e=JSON.parse(new TextDecoder("utf-8").decode(t.data));e.priority&&(e.priority=parseInt(e.priority)),e.severity&&(e.severity=parseInt(e.severity)),e.facility&&(e.facility=parseInt(e.facility)),this.log(e)}},this.sub.onclose=()=>{this.sub=void 0,this.notify(__("Connection closed")),this.quit(!0)},this.tunnel.subscribe(this.sub)}cleanup(){this.sub&&this.sub.close()}checklib(){Antunnel.tunnel?(this.tunnel=Antunnel.tunnel,this.openSession()):this._gui.pushService("Antunnel/AntunnelService").then(t=>{let e=this.systemsetting.system.tunnel_uri;e||(this.error(__("Unable to connect to the tunnel")),this.quit(!0)),Antunnel.init(e).then(t=>{this.notify(__("Tunnel now connected to the server at: {0}",e)),this.tunnel=Antunnel.tunnel,this.openSession()}).catch(t=>{Antunnel.tunnel&&(Antunnel.tunnel.close(),this.error(__("Unable to connect to the tunnel: {0}",t.toString()),t),this.quit(!0))})}).catch(t=>{this.error(__("Unable to run Antunnel service: {0}",t.toString()),t),this.quit(!0)})}main(){if(!Antunnel)return this.error(__("Antunnel library is not available")),void this.quit(!0);this.log_container=this.find("log-container"),this.logs=[],$(this.log_container).css("overflow-y","auto");let t=this.find("menu-level");t.onmenuselect=t=>{let e=t.data.item.data;this.filter[e.severity]=e.checked,console.log(this.filter)},t.items=[{text:__("Debug"),switch:!0,checked:!0,severity:"debug"},{text:__("Notice"),switch:!0,checked:!0,severity:"notice"},{text:__("Info"),switch:!0,checked:!0,severity:"info"},{text:__("Warning"),switch:!0,checked:!0,severity:"warning"},{text:__("Error"),switch:!0,checked:!0,severity:"err"},{text:__("Critical"),switch:!0,checked:!0,severity:"crit"},{text:__("Alert"),switch:!0,checked:!0,severity:"alert"},{text:__("Emergency"),switch:!0,checked:!0,severity:"emerg"}],this.filter={max_log:500,err:!0,emerg:!0,debug:!0,info:!0,notice:!0,warning:!0,crit:!0,alert:!0,pattern:void 0,record:!0};let e=this.find("txt-n-log");e.value=this.filter.max_log.toString(),$(e).on("keyup",t=>{if("Enter"===t.key){let t=parseInt(e.value);if(!isNaN(t))for(this.filter.max_log=t;this.logs.length>t;)this.logs.shift().el.remove();e.value=this.filter.max_log.toString()}}),this.find("btn-clear").onbtclick=()=>{this.logs=[],$(this.log_container).empty()};let i=this.find("txt-reg");$(i).on("keyup",t=>{if("Enter"===t.key){if(""===i.value.trim())return this.filter.pattern=void 0;try{this.filter.pattern=new RegExp(i.value,"g")}catch(t){this.error(__("Invalid regular expression: {0}",t.toString()),t),this.filter.pattern=void 0,i.value=""}}}),this.find("sw-record").onswchange=t=>{this.filter.record=t.data},this.setting.topic?this.checklib():this.openDialog("PromptDialog",{title:__("Enter topic name"),label:__("Please enter Antunnel topic name")}).then(t=>{this.setting.topic=t,this.checklib()})}}t.ServerLogClient=e,e.dependencies=["pkg://Antunnel/main.js"],e.singleton=!0}(e=t.application||(t.application={}))}(OS||(OS={}));
|
||||
var OS;!function(t){let e;!function(t){class e extends t.BaseApplication{constructor(t){super("ServerLogClient",t)}check(t){return!(!this.filter.record||!this.filter[t.severity_label]||this.filter.pattern&&!t.message.match(this.filter.pattern))}log(t){if(this.check(t)){if(this.logs.length>=this.filter.max_log){let t=this.logs.shift();$(t.el).remove()}t.el=$("<p />").addClass(t.severity_label),t.el.text(t.message),$(this.log_container).append(t.el),this.log_container.scrollTop=this.log_container.scrollHeight,this.logs.push(t)}}openSession(){this.sub=new Antunnel.Subscriber(this.setting.topic),this.sub.onopen=()=>{console.log("Subscribed")},this.sub.onerror=t=>{this.error(__("Unable to connect to: syslog"),t),this.sub=void 0},this.sub.onmessage=t=>{if(t.data){let e=JSON.parse(new TextDecoder("utf-8").decode(t.data));e.priority&&(e.priority=parseInt(e.priority)),e.severity&&(e.severity=parseInt(e.severity)),e.facility&&(e.facility=parseInt(e.facility)),this.log(e)}},this.sub.onclose=()=>{this.sub=void 0,this.notify(__("Connection closed")),this.quit(!0)},this.tunnel.subscribe(this.sub)}cleanup(){this.sub&&this.sub.close()}checklib(){Antunnel.tunnel?(this.tunnel=Antunnel.tunnel,this.openSession()):this._gui.pushService("Antunnel/AntunnelService").then(t=>{let e=this.systemsetting.system.tunnel_uri;e||(this.error(__("Unable to connect to the tunnel")),this.quit(!0)),Antunnel.init(e).then(t=>{this.notify(__("Tunnel now connected to the server at: {0}",e)),this.tunnel=Antunnel.tunnel,this.openSession()}).catch(t=>{Antunnel.tunnel&&(Antunnel.tunnel.close(),this.error(__("Unable to connect to the tunnel: {0}",t.toString()),t),this.quit(!0))})}).catch(t=>{this.error(__("Unable to run Antunnel service: {0}",t.toString()),t),this.quit(!0)})}main(){if(!Antunnel)return this.error(__("Antunnel library is not available")),void this.quit(!0);this.log_container=this.find("log-container"),this.logs=[],$(this.log_container).css("overflow-y","auto"),this.find("menu-level").items=[{text:__("Default level"),nodes:[{text:__("Debug"),switch:!0,checked:!0,severity:"debug"},{text:__("Notice"),switch:!0,checked:!0,severity:"notice"},{text:__("Info"),switch:!0,checked:!0,severity:"info"},{text:__("Warning"),switch:!0,checked:!0,severity:"warning"},{text:__("Error"),switch:!0,checked:!0,severity:"err"},{text:__("Critical"),switch:!0,checked:!0,severity:"crit"},{text:__("Alert"),switch:!0,checked:!0,severity:"alert"},{text:__("Emergency"),switch:!0,checked:!0,severity:"emerg"}],onchildselect:t=>{let e=t.data.item.data;this.filter[e.severity]=e.checked}}],this.filter={max_log:500,err:!0,emerg:!0,debug:!0,info:!0,notice:!0,warning:!0,crit:!0,alert:!0,pattern:void 0,record:!0};let t=this.find("txt-n-log");t.value=this.filter.max_log.toString(),$(t).on("keyup",e=>{if("Enter"===e.key){let e=parseInt(t.value);if(!isNaN(e))for(this.filter.max_log=e;this.logs.length>e;)this.logs.shift().el.remove();t.value=this.filter.max_log.toString()}}),this.find("btn-clear").onbtclick=()=>{this.logs=[],$(this.log_container).empty()};let e=this.find("txt-reg");$(e).on("keyup",t=>{if("Enter"===t.key){if(""===e.value.trim())return this.filter.pattern=void 0;try{this.filter.pattern=new RegExp(e.value,"g")}catch(t){this.error(__("Invalid regular expression: {0}",t.toString()),t),this.filter.pattern=void 0,e.value=""}}}),this.find("sw-record").onswchange=t=>{this.filter.record=t.data},this.setting.topic?this.checklib():this.openDialog("PromptDialog",{title:__("Enter topic name"),label:__("Please enter Antunnel topic name")}).then(t=>{this.setting.topic=t,this.checklib()})}}t.ServerLogClient=e,e.dependencies=["pkg://Antunnel/main.js"],e.singleton=!0}(e=t.application||(t.application={}))}(OS||(OS={}));
|
@ -1,15 +1,17 @@
|
||||
<afx-app-window apptitle="__(Server system log)" width="600" height="400" data-id="ServerLogClient">
|
||||
<afx-hbox padding="5">
|
||||
<afx-stack-menu data-id="menu-level" data-width="content"></afx-stack-menu>
|
||||
<afx-vbox>
|
||||
<afx-hbox data-height="45" data-id="top-header">
|
||||
<afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button>
|
||||
<afx-input type="text" data-id="txt-reg"label = "__(Filter)" ></afx-input>
|
||||
<afx-input type="text" label="__(Keep)" data-width="50" data-id="txt-n-log"></afx-input>
|
||||
<afx-label class="field-label" text="__(Record)" data-width="content"></afx-label>
|
||||
<afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch>
|
||||
</afx-hbox>
|
||||
<div data-id="log-container"></div>
|
||||
</afx-vbox>
|
||||
</afx-hbox>
|
||||
<afx-vbox >
|
||||
<afx-hbox data-height="35" data-id="top-header">
|
||||
<afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button>
|
||||
<afx-menu data-id="menu-level" data-width="content"></afx-menu>
|
||||
<afx-label class="field-label" text="__(Filter)" data-width="content"></afx-label>
|
||||
<input type="text" data-id="txt-reg"></input>
|
||||
<afx-label class="field-label" text="__(Keep up to)" data-width="content"></afx-label>
|
||||
<input type="text" data-width="50" data-id="txt-n-log"></input>
|
||||
<afx-label class="field-label" text="__(Record)" data-width="content"></afx-label>
|
||||
<afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch>
|
||||
</afx-hbox>
|
||||
<div data-id="log-container">
|
||||
|
||||
</div>
|
||||
</afx-vbox>
|
||||
</afx-app-window>
|
Binary file not shown.
@ -48,4 +48,8 @@ afx-app-window[data-id="ServerLogClient"] afx-hbox[data-id="top-header"] afx-lab
|
||||
text-align: right;
|
||||
padding-top: 5px;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="ServerLogClient"] afx-hbox[data-id="top-header"] afx-label.field-label i.label-text{
|
||||
font-weight: bold;
|
||||
}
|
@ -186,60 +186,64 @@ namespace OS {
|
||||
this.logs = [];
|
||||
$(this.log_container)
|
||||
.css("overflow-y", "auto");
|
||||
let menu = this.find("menu-level") as GUI.tag.StackMenuTag;
|
||||
menu.onmenuselect = (e) => {
|
||||
let data = e.data.item.data;
|
||||
this.filter[data.severity] = data.checked;
|
||||
console.log(this.filter);
|
||||
}
|
||||
let menu = this.find("menu-level") as GUI.tag.MenuTag;
|
||||
menu.items = [
|
||||
{
|
||||
text: __("Debug"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "debug"
|
||||
},
|
||||
{
|
||||
text: __("Notice"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "notice"
|
||||
},
|
||||
{
|
||||
text: __("Info"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "info"
|
||||
},
|
||||
{
|
||||
text: __("Warning"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "warning"
|
||||
},
|
||||
{
|
||||
text: __("Error"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "err"
|
||||
},
|
||||
{
|
||||
text: __("Critical"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "crit"
|
||||
},
|
||||
{
|
||||
text: __("Alert"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "alert"
|
||||
},
|
||||
{
|
||||
text: __("Emergency"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "emerg"
|
||||
text: __("Default level"),
|
||||
nodes: [
|
||||
{
|
||||
text: __("Debug"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "debug"
|
||||
},
|
||||
{
|
||||
text: __("Notice"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "notice"
|
||||
},
|
||||
{
|
||||
text: __("Info"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "info"
|
||||
},
|
||||
{
|
||||
text: __("Warning"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "warning"
|
||||
},
|
||||
{
|
||||
text: __("Error"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "err"
|
||||
},
|
||||
{
|
||||
text: __("Critical"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "crit"
|
||||
},
|
||||
{
|
||||
text: __("Alert"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "alert"
|
||||
},
|
||||
{
|
||||
text: __("Emergency"),
|
||||
switch: true,
|
||||
checked: true,
|
||||
severity: "emerg"
|
||||
}
|
||||
],
|
||||
onchildselect: (e) => {
|
||||
let data = e.data.item.data;
|
||||
this.filter[data.severity] = data.checked;
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
@ -1,15 +1,17 @@
|
||||
<afx-app-window apptitle="__(Server system log)" width="600" height="400" data-id="ServerLogClient">
|
||||
<afx-hbox padding="5">
|
||||
<afx-stack-menu data-id="menu-level" data-width="content"></afx-stack-menu>
|
||||
<afx-vbox>
|
||||
<afx-hbox data-height="45" data-id="top-header">
|
||||
<afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button>
|
||||
<afx-input type="text" data-id="txt-reg"label = "__(Filter)" ></afx-input>
|
||||
<afx-input type="text" label="__(Keep)" data-width="50" data-id="txt-n-log"></afx-input>
|
||||
<afx-label class="field-label" text="__(Record)" data-width="content"></afx-label>
|
||||
<afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch>
|
||||
</afx-hbox>
|
||||
<div data-id="log-container"></div>
|
||||
</afx-vbox>
|
||||
</afx-hbox>
|
||||
<afx-vbox >
|
||||
<afx-hbox data-height="35" data-id="top-header">
|
||||
<afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button>
|
||||
<afx-menu data-id="menu-level" data-width="content"></afx-menu>
|
||||
<afx-label class="field-label" text="__(Filter)" data-width="content"></afx-label>
|
||||
<input type="text" data-id="txt-reg"></input>
|
||||
<afx-label class="field-label" text="__(Keep up to)" data-width="content"></afx-label>
|
||||
<input type="text" data-width="50" data-id="txt-n-log"></input>
|
||||
<afx-label class="field-label" text="__(Record)" data-width="content"></afx-label>
|
||||
<afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch>
|
||||
</afx-hbox>
|
||||
<div data-id="log-container">
|
||||
|
||||
</div>
|
||||
</afx-vbox>
|
||||
</afx-app-window>
|
@ -17,10 +17,8 @@
|
||||
"require": ["ts"],
|
||||
"jobs":[
|
||||
{
|
||||
"name": "ts-antos-sdk",
|
||||
"data": {
|
||||
"version": "2.0.x"
|
||||
}
|
||||
"name": "ts-import",
|
||||
"data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
|
||||
},
|
||||
{
|
||||
"name": "ts-compile",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
26
build.json
26
build.json
@ -1,26 +0,0 @@
|
||||
{
|
||||
"targets" : {
|
||||
"Build all" :{
|
||||
"jobs": [
|
||||
{
|
||||
"name": "batch",
|
||||
"data": {
|
||||
"target": "release"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"Release": {
|
||||
"require": ["backend"],
|
||||
"jobs": [
|
||||
{
|
||||
"name": "lua-exec",
|
||||
"data": {
|
||||
"path": "home://workspace/antosdk-apps/release.lua",
|
||||
"params": {}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
AntOSDK: development API for AntOS based applications/projects
|
||||
|
||||
## Change logs
|
||||
- 0.1.2: add batch building support
|
||||
- 0.1.1: linux worker is renamed to backend, linux-exec job re to cmd-exec, add lua-exec job for backend lua script execution
|
||||
- 0.1.0: antOS SDK is no longer delivered in this package, it will be fetched directly from AntOS release site
|
||||
- 0.0.18: Add some public API on grid view
|
||||
|
@ -2,7 +2,6 @@
|
||||
AntOSDK: development API for AntOS based applications/projects
|
||||
|
||||
## Change logs
|
||||
- 0.1.2: add batch building support
|
||||
- 0.1.1: linux worker is renamed to backend, linux-exec job re to cmd-exec, add lua-exec job for backend lua script execution
|
||||
- 0.1.0: antOS SDK is no longer delivered in this package, it will be fetched directly from AntOS release site
|
||||
- 0.0.18: Add some public API on grid view
|
||||
|
@ -1,417 +1 @@
|
||||
|
||||
var OS;
|
||||
(function (OS) {
|
||||
let API;
|
||||
(function (API) {
|
||||
;
|
||||
class AntOSDKWorker {
|
||||
constructor(path) {
|
||||
this.worker = new Worker(path.asFileHandle().getlink());
|
||||
this.jobs = {};
|
||||
this.worker.onmessage = (e) => {
|
||||
let ret = e.data;
|
||||
let job = this.jobs[ret.id];
|
||||
if (job) {
|
||||
if (ret.type === "log") {
|
||||
if (job.logger) {
|
||||
if (ret.error)
|
||||
job.logger.error(ret.result);
|
||||
else {
|
||||
if (ret.show_time === false && job.logger.print)
|
||||
job.logger.print(ret.result);
|
||||
else
|
||||
job.logger.info(ret.result);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
job.callback(ret);
|
||||
delete this.jobs[ret.id];
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log("Unable to identify result of job", ret.id, ret);
|
||||
}
|
||||
};
|
||||
const pkgs = {};
|
||||
for (const k in OS.setting.system.packages) {
|
||||
const pkg = OS.setting.system.packages[k];
|
||||
pkgs[k] = {
|
||||
path: pkg.path,
|
||||
name: pkg.pkgname
|
||||
};
|
||||
}
|
||||
this.submit("sdk-setup", {
|
||||
REST: OS.API.REST,
|
||||
pkgs: pkgs
|
||||
});
|
||||
}
|
||||
newJobID() {
|
||||
return `job_${Math.random().toString(36).replace(".", "")}`;
|
||||
}
|
||||
exectue_job(cmd, data, root, callback, logger) {
|
||||
const id = this.newJobID();
|
||||
const job = {
|
||||
id: id,
|
||||
cmd: cmd,
|
||||
data: data,
|
||||
root: root
|
||||
};
|
||||
this.jobs[id] = {
|
||||
callback: callback,
|
||||
logger: logger
|
||||
};
|
||||
this.worker.postMessage(job);
|
||||
}
|
||||
submit(cmd, data, root, logger) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.exectue_job(cmd, data, root, (ret) => {
|
||||
if (ret.error) {
|
||||
return reject(ret.error);
|
||||
}
|
||||
resolve(ret.result);
|
||||
}, logger);
|
||||
});
|
||||
}
|
||||
terminate() {
|
||||
this.worker.terminate();
|
||||
}
|
||||
}
|
||||
class AntOSDKBuilder {
|
||||
constructor(logger, root) {
|
||||
this.root = root;
|
||||
this.logger = logger;
|
||||
if (!AntOSDKBuilder.worker) {
|
||||
AntOSDKBuilder.worker = new AntOSDKWorker("pkg://libantosdk/core/worker.js");
|
||||
}
|
||||
}
|
||||
require(mods) {
|
||||
return this.run("sdk-import", mods.map(m => `${m}.worker.js`));
|
||||
}
|
||||
compile(type, opts) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
await this.require([type]);
|
||||
const ret = await this.run(`${type}-compile`, opts);
|
||||
resolve(ret);
|
||||
}
|
||||
catch (e) {
|
||||
reject(__e(e));
|
||||
}
|
||||
});
|
||||
}
|
||||
run(job, data) {
|
||||
if (job === "sdk-run-app") {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
let app_root = data;
|
||||
if (app_root.split("://").length == 1) {
|
||||
app_root = `${this.root}/${data}`;
|
||||
}
|
||||
const v = await `${app_root}/package.json`.asFileHandle().read("json");
|
||||
v.text = v.name;
|
||||
v.path = app_root;
|
||||
v.filename = v.pkgname;
|
||||
v.type = "app";
|
||||
v.mime = "antos/app";
|
||||
if (v.icon) {
|
||||
v.icon = `${v.path}/${v.icon}`;
|
||||
}
|
||||
if (!v.iconclass && !v.icon) {
|
||||
v.iconclass = "fa fa-adn";
|
||||
}
|
||||
this.logger.info(__("Installing..."));
|
||||
OS.setting.system.packages[v.pkgname] = v;
|
||||
if (v.app) {
|
||||
this.logger.info(__("Running {0}...", v.app));
|
||||
OS.GUI.forceLaunch(v.app, []);
|
||||
}
|
||||
else {
|
||||
this.logger.error(__("{0} is not an application", v.pkgname));
|
||||
}
|
||||
return resolve(undefined);
|
||||
}
|
||||
catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (job === "batch") {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
if (!data || !data.target) {
|
||||
const err = __("No target provided for job: batch");
|
||||
this.logger.error(err);
|
||||
throw new Error(err.__());
|
||||
}
|
||||
let pwd = data.pwd;
|
||||
if (!pwd) {
|
||||
pwd = this.root;
|
||||
}
|
||||
const ret = await pwd.asFileHandle().read();
|
||||
if (ret.error) {
|
||||
this.logger.error(ret.error);
|
||||
throw new Error(ret.error);
|
||||
}
|
||||
let dirs = ret.result.filter(e => e.type === "dir");
|
||||
if (data.modules) {
|
||||
dirs = dirs.filter(e => data.modules.includes(e.filename));
|
||||
}
|
||||
for (let entry of dirs) {
|
||||
const build_file = `${entry.path}/build.json`.asFileHandle();
|
||||
try {
|
||||
await build_file.onready();
|
||||
}
|
||||
catch (e) {
|
||||
this.logger.info(__("No build.json file found in {0}, ignore this file", entry.path));
|
||||
continue;
|
||||
}
|
||||
this.logger.info(__("########### BUILDING: {0} ###########", entry.path));
|
||||
const sdk = new AntOSDKBuilder(this.logger, entry.path);
|
||||
const options = await build_file.read("json");
|
||||
if (!options.root) {
|
||||
options.root = entry.path;
|
||||
}
|
||||
await sdk.batch([data.target], options);
|
||||
}
|
||||
this.logger.info(__("########### Batch building done ###########"));
|
||||
return resolve(undefined);
|
||||
}
|
||||
catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
return AntOSDKBuilder.worker.submit(job, data, this.root, this.logger);
|
||||
}
|
||||
batch(targets, options) {
|
||||
if (options.root) {
|
||||
this.root = options.root;
|
||||
}
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
if (!options.targets) {
|
||||
reject("No target found");
|
||||
}
|
||||
for (const name of targets) {
|
||||
const target = options.targets[name];
|
||||
if (!target)
|
||||
return reject(__("No target: {0}", name));
|
||||
if (target.depend) {
|
||||
await this.batch(target.depend, options);
|
||||
}
|
||||
if (target.require) {
|
||||
await this.require(target.require);
|
||||
}
|
||||
if (this.logger)
|
||||
this.logger.info(__("### RUNNING STAGE: {0}###", name).__());
|
||||
if (target.jobs)
|
||||
for (const job of target.jobs) {
|
||||
await this.run(job.name, job.data);
|
||||
}
|
||||
}
|
||||
resolve(undefined);
|
||||
}
|
||||
catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
API.AntOSDKBuilder = AntOSDKBuilder;
|
||||
let VFS;
|
||||
(function (VFS) {
|
||||
class SDKFileHandle extends VFS.RemoteFileHandle {
|
||||
/**
|
||||
*Creates an instance of SDKFileHandle.
|
||||
* @param {string} pkg_path package path in string
|
||||
* @memberof SDKFileHandle
|
||||
*/
|
||||
constructor(pkg_path) {
|
||||
super(pkg_path);
|
||||
const path = `pkg://libantosdk/${this.genealogy.join("/")}`;
|
||||
this.setPath(path.asFileHandle().path);
|
||||
}
|
||||
}
|
||||
VFS.SDKFileHandle = SDKFileHandle;
|
||||
VFS.register("^sdk$", SDKFileHandle);
|
||||
})(VFS = API.VFS || (API.VFS = {}));
|
||||
})(API = OS.API || (OS.API = {}));
|
||||
})(OS || (OS = {}));
|
||||
|
||||
var OS;
|
||||
(function (OS) {
|
||||
let application;
|
||||
(function (application) {
|
||||
class Logger {
|
||||
/**
|
||||
* Creates an instance of Logger.
|
||||
* @param {HTMLElement} el target container
|
||||
* @memberof Logger
|
||||
*/
|
||||
constructor(el) {
|
||||
this.target = el;
|
||||
}
|
||||
/**
|
||||
* Log level info
|
||||
*
|
||||
* @param {string|FormattedString} s
|
||||
* @memberof Logger
|
||||
*/
|
||||
info(s) {
|
||||
this.log("info", s, true);
|
||||
}
|
||||
/**
|
||||
* Log level warning
|
||||
*
|
||||
* @param {string|FormattedString} s
|
||||
* @memberof Logger
|
||||
*/
|
||||
warn(s) {
|
||||
this.log("warn", s, true);
|
||||
}
|
||||
/**
|
||||
* Log level error
|
||||
*
|
||||
* @param {string|FormattedString} s
|
||||
* @memberof Logger
|
||||
*/
|
||||
error(s) {
|
||||
this.log("error", s, true);
|
||||
}
|
||||
/**
|
||||
* Log a string to target container
|
||||
*
|
||||
* @private
|
||||
* @param {string} c class name of the appended log element
|
||||
* @param {string|FormattedString} s log string
|
||||
* @param {boolean} showtime define whether the logger should insert datetime prefix
|
||||
* in the log string
|
||||
* @memberof Logger
|
||||
*/
|
||||
log(c, s, showtime) {
|
||||
let el = $("<pre></pre>")
|
||||
.attr("class", `sdk-log-${c}`);
|
||||
if (showtime) {
|
||||
let date = new Date();
|
||||
let prefix = date.getDate() + "/"
|
||||
+ (date.getMonth() + 1) + "/"
|
||||
+ date.getFullYear() + " "
|
||||
+ date.getHours() + ":"
|
||||
+ date.getMinutes() + ":"
|
||||
+ date.getSeconds();
|
||||
el.text(`[${prefix}]: ${s.__()}`);
|
||||
}
|
||||
else {
|
||||
el.text(s.__());
|
||||
}
|
||||
$(this.target).append(el);
|
||||
$(this.target).scrollTop($(this.target)[0].scrollHeight);
|
||||
}
|
||||
/**
|
||||
* Print a log message without prefix
|
||||
*
|
||||
* @param {string|FormattedString} s text to print
|
||||
* @memberof Logger
|
||||
*/
|
||||
print(s) {
|
||||
if (s.match(/warn/i)) {
|
||||
this.log("warn", s, false);
|
||||
}
|
||||
else if (s.match(/error/i)) {
|
||||
this.log("error", s, false);
|
||||
}
|
||||
else {
|
||||
this.log("info", s, false);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Empty the log container
|
||||
*
|
||||
* @memberof Logger
|
||||
*/
|
||||
clear() {
|
||||
$(this.target).empty();
|
||||
}
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @class SDKBuilder
|
||||
* @extends {BaseApplication}
|
||||
*/
|
||||
class SDKBuilder extends application.BaseApplication {
|
||||
constructor(args) {
|
||||
super("SDKBuilder", args);
|
||||
}
|
||||
main() {
|
||||
this.logger = new Logger(this.find("container"));
|
||||
this.sdk = new OS.API.AntOSDKBuilder(this.logger, "");
|
||||
this.filehandle = undefined;
|
||||
this.options = undefined;
|
||||
this.targets = this.find("target-list");
|
||||
if (this.args && this.args.length > 0)
|
||||
this.filehandle = this.args[0].path.asFileHandle();
|
||||
this.find("btnbuild").onbtclick = (e) => {
|
||||
const selected = this.targets.selectedItem;
|
||||
if (!selected)
|
||||
return;
|
||||
this.load(this.compile([selected.data.text])).catch((e) => this.logger.error(__(e.stack)));
|
||||
};
|
||||
this.find("btnclear").onbtclick = (e) => {
|
||||
this.logger.clear();
|
||||
};
|
||||
this.find("btnrefresh").onbtclick = (e) => {
|
||||
this.open();
|
||||
};
|
||||
this.find("btnopen").onbtclick = async (e) => {
|
||||
try {
|
||||
const d = await this.openDialog("FileDialog", {
|
||||
title: __("Select build file"),
|
||||
mimes: this.meta().mimes
|
||||
});
|
||||
this.filehandle = d.file.path.asFileHandle();
|
||||
this.open();
|
||||
}
|
||||
catch (error) {
|
||||
this.logger.error(error.toString());
|
||||
}
|
||||
};
|
||||
this.open();
|
||||
}
|
||||
open() {
|
||||
if (this.filehandle === undefined) {
|
||||
return;
|
||||
}
|
||||
this.filehandle
|
||||
.read("json")
|
||||
.then((data) => {
|
||||
if (!data.targets) {
|
||||
return this.logger.error(__("Invalid build file: {0}", this.filehandle.path));
|
||||
}
|
||||
const targets = Object.keys(data.targets).map(e => {
|
||||
return { text: e };
|
||||
});
|
||||
this.scheme.apptitle = this.filehandle.path;
|
||||
this.options = data;
|
||||
this.options.root = this.filehandle.parent().path;
|
||||
this.targets.data = targets;
|
||||
this.logger.info(__("Loaded: {0}", this.filehandle.path));
|
||||
})
|
||||
.catch((e) => this.logger.error(__("Unable to load build file: {0}: {1}", this.filehandle.path, e.toString())));
|
||||
}
|
||||
compile(stages) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
this.logger.clear();
|
||||
await this.sdk.batch(stages, this.options);
|
||||
resolve("OK");
|
||||
}
|
||||
catch (e) {
|
||||
reject(__e(e));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
application.SDKBuilder = SDKBuilder;
|
||||
})(application = OS.application || (OS.application = {}));
|
||||
})(OS || (OS = {}));
|
||||
var OS;!function(t){let e;!function(e){class i{constructor(e){this.worker=new Worker(e.asFileHandle().getlink()),this.jobs={},this.worker.onmessage=t=>{let e=t.data,i=this.jobs[e.id];i?"log"===e.type?i.logger&&(e.error?i.logger.error(e.result):!1===e.show_time&&i.logger.print?i.logger.print(e.result):i.logger.info(e.result)):(i.callback(e),delete this.jobs[e.id]):console.log("Unable to identify result of job",e.id,e)};const i={};for(const e in t.setting.system.packages){const s=t.setting.system.packages[e];i[e]={path:s.path,name:s.pkgname}}this.submit("sdk-setup",{REST:t.API.REST,pkgs:i})}newJobID(){return"job_"+Math.random().toString(36).replace(".","")}exectue_job(t,e,i,s,r){const o=this.newJobID(),n={id:o,cmd:t,data:e,root:i};this.jobs[o]={callback:s,logger:r},this.worker.postMessage(n)}submit(t,e,i,s){return new Promise((r,o)=>{this.exectue_job(t,e,i,t=>{if(t.error)return o(t.error);r(t.result)},s)})}terminate(){this.worker.terminate()}}class s{constructor(t,e){this.root=e,this.logger=t,s.worker||(s.worker=new i("pkg://libantosdk/core/worker.js"))}require(t){return this.run("sdk-import",t.map(t=>t+".worker.js"))}compile(t,e){return new Promise(async(i,s)=>{try{await this.require([t]),i(await this.run(t+"-compile",e))}catch(t){s(__e(t))}})}run(e,i){return"sdk-run-app"===e?new Promise(async(e,s)=>{try{let s=i;1==s.split("://").length&&(s=`${this.root}/${i}`);const r=await(s+"/package.json").asFileHandle().read("json");return r.text=r.name,r.path=s,r.filename=r.pkgname,r.type="app",r.mime="antos/app",r.icon&&(r.icon=`${r.path}/${r.icon}`),r.iconclass||r.icon||(r.iconclass="fa fa-adn"),this.logger.info(__("Installing...")),t.setting.system.packages[r.pkgname]=r,r.app?(this.logger.info(__("Running {0}...",r.app)),t.GUI.forceLaunch(r.app,[])):this.logger.error(__("{0} is not an application",r.pkgname)),e(void 0)}catch(t){s(t)}}):s.worker.submit(e,i,this.root,this.logger)}batch(t,e){return e.root&&(this.root=e.root),new Promise(async(i,s)=>{try{e.targets||s("No target found");for(const i of t){const t=e.targets[i];if(!t)return s(__("No target: {0}",i));if(t.depend&&await this.batch(t.depend,e),t.require&&await this.require(t.require),this.logger&&this.logger.info(__("### RUNNING STAGE: {0}###",i).__()),t.jobs)for(const e of t.jobs)await this.run(e.name,e.data)}i(void 0)}catch(t){s(t)}})}}let r;e.AntOSDKBuilder=s,function(t){class e extends t.RemoteFileHandle{constructor(t){super(t);const e="pkg://libantosdk/"+this.genealogy.join("/");this.setPath(e.asFileHandle().path)}}t.SDKFileHandle=e,t.register("^sdk$",e)}(r=e.VFS||(e.VFS={}))}(e=t.API||(t.API={}))}(OS||(OS={})),function(t){let e;!function(e){class i{constructor(t){this.target=t}info(t){this.log("info",t,!0)}warn(t){this.log("warn",t,!0)}error(t){this.log("error",t,!0)}log(t,e,i){let s=$("<pre></pre>").attr("class","sdk-log-"+t);if(i){let t=new Date,i=t.getDate()+"/"+(t.getMonth()+1)+"/"+t.getFullYear()+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds();s.text(`[${i}]: ${e.__()}`)}else s.text(e.__());$(this.target).append(s),$(this.target).scrollTop($(this.target)[0].scrollHeight)}print(t){t.match(/warn/i)?this.log("warn",t,!1):t.match(/error/i)?this.log("error",t,!1):this.log("info",t,!1)}clear(){$(this.target).empty()}}class s extends e.BaseApplication{constructor(t){super("SDKBuilder",t)}main(){this.logger=new i(this.find("container")),this.sdk=new t.API.AntOSDKBuilder(this.logger,""),this.filehandle=void 0,this.options=void 0,this.targets=this.find("target-list"),this.args&&this.args.length>0&&(this.filehandle=this.args[0].path.asFileHandle()),this.find("btnbuild").onbtclick=t=>{const e=this.targets.selectedItem;e&&this.load(this.compile([e.data.text]))},this.find("btnclear").onbtclick=t=>{this.logger.clear()},this.find("btnrefresh").onbtclick=t=>{this.open()},this.find("btnopen").onbtclick=async t=>{try{const t=await this.openDialog("FileDialog",{title:__("Select build file"),mimes:this.meta().mimes});this.filehandle=t.file.path.asFileHandle(),this.open()}catch(t){this.logger.error(t.toString())}},this.open()}open(){void 0!==this.filehandle&&this.filehandle.read("json").then(t=>{if(!t.targets)return this.logger.error(__("Invalid build file: {0}",this.filehandle.path));const e=Object.keys(t.targets).map(t=>({text:t}));this.scheme.apptitle=this.filehandle.path,this.options=t,this.options.root=this.filehandle.parent().path,this.targets.data=e,this.logger.info(__("Loaded: {0}",this.filehandle.path))}).catch(t=>this.logger.error(__("Unable to load build file: {0}: {1}",this.filehandle.path,t.toString())))}compile(t){return new Promise(async(e,i)=>{try{this.logger.clear(),await this.sdk.batch(t,this.options),e("OK")}catch(t){i(__e(t))}})}}e.SDKBuilder=s}(e=t.application||(t.application={}))}(OS||(OS={}));
|
@ -7,7 +7,7 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@iohub.dev"
|
||||
},
|
||||
"version": "0.1.2-b",
|
||||
"version": "0.1.1-b",
|
||||
"category": "Development",
|
||||
"iconclass": "fa fa-cog",
|
||||
"mimes": [
|
||||
|
Binary file not shown.
@ -7,7 +7,7 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@iohub.dev"
|
||||
},
|
||||
"version": "0.1.2-b",
|
||||
"version": "0.1.1-b",
|
||||
"category": "Development",
|
||||
"iconclass": "fa fa-cog",
|
||||
"mimes": [
|
||||
|
@ -139,7 +139,7 @@ namespace OS {
|
||||
const selected = this.targets.selectedItem;
|
||||
if(!selected)
|
||||
return;
|
||||
this.load(this.compile([selected.data.text])).catch((e) => this.logger.error(__(e.stack)));
|
||||
this.load(this.compile([selected.data.text]));
|
||||
}
|
||||
|
||||
(this.find("btnclear") as GUI.tag.ButtonTag).onbtclick = (e) => {
|
||||
|
@ -195,62 +195,6 @@ namespace OS {
|
||||
}
|
||||
});
|
||||
}
|
||||
else if(job === "batch")
|
||||
{
|
||||
return new Promise(async (resolve, reject) =>
|
||||
{
|
||||
try{
|
||||
if(!data || !data.target)
|
||||
{
|
||||
const err = __("No target provided for job: batch");
|
||||
this.logger.error(err);
|
||||
throw new Error(err.__());
|
||||
}
|
||||
let pwd = data.pwd;
|
||||
if(!pwd)
|
||||
{
|
||||
pwd = this.root;
|
||||
}
|
||||
const ret = await pwd.asFileHandle().read();
|
||||
if(ret.error)
|
||||
{
|
||||
this.logger.error(ret.error);
|
||||
throw new Error(ret.error);
|
||||
}
|
||||
let dirs = ret.result.filter(e => e.type === "dir");
|
||||
if(data.modules)
|
||||
{
|
||||
dirs = dirs.filter(e => data.modules.includes(e.filename));
|
||||
}
|
||||
for(let entry of dirs)
|
||||
{
|
||||
const build_file = `${entry.path}/build.json`.asFileHandle();
|
||||
try {
|
||||
await build_file.onready();
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
this.logger.info(__("No build.json file found in {0}, ignore this file", entry.path));
|
||||
continue;
|
||||
}
|
||||
this.logger.info(__("########### BUILDING: {0} ###########", entry.path));
|
||||
const sdk = new AntOSDKBuilder(this.logger,entry.path);
|
||||
const options = await build_file.read("json");
|
||||
if(!options.root)
|
||||
{
|
||||
options.root = entry.path;
|
||||
}
|
||||
await sdk.batch([data.target], options);
|
||||
}
|
||||
this.logger.info(__("########### Batch building done ###########"));
|
||||
return resolve(undefined);
|
||||
}
|
||||
catch(error)
|
||||
{
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
return AntOSDKBuilder.worker.submit(job,data, this.root, this.logger);
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
@ -225,7 +225,7 @@
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/libantosdk/README.md",
|
||||
"category": "Development",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.1.2-b",
|
||||
"version": "0.1.1-b",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/libantosdk/build/release/libantosdk.zip"
|
||||
},
|
||||
|
95
release.lua
95
release.lua
@ -1,95 +0,0 @@
|
||||
local args=...
|
||||
|
||||
local release_url = "https://ci.iohub.dev/public/antos-release/packages/2.0.x/"
|
||||
|
||||
local result = function(data)
|
||||
return { error = false, result = data }
|
||||
end
|
||||
|
||||
local error = function(msg)
|
||||
return {error = msg, result = false}
|
||||
end
|
||||
|
||||
local output = function(text)
|
||||
echo( JSON.encode(result(text)))
|
||||
end
|
||||
|
||||
function script_path()
|
||||
local str = debug.getinfo(2, "S").source:sub(2)
|
||||
return str:match("(.*/)")
|
||||
end
|
||||
|
||||
local cwd = script_path()
|
||||
local release_dir = cwd.."/release/"
|
||||
|
||||
-- prepare release directory
|
||||
if ulib.exists(release_dir) then
|
||||
--remove it
|
||||
ulib.delete(release_dir)
|
||||
end
|
||||
|
||||
-- create release dir
|
||||
output("Creating delivery directory: "..release_dir)
|
||||
if not ulib.mkdir(release_dir) then
|
||||
return error("Unable to create release dir")
|
||||
end
|
||||
|
||||
local r = ulib.read_dir(cwd, cwd)
|
||||
if r.error then
|
||||
return error(r.error)
|
||||
end
|
||||
|
||||
local packages = {}
|
||||
|
||||
for i,v in ipairs(r) do
|
||||
if v.type == "dir" then
|
||||
local ar_file = v.path.."/build/release/"..v.filename..".zip"
|
||||
local meta_file = v.path.."/package.json"
|
||||
local readme_file = v.path.."/README.md"
|
||||
if ulib.exists(ar_file) and ulib.exists(meta_file) then
|
||||
-- copy zip file to release directory
|
||||
output("Copying "..ar_file.." -> "..release_dir.."/"..v.filename..".zip")
|
||||
if not ulib.send_file(ar_file, release_dir..v.filename..".zip") then
|
||||
return error("Unable to copy file:"..v.filename..".zip")
|
||||
end
|
||||
if ulib.exists(readme_file) then
|
||||
output("Copying "..readme_file.." -> "..release_dir.."/"..v.filename..".md")
|
||||
if not ulib.send_file(readme_file, release_dir..v.filename..".md") then
|
||||
return error("Unable to copy file:"..v.readme_file..".md")
|
||||
end
|
||||
end
|
||||
-- read meta-data
|
||||
local meta = JSON.decodeFile(meta_file)
|
||||
if not meta then
|
||||
return error("Unable to parse package meta-data: "..meta_file)
|
||||
end
|
||||
local pkg = {
|
||||
pkgname = v.filename,
|
||||
name = meta.name,
|
||||
description = release_url..v.filename..".md",
|
||||
category = meta.category or "Other",
|
||||
author = meta.info.author or "Unknown",
|
||||
version = meta.version,
|
||||
dependencies = meta.dependencies or {},
|
||||
download = release_url..v.filename..".zip"
|
||||
}
|
||||
table.insert(packages, pkg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- write meta-data
|
||||
local index_file = release_dir.."/packages.json"
|
||||
output("Generate meta-data file: "..index_file)
|
||||
|
||||
local file,err = io.open(index_file,'w')
|
||||
if file then
|
||||
file:write(JSON.encode(packages))
|
||||
file:close()
|
||||
else
|
||||
return error("error open file ".. index_file..":"..err)
|
||||
end
|
||||
|
||||
|
||||
|
||||
return result("Done!!!")
|
@ -1,27 +0,0 @@
|
||||
# ACECore
|
||||
This package is AntOS wrapper of the wellknown Ace editor.
|
||||
|
||||
Ace is a standalone code editor written in JavaScript. The goal is to create a browser based
|
||||
editor that matches and extends the features, usability and performance of existing native
|
||||
editors such as TextMate, Vim or Eclipse. It can be easily embedded in any web page or
|
||||
JavaScript application. Ace is developed as the primary editor for
|
||||
[Cloud9 IDE](https://c9.io/) and the successor of the Mozilla Skywriter (Bespin) Project.
|
||||
|
||||
## Features
|
||||
|
||||
* Syntax highlighting for over 120 languages (TextMate/Sublime/_.tmlanguage_ files can be imported)
|
||||
* Over 20 themes (TextMate/Sublime/_.tmtheme_ files can be imported)
|
||||
* Automatic indent and outdent
|
||||
* An optional command line
|
||||
* Handles huge documents (at last check, 4,000,000 lines is the upper limit)
|
||||
* Fully customizable key bindings including vim and Emacs modes
|
||||
* Search and replace with regular expressions
|
||||
* Highlight matching parentheses
|
||||
* Toggle between soft tabs and real tabs
|
||||
* Displays hidden characters
|
||||
* Drag and drop text using the mouse
|
||||
* Line wrapping
|
||||
* Code folding
|
||||
* Multiple cursors and selections
|
||||
* Live syntax checker (currently JavaScript/CoffeeScript/CSS/XQuery)
|
||||
* Cut, copy, and paste functionality
|
Binary file not shown.
@ -1,26 +0,0 @@
|
||||
# About
|
||||
This is an example project, generated by AntOS Development Kit
|
||||
|
||||
It is used to show the change logs of the current AntOS version
|
||||
|
||||
## Change logs
|
||||
### v0.1.1-b
|
||||
* Increase default window size
|
||||
### v0.1.1-b
|
||||
* add missing css file
|
||||
|
||||
### v0.1.0-b
|
||||
* Beta state, read README file from the current OS
|
||||
|
||||
### v0.0.7-a
|
||||
* Change app category to Utility
|
||||
|
||||
### v0.0.6-a
|
||||
* Use README page available on github
|
||||
|
||||
### v0.0.5-a
|
||||
* Fix cotent padding is not correct on some browsers
|
||||
|
||||
### v0.0.4-a
|
||||
* Add color style to link
|
||||
* Fix some minor bugs
|
Binary file not shown.
@ -1,11 +0,0 @@
|
||||
# AceDiff
|
||||
This is a wrapper for Ace Editor to provide a 2-panel diffing/merging tool that visualizes differences in two documents and allows users to copy changes from to the other.
|
||||
|
||||
It's built on top of google-diff-match-patch library. That lib handles the hard part: the computation of the document diffs. Ace-diff just visualizes that information as line-diffs in the editors.
|
||||
|
||||
Github page: [https://github.com/ace-diff/ace-diff](https://github.com/ace-diff/ace-diff).
|
||||
|
||||
The ACE diff depends on the ACECore package.
|
||||
|
||||
## Change logs
|
||||
- v0.1.1-a: add dependencies
|
Binary file not shown.
@ -1,13 +0,0 @@
|
||||
# Activity monitor
|
||||
|
||||
This simple application show the current running AntOS processes
|
||||
|
||||
## Change logs
|
||||
### v0.0.8-b
|
||||
* Increase default window size
|
||||
|
||||
### v0.0.6-a
|
||||
* Fix process type identification bug
|
||||
|
||||
### v0.0.5-a
|
||||
* Fix process type identification bug
|
Binary file not shown.
@ -1,22 +0,0 @@
|
||||
# Antedit
|
||||
Simple yet powerful text/code editor based on the Monaco editor,
|
||||
the editor that powers VS Code.
|
||||
|
||||
The editor functionality can be extended by its extension mechanism.
|
||||
Extension can be developed/released/isntalled by the editor itself.
|
||||
### Change logs
|
||||
- 0.2.3-b: Minor changes to adapt the core UI to the new AntOS 2.0.x
|
||||
- 0.2.3-b: Allow reload current file via context menu in case of external changes
|
||||
- 0.2.2-b: Support horizotal scrolling on horizotal tabbars
|
||||
- 0.2.1-b: Add open file to right, editor actions are only attached to code editor
|
||||
- 0.2.0-b: Support diff mode in editor + fix new Monaco version compatible bug
|
||||
- 0.1.17-b: Fix extension keybinding bug with the new monaco editor
|
||||
- 0.1.16-b: use the new version of monaco editor
|
||||
- 0.1.14-b: improve output log display
|
||||
- 0.1.13-b: Allow file upload in file view, add menu context in tabbar
|
||||
- 0.1.12-b: fix recent files not adding correctly
|
||||
- 0.1.11-b: fix file type parsing from path
|
||||
- 0.1.10-b: Antedit now has it own extension manager
|
||||
- 0.1.9-a: Allow output text selection
|
||||
- 0.1.8-a: Allow to change language mode
|
||||
- 0.1.7-a: Add keyboard shortcut support to extension actions
|
Binary file not shown.
@ -1,11 +0,0 @@
|
||||
# Antunnel
|
||||
|
||||
`Antunnel` is a client side API that allows AntOS applications to
|
||||
talk to server side applications via the [`antd-tunnel-pligin`](https://github.com/lxsang/antd-tunnel-plugin) plugin
|
||||
using a single websocket API.
|
||||
|
||||
## Changes log
|
||||
- v0.2.0-b User multiple bytes interger network byte order in frame format
|
||||
- v0.1.9-b Use the new client size minima frame format (reduces frame overhead)
|
||||
- v0.1.4-a Reduce frame overhead
|
||||
- v0.1.3-a Remove magic number in the frame to reduce frame overhead
|
Binary file not shown.
@ -1,9 +0,0 @@
|
||||
# Antunnel Plugins
|
||||
Aditional Plugins for Antunnel library.
|
||||
This package provides also the Typescript declaration file for
|
||||
application Development.
|
||||
|
||||
## Change logs
|
||||
- v.0.1.2: minor changes on API
|
||||
- v.0.1.1: Added group query support
|
||||
- v.0.1.0: Antunnel API declaration and broadcast plugin
|
Binary file not shown.
@ -1,15 +0,0 @@
|
||||
# AntunnelTestClient
|
||||
This is an example project, generated by AntOS Development Kit
|
||||
|
||||
## Howto
|
||||
Use the Antedit command palette to access to the SDK functionalities:
|
||||
|
||||
1. Create new project
|
||||
2. Init the project from the current folder located in side bar
|
||||
3. Build and run the project
|
||||
4. Release the project in zip package
|
||||
|
||||
## Set up build target
|
||||
|
||||
Open the `build.json` file from the current project tree and add/remove
|
||||
build target entries and jobs. Save the file
|
Binary file not shown.
@ -1,22 +0,0 @@
|
||||
# Archive
|
||||
|
||||
Small application for zip file manager
|
||||
|
||||
## Features
|
||||
* Open, create zip file Archive
|
||||
* Add/remove file/folder to archive
|
||||
* Extract zip file content
|
||||
|
||||
## Changle log
|
||||
|
||||
### v0.0.4-a
|
||||
* Fix file dialog bug when extract zip content
|
||||
|
||||
### v0.0.3-a
|
||||
* Change category to utility
|
||||
|
||||
### v0.0.2-a
|
||||
* Adapt to the new AntOS string API
|
||||
|
||||
### v0.0.1-a
|
||||
* First release
|
Binary file not shown.
@ -1,25 +0,0 @@
|
||||
# Blogger
|
||||
|
||||
Blackend for my blog at https://blog.iohub.dev
|
||||
|
||||
|
||||
## Change logs
|
||||
|
||||
### v0.2.x-a
|
||||
* Patch 11: Add TFIDF analyse functionality
|
||||
* Patch 10: Migrate code to typescript, use SQLiteDB lib for database access
|
||||
* Patch 9: Update to use the new MDE library
|
||||
* Patch 8: Support for antOS 2.0.x
|
||||
* Patch 7: Fix sendmail API security bug
|
||||
* Patch 6: Chage libraries load order
|
||||
* Patch 5: Add user photo to portfolio
|
||||
* Patch 4: Add package dependencies
|
||||
* Patch 3: Correct JSON text decoding
|
||||
* Patch 2: Bug fix rendering content
|
||||
* Patch 0-1 Important change: Store raw post content to the database instead of base64 string as before
|
||||
|
||||
### v0.1.x-a
|
||||
* Patch 3-4: Enhance youtube video embedding feature in markdown
|
||||
* Patch 2: CV Category now can be created when database is not created yet
|
||||
* Patch 1: Fix package archive broken
|
||||
* Patch 0: Change default email of the sender
|
Binary file not shown.
@ -1,30 +0,0 @@
|
||||
# Booklet
|
||||
A back-end tool for my online document hub [https://doc.iohub.dev/antos/](https://doc.iohub.dev/)
|
||||
|
||||
|
||||
## Change logs
|
||||
### v0.2.5-a
|
||||
* Use the new MDE library
|
||||
### v0.2.3-a
|
||||
* Chage app category name
|
||||
### v0.2.1-a
|
||||
* Chage libraries load order
|
||||
### v0.2.1-a
|
||||
* Add depends on the SimpleMDE package
|
||||
### v0.2.0-a
|
||||
* Book meta data is no longer depending on the absolute path
|
||||
* Meta-data of Books created by Booklet v0.1.x needs to be modified (manually) to work properly on v0.2.x
|
||||
### v0.1.0-a
|
||||
* Add support to model/gltf-binary file
|
||||
### v0.1.0-a: new feature
|
||||
* Entries of the same parent now can go up and down
|
||||
* Support drag and drop to move entries around
|
||||
* Support assets such as image files can be uploaded and stored directly into the book structure
|
||||
* Booklet can now render local image
|
||||
|
||||
### v0.0.3-a
|
||||
* Clean up code
|
||||
|
||||
### v0.0.2-a
|
||||
* First public release
|
||||
*
|
Binary file not shown.
@ -1,17 +0,0 @@
|
||||
# Clipper
|
||||
|
||||
VDE screen capture tool.
|
||||
|
||||
Clipper use `html2canvas` to capture AntOS desktop or a specific window.
|
||||
It is able to crop the captured image before saving to a file
|
||||
|
||||
## Change logs
|
||||
* v0.1.4-a minor changes to adapt to new AntOS v2.0.x
|
||||
* v0.1.3-a change app category
|
||||
* v0.1.2-a use ALT-S as global shortcut for screen capture
|
||||
* v0.1.1-a use CTRL-S as global shortcut for screen capture
|
||||
* v0.1.0-a initial version
|
||||
|
||||
|
||||
## Credit
|
||||
* [html2canvas](https://html2canvas.hertzen.com/)
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
# CodePad
|
||||
A simple yet powerful code/text editor.
|
||||
CodePad is a text editor based on the ACE editor.
|
||||
|
||||
## Change logs
|
||||
- v0.1.6-a: adapt to new AntOS v2.0.x
|
||||
- v0.1.5-a: CodePad moved out of AntOS based system as regular AntOS package
|
Binary file not shown.
@ -1,15 +0,0 @@
|
||||
# DBDecoder
|
||||
This is an example project, generated by AntOS Development Kit
|
||||
|
||||
## Howto
|
||||
Use the CodePad command palette to access to the SDK functionalities:
|
||||
|
||||
1. Create new project
|
||||
2. Init the project from the current folder located in side bar
|
||||
3. Build and run the project
|
||||
4. Release the project in zip package
|
||||
|
||||
## Set up build target
|
||||
|
||||
Open the `project.json` file from the current project tree and add/remove
|
||||
build target entries. Save the file
|
Binary file not shown.
@ -1,6 +0,0 @@
|
||||
# DiffEditor
|
||||
View and edit files in diff mode
|
||||
|
||||
## Change logs
|
||||
- 0.1.6-a: adapt to new AntOS v2.0.x
|
||||
- Add dependencies
|
Binary file not shown.
@ -1,12 +0,0 @@
|
||||
# Docify
|
||||
Simple PDF document manager
|
||||
|
||||
## Change logs
|
||||
- v0.1.0-b: use libsqlite for database handling
|
||||
- v0.0.9-b: Adapt to support AntOS 2.0.x
|
||||
- v0.0.8-b: Allow upload files directly from the app
|
||||
- v0.0.7-a: Change category and icon
|
||||
- v0.0.6-a: Add print dialog (support server side printing)
|
||||
- v0.0.5-a: Fix delete file bug
|
||||
- v0.0.4-a: Display file size in entry meta-data
|
||||
- v0.0.3-a: Fix document moved bug, sort entries by year, month, day
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user