Compare commits

..

No commits in common. "4a0a611acc3124b8875928acece87c8af1d16334" and "7cbd4ce979aedf8ad6b12cc32f0cece3a495eb1f" have entirely different histories.

167 changed files with 139 additions and 1452 deletions

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

Binary file not shown.

View File

@ -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). Github page: [https://github.com/ace-diff/ace-diff](https://github.com/ace-diff/ace-diff).
The ACE diff depends on the ACECore package. The ACE diff depends on the ACECore package.
## Change logs
- v0.1.1-a: add dependencies

Binary file not shown.

View File

@ -27,10 +27,8 @@
"require":["ts"], "require":["ts"],
"jobs": [ "jobs": [
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -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) => return new Promise((resolve, reject) =>
{ {
resolve({ resolve({

View File

@ -817,7 +817,7 @@ namespace OS {
dataid: "recent", dataid: "recent",
nodes: recent, nodes: recent,
onchildselect: ( onchildselect: (
e: GUI.TagEventType<GUI.tag.StackMenuEventData>, e: GUI.TagEventType<GUI.tag.MenuEventData>,
r: Antedit r: Antedit
) => { ) => {
const handle = e.data.item.data.text.asFileHandle(); const handle = e.data.item.data.text.asFileHandle();
@ -849,7 +849,7 @@ namespace OS {
}, },
], ],
onchildselect: ( onchildselect: (
e: GUI.TagEventType<GUI.tag.StackMenuEventData>, e: GUI.TagEventType<GUI.tag.MenuEventData>,
r: Antedit r: Antedit
) => { ) => {
return this.menuAction(e.data.item.data.dataid, r); return this.menuAction(e.data.item.data.dataid, r);
@ -866,9 +866,9 @@ namespace OS {
* @memberof Antedit * @memberof Antedit
*/ */
private ctxFileMenuHandle( private ctxFileMenuHandle(
e: GUI.TagEventType<GUI.tag.StackMenuEventData> e: GUI.TagEventType<GUI.tag.MenuEventData>
): void { ): void {
const el = e.data.item; const el = e.data.item as GUI.tag.MenuEntryTag;
if (!el) { if (!el) {
return; return;
} }
@ -1150,7 +1150,7 @@ namespace OS {
} }
], ],
onchildselect: ( onchildselect: (
e: GUI.TagEventType<GUI.tag.StackMenuEventData>, e: GUI.TagEventType<GUI.tag.MenuEventData>,
r: EditorFileHandle r: EditorFileHandle
) => { ) => {
switch (e.data.item.data.dataid) { switch (e.data.item.data.dataid) {

Binary file not shown.

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

View File

@ -244,7 +244,7 @@ namespace OS {
{ {
text: __("Change theme"), text: __("Change theme"),
onmenuselect: async ( onmenuselect: async (
e: GUI.TagEventType<GUI.tag.StackMenuEventData> e: GUI.TagEventType<GUI.tag.MenuEventData>
) => { ) => {
try{ try{
const themes = this.eum.active.getThemes(); const themes = this.eum.active.getThemes();
@ -263,7 +263,7 @@ namespace OS {
{ {
text: __("Change language mode"), text: __("Change language mode"),
onmenuselect: async ( onmenuselect: async (
e: GUI.TagEventType<GUI.tag.StackMenuEventData> e: GUI.TagEventType<GUI.tag.MenuEventData>
) => { ) => {
try{ try{
const modes = this.eum.active.getModes().map(v => { const modes = this.eum.active.getModes().map(v => {
@ -284,7 +284,7 @@ namespace OS {
text: __("Build with AntOSDK"), text: __("Build with AntOSDK"),
shortcut: " (CTRL-ALT-B)", shortcut: " (CTRL-ALT-B)",
onmenuselect: async ( onmenuselect: async (
e: GUI.TagEventType<GUI.tag.StackMenuEventData> e: GUI.TagEventType<GUI.tag.MenuEventData>
) => { ) => {
try{ try{
this.build(); this.build();
@ -542,7 +542,7 @@ namespace OS {
dataid: "recent", dataid: "recent",
nodes: recent, nodes: recent,
onchildselect: ( onchildselect: (
e: GUI.TagEventType<GUI.tag.StackMenuEventData>, e: GUI.TagEventType<GUI.tag.MenuEventData>,
r: CodePad r: CodePad
) => { ) => {
const handle = e.data.item.data.text.asFileHandle(); const handle = e.data.item.data.text.asFileHandle();
@ -574,7 +574,7 @@ namespace OS {
}, },
], ],
onchildselect: ( onchildselect: (
e: GUI.TagEventType<GUI.tag.StackMenuEventData>, e: GUI.TagEventType<GUI.tag.MenuEventData>,
r: CodePad r: CodePad
) => { ) => {
return this.menuAction(e.data.item.data.dataid, r); return this.menuAction(e.data.item.data.dataid, r);
@ -591,9 +591,9 @@ namespace OS {
* @memberof CodePad * @memberof CodePad
*/ */
private ctxFileMenuHandle( private ctxFileMenuHandle(
e: GUI.TagEventType<GUI.tag.StackMenuEventData> e: GUI.TagEventType<GUI.tag.MenuEventData>
): void { ): void {
const el = e.data.item; const el = e.data.item as GUI.tag.MenuEntryTag;
if (!el) { if (!el) {
return; return;
} }
@ -845,7 +845,7 @@ namespace OS {
} }
], ],
onchildselect: ( onchildselect: (
e: GUI.TagEventType<GUI.tag.StackMenuEventData>, e: GUI.TagEventType<GUI.tag.MenuEventData>,
r: EditorFileHandle r: EditorFileHandle
) => { ) => {
switch (e.data.item.data.dataid) { switch (e.data.item.data.dataid) {

View File

@ -33,10 +33,8 @@
], ],
"jobs": [ "jobs": [
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

Binary file not shown.

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

Binary file not shown.

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

View File

@ -17,10 +17,8 @@
"data": ["build","build/debug","build/release"] "data": ["build","build/debug","build/release"]
}, },
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

View File

@ -48,4 +48,8 @@ afx-app-window[data-id="ServerLogClient"] afx-hbox[data-id="top-header"] afx-lab
text-align: right; text-align: right;
padding-top: 5px; padding-top: 5px;
padding-right: 3px; 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;
} }

View File

@ -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={}));

View File

@ -1,15 +1,17 @@
<afx-app-window apptitle="__(Server system log)" width="600" height="400" data-id="ServerLogClient"> <afx-app-window apptitle="__(Server system log)" width="600" height="400" data-id="ServerLogClient">
<afx-hbox padding="5"> <afx-vbox >
<afx-stack-menu data-id="menu-level" data-width="content"></afx-stack-menu> <afx-hbox data-height="35" data-id="top-header">
<afx-vbox> <afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button>
<afx-hbox data-height="45" data-id="top-header"> <afx-menu data-id="menu-level" data-width="content"></afx-menu>
<afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button> <afx-label class="field-label" text="__(Filter)" data-width="content"></afx-label>
<afx-input type="text" data-id="txt-reg"label = "__(Filter)" ></afx-input> <input type="text" data-id="txt-reg"></input>
<afx-input type="text" label="__(Keep)" data-width="50" data-id="txt-n-log"></afx-input> <afx-label class="field-label" text="__(Keep up to)" data-width="content"></afx-label>
<afx-label class="field-label" text="__(Record)" data-width="content"></afx-label> <input type="text" data-width="50" data-id="txt-n-log"></input>
<afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch> <afx-label class="field-label" text="__(Record)" data-width="content"></afx-label>
</afx-hbox> <afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch>
<div data-id="log-container"></div> </afx-hbox>
</afx-vbox> <div data-id="log-container">
</afx-hbox>
</div>
</afx-vbox>
</afx-app-window> </afx-app-window>

View File

@ -48,4 +48,8 @@ afx-app-window[data-id="ServerLogClient"] afx-hbox[data-id="top-header"] afx-lab
text-align: right; text-align: right;
padding-top: 5px; padding-top: 5px;
padding-right: 3px; 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;
} }

View File

@ -186,60 +186,64 @@ namespace OS {
this.logs = []; this.logs = [];
$(this.log_container) $(this.log_container)
.css("overflow-y", "auto"); .css("overflow-y", "auto");
let menu = this.find("menu-level") as GUI.tag.StackMenuTag; let menu = this.find("menu-level") as GUI.tag.MenuTag;
menu.onmenuselect = (e) => {
let data = e.data.item.data;
this.filter[data.severity] = data.checked;
console.log(this.filter);
}
menu.items = [ menu.items = [
{ {
text: __("Debug"), text: __("Default level"),
switch: true, nodes: [
checked: true, {
severity: "debug" text: __("Debug"),
}, switch: true,
{ checked: true,
text: __("Notice"), severity: "debug"
switch: true, },
checked: true, {
severity: "notice" text: __("Notice"),
}, switch: true,
{ checked: true,
text: __("Info"), severity: "notice"
switch: true, },
checked: true, {
severity: "info" text: __("Info"),
}, switch: true,
{ checked: true,
text: __("Warning"), severity: "info"
switch: true, },
checked: true, {
severity: "warning" text: __("Warning"),
}, switch: true,
{ checked: true,
text: __("Error"), severity: "warning"
switch: true, },
checked: true, {
severity: "err" text: __("Error"),
}, switch: true,
{ checked: true,
text: __("Critical"), severity: "err"
switch: true, },
checked: true, {
severity: "crit" text: __("Critical"),
}, switch: true,
{ checked: true,
text: __("Alert"), severity: "crit"
switch: true, },
checked: true, {
severity: "alert" text: __("Alert"),
}, switch: true,
{ checked: true,
text: __("Emergency"), severity: "alert"
switch: true, },
checked: true, {
severity: "emerg" text: __("Emergency"),
switch: true,
checked: true,
severity: "emerg"
}
],
onchildselect: (e) => {
let data = e.data.item.data;
this.filter[data.severity] = data.checked;
}
} }
]; ];

View File

@ -1,15 +1,17 @@
<afx-app-window apptitle="__(Server system log)" width="600" height="400" data-id="ServerLogClient"> <afx-app-window apptitle="__(Server system log)" width="600" height="400" data-id="ServerLogClient">
<afx-hbox padding="5"> <afx-vbox >
<afx-stack-menu data-id="menu-level" data-width="content"></afx-stack-menu> <afx-hbox data-height="35" data-id="top-header">
<afx-vbox> <afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button>
<afx-hbox data-height="45" data-id="top-header"> <afx-menu data-id="menu-level" data-width="content"></afx-menu>
<afx-button text="__(Clear)" data-id="btn-clear" data-width="content"></afx-button> <afx-label class="field-label" text="__(Filter)" data-width="content"></afx-label>
<afx-input type="text" data-id="txt-reg"label = "__(Filter)" ></afx-input> <input type="text" data-id="txt-reg"></input>
<afx-input type="text" label="__(Keep)" data-width="50" data-id="txt-n-log"></afx-input> <afx-label class="field-label" text="__(Keep up to)" data-width="content"></afx-label>
<afx-label class="field-label" text="__(Record)" data-width="content"></afx-label> <input type="text" data-width="50" data-id="txt-n-log"></input>
<afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch> <afx-label class="field-label" text="__(Record)" data-width="content"></afx-label>
</afx-hbox> <afx-switch swon="true" data-id="sw-record" data-width="content"></afx-switch>
<div data-id="log-container"></div> </afx-hbox>
</afx-vbox> <div data-id="log-container">
</afx-hbox>
</div>
</afx-vbox>
</afx-app-window> </afx-app-window>

View File

@ -17,10 +17,8 @@
"require": ["ts"], "require": ["ts"],
"jobs":[ "jobs":[
{ {
"name": "ts-antos-sdk", "name": "ts-import",
"data": { "data": ["sdk://core/ts/core.d.ts", "sdk://core/ts/jquery.d.ts","sdk://core/ts/antos.d.ts"]
"version": "2.0.x"
}
}, },
{ {
"name": "ts-compile", "name": "ts-compile",

Binary file not shown.

Binary file not shown.

View File

@ -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": {}
}
}
]
}
}
}

View File

@ -2,7 +2,6 @@
AntOSDK: development API for AntOS based applications/projects AntOSDK: development API for AntOS based applications/projects
## Change logs ## 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.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.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 - 0.0.18: Add some public API on grid view

View File

@ -2,7 +2,6 @@
AntOSDK: development API for AntOS based applications/projects AntOSDK: development API for AntOS based applications/projects
## Change logs ## 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.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.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 - 0.0.18: Add some public API on grid view

View File

@ -1,417 +1 @@
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={}));
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 = {}));

View File

@ -7,7 +7,7 @@
"author": "Xuan Sang LE", "author": "Xuan Sang LE",
"email": "mrsang@iohub.dev" "email": "mrsang@iohub.dev"
}, },
"version": "0.1.2-b", "version": "0.1.1-b",
"category": "Development", "category": "Development",
"iconclass": "fa fa-cog", "iconclass": "fa fa-cog",
"mimes": [ "mimes": [

View File

@ -7,7 +7,7 @@
"author": "Xuan Sang LE", "author": "Xuan Sang LE",
"email": "mrsang@iohub.dev" "email": "mrsang@iohub.dev"
}, },
"version": "0.1.2-b", "version": "0.1.1-b",
"category": "Development", "category": "Development",
"iconclass": "fa fa-cog", "iconclass": "fa fa-cog",
"mimes": [ "mimes": [

View File

@ -139,7 +139,7 @@ namespace OS {
const selected = this.targets.selectedItem; const selected = this.targets.selectedItem;
if(!selected) if(!selected)
return; 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) => { (this.find("btnclear") as GUI.tag.ButtonTag).onbtclick = (e) => {

View File

@ -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); return AntOSDKBuilder.worker.submit(job,data, this.root, this.logger);
} }

View File

@ -225,7 +225,7 @@
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/libantosdk/README.md", "description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/libantosdk/README.md",
"category": "Development", "category": "Development",
"author": "Xuan Sang LE", "author": "Xuan Sang LE",
"version": "0.1.2-b", "version": "0.1.1-b",
"dependencies": [], "dependencies": [],
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/libantosdk/build/release/libantosdk.zip" "download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/libantosdk/build/release/libantosdk.zip"
}, },

View File

@ -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!!!")

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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