mirror of
https://github.com/lxsang/antos-frontend.git
synced 2024-12-26 09:28:21 +01:00
add more doc
This commit is contained in:
parent
d5df803c2c
commit
218f6142c6
@ -1,10 +1,3 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS101: Remove unnecessary use of Array.from
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS205: Consider reworking code to avoid use of IIFEs
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
@ -26,45 +19,91 @@
|
||||
namespace OS {
|
||||
export namespace API {
|
||||
/**
|
||||
*
|
||||
* Observable entry type definition
|
||||
*
|
||||
* @export
|
||||
* @interface ObservableEntryType
|
||||
*/
|
||||
export interface ObservableEntryType {
|
||||
/**
|
||||
* A Set of callbacks that should be called only once.
|
||||
* These callbacks will be removed after the first
|
||||
* occurrence of the corresponding event
|
||||
*
|
||||
* @memberof ObservableEntryType
|
||||
*/
|
||||
one: Set<(d: any) => void>;
|
||||
|
||||
/**
|
||||
* A Set of callbacks that should be called
|
||||
* every time the corresponding event is triggered
|
||||
*
|
||||
* @memberof ObservableEntryType
|
||||
*/
|
||||
many: Set<(d: any) => void>;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Announcement listener type definition
|
||||
*
|
||||
* @export
|
||||
* @interface AnnouncerListenerType
|
||||
*/
|
||||
export interface AnnouncerListenerType {
|
||||
[index: number]: {
|
||||
/**
|
||||
* The event name
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
e: string;
|
||||
|
||||
/**
|
||||
* The event callback
|
||||
*
|
||||
*/
|
||||
f: (d: any) => void;
|
||||
}[];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* This class is the based class used in AntOS event
|
||||
* announcement system.
|
||||
* It implements the observer pattern using simple
|
||||
* subscribe/publish mechanism
|
||||
* @export
|
||||
* @class Announcer
|
||||
*/
|
||||
export class Announcer {
|
||||
/**
|
||||
* The observable object that stores event name
|
||||
* and its corresponding callback in [[ObservableEntryType]]
|
||||
*
|
||||
* @type {GenericObject<ObservableEntryType>}
|
||||
* @memberof Announcer
|
||||
*/
|
||||
observable: GenericObject<ObservableEntryType>;
|
||||
|
||||
/**
|
||||
* Enable/disable the announcer
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof Announcer
|
||||
*/
|
||||
enable: boolean;
|
||||
|
||||
/**
|
||||
*Creates an instance of Announcer.
|
||||
* @memberof Announcer
|
||||
*/
|
||||
constructor() {
|
||||
this.observable = {};
|
||||
this.enable = true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Disable the announcer, when this function is called
|
||||
* all events and their callbacks will be removed
|
||||
*
|
||||
* @returns
|
||||
* @memberof Announcer
|
||||
@ -75,10 +114,11 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to an event, the callback will be called
|
||||
* every time the corresponding event is trigged
|
||||
*
|
||||
*
|
||||
* @param {string} evtName
|
||||
* @param {(d: any) => void} callback
|
||||
* @param {string} evtName event name
|
||||
* @param {(d: any) => void} callback The corresponding callback
|
||||
* @returns {void}
|
||||
* @memberof Announcer
|
||||
*/
|
||||
@ -96,10 +136,11 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to an event, the callback will
|
||||
* be called only once and then removed from the announcer
|
||||
*
|
||||
*
|
||||
* @param {string} evtName
|
||||
* @param {(d: any) => void} callback
|
||||
* @param {string} evtName event name
|
||||
* @param {(d: any) => void} callback the corresponding callback
|
||||
* @returns {void}
|
||||
* @memberof Announcer
|
||||
*/
|
||||
@ -117,10 +158,12 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsubscribe the callback from an event
|
||||
*
|
||||
*
|
||||
* @param {string} evtName
|
||||
* @param {(d: any) => void} [callback]
|
||||
* @param {string} evtName event name
|
||||
* @param {(d: any) => void} [callback] the callback to be unsubscribed.
|
||||
* When the `callback` is `*`, all callbacks related to `evtName` will be
|
||||
* removed
|
||||
* @memberof Announcer
|
||||
*/
|
||||
off(evtName: string, callback?: (d: any) => void): void {
|
||||
@ -147,10 +190,10 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger an event
|
||||
*
|
||||
*
|
||||
* @param {string} evtName
|
||||
* @param {*} data
|
||||
* @param {string} evtName event name
|
||||
* @param {*} data data object that will be send to all related callback
|
||||
* @returns {void}
|
||||
* @memberof Announcer
|
||||
*/
|
||||
@ -179,24 +222,39 @@ namespace OS {
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* This namespace defines every thing related to the system announcement.
|
||||
*
|
||||
* The system announcement provides a global way to communicate between
|
||||
* processes (applications/services) using the subscribe/publish
|
||||
* mechanism
|
||||
*/
|
||||
export namespace announcer {
|
||||
/**
|
||||
* The global announcer object tha manages global events
|
||||
* and callbacks
|
||||
*/
|
||||
export var observable: API.Announcer = new API.Announcer();
|
||||
/**
|
||||
* This variable is used to allocate the `id` of message
|
||||
* passing between publishers and subscribers in the
|
||||
* system announcement
|
||||
*/
|
||||
export var quota: 0;
|
||||
/**
|
||||
* Place holder of all global events listeners
|
||||
*/
|
||||
export var listeners: API.AnnouncerListenerType = {};
|
||||
|
||||
/**
|
||||
*
|
||||
* Subscribe to a global event
|
||||
*
|
||||
* @export
|
||||
* @param {string} e
|
||||
* @param {(d: any) => void} f
|
||||
* @param {GUI.BaseModel} a
|
||||
* @param {string} e event name
|
||||
* @param {(d: any) => void} f event callback
|
||||
* @param {GUI.BaseModel} a the process (Application/service) related to the callback
|
||||
*/
|
||||
export function on(
|
||||
e: string,
|
||||
f: (d: any) => void,
|
||||
a: BaseModel
|
||||
): void {
|
||||
export function on(e: string, f: (d: any) => void, a: BaseModel): void {
|
||||
if (!announcer.listeners[a.pid]) {
|
||||
announcer.listeners[a.pid] = [];
|
||||
}
|
||||
@ -205,64 +263,67 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Trigger a global event
|
||||
*
|
||||
* @export
|
||||
* @param {string} e
|
||||
* @param {*} d
|
||||
* @param {string} e event name
|
||||
* @param {*} d data passing to all related callback
|
||||
*/
|
||||
export function trigger(e: string, d: any): void {
|
||||
announcer.observable.trigger(e, d);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Report system fail. This will trigger the global `fail`
|
||||
* event
|
||||
*
|
||||
* @export
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {Error} e
|
||||
* @param {(string | FormattedString)} m message string
|
||||
* @param {Error} e error to be reported
|
||||
*/
|
||||
export function osfail(m: string | FormattedString, e: Error): void {
|
||||
announcer.ostrigger("fail", { m, e });
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Report system error. This will trigger the global `error`
|
||||
* event
|
||||
*
|
||||
* @export
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {Error} e
|
||||
* @param {(string | FormattedString)} m message string
|
||||
* @param {Error} e error to be reported
|
||||
*/
|
||||
export function oserror(m: string | FormattedString, e: Error): void {
|
||||
announcer.ostrigger("error", { m, e });
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Trigger system notification (`info` event)
|
||||
*
|
||||
* @export
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {(string | FormattedString)} m notification message
|
||||
*/
|
||||
export function osinfo(m: string | FormattedString): void {
|
||||
announcer.ostrigger("info", { m, e: null });
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* trigger a specific global event
|
||||
*
|
||||
* @export
|
||||
* @param {string} e
|
||||
* @param {*} d
|
||||
* @param {string} e event name
|
||||
* @param {*} d event data
|
||||
*/
|
||||
export function ostrigger(e: string, d: any): void {
|
||||
announcer.trigger(e, { id: 0, data: d, name: "OS" });
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Unregister a process (application/service) from
|
||||
* the global announcement system
|
||||
*
|
||||
* @export
|
||||
* @param {GUI.BaseModel} app
|
||||
* @param {GUI.BaseModel} app reference to the process
|
||||
* @returns {void}
|
||||
*/
|
||||
export function unregister(app: BaseModel): void {
|
||||
@ -279,14 +340,14 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Allocate message id
|
||||
*
|
||||
* @export
|
||||
* @returns {number}
|
||||
*/
|
||||
export function getMID(): number {
|
||||
announcer.quota += 1;
|
||||
return announcer.quota;
|
||||
quota += 1;
|
||||
return quota;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,3 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS205: Consider reworking code to avoid use of IIFEs
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
@ -24,9 +17,16 @@
|
||||
//along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
namespace OS {
|
||||
/**
|
||||
* This namespace is dedicated to application and service definition.
|
||||
* When an application is loaded, its prototype definition will be
|
||||
* inserted to this namespace for reuse lately
|
||||
*/
|
||||
export namespace application {
|
||||
/**
|
||||
*
|
||||
* Abstract prototype of all AntOS application.
|
||||
* Any new application definition should extend
|
||||
* this prototype
|
||||
*
|
||||
* @export
|
||||
* @abstract
|
||||
@ -34,15 +34,46 @@ namespace OS {
|
||||
* @extends {BaseModel}
|
||||
*/
|
||||
export abstract class BaseApplication extends BaseModel {
|
||||
/**
|
||||
* Placeholder of all settings specific to the application.
|
||||
* The settings stored in this object will be saved to system
|
||||
* setting when logout and can be reused in the next login session
|
||||
*
|
||||
* @type {GenericObject<any>}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
setting: GenericObject<any>;
|
||||
|
||||
/**
|
||||
* Hotkeys (shortcuts) defined for this application
|
||||
*
|
||||
* @protected
|
||||
* @type {GUI.ShortcutType}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
protected keycomb: GUI.ShortcutType;
|
||||
|
||||
/**
|
||||
* Reference to the system dock
|
||||
*
|
||||
* @type {GUI.tag.AppDockTag}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
sysdock: GUI.tag.AppDockTag;
|
||||
|
||||
/**
|
||||
* Reference to the system application menu located
|
||||
* on the system panel
|
||||
*
|
||||
* @type {GUI.tag.MenuTag}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
appmenu: GUI.tag.MenuTag;
|
||||
|
||||
/**
|
||||
*Creates an instance of BaseApplication.
|
||||
* @param {string} name
|
||||
* @param {AppArgumentsType[]} args
|
||||
* @param {string} name application name
|
||||
* @param {AppArgumentsType[]} args application arguments
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
constructor(name: string, args: AppArgumentsType[]) {
|
||||
@ -62,11 +93,15 @@ namespace OS {
|
||||
this.applySetting(m.data.m);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Init the application, this function is called when the
|
||||
* application process is called and docked the the application
|
||||
* dock.
|
||||
*
|
||||
* The application UI will be rendered after the execution
|
||||
* of this function.
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
@ -78,10 +113,12 @@ namespace OS {
|
||||
this.on("focus", () => {
|
||||
this.sysdock.selectedApp = this;
|
||||
this.appmenu.pid = this.pid;
|
||||
this.appmenu.items= this.baseMenu() || [];
|
||||
this.appmenu.onmenuselect=(d: GUI.tag.MenuEventData): void => {
|
||||
return this.trigger("menuselect", d);
|
||||
}
|
||||
this.appmenu.items = this.baseMenu() || [];
|
||||
this.appmenu.onmenuselect = (
|
||||
d: GUI.tag.MenuEventData
|
||||
): void => {
|
||||
return this.trigger("menuselect", d);
|
||||
};
|
||||
if (this.dialog) {
|
||||
return this.dialog.show();
|
||||
}
|
||||
@ -107,9 +144,9 @@ namespace OS {
|
||||
return this.loadScheme();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Render the application UI by first loading its scheme
|
||||
* and then mount this scheme to the DOM tree
|
||||
*
|
||||
* @protected
|
||||
* @returns {void}
|
||||
@ -121,12 +158,14 @@ namespace OS {
|
||||
return this.render(path);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* API function to perform an heavy task.
|
||||
* This function will trigger the global `loading`
|
||||
* event at the beginning of the task, and the `loaded`
|
||||
* event after finishing the task
|
||||
*
|
||||
* @protected
|
||||
* @param {Promise<any>} promise
|
||||
* @param {Promise<any>} promise the promise on a task to be performed
|
||||
* @returns {Promise<any>}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
@ -145,17 +184,21 @@ namespace OS {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Bind a hotkey to the application, this function
|
||||
* is used to define application keyboard shortcut
|
||||
*
|
||||
* @protected
|
||||
* @param {string} k
|
||||
* @param {(e: JQuery.MouseDownEvent) => void} f
|
||||
* @param {string} k the hotkey to bind, should be in the following
|
||||
* format: `[ALT|SHIFT|CTRL|META]-KEY`, e.g. `CTRL-S`
|
||||
* @param {(e: JQuery.KeyboardEventBase) => void} f the callback function
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
protected bindKey(k: string, f: (e: JQuery.MouseDownEvent) => void): void {
|
||||
protected bindKey(
|
||||
k: string,
|
||||
f: (e: JQuery.KeyboardEventBase) => void
|
||||
): void {
|
||||
const arr = k.split("-");
|
||||
if (arr.length !== 2) {
|
||||
return;
|
||||
@ -168,12 +211,12 @@ namespace OS {
|
||||
this.keycomb[fnk][c] = f;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Update the application local from the system
|
||||
* locale or application specific locale configuration
|
||||
*
|
||||
* @private
|
||||
* @param {string} name
|
||||
* @param {string} name locale name e.g. `en_GB`
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
@ -194,19 +237,16 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the callback subscribed to a
|
||||
* keyboard shortcut
|
||||
*
|
||||
*
|
||||
* @param {string} fnk
|
||||
* @param {string} c
|
||||
* @param {JQuery.MouseDownEvent} e
|
||||
* @returns {boolean}
|
||||
* @param {string} fnk meta or modifier key e.g. `CTRL`, `ALT`, `SHIFT` or `META`
|
||||
* @param {string} c a regular key
|
||||
* @param {JQuery.KeyboardEventBase} e JQuery keyboard event
|
||||
* @returns {boolean} return whether the shortcut is executed
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
shortcut(
|
||||
fnk: string,
|
||||
c: string,
|
||||
e: JQuery.KeyDownEvent
|
||||
): boolean {
|
||||
shortcut(fnk: string, c: string, e: JQuery.KeyDownEvent): boolean {
|
||||
if (!this.keycomb[fnk]) {
|
||||
return true;
|
||||
}
|
||||
@ -217,19 +257,17 @@ namespace OS {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Apply a setting to the application
|
||||
*
|
||||
* @protected
|
||||
* @param {string} k
|
||||
* @param {string} k the setting name
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
protected applySetting(k: string): void {}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Apply all settings to the application
|
||||
*
|
||||
* @protected
|
||||
* @memberof BaseApplication
|
||||
@ -241,13 +279,13 @@ namespace OS {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Set a setting value to the application setting
|
||||
* registry
|
||||
*
|
||||
* @protected
|
||||
* @param {string} k
|
||||
* @param {*} v
|
||||
* @param {string} k setting name
|
||||
* @param {*} v setting value
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
@ -257,7 +295,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Show the appliation
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
@ -267,7 +305,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Blur the application
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
@ -280,7 +318,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Hide the application
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
@ -290,7 +328,8 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Maximize or restore the application window size
|
||||
* and its position
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BaseApplication
|
||||
@ -300,21 +339,23 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Get the application title
|
||||
*
|
||||
* @returns {(string| FormattedString)}
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
title(): string| FormattedString {
|
||||
title(): string | FormattedString {
|
||||
return (this.scheme as GUI.tag.WindowTag).apptitle;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the application exit.
|
||||
* If the input exit event is prevented, the application
|
||||
* process will not be killed
|
||||
*
|
||||
*
|
||||
* @protected
|
||||
* @param {BaseEvent} evt
|
||||
* @param {BaseEvent} evt exit event
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
protected onexit(evt: BaseEvent): void {
|
||||
@ -328,7 +369,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Get the application meta-data
|
||||
*
|
||||
* @returns {API.PackageMetaType}
|
||||
* @memberof BaseApplication
|
||||
@ -337,9 +378,11 @@ namespace OS {
|
||||
return application[this.name].meta;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Base menu definition. This function
|
||||
* return the based menu definition of all applications.
|
||||
* Other application specific menu entries
|
||||
* should be defined in [[menu]] function
|
||||
*
|
||||
* @protected
|
||||
* @returns {GUI.BasicItemType[]}
|
||||
@ -360,18 +403,17 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* The main application entry that is called after
|
||||
* the application UI is rendered. This application
|
||||
* must be implemented by all subclasses
|
||||
*
|
||||
* @abstract
|
||||
* @memberof BaseApplication
|
||||
*/
|
||||
abstract main(): void;
|
||||
//main program
|
||||
// implement by subclasses
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Application specific menu definition
|
||||
*
|
||||
* @protected
|
||||
* @returns {GUI.BasicItemType[]}
|
||||
@ -383,9 +425,11 @@ namespace OS {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The cleanup function that is called by [[onexit]] function.
|
||||
* Application need to override this function to perform some
|
||||
* specific task before exiting or to prevent the application
|
||||
* to be exited
|
||||
*
|
||||
* @protected
|
||||
* @param {BaseEvent} e
|
||||
|
@ -1,11 +1,3 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS001: Remove Babel/TypeScript constructor workaround
|
||||
* DS101: Remove unnecessary use of Array.from
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
@ -26,7 +18,8 @@
|
||||
namespace OS {
|
||||
export namespace GUI {
|
||||
/**
|
||||
*
|
||||
* the SubWindow class is the abstract prototype of all
|
||||
* modal windows or dialogs definition in AntOS
|
||||
*
|
||||
* @export
|
||||
* @abstract
|
||||
@ -34,12 +27,26 @@ namespace OS {
|
||||
* @extends {BaseModel}
|
||||
*/
|
||||
export abstract class SubWindow extends BaseModel {
|
||||
modal: false;
|
||||
/**
|
||||
* Placeholder indicates whether the sub window is in
|
||||
* modal mode. This value is reserver for future use
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SubWindow
|
||||
*/
|
||||
modal: boolean;
|
||||
|
||||
/**
|
||||
* Reference to the parent of the current sub-window
|
||||
*
|
||||
* @type {(BaseModel | typeof GUI)}
|
||||
* @memberof SubWindow
|
||||
*/
|
||||
parent: BaseModel | typeof GUI;
|
||||
|
||||
/**
|
||||
*Creates an instance of SubWindow.
|
||||
* @param {string} name
|
||||
* @param {string} name SubWindow (class) name
|
||||
* @memberof SubWindow
|
||||
*/
|
||||
constructor(name: string) {
|
||||
@ -49,7 +56,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Exit the sub-window
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof SubWindow
|
||||
@ -69,7 +76,11 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Init the sub-window, this function is called
|
||||
* on creation of the sub-window object. It is used
|
||||
* to render the sub-window UI.
|
||||
*
|
||||
* Need to be implemented by subclasses
|
||||
*
|
||||
* @abstract
|
||||
* @memberof SubWindow
|
||||
@ -77,7 +88,7 @@ namespace OS {
|
||||
abstract init(): void;
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point after rendering of the sub-window
|
||||
*
|
||||
* @abstract
|
||||
* @memberof SubWindow
|
||||
@ -85,7 +96,8 @@ namespace OS {
|
||||
abstract main(): void;
|
||||
|
||||
/**
|
||||
*
|
||||
* Return the parent meta-data of the current
|
||||
* sub-window
|
||||
*
|
||||
* @returns {API.PackageMetaType}
|
||||
* @memberof SubWindow
|
||||
@ -98,7 +110,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Show the sub-window
|
||||
*
|
||||
* @memberof SubWindow
|
||||
*/
|
||||
@ -108,7 +120,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Hide the sub-window
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof SubWindow
|
||||
@ -121,7 +133,7 @@ namespace OS {
|
||||
SubWindow.type = ModelType.SubWindow;
|
||||
|
||||
/**
|
||||
*
|
||||
* Abstract prototype of all AntOS dialogs widget
|
||||
*
|
||||
* @export
|
||||
* @abstract
|
||||
@ -129,13 +141,24 @@ namespace OS {
|
||||
* @extends {SubWindow}
|
||||
*/
|
||||
export abstract class BaseDialog extends SubWindow {
|
||||
/**
|
||||
* Placeholder for the dialog callback on exit
|
||||
*
|
||||
* @memberof BaseDialog
|
||||
*/
|
||||
handle: (d: any) => void;
|
||||
|
||||
/**
|
||||
* Placeholder of the dialog input data
|
||||
*
|
||||
* @type {GenericObject<any>}
|
||||
* @memberof BaseDialog
|
||||
*/
|
||||
data: GenericObject<any>;
|
||||
title: string;
|
||||
|
||||
/**
|
||||
*Creates an instance of BaseDialog.
|
||||
* @param {string} name
|
||||
* @param {string} name Dialog (class) name
|
||||
* @memberof BaseDialog
|
||||
*/
|
||||
constructor(name: string) {
|
||||
@ -143,9 +166,8 @@ namespace OS {
|
||||
this.handle = undefined;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Function called when dialog exits
|
||||
*
|
||||
* @protected
|
||||
* @param {BaseEvent} e
|
||||
@ -160,20 +182,41 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* A basic dialog renders a dialog widget using the UI
|
||||
* scheme provided in it constructor or defined in its
|
||||
* class variable `scheme`
|
||||
*
|
||||
* @export
|
||||
* @class BasicDialog
|
||||
* @extends {BaseDialog}
|
||||
*/
|
||||
export class BasicDialog extends BaseDialog {
|
||||
markup: string | OS.API.VFS.BaseFileHandle;
|
||||
/**
|
||||
* Placeholder for the UI scheme to be rendered. This can
|
||||
* be either the string definition of the scheme or
|
||||
* the VFS file handle of the scheme file
|
||||
*
|
||||
* @private
|
||||
* @type {(string | OS.API.VFS.BaseFileHandle)}
|
||||
* @memberof BasicDialog
|
||||
*/
|
||||
private markup: string | OS.API.VFS.BaseFileHandle;
|
||||
|
||||
/**
|
||||
* If the `markup` variable is not provided, the
|
||||
* the [[init]] function will find the scheme definition
|
||||
* in this class variable
|
||||
*
|
||||
* @static
|
||||
* @type {string}
|
||||
* @memberof BasicDialog
|
||||
*/
|
||||
static scheme: string;
|
||||
|
||||
/**
|
||||
*Creates an instance of BasicDialog.
|
||||
* @param {string} name
|
||||
* @param {(string | OS.API.VFS.BaseFileHandle)} [markup]
|
||||
* @param {string} name dialog name
|
||||
* @param {(string | OS.API.VFS.BaseFileHandle)} [markup] UI scheme definition
|
||||
* @memberof BasicDialog
|
||||
*/
|
||||
constructor(
|
||||
@ -185,7 +228,8 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Render the dialog using the UI scheme provided by either
|
||||
* the `markup` instance variable or the `scheme` class variable
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BasicDialog
|
||||
@ -193,11 +237,7 @@ namespace OS {
|
||||
init(): void {
|
||||
if (this.markup) {
|
||||
if (typeof this.markup === "string") {
|
||||
return GUI.htmlToScheme(
|
||||
this.markup,
|
||||
this,
|
||||
this.host
|
||||
);
|
||||
return GUI.htmlToScheme(this.markup, this, this.host);
|
||||
} else {
|
||||
// a file handle
|
||||
return this.render(this.markup.path);
|
||||
@ -207,20 +247,14 @@ namespace OS {
|
||||
GUI.dialogs[this.name].scheme
|
||||
) {
|
||||
const html: string = GUI.dialogs[this.name].scheme;
|
||||
return GUI.htmlToScheme(
|
||||
html.trim(),
|
||||
this,
|
||||
this.host
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GUI.htmlToScheme(html.trim(), this, this.host);
|
||||
} else {
|
||||
this.error(__("Unable to find dialog scheme"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point for the dialog
|
||||
*
|
||||
* @memberof BasicDialog
|
||||
*/
|
||||
@ -234,9 +268,25 @@ namespace OS {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The namespace `dialogs` is dedicated to all Dialog definition
|
||||
* in AntOS
|
||||
*/
|
||||
export namespace dialogs {
|
||||
/**
|
||||
* Simple prompt dialog to get user input text.
|
||||
* The input date of the dialog:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string, // window title
|
||||
* label: string, // label text
|
||||
* value: string // user input text
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* The data passing from the dialog to the callback function is
|
||||
* in the string text of the user input value
|
||||
*
|
||||
* @export
|
||||
* @class PromptDialog
|
||||
@ -252,7 +302,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point
|
||||
*
|
||||
* @memberof PromptDialog
|
||||
*/
|
||||
@ -294,7 +344,9 @@ namespace OS {
|
||||
$input.focus();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition of the Prompt dialog
|
||||
*/
|
||||
PromptDialog.scheme = `\
|
||||
<afx-app-window width='200' height='150' apptitle = "Prompt">
|
||||
<afx-vbox>
|
||||
@ -318,7 +370,11 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
* A text dialog is similar to a [[PromptDialog]] nut allows
|
||||
* user to input multi-line text.
|
||||
*
|
||||
* Refer to [[PromptDialog]] for the definition of input and callback data
|
||||
* of the dialog
|
||||
*
|
||||
* @export
|
||||
* @class TextDialog
|
||||
@ -334,7 +390,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point
|
||||
*
|
||||
* @memberof TextDialog
|
||||
*/
|
||||
@ -365,7 +421,9 @@ namespace OS {
|
||||
$input.focus();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
TextDialog.scheme = `\
|
||||
<afx-app-window data-id = "TextDialog" width='400' height='300'>
|
||||
<afx-vbox>
|
||||
@ -388,7 +446,7 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
*
|
||||
* A Calendar dialog allows user to select a date
|
||||
*
|
||||
* @export
|
||||
* @class CalendarDialog
|
||||
@ -396,7 +454,19 @@ namespace OS {
|
||||
*/
|
||||
export class CalendarDialog extends BasicDialog {
|
||||
/**
|
||||
*Creates an instance of CalendarDialog.
|
||||
* Creates an instance of CalendarDialog.
|
||||
*
|
||||
* Input data:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string // window title
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* Callback data: a Date object represent the selected date
|
||||
*
|
||||
*
|
||||
* @memberof CalendarDialog
|
||||
*/
|
||||
constructor() {
|
||||
@ -431,7 +501,9 @@ namespace OS {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
CalendarDialog.scheme = `\
|
||||
<afx-app-window width='300' height='230' apptitle = "Calendar" >
|
||||
<afx-vbox>
|
||||
@ -455,7 +527,16 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
* Color picker dialog
|
||||
*
|
||||
* Input data:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string // window title
|
||||
* }
|
||||
* ```
|
||||
* Callback data: [[ColorType]] object
|
||||
*
|
||||
* @export
|
||||
* @class ColorPickerDialog
|
||||
@ -499,7 +580,9 @@ namespace OS {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
ColorPickerDialog.scheme = `\
|
||||
<afx-app-window width='320' height='250' apptitle = "Color picker" >
|
||||
<afx-vbox>
|
||||
@ -523,7 +606,18 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
* Show key-value pair of the input object
|
||||
*
|
||||
* Input data:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string, // window title
|
||||
* [propName:string]: any
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* No data for callback
|
||||
*
|
||||
* @export
|
||||
* @class InfoDialog
|
||||
@ -566,7 +660,9 @@ namespace OS {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
InfoDialog.scheme = `\
|
||||
<afx-app-window width='250' height='300' apptitle = "Info" >
|
||||
<afx-vbox>
|
||||
@ -588,6 +684,26 @@ namespace OS {
|
||||
</afx-app-window>\
|
||||
`;
|
||||
|
||||
/**
|
||||
* A simple confirm dialog
|
||||
*
|
||||
* Input data:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string, // window title
|
||||
* icon?: string, // label icon
|
||||
* iconclass?: string, // label iconclass
|
||||
* text: string // label text
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* Callback data: `boolean`
|
||||
*
|
||||
* @export
|
||||
* @class YesNoDialog
|
||||
* @extends {BasicDialog}
|
||||
*/
|
||||
export class YesNoDialog extends BasicDialog {
|
||||
/**
|
||||
*Creates an instance of YesNoDialog.
|
||||
@ -598,7 +714,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point
|
||||
*
|
||||
* @memberof YesNoDialog
|
||||
*/
|
||||
@ -625,7 +741,9 @@ namespace OS {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
YesNoDialog.scheme = `\
|
||||
<afx-app-window width='200' height='150' apptitle = "Prompt">
|
||||
<afx-vbox>
|
||||
@ -648,7 +766,22 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
* A selection dialog provide user with a list of options to
|
||||
* select.
|
||||
*
|
||||
* Input data:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string, // window title
|
||||
* data:
|
||||
* {
|
||||
* text: string,
|
||||
* [propName:string]: any
|
||||
* } [] // list data
|
||||
* ```
|
||||
*
|
||||
* Callback data: the selected data in the input list
|
||||
*
|
||||
* @export
|
||||
* @class SelectionDialog
|
||||
@ -664,7 +797,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry
|
||||
*
|
||||
* @memberof SelectionDialog
|
||||
*/
|
||||
@ -694,7 +827,9 @@ namespace OS {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
SelectionDialog.scheme = `\
|
||||
<afx-app-window width='250' height='300' apptitle = "Selection">
|
||||
<afx-vbox>
|
||||
@ -717,7 +852,12 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
* An About dialog is dedicated to show the parent
|
||||
* application meta-data
|
||||
*
|
||||
* Input data: no
|
||||
*
|
||||
* Callback data: no
|
||||
*
|
||||
* @export
|
||||
* @class AboutDialog
|
||||
@ -733,7 +873,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof AboutDialog
|
||||
@ -770,7 +910,9 @@ namespace OS {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
AboutDialog.scheme = `\
|
||||
<afx-app-window data-id = 'about-window' width='300' height='200'>
|
||||
<afx-vbox>
|
||||
@ -795,7 +937,21 @@ namespace OS {
|
||||
`;
|
||||
|
||||
/**
|
||||
* File dialog allows user to select a file/folder
|
||||
*
|
||||
* Input data:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* title: string, // window title
|
||||
* root?: string, // the root path folder of the file view
|
||||
* type?: "file"|"dir"|"app", // file type to be selected
|
||||
* mimes?: string[], // mime types of file to be selected
|
||||
* hidden?: boolean, // show/hide hidden file
|
||||
* file?: string // file name
|
||||
*
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @export
|
||||
* @class FileDialog
|
||||
@ -935,7 +1091,9 @@ namespace OS {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheme definition
|
||||
*/
|
||||
FileDialog.scheme = `\
|
||||
<afx-app-window width='400' height='300'>
|
||||
<afx-hbox>
|
||||
|
@ -1,9 +1,3 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
@ -23,42 +17,92 @@
|
||||
//along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
namespace OS {
|
||||
/**
|
||||
*
|
||||
* Application argument type definition
|
||||
*
|
||||
* @export
|
||||
* @interface AppArgumentsType
|
||||
*/
|
||||
export interface AppArgumentsType {
|
||||
/**
|
||||
* File type to be open by the app
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof AppArgumentsType
|
||||
*/
|
||||
type?: string;
|
||||
|
||||
/**
|
||||
* File path to be opened
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof AppArgumentsType
|
||||
*/
|
||||
path: string;
|
||||
/**
|
||||
* Any other object
|
||||
*/
|
||||
[propName: string]: any;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* Enum definition of different model types
|
||||
*
|
||||
* @export
|
||||
* @enum {number}
|
||||
*/
|
||||
export enum ModelType {
|
||||
/**
|
||||
* Applications
|
||||
*/
|
||||
Application,
|
||||
|
||||
/**
|
||||
* Services
|
||||
*/
|
||||
Service,
|
||||
|
||||
/**
|
||||
* Sub-window such as dialogs
|
||||
*/
|
||||
SubWindow,
|
||||
}
|
||||
/**
|
||||
*
|
||||
* Base AntOS event definition
|
||||
*
|
||||
* @export
|
||||
* @class BaseEvent
|
||||
*/
|
||||
export class BaseEvent {
|
||||
/**
|
||||
* The event name placeholder
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof BaseEvent
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* Placeholder indicates whether the event is forced to
|
||||
* be happen
|
||||
*
|
||||
* @private
|
||||
* @type {boolean}
|
||||
* @memberof BaseEvent
|
||||
*/
|
||||
private force: boolean;
|
||||
|
||||
/**
|
||||
* Placeholder indicates whether the event is prevented.
|
||||
* This value has not effect if `force` is set to `true`
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof BaseEvent
|
||||
*/
|
||||
prevent: boolean;
|
||||
|
||||
/**
|
||||
*Creates an instance of BaseEvent.
|
||||
* @param {string} name
|
||||
* @param {boolean} force
|
||||
* @param {string} name event name
|
||||
* @param {boolean} force indicates whether the event is forced
|
||||
* @memberof BaseEvent
|
||||
*/
|
||||
constructor(name: string, force: boolean) {
|
||||
@ -68,7 +112,8 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Prevent the current event. This function
|
||||
* has no effect if `force` is set to true
|
||||
*
|
||||
* @memberof BaseEvent
|
||||
*/
|
||||
@ -80,34 +125,164 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* The root model of all applications, dialogs or services
|
||||
* in the system
|
||||
*
|
||||
* @export
|
||||
* @abstract
|
||||
* @class BaseModel
|
||||
*/
|
||||
export abstract class BaseModel {
|
||||
/**
|
||||
* The class name
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* The argument of the model
|
||||
*
|
||||
* @type {AppArgumentsType[]}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
args: AppArgumentsType[];
|
||||
|
||||
/**
|
||||
* Each model has its own local announcement system
|
||||
* to handle all local events inside that model.
|
||||
*
|
||||
* This observable object is propagate to all the
|
||||
* UI elements ([[AFXTag]]) inside the model
|
||||
*
|
||||
* @protected
|
||||
* @type {API.Announcer}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected _observable: API.Announcer;
|
||||
|
||||
/**
|
||||
* Reference to the core API namespace
|
||||
*
|
||||
* @protected
|
||||
* @type {typeof API}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected _api: typeof API;
|
||||
|
||||
/**
|
||||
* Reference to the core GUI namespace
|
||||
*
|
||||
* @protected
|
||||
* @type {typeof GUI}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected _gui: typeof GUI;
|
||||
|
||||
/**
|
||||
* Reference to the model's dialog
|
||||
*
|
||||
* @type {GUI.BaseDialog}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
dialog: GUI.BaseDialog;
|
||||
|
||||
/**
|
||||
* The HTML element ID of the virtual desktop
|
||||
*
|
||||
* @protected
|
||||
* @type {string}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected host: string;
|
||||
|
||||
/**
|
||||
* The process number of the current model.
|
||||
* For sub-window this number is the number
|
||||
* of the parent window
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
pid: number;
|
||||
|
||||
/**
|
||||
* Reference the DOM element of the UI scheme belong to
|
||||
* this model
|
||||
*
|
||||
* @type {HTMLElement}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
scheme: HTMLElement;
|
||||
|
||||
/**
|
||||
* Reference to the system setting
|
||||
*
|
||||
* @protected
|
||||
* @type {typeof setting}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected systemsetting: typeof setting;
|
||||
|
||||
/**
|
||||
* Placeholder for the process creation timestamp
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
birth: number;
|
||||
|
||||
/**
|
||||
* Different model type
|
||||
*
|
||||
* @static
|
||||
* @type {ModelType}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
static type: ModelType;
|
||||
|
||||
/**
|
||||
* Allow singleton on this model
|
||||
*
|
||||
* @static
|
||||
* @type {boolean}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
static singleton: boolean;
|
||||
|
||||
/**
|
||||
* The javacript of css dependencies of the model. All dependencies
|
||||
* will be loaded before the model is rendered
|
||||
*
|
||||
* @static
|
||||
* @type {string[]} list of VFS paths of dependencies
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
static dependencies: string[];
|
||||
|
||||
/**
|
||||
* Reference to the CSS Element of the model
|
||||
*
|
||||
* @static
|
||||
* @type {(HTMLElement | string)}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
static style: HTMLElement | string;
|
||||
|
||||
/**
|
||||
* Place holder for model meta-data
|
||||
*
|
||||
* @static
|
||||
* @type {API.PackageMetaType}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
static meta: API.PackageMetaType;
|
||||
|
||||
/**
|
||||
*Creates an instance of BaseModel.
|
||||
* @param {string} name
|
||||
* @param {AppArgumentsType[]} args
|
||||
* @param {string} name class name
|
||||
* @param {AppArgumentsType[]} args arguments
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
constructor(name: string, args: AppArgumentsType[]) {
|
||||
@ -126,12 +301,18 @@ namespace OS {
|
||||
});
|
||||
}
|
||||
|
||||
get observable(): API.Announcer
|
||||
{
|
||||
/**
|
||||
* Getter: get the local announcer object
|
||||
*
|
||||
* @readonly
|
||||
* @type {API.Announcer}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
get observable(): API.Announcer {
|
||||
return this._observable;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* Update the model locale
|
||||
*
|
||||
* @protected
|
||||
* @param {string} name
|
||||
@ -139,10 +320,10 @@ namespace OS {
|
||||
*/
|
||||
protected updateLocale(name: string) {}
|
||||
/**
|
||||
*
|
||||
* Render the model's UI
|
||||
*
|
||||
* @protected
|
||||
* @param {string} p
|
||||
* @param {string} p VFS path to the UI scheme definition
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -151,9 +332,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Exit the model
|
||||
*
|
||||
*
|
||||
* @param {boolean} force
|
||||
* @param {boolean} force set this value to `true` will bypass the prevented exit event by user
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -171,7 +352,8 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Model meta data, need to be implemented by
|
||||
* subclasses
|
||||
*
|
||||
* @abstract
|
||||
* @returns {API.PackageMetaType}
|
||||
@ -180,7 +362,7 @@ namespace OS {
|
||||
abstract meta(): API.PackageMetaType;
|
||||
|
||||
/**
|
||||
*
|
||||
* VFS path to the model asset
|
||||
*
|
||||
* @returns {string}
|
||||
* @memberof BaseModel
|
||||
@ -193,13 +375,20 @@ namespace OS {
|
||||
return null;
|
||||
}
|
||||
|
||||
// call a server side script
|
||||
|
||||
/**
|
||||
*
|
||||
* Execute a server side script and get back the result
|
||||
*
|
||||
* @protected
|
||||
* @param {GenericObject<any>} cmd
|
||||
* @param {GenericObject<any>} cmd execution indication, should be:
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* path?: string, // VFS path to the server side script
|
||||
* code: string, // or server side code to be executed
|
||||
* parameters: any // the parameters of the server side execution
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @returns {Promise<any>}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -208,7 +397,18 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to the server side api using a websocket connection
|
||||
*
|
||||
* Server side script can be execute inside the stream by writing
|
||||
* data in JSON format with the following interface
|
||||
*
|
||||
* ```
|
||||
* {
|
||||
* path?: string, // VFS path to the server side script
|
||||
* code: string, // or server side code to be executed
|
||||
* parameters: any // the parameters of the server side execution
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @protected
|
||||
* @returns {Promise<WebSocket>}
|
||||
@ -219,7 +419,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Init the model before UI rendering
|
||||
*
|
||||
* @abstract
|
||||
* @memberof BaseModel
|
||||
@ -227,7 +427,7 @@ namespace OS {
|
||||
abstract init(): void;
|
||||
|
||||
/**
|
||||
*
|
||||
* Main entry point after UI rendering
|
||||
*
|
||||
* @abstract
|
||||
* @memberof BaseModel
|
||||
@ -235,7 +435,7 @@ namespace OS {
|
||||
abstract main(): void;
|
||||
|
||||
/**
|
||||
*
|
||||
* Show the model
|
||||
*
|
||||
* @abstract
|
||||
* @memberof BaseModel
|
||||
@ -243,33 +443,29 @@ namespace OS {
|
||||
abstract show(): void;
|
||||
|
||||
/**
|
||||
*
|
||||
* Hide the model
|
||||
*
|
||||
* @abstract
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
abstract hide(): void;
|
||||
|
||||
//implement by sub class
|
||||
|
||||
/**
|
||||
*
|
||||
* Function called when the model exits
|
||||
*
|
||||
* @protected
|
||||
* @abstract
|
||||
* @param {BaseEvent} e
|
||||
* @param {BaseEvent} e exit event
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected abstract onexit(e: BaseEvent): void;
|
||||
//implement by subclass
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* subscribe once to a local event
|
||||
*
|
||||
* @protected
|
||||
* @param {string} e
|
||||
* @param {(d: any) => void} f
|
||||
* @param {string} e name of the event
|
||||
* @param {(d: any) => void} f event callback
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -277,13 +473,12 @@ namespace OS {
|
||||
return this.observable.one(e, f);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Subscribe to a local event
|
||||
*
|
||||
* @protected
|
||||
* @param {string} e
|
||||
* @param {(d: any) => void} f
|
||||
* @param {string} e event name
|
||||
* @param {(d: any) => void} f event callback
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -291,13 +486,12 @@ namespace OS {
|
||||
return this.observable.on(e, f);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Unsubscribe an event
|
||||
*
|
||||
* @protected
|
||||
* @param {string} e
|
||||
* @param {(d: any) => void} [f]
|
||||
* @param {string} e event name or `*` (all events)
|
||||
* @param {(d: any) => void} [f] callback to be unsubscribed, can be `undefined`
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -308,28 +502,26 @@ namespace OS {
|
||||
return this.observable.off(e, f);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* trigger a local event
|
||||
*
|
||||
* @protected
|
||||
* @param {string} e
|
||||
* @param {*} [d]
|
||||
* @param {string} e event name
|
||||
* @param {*} [d] event data
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
trigger(e: string, d?: any): void {
|
||||
if(!this.observable) return;
|
||||
if (!this.observable) return;
|
||||
this.observable.trigger(e, d);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* subscribe to an event on the global announcement system
|
||||
*
|
||||
* @protected
|
||||
* @param {string} e
|
||||
* @param {(d: any) => void} f
|
||||
* @param {string} e event name
|
||||
* @param {(d: any) => void} f event callback
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -337,13 +529,14 @@ namespace OS {
|
||||
return announcer.on(e, f, this);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Open a dialog
|
||||
*
|
||||
*
|
||||
* @param {(GUI.BaseDialog | string)} d
|
||||
* @param {GenericObject<any>} [data]
|
||||
* @returns {Promise<any>}
|
||||
* @param {(GUI.BaseDialog | string)} d a dialog object or a dialog class name
|
||||
* @param {GenericObject<any>} [data] input data of the dialog, refer to each
|
||||
* dialog definition for the format of the input data
|
||||
* @returns {Promise<any>} A promise on the callback data of the dialog, refer
|
||||
* to each dialog definition for the format of the callback data
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
openDialog(
|
||||
@ -369,32 +562,30 @@ namespace OS {
|
||||
this.dialog.handle = resolve;
|
||||
this.dialog.pid = this.pid;
|
||||
this.dialog.data = data;
|
||||
if (data && data.title) {
|
||||
this.dialog.title = data.title;
|
||||
}
|
||||
|
||||
return this.dialog.init();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Open a [[YesNoDialog]] to confirm a task
|
||||
*
|
||||
* @protected
|
||||
* @param {GenericObject<any>} data
|
||||
* @returns {Promise<any>}
|
||||
* @param {GenericObject<any>} data [[YesNoDialog]] input data
|
||||
* @returns {Promise<boolean>}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
protected ask(data: GenericObject<any>): Promise<any> {
|
||||
protected ask(data: GenericObject<any>): Promise<boolean> {
|
||||
return this._gui.openDialog("YesNoDialog", data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Trigger a global event
|
||||
*
|
||||
* @protected
|
||||
* @param {string} t
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {Error} [e]
|
||||
* @param {string} t event name
|
||||
* @param {(string | FormattedString)} m event message
|
||||
* @param {Error} [e] error object if any
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -421,9 +612,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish a global notification
|
||||
*
|
||||
*
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {(string | FormattedString)} m notification string
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -432,9 +623,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish a global warning
|
||||
*
|
||||
*
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {(string | FormattedString)} m warning string
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -443,10 +634,10 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Report a global error
|
||||
*
|
||||
*
|
||||
* @param {(string | FormattedString)} m
|
||||
* @param {Error} [e]
|
||||
* @param {(string | FormattedString)} m error message
|
||||
* @param {Error} [e] error object if any
|
||||
* @returns
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -455,10 +646,10 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Report a global fail event
|
||||
*
|
||||
*
|
||||
* @param {string} m
|
||||
* @param {Error} [e]
|
||||
* @param {string} m fail message
|
||||
* @param {Error} [e] error object if any
|
||||
* @returns
|
||||
* @memberof BaseModel
|
||||
*/
|
||||
@ -467,7 +658,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Throw an error inside the model
|
||||
*
|
||||
* @returns {Error}
|
||||
* @memberof BaseModel
|
||||
@ -477,7 +668,7 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Update the model, this will update all its UI elements
|
||||
*
|
||||
* @returns {void}
|
||||
* @memberof BaseModel
|
||||
@ -489,7 +680,8 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Find a HTMLElement in the UI of the model
|
||||
* using the `data-id` attribute of the element
|
||||
*
|
||||
* @protected
|
||||
* @param {string} id
|
||||
@ -503,7 +695,8 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Select all DOM Element inside the UI of the model
|
||||
* using JQuery selector
|
||||
*
|
||||
* @protected
|
||||
* @param {string} sel
|
||||
|
@ -1,9 +1,3 @@
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS208: Avoid top-level this
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
// Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||||
|
||||
// AnTOS Web desktop is is licensed under the GNU General Public
|
||||
|
@ -119,11 +119,18 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter to set the selected application in the dock
|
||||
* Setter:
|
||||
*
|
||||
* set the selected application in the dock
|
||||
* this will trigger two event:
|
||||
* - `focus`: on the selected application
|
||||
* - `blur`: on all other applications on the dock
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the current selected application
|
||||
* on the dock
|
||||
*
|
||||
* @memberof AppDockTag
|
||||
*/
|
||||
set selectedApp(v: application.BaseApplication) {
|
||||
@ -143,13 +150,6 @@ namespace OS {
|
||||
($(Ant.OS.GUI.workspace)[0] as FloatListTag).unselect();
|
||||
}
|
||||
|
||||
/**
|
||||
* getter to get the current selected application
|
||||
* on the dock
|
||||
*
|
||||
* @type {BaseApplication}
|
||||
* @memberof AppDockTag
|
||||
*/
|
||||
get selectedApp(): application.BaseApplication {
|
||||
return this._selectedApp;
|
||||
}
|
||||
|
@ -66,7 +66,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text of the button
|
||||
* Setter: Set the text of the button
|
||||
*
|
||||
* Getter: Get the current button test
|
||||
*
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
@ -74,37 +76,28 @@ namespace OS {
|
||||
(this.refs.label as LabelTag).text = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current button test
|
||||
*
|
||||
* @type {(string| FormattedString)}
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
get text(): string | FormattedString {
|
||||
return (this.refs.label as LabelTag).text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable the button
|
||||
* Setter: Enable or disable the button
|
||||
*
|
||||
* Getter: Get the `enable` property of the button
|
||||
*
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
set enable(v: boolean) {
|
||||
$(this.refs.button).prop("disabled", !v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the `enable` property of the button
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
get enable(): boolean {
|
||||
return !$(this.refs.button).prop("disabled");
|
||||
}
|
||||
|
||||
/**
|
||||
* set or remove the attribute `selected` of the button
|
||||
* Setter: set or remove the attribute `selected` of the button
|
||||
*
|
||||
* Getter: check whether the attribute `selected` of the button is set
|
||||
*
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
@ -115,32 +108,20 @@ namespace OS {
|
||||
$(this.refs.button).addClass("selected");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check whether the attribute `selected` of the button is set
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
get selected(): boolean {
|
||||
return this.hasattr("selected");
|
||||
}
|
||||
|
||||
/**
|
||||
* activate or deactivate the toggle mode of the button
|
||||
* Setter: activate or deactivate the toggle mode of the button
|
||||
*
|
||||
* Getter: Check whether the button is in toggle mode
|
||||
*
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
set toggle(v: boolean) {
|
||||
this.attsw(v, "toggle");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the button is in toggle mode
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ButtonTag
|
||||
*/
|
||||
get toggle(): boolean {
|
||||
return this.hasattr("toggle");
|
||||
}
|
||||
|
@ -142,53 +142,53 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* chang the view of the widget, there are three different views
|
||||
* - `icon`
|
||||
* - `list`
|
||||
* - `tree`
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the current view setting of the widget
|
||||
*
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
set view(v: string) {
|
||||
$(this).attr("view", v);
|
||||
this.switchView();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current view setting of the widget
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
get view(): string {
|
||||
return $(this).attr("view");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Turn on/off the changing current working directory feature
|
||||
* of the widget when a directory is double clicked. If enabled,
|
||||
* the widget will use the configured [[fetch]] function to query
|
||||
* the content of the selected directory
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* check whether changing current working directory feature
|
||||
* is enabled
|
||||
*
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
set chdir(v: boolean) {
|
||||
this.attsw(v, "chdir");
|
||||
}
|
||||
|
||||
/**
|
||||
* check whether changing current working directory feature
|
||||
* is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
get chdir(): boolean {
|
||||
return this.hasattr("chdir");
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable the status bar of the widget
|
||||
* Setter : Enable or disable the status bar of the widget
|
||||
*
|
||||
* Getter: Check whether the status bar is enabled
|
||||
*
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
@ -200,20 +200,20 @@ namespace OS {
|
||||
}
|
||||
$(this.refs.status).hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the status bar is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
get status(): boolean {
|
||||
return this.hasattr("status");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Allow the widget to show or hide hidden file
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Check whether the hidden file should be shown in
|
||||
* the widget
|
||||
*
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
set showhidden(v: boolean) {
|
||||
@ -223,14 +223,6 @@ namespace OS {
|
||||
}
|
||||
this.switchView();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the hidden file should be shown in
|
||||
* the widget
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
get showhidden(): boolean {
|
||||
return this.hasattr("showhidden");
|
||||
}
|
||||
@ -247,11 +239,17 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the path of the current working directory.
|
||||
* When called the widget will refresh the current
|
||||
* working directory using the configured [[fetch]]
|
||||
* function
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the path of the current working directory
|
||||
*
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
set path(v: string) {
|
||||
@ -276,19 +274,14 @@ namespace OS {
|
||||
announcer.oserror(e.toString(), e)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the path of the current working directory
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
get path(): string {
|
||||
return this._path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the data of the current working directory
|
||||
* Setter: Set the data of the current working directory
|
||||
*
|
||||
* Getter: Get the data of the current working directory
|
||||
*
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
@ -299,13 +292,6 @@ namespace OS {
|
||||
this._data = v;
|
||||
this.refreshData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data of the current working directory
|
||||
*
|
||||
* @type {API.FileInfoType[]}
|
||||
* @memberof FileViewTag
|
||||
*/
|
||||
get data(): API.FileInfoType[] {
|
||||
return this._data;
|
||||
}
|
||||
|
@ -49,12 +49,19 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the direction of the list item layout.
|
||||
* Two directions are available:
|
||||
* - `vertical`
|
||||
* - `horizontal`
|
||||
*
|
||||
* This setter acts as a DOM attribute
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the currently set direction of list
|
||||
* item layout
|
||||
*
|
||||
* @memberof FloatListTag
|
||||
*/
|
||||
@ -62,14 +69,6 @@ namespace OS {
|
||||
$(this).attr("dir", v);
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the currently set direction of list
|
||||
* item layout
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof FloatListTag
|
||||
*/
|
||||
get dir(): string {
|
||||
return $(this).attr("dir");
|
||||
}
|
||||
|
@ -163,9 +163,15 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the data of the cell, this will trigger
|
||||
* the [[ondatachange]] function
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the current cell data placeholder
|
||||
*
|
||||
* @memberof GridCellPrototype
|
||||
*/
|
||||
set data(v: GenericObject<any>) {
|
||||
@ -177,22 +183,21 @@ namespace OS {
|
||||
}
|
||||
this.selected = v.selected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current cell data placeholder
|
||||
*
|
||||
* @type {GenericObject<any>}
|
||||
* @memberof GridCellPrototype
|
||||
*/
|
||||
get data(): GenericObject<any> {
|
||||
return this._data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set/unset the current cell as selected.
|
||||
* This will trigger the [[cellselect]]
|
||||
* event
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Check whether the current cell is selected
|
||||
*
|
||||
* @memberof GridCellPrototype
|
||||
*/
|
||||
set selected(v: boolean) {
|
||||
@ -203,13 +208,6 @@ namespace OS {
|
||||
}
|
||||
this.cellselect({ id: this.aid, data: this }, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current cell is selected
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof GridCellPrototype
|
||||
*/
|
||||
get selected(): boolean {
|
||||
return this.hasattr("selected");
|
||||
}
|
||||
@ -487,45 +485,37 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* set the tag name of the header cells
|
||||
* Setter: set the tag name of the header cells
|
||||
*
|
||||
* Getter: get the grid header tag name
|
||||
*
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
set headeritem(v: string) {
|
||||
$(this).attr("headeritem", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the grid header tag name
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
get headeritem(): string {
|
||||
return $(this).attr("headeritem");
|
||||
}
|
||||
|
||||
/**
|
||||
* set the tag name of the grid cell
|
||||
* Setter: set the tag name of the grid cell
|
||||
*
|
||||
* Getter: get the tag name of the grid cell
|
||||
*
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
set cellitem(v: string) {
|
||||
$(this).attr("cellitem", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the tag name of the grid cell
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
get cellitem(): string {
|
||||
return $(this).attr("cellitem");
|
||||
}
|
||||
|
||||
/**
|
||||
* get the header data placeholder
|
||||
* Setter: set the header data
|
||||
*
|
||||
* Getter: get the header data placeholder
|
||||
*
|
||||
* @type {GenericObject<any>[]}
|
||||
* @memberof GridViewTag
|
||||
@ -533,12 +523,6 @@ namespace OS {
|
||||
get header(): GenericObject<any>[] {
|
||||
return this._header;
|
||||
}
|
||||
|
||||
/**
|
||||
* the set the header data
|
||||
*
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
set header(v: GenericObject<any>[]) {
|
||||
this._header = v;
|
||||
if (!v || v.length === 0) {
|
||||
@ -592,7 +576,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* set the rows data
|
||||
* Setter: set the rows data
|
||||
*
|
||||
* Getter: get the rows data
|
||||
*
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
@ -601,31 +587,20 @@ namespace OS {
|
||||
this._rows = rows;
|
||||
rows.map((row) => this.push(row, false));
|
||||
}
|
||||
|
||||
/**
|
||||
* get the rows data
|
||||
*
|
||||
* @type {GenericObject<any>[][]}
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
get rows(): GenericObject<any>[][] {
|
||||
return this._rows;
|
||||
}
|
||||
|
||||
/**
|
||||
* activate deactivate multi-select
|
||||
* Setter: activate deactivate multi-select
|
||||
*
|
||||
* Getter: check whether the `multiselect` option is activated
|
||||
*
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
set multiselect(v: boolean) {
|
||||
this.attsw(v, "multiselect");
|
||||
}
|
||||
|
||||
/**
|
||||
* check whether the `multiselect` option is activated
|
||||
* @type {boolean}
|
||||
* @memberof GridViewTag
|
||||
*/
|
||||
get multiselect(): boolean {
|
||||
return this.hasattr("multiselect");
|
||||
}
|
||||
|
@ -102,7 +102,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text of the label
|
||||
* Setter: Set the text of the label
|
||||
*
|
||||
* Getter: Get the text displayed on the label
|
||||
*
|
||||
* @memberof LabelTag
|
||||
*/
|
||||
@ -115,13 +117,6 @@ namespace OS {
|
||||
$(this.refs.text).hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the text displayed on the label
|
||||
*
|
||||
* @type {(string| FormattedString)}
|
||||
* @memberof LabelTag
|
||||
*/
|
||||
get text(): string | FormattedString {
|
||||
return this._text;
|
||||
}
|
||||
|
@ -83,7 +83,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn on/off the `closable` feature of the list item
|
||||
* Setter: Turn on/off the `closable` feature of the list item
|
||||
*
|
||||
* Getter: Check whether the item is closable
|
||||
*
|
||||
* @memberof ListViewItemTag
|
||||
*/
|
||||
@ -95,13 +97,6 @@ namespace OS {
|
||||
$(this.refs.btcl).hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the item is closable
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ListViewItemTag
|
||||
*/
|
||||
get closable(): boolean {
|
||||
return this.hasattr("closable");
|
||||
}
|
||||
@ -115,7 +110,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* select/unselect the current item
|
||||
* Setter: select/unselect the current item
|
||||
*
|
||||
* Getter: Check whether the current item is selected
|
||||
*
|
||||
* @memberof ListViewItemTag
|
||||
*/
|
||||
@ -129,13 +126,6 @@ namespace OS {
|
||||
$(this.refs.item).addClass("selected");
|
||||
this._onselect({ id: this.aid, data: this });
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current item is selected
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ListViewItemTag
|
||||
*/
|
||||
get selected(): boolean {
|
||||
return this.hasattr("selected");
|
||||
}
|
||||
@ -225,22 +215,21 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the data of the list item. This will
|
||||
* trigger the [[ondatachange]] function
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the data of the current list item
|
||||
*
|
||||
* @memberof ListViewItemTag
|
||||
*/
|
||||
set data(v: GenericObject<any>) {
|
||||
this._data = v;
|
||||
this.ondatachange();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data of the current list item
|
||||
*
|
||||
* @type {GenericObject<any>}
|
||||
* @memberof ListViewItemTag
|
||||
*/
|
||||
get data(): GenericObject<any> {
|
||||
return this._data;
|
||||
}
|
||||
@ -509,7 +498,9 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* toggle between dropdown and traditional list
|
||||
* Setter: toggle between dropdown and traditional list
|
||||
*
|
||||
* Getter: Check whether the list is dropdown or traditional list
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
@ -586,52 +577,45 @@ namespace OS {
|
||||
this._onitemclose = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the list is dropdown or traditional list
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
get dropdown(): boolean {
|
||||
return this.hasAttribute("dropdown");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the default tag name of list's items.
|
||||
* If the tag name is not specified in the
|
||||
* data of a list item, this tag will be used
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the default tag name of list item
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
set itemtag(v: string) {
|
||||
$(this).attr("itemtag", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default tag name of list item
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
get itemtag(): string {
|
||||
return $(this).attr("itemtag");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Turn on/off of the `multiselect` feature
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Check whether multi-select is allowed
|
||||
* in this list
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
set multiselect(v: boolean) {
|
||||
this.attsw(v, "multiselect");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether multi-select is allowed
|
||||
* in this list
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
get multiselect() {
|
||||
if (this.dropdown) {
|
||||
return false;
|
||||
@ -640,20 +624,15 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable/disable drag and drop event in the list
|
||||
* Setter: Enable/disable drag and drop event in the list
|
||||
*
|
||||
* Getter: Check whether the drag and drop event is enabled
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
set dragndrop(v: boolean) {
|
||||
this.attsw(v, "dragndrop");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the drag and drop event is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
get dragndrop(): boolean {
|
||||
return this.hasattr("dragndrop");
|
||||
}
|
||||
@ -699,7 +678,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data of the list
|
||||
* Getter: Get data of the list
|
||||
*
|
||||
* Setter: Set data to the list
|
||||
*
|
||||
* @type {GenericObject<any>[]}
|
||||
* @memberof ListViewTag
|
||||
@ -707,12 +688,6 @@ namespace OS {
|
||||
get data(): GenericObject<any>[] {
|
||||
return this._data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set data to the list
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
set data(data: GenericObject<any>[]) {
|
||||
this._data = data;
|
||||
this._selectedItem = undefined;
|
||||
@ -740,7 +715,9 @@ namespace OS {
|
||||
protected ondatachange(): void {}
|
||||
|
||||
/**
|
||||
* Select list item(s) by their indexes
|
||||
* Setter: Select list item(s) by their indexes
|
||||
*
|
||||
* Getter: Get the indexes of all selected items
|
||||
*
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
@ -793,12 +770,6 @@ namespace OS {
|
||||
return this._selectedItems;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the indexes of all selected items
|
||||
*
|
||||
* @type {(number | number[])}
|
||||
* @memberof ListViewTag
|
||||
*/
|
||||
get selected(): number | number[] {
|
||||
if (this.multiselect) {
|
||||
return this.selectedItems.map(function (
|
||||
|
@ -89,25 +89,22 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the `sub menu entry select` event handle
|
||||
* Setter: Set the `sub menu entry select` event handle
|
||||
*
|
||||
* Getter: get the current `sub menu entry select` event handle
|
||||
*
|
||||
* @memberof MenuEntryTag
|
||||
*/
|
||||
set onchildselect(v: TagEventCallback<MenuEventData>) {
|
||||
this._onchildselect = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current `sub menu entry select` event handle
|
||||
*
|
||||
* @type {TagEventCallback}
|
||||
* @memberof MenuEntryTag
|
||||
*/
|
||||
get onchildselect(): TagEventCallback<MenuEventData> {
|
||||
return this._onchildselect;
|
||||
}
|
||||
/**
|
||||
* Set data to the entry
|
||||
* Setter: Set data to the entry
|
||||
*
|
||||
* Getter: Get data of the current menu entry
|
||||
*
|
||||
* @memberof MenuEntryTag
|
||||
*/
|
||||
@ -115,13 +112,6 @@ namespace OS {
|
||||
this._data = data;
|
||||
this.set(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data of the current menu entry
|
||||
*
|
||||
* @type {GenericObject<any>}
|
||||
* @memberof MenuEntryTag
|
||||
*/
|
||||
get data(): GenericObject<any> {
|
||||
return this._data;
|
||||
}
|
||||
@ -180,7 +170,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the sub-menu data
|
||||
* Setter: Set the sub-menu data
|
||||
*
|
||||
* Getter: Get the sub-menu data
|
||||
*
|
||||
* @memberof MenuEntryTag
|
||||
*/
|
||||
@ -204,13 +196,6 @@ namespace OS {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the sub-menu data
|
||||
*
|
||||
* @type {GenericObject<any>[]}
|
||||
* @memberof MenuEntryTag
|
||||
*/
|
||||
get nodes(): GenericObject<any>[] {
|
||||
if (this.data && this.data.nodes) {
|
||||
return this.data.nodes;
|
||||
@ -333,7 +318,9 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* Turn on/off the checker feature of the menu entry
|
||||
* Setter: Turn on/off the checker feature of the menu entry
|
||||
*
|
||||
* Getter: Check whether the checker feature is enabled on this menu entry
|
||||
*
|
||||
* @memberof SimpleMenuEntryTag
|
||||
*/
|
||||
@ -345,19 +332,14 @@ namespace OS {
|
||||
$(this.refs.switch).hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the checker feature is enabled on this menu entry
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SimpleMenuEntryTag
|
||||
*/
|
||||
get switch(): boolean {
|
||||
return this.hasattr("switch");
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn on/off the radio feature of the menu entry
|
||||
* Setter: Turn on/off the radio feature of the menu entry
|
||||
*
|
||||
* Getter: Check whether the radio feature is enabled
|
||||
*
|
||||
* @memberof SimpleMenuEntryTag
|
||||
*/
|
||||
@ -369,21 +351,20 @@ namespace OS {
|
||||
$(this.refs.switch).hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the radio feature is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SimpleMenuEntryTag
|
||||
*/
|
||||
get radio(): boolean {
|
||||
return this.hasattr("radio");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Toggle the switch on the menu entry, this setter
|
||||
* only works when the `checker` or `radio` feature is
|
||||
* enabled
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Check whether the switch is turned on
|
||||
*
|
||||
* @memberof SimpleMenuEntryTag
|
||||
*/
|
||||
@ -395,13 +376,6 @@ namespace OS {
|
||||
}
|
||||
(this.refs.switch as SwitchTag).swon = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the switch is turned on
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SimpleMenuEntryTag
|
||||
*/
|
||||
get checked(): boolean {
|
||||
return this.hasattr("checked");
|
||||
}
|
||||
@ -623,7 +597,9 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* Set the menu items data
|
||||
* Setter: Set the menu items data
|
||||
*
|
||||
* Getter: Get menu items data
|
||||
*
|
||||
* @memberof MenuTag
|
||||
*/
|
||||
@ -632,19 +608,14 @@ namespace OS {
|
||||
$(this.refs.container).empty();
|
||||
data.map((item) => this.push(item, false));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get menu items data
|
||||
*
|
||||
* @type {GenericObject<any>[]}
|
||||
* @memberof MenuTag
|
||||
*/
|
||||
get items(): GenericObject<any>[] {
|
||||
return this._items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether the current menu is a context menu
|
||||
* Setter: Set whether the current menu is a context menu
|
||||
*
|
||||
* Getter: Check whether the current menu is a context menu
|
||||
*
|
||||
* @memberof MenuTag
|
||||
*/
|
||||
@ -657,13 +628,6 @@ namespace OS {
|
||||
$(this.refs.wrapper).addClass("context");
|
||||
$(this).hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current menu is a context menu
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof MenuTag
|
||||
*/
|
||||
get context(): boolean {
|
||||
return this.hasattr("context");
|
||||
}
|
||||
@ -678,22 +642,21 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the default tag name of the menu item.
|
||||
* If the tag is not specified in an item data,
|
||||
* this value will be used
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the default menu entry tag name
|
||||
*
|
||||
* @memberof MenuTag
|
||||
*/
|
||||
set contentag(v: string) {
|
||||
$(this).attr("contentag", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default menu entry tag name
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof MenuTag
|
||||
*/
|
||||
get contentag(): string {
|
||||
return $(this).attr("contentag");
|
||||
}
|
||||
|
@ -149,7 +149,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the spinner value
|
||||
* Setter: Set the spinner value
|
||||
*
|
||||
* Getter: Get the spinner value
|
||||
*
|
||||
* @memberof NSpinnerTag
|
||||
*/
|
||||
@ -160,13 +162,6 @@ namespace OS {
|
||||
this._onchange(evt);
|
||||
this.observable.trigger("nspin", evt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the spinner value
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof NSpinnerTag
|
||||
*/
|
||||
get value(): number {
|
||||
return this._value;
|
||||
}
|
||||
|
@ -64,8 +64,14 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the width of the tag, the tag width should be in form of:
|
||||
* `100px` of `80%`
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the tag width
|
||||
*
|
||||
* @memberof OverlayTag
|
||||
*/
|
||||
@ -76,20 +82,19 @@ namespace OS {
|
||||
this._width = v;
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tag width
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof OverlayTag
|
||||
*/
|
||||
get width(): string {
|
||||
return this._width;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the tag height, the tag height should be in form of:
|
||||
* `100px` of `80%`
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the tag height
|
||||
*
|
||||
* @memberof OverlayTag
|
||||
*/
|
||||
@ -100,13 +105,6 @@ namespace OS {
|
||||
this._height = v;
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tag height
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof OverlayTag
|
||||
*/
|
||||
get height(): string {
|
||||
return this._height;
|
||||
}
|
||||
|
@ -81,22 +81,21 @@ namespace OS {
|
||||
*/
|
||||
protected reload(d?: any): void {}
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set resize direction, two possible values:
|
||||
* - `hz` - horizontal direction, resize by width
|
||||
* - `ve` - vertical direction, resize by height
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the resize direction
|
||||
*
|
||||
* @memberof ResizerTag
|
||||
*/
|
||||
set dir(v: string) {
|
||||
$(this).attr("dir", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the resize direction
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ResizerTag
|
||||
*/
|
||||
get dir(): string {
|
||||
return $(this).attr("dir");
|
||||
}
|
||||
|
@ -100,7 +100,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable/disable the slider
|
||||
* Setter: Enable/disable the slider
|
||||
*
|
||||
* Getter: Check whether the slider is enabled
|
||||
*
|
||||
* @memberof SliderTag
|
||||
*/
|
||||
@ -119,19 +121,14 @@ namespace OS {
|
||||
$(this).unbind("mouseover").unbind("mouseout");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the slider is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SliderTag
|
||||
*/
|
||||
get enable(): boolean {
|
||||
return this.hasattr("enable");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the slider value
|
||||
* Setter: Set the slider value
|
||||
*
|
||||
* Getter: Get the current slider value
|
||||
*
|
||||
* @memberof SliderTag
|
||||
*/
|
||||
@ -139,19 +136,14 @@ namespace OS {
|
||||
this._value = v;
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current slider value
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof SliderTag
|
||||
*/
|
||||
get value(): number {
|
||||
return this._value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the maximum value of the slider
|
||||
* Setter: Set the maximum value of the slider
|
||||
*
|
||||
* Getter: Get the maximum value of the slider
|
||||
*
|
||||
* @memberof SliderTag
|
||||
*/
|
||||
@ -159,13 +151,6 @@ namespace OS {
|
||||
this._max = v;
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the maximum value of the slider
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof SliderTag
|
||||
*/
|
||||
get max(): number {
|
||||
return this._max;
|
||||
}
|
||||
|
@ -19,7 +19,9 @@ namespace OS {
|
||||
private _onchange: TagEventCallback<boolean>;
|
||||
|
||||
/**
|
||||
* Turn on/off the switch
|
||||
* Setter: Turn on/off the switch
|
||||
*
|
||||
* Getter: Check whether the switch is turned on
|
||||
*
|
||||
* @memberof SwitchTag
|
||||
*/
|
||||
@ -30,32 +32,20 @@ namespace OS {
|
||||
$(this.refs.switch).addClass("swon");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the switch is turned on
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SwitchTag
|
||||
*/
|
||||
get swon(): boolean {
|
||||
return this.hasattr("swon");
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the switch
|
||||
* Setter: Enable the switch
|
||||
*
|
||||
* Getter: Check whether the switch is enabled
|
||||
*
|
||||
* @memberof SwitchTag
|
||||
*/
|
||||
set enable(v: boolean) {
|
||||
this.attsw(v, "enable");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the switch is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SwitchTag
|
||||
*/
|
||||
get enable(): boolean {
|
||||
return this.hasattr("enable");
|
||||
}
|
||||
|
@ -69,20 +69,15 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* Enable/disable a tab to be closed
|
||||
* Setter: Enable/disable a tab to be closed
|
||||
*
|
||||
* Getter: Check whether tabs can be closed
|
||||
*
|
||||
* @memberof TabBarTag
|
||||
*/
|
||||
set closable(v: boolean) {
|
||||
this.attsw(v, "closable");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether tabs can be closed
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof TabBarTag
|
||||
*/
|
||||
get closable(): boolean {
|
||||
return this.hasattr("closable");
|
||||
}
|
||||
@ -120,7 +115,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set tabs data
|
||||
* Setter: Set tabs data
|
||||
*
|
||||
* Getter: Get all tabs data
|
||||
*
|
||||
* @memberof TabBarTag
|
||||
*/
|
||||
@ -130,32 +127,20 @@ namespace OS {
|
||||
}
|
||||
(this.refs.list as ListViewTag).data = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all tabs data
|
||||
*
|
||||
* @type {GenericObject<any>[]}
|
||||
* @memberof TabBarTag
|
||||
*/
|
||||
get items(): GenericObject<any>[] {
|
||||
return (this.refs.list as ListViewTag).data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Select a tab by its index
|
||||
* Setter: Select a tab by its index
|
||||
*
|
||||
* Getter: Get the currently selected tab
|
||||
*
|
||||
* @memberof TabBarTag
|
||||
*/
|
||||
set selected(v: number | number[]) {
|
||||
(this.refs.list as ListViewTag).selected = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the currently selected tab
|
||||
*
|
||||
* @type {(number | number[])}
|
||||
* @memberof TabBarTag
|
||||
*/
|
||||
get selected(): number | number[] {
|
||||
return (this.refs.list as ListViewTag).selected;
|
||||
}
|
||||
|
@ -89,9 +89,15 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the tab bar direction:
|
||||
* - `row`: horizontal direction
|
||||
* - `column`: vertical direction
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the tab bar direction
|
||||
*
|
||||
* @memberof TabContainerTag
|
||||
*/
|
||||
@ -102,20 +108,19 @@ namespace OS {
|
||||
}
|
||||
(this.refs.wrapper as TileLayoutTag).dir = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tab bar direction
|
||||
*
|
||||
* @type {("row"| "column")}
|
||||
* @memberof TabContainerTag
|
||||
*/
|
||||
get dir(): "row" | "column" {
|
||||
return $(this).attr("dir") as any;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Select a tab using the its tab data type.
|
||||
* This will show the attached container to the tab
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the tab data of the currently selected Tab
|
||||
*
|
||||
* @memberof TabContainerTag
|
||||
*/
|
||||
@ -131,13 +136,6 @@ namespace OS {
|
||||
$(v.container).show();
|
||||
this.observable.trigger("resize", undefined);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tab data of the currently selected Tab
|
||||
*
|
||||
* @type {TabContainerTabType}
|
||||
* @memberof TabContainerTag
|
||||
*/
|
||||
get selectedTab(): TabContainerTabType {
|
||||
return this._selectedTab;
|
||||
}
|
||||
|
@ -40,7 +40,9 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* Set the name of the tile container, should be: `hbox` or `vbox`
|
||||
* Setter: Set the name of the tile container, should be: `hbox` or `vbox`
|
||||
*
|
||||
* Getter: Get the name of the tile container
|
||||
*
|
||||
* @memberof TileLayoutTag
|
||||
*/
|
||||
@ -54,21 +56,20 @@ namespace OS {
|
||||
.addClass(`afx-${v}-container`);
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the tile container
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof TileLayoutTag
|
||||
*/
|
||||
get name(): string {
|
||||
return $(this).attr("name");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* SET the layout direction, should be:
|
||||
* - `row`: horizontal direction
|
||||
* - `column`: vertical direction
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get layout direction
|
||||
*
|
||||
* @memberof TileLayoutTag
|
||||
*/
|
||||
@ -80,13 +81,6 @@ namespace OS {
|
||||
$(this.refs.yield).css("flex-direction", v);
|
||||
this.calibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get layout direction
|
||||
*
|
||||
* @type {("row"| "column")}
|
||||
* @memberof TileLayoutTag
|
||||
*/
|
||||
get dir(): "row" | "column" {
|
||||
return $(this).attr("dir") as any;
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ namespace OS {
|
||||
/**
|
||||
* Placeholder for the `fetch` function of the node.
|
||||
* This function is used to fetch the child nodes of the
|
||||
* current nodes. This function should a promise on
|
||||
* current nodes. This function should return a promise on
|
||||
* a list of [[TreeViewDataType]]
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
@ -161,9 +161,15 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the data of the current node. This wll trigger the
|
||||
* Setter:
|
||||
*
|
||||
* Set the data of the current node. This will trigger the
|
||||
* [[ondatachange]] function
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the current node's data
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
set data(v: TreeViewDataType) {
|
||||
@ -179,22 +185,21 @@ namespace OS {
|
||||
v.domel = this;
|
||||
this.ondatachange();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current node's data
|
||||
*
|
||||
* @type {TreeViewDataType}
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
get data(): TreeViewDataType {
|
||||
return this._data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Select or unselect the current node.
|
||||
* This will trigger the item select event
|
||||
* on the tree root if the parameter is `true`
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Check whether the current node is selected
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
set selected(v: boolean) {
|
||||
@ -212,22 +217,21 @@ namespace OS {
|
||||
$(this.refs.wrapper).addClass("afx_tree_item_selected");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current node is selected
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
get selected(): boolean {
|
||||
return this.hasattr("selected");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Refresh the current node and expands its sub tree.
|
||||
* This function only works if the current node is not
|
||||
* a leaf node
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Check whether the current node is expanded
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
set open(v: boolean) {
|
||||
@ -265,18 +269,13 @@ namespace OS {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current node is expanded
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
get open(): boolean {
|
||||
return this.hasattr("open");
|
||||
}
|
||||
/**
|
||||
* Get the current indent level
|
||||
* Setter: Set the current indent level of this node from the root node
|
||||
*
|
||||
* Getter: Get the current indent level
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof TreeViewItemPrototype
|
||||
@ -284,12 +283,6 @@ namespace OS {
|
||||
get indent(): number {
|
||||
return this._indent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current indent level of this node from the root node
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
set indent(v: number) {
|
||||
if (!v) {
|
||||
return;
|
||||
@ -320,7 +313,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the child nodes data of the current node
|
||||
* Getter: Get the child nodes data of the current node
|
||||
*
|
||||
* Setter: Set the child nodes data of the current node
|
||||
*
|
||||
* @type {TreeViewDataType[]}
|
||||
* @memberof TreeViewItemPrototype
|
||||
@ -329,12 +324,6 @@ namespace OS {
|
||||
if (!this._data) return undefined;
|
||||
return this._data.nodes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the child nodes data of the current node
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
*/
|
||||
set nodes(nodes: TreeViewDataType[]) {
|
||||
if (!nodes || !this.data) {
|
||||
return;
|
||||
@ -523,7 +512,7 @@ namespace OS {
|
||||
*/
|
||||
export class TreeViewTag extends AFXTag {
|
||||
/**
|
||||
* Reference the the selected node
|
||||
* Reference to the selected node
|
||||
*
|
||||
* @private
|
||||
* @type {TreeViewItemPrototype}
|
||||
@ -646,7 +635,7 @@ namespace OS {
|
||||
/**
|
||||
* Placeholder for the `fetch` function of the tree.
|
||||
* This function is used to fetch the child nodes of the
|
||||
* current tree. This function should a promise on
|
||||
* current tree. This function should return a promise on
|
||||
* a list of [[TreeViewDataType]]
|
||||
*
|
||||
* @memberof TreeViewItemPrototype
|
||||
@ -700,20 +689,15 @@ namespace OS {
|
||||
*/
|
||||
protected reload(d?: any): void {}
|
||||
/**
|
||||
* Enable/disable drag and drop event on the tree
|
||||
* Setter: Enable/disable drag and drop event on the tree
|
||||
*
|
||||
* Getter: Check whether the drag and drop event is enabled
|
||||
*
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
set dragndrop(v: boolean) {
|
||||
this.attsw(v, "dragndrop");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the drag and drop event is enabled
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
get dragndrop(): boolean {
|
||||
return this.hasattr("dragndrop");
|
||||
}
|
||||
@ -737,24 +721,23 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the default tag name of the tree node.
|
||||
* If there is no tag name in the node data,
|
||||
* this value will be used when creating node.
|
||||
*
|
||||
* Defaut to `afx-tree-view-item`
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the default node tag name
|
||||
*
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
set itemtag(v: string) {
|
||||
$(this).attr("itemtag", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default node tag name
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
get itemtag(): string {
|
||||
return $(this).attr("itemtag");
|
||||
}
|
||||
@ -771,7 +754,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the DOM element of the selected node
|
||||
* Setter: Set the selected node using its DOM element
|
||||
*
|
||||
* Getter: Get the DOM element of the selected node
|
||||
*
|
||||
* @type {TreeViewItemPrototype}
|
||||
* @memberof TreeViewTag
|
||||
@ -779,12 +764,6 @@ namespace OS {
|
||||
get selectedItem(): TreeViewItemPrototype {
|
||||
return this._selectedItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the selected node using its DOM element
|
||||
*
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
set selectedItem(v: TreeViewItemPrototype) {
|
||||
if (!v) {
|
||||
return;
|
||||
@ -887,9 +866,15 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter:
|
||||
*
|
||||
* Set the tree data. This operation will create
|
||||
* all tree node elements of the current tree
|
||||
*
|
||||
* Getter:
|
||||
*
|
||||
* Get the tree data
|
||||
*
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
set data(v: TreeViewDataType) {
|
||||
@ -923,13 +908,6 @@ namespace OS {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tree data
|
||||
*
|
||||
* @type {TreeViewDataType}
|
||||
* @memberof TreeViewTag
|
||||
*/
|
||||
get data(): TreeViewDataType {
|
||||
return this._data;
|
||||
}
|
||||
|
@ -120,7 +120,9 @@ namespace OS {
|
||||
protected reload(d?: any): void {}
|
||||
|
||||
/**
|
||||
* Set the window width
|
||||
* Setter: Set the window width
|
||||
*
|
||||
* Getter: Get the window width
|
||||
*
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
@ -131,19 +133,14 @@ namespace OS {
|
||||
}
|
||||
this.setsize({ w: v, h: this.height });
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the window width
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
get width(): number {
|
||||
return this._width;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the window height
|
||||
* Setter: Set the window height
|
||||
*
|
||||
* Getter: Get the window height
|
||||
*
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
@ -157,19 +154,14 @@ namespace OS {
|
||||
h: v,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the window height
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
get height(): number {
|
||||
return this._height;
|
||||
}
|
||||
|
||||
/**
|
||||
* enable/disable window minimizable
|
||||
* Setter: enable/disable window minimizable
|
||||
*
|
||||
* getter: Check whether the window is minimizable
|
||||
*
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
@ -181,19 +173,14 @@ namespace OS {
|
||||
$(this.refs["minbt"]).hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the window is minimizable
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
get minimizable(): boolean {
|
||||
return this.hasattr("minimizable");
|
||||
}
|
||||
|
||||
/**
|
||||
* enable/disable widow resizable
|
||||
* Setter: enable/disable widow resizable
|
||||
*
|
||||
* Getter: Check whether the current window is resizable
|
||||
*
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
@ -207,19 +194,14 @@ namespace OS {
|
||||
$(this.refs["grip"]).hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current window is resizable
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
get resizable(): boolean {
|
||||
return this.hasattr("resizable");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the window title
|
||||
* Setter: Set the window title
|
||||
*
|
||||
* Getter: Get window title
|
||||
*
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
@ -229,13 +211,6 @@ namespace OS {
|
||||
(this.refs["txtTitle"] as LabelTag).text = v;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get window title
|
||||
*
|
||||
* @type {(string| FormattedString)}
|
||||
* @memberof WindowTag
|
||||
*/
|
||||
get apptitle(): string | FormattedString {
|
||||
return $(this).attr("apptitle");
|
||||
}
|
||||
|
@ -360,7 +360,9 @@ namespace OS {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter to set the id of the tag in string or number
|
||||
* Setter: set the id of the tag in string or number
|
||||
*
|
||||
* Getter: get the id of the current tag
|
||||
*
|
||||
* @memberof AFXTag
|
||||
*/
|
||||
@ -368,12 +370,6 @@ namespace OS {
|
||||
$(this).attr("data-id", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter to get the id of the current tag
|
||||
*
|
||||
* @type {(string | number)}
|
||||
* @memberof AFXTag
|
||||
*/
|
||||
get aid(): string | number {
|
||||
return $(this).attr("data-id");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user