antos-frontend/d.ts/antos.d.ts

10482 lines
345 KiB
TypeScript

declare namespace OS {
namespace API {
/**
* Interface for user login data
*
* @export
* @interface UserLoginType
*/
interface UserLoginType {
/**
* The user credential
*
* @type {string}
* @memberof UserLoginType
*/
username: string;
/**
* The user password
*
* @type {string}
* @memberof UserLoginType
*/
password: string;
}
/**
* Interface for a command sent to
* server side package manage, it contains two field:
*
* @export
* @interface PackageCommandType
*/
interface PackageCommandType {
/**
* Command name, should be: `init`, `cache`, `install`,
* `uninstall` or `list`
*
* @type {string}
* @memberof PackageCommandType
*/
command: string;
/**
* Parameter object of each command
*
* @type {GenericObject<any>}
* @memberof PackageCommandType
*/
args: GenericObject<any>;
}
/**
*
* Interface for basic request result returned
* from the server-side. A valid server-side response should
* be in the following format
* ```json
* {
* "error": boolean or string_err,
* "result": JSON result object
* }
* ```
*
* @export
* @interface RequestResult
*/
interface RequestResult {
/**
* Indicate whether the response is error
*
* @type {(boolean | string)}
* @memberof RequestResult
*/
error: boolean | string;
/**
* The response result, this value must be
* set when `error` is false
*
* @type {(string
* | boolean
* | GenericObject<any>
* | any[]
* | FileInfoType
* | FileInfoType[]
* | setting.UserSettingType)}
* @memberof RequestResult
*/
result: string | boolean | GenericObject<any> | any[] | FileInfoType | FileInfoType[] | setting.UserSettingType;
}
/**
* The host name of the server-side
*/
var HOST: string;
/**
* The base URI of the server-side API
*/
var BASE_URI: string;
/**
* The base REST URI of the server-side API
*/
var REST: string;
/**
* The namespace `handle` contains some low level API to
* communicate with the server side API. It is the only
* API layer that communicate directly with the server.
* To make AntOS compatible with any server side API,
* all exported variable unctions defined in the `handle`
* namespace should be re-implemented
*/
namespace handle {
/**
* Base URI for reading content of VFS file
*/
var get: string;
/**
* Base URI for VFS file sharing
*/
var shared: string;
/**
* Send a request to the server-side API for a directory scanning
* operation
*
* @export
* @param {string} p a VFS file path e.g. home://test/
* @returns {Promise<RequestResult>} A promise on a [[RequestResult]]
* which contains an error or a list of FileInfoType
*/
function scandir(p: string): Promise<RequestResult>;
/**
*
* Send a request to the server-side API for directory creation
*
* @export
* @param {string} p VFS path of the directory to be created
* @returns {Promise<RequestResult>} A promise on a RequestResult
* which contains an error or true on success
*/
function mkdir(p: string): Promise<RequestResult>;
/**
* Send a request to the server-side API for sharing/unsharing a VFS file,
* once shared a VFS file will be publicly visible by everyone
*
* @export
* @param {string} p VFS file path to be shared
* @param {boolean} pub flag: share (true) or unshare (false)
* @returns {Promise<RequestResult>} A promise on a RequestResult
* which contains an error or true on success
*/
function sharefile(p: string, pub: boolean): Promise<RequestResult>;
/**
* Get VFS file meta-data
*
* @export
* @param {string} p VFS file path
* @returns {Promise<RequestResult>} A promise on a [[RequestResult]]
* which contains an error or an object of FileInfoType
*/
function fileinfo(p: string): Promise<RequestResult>;
/**
* Read a VFS file content. There are many ways a VFS file can be read:
* - Read as a raw text content
* - Read as a javascript file, in this case the content of the
* file will be executed
* - Read as JSON object
*
* @export
* @param {string} p path of the VFS file
* @param {string} t return data type:
* - jsonp: the response is an json object
* - script: the response is a javascript code
* - xml, html: the response is a XML/HTML object
* - text: plain text
*
* @returns {Promise<any>} A promise on a [[RequestResult]]
* which contains an error or an object of [[FileInfoType]]
*/
function readfile(p: string, t: string): Promise<any>;
/**
* Move a file to another location on server-side
*
* @export
* @param {string} s VFS source file path
* @param {string} d VFS destination file path
* @returns {Promise<RequestResult>} A promise on a [[RequestResult]]
* which contains an error or a success response
*/
function move(s: string, d: string): Promise<RequestResult>;
/**
* Delete a VFS file on the server-side
*
* @export
* @param {string} p VFS file path
* @returns {Promise<RequestResult>} A promise on a [[RequestResult]]
* which contains an error or a success response
*/
function remove(p: string): Promise<RequestResult>;
/**
* Read the file as binary data
*
* @export
* @param {string} p VFS file to be read
* @returns {Promise<ArrayBuffer>} a Promise on an array buffer
*/
function fileblob(p: string): Promise<ArrayBuffer>;
/**
* Send a command to the serverside package manager
*
* @export
* @param {PackageCommandType} d a package command of type PackageCommandType
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]]
*/
function packages(d: PackageCommandType): Promise<RequestResult>;
/**
* Upload file to the server via VFS interface
*
* @export
* @param {string} d VFS destination directory path
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]]
*/
function upload(d: string): Promise<RequestResult>;
/**
* Write Base 64 encoded data to a VFS file
*
* @export
* @param {string} p path to the VFS file
* @param {string} d file data encoded in Base 64
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]]
*/
function write(p: string, d: string): Promise<RequestResult>;
/**
* An apigateway allows client side to execute a custom server-side
* script and get back the result. This gateway is particularly
* useful in case of performing a task that is not provided by the core
* API
*
* @export
* @param {GenericObject<any>} d execution indication, provided only when ws is `false`
* otherwise, `d` should be written directly to the websocket stream as JSON object.
* Two possible formats of `d`:
* ```text
* execute an server-side script file:
*
* {
* path: [VFS path],
* parameters: [parameters of the server-side script]
* }
*
* or, execute directly a snippet of server-side script:
*
* { code: [server-side script code snippet as string] }
*
* ```
*
* @param {boolean} ws flag indicate whether to use websocket for the connection
* to the gateway API. In case of streaming data, the websocket is preferred
* @returns {Promise<any>} a promise on the result object (any)
*/
function apigateway(d: GenericObject<any>, ws: boolean): Promise<any>;
/**
* Check if a user is logged in
*
* @export
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]] that
* contains an error or a [[UserSettingType]] object
*/
function auth(): Promise<RequestResult>;
/**
* Perform a login operation
*
* @export
* @param {UserLoginType} d user data [[UserLoginType]]
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]] that
* contains an error or a [[UserSettingType]] object
*/
function login(d: UserLoginType): Promise<RequestResult>;
/**
* Perform a logout operation
*
* @export
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]]
*/
function logout(): Promise<RequestResult>;
/**
* Save the current user settings
*
* @export
* @returns {Promise<RequestResult>} a promise on a [[RequestResult]]
*/
function setting(): Promise<RequestResult>;
/**
* This is the low level function of AntOS VDB API.
* It requests the server API to perform some simple
* SQL query.
*
* @export
* @param {string} cmd action to perform: save, delete, get, select
* @param {GenericObject<any>} d data object of the request based on each action:
* - save:
* ```
* { table: "table name", data: [record data object]}
* ```
* - get:
* ```
* { table: "table name", id: [record id]}
* ```
* - delete:
* ```
* { table: "table name", id: [record id]}
* or
* { table: "table name", cond: [conditional object]}
* ```
* - select:
* ```
* { table: "table name", cond: [conditional object]}
* ```
* @returns {Promise<RequestResult>} a promise of [[RequestResult]] on the
* query data
*
* A conditional object represents a SQL condition statement as an object,
* example: `pid = 10 AND cid = 2 ORDER BY date DESC`
* ```
* {
* exp: {
* "and": {
* pid: 10,
* cid: 2
* }
* },
* order: {
* date: "DESC"
* }
* }
* ```
*/
function dbquery(cmd: string, d: GenericObject<any>): Promise<RequestResult>;
}
}
}
declare namespace OS {
namespace GUI {
/**
* the SubWindow class is the abstract prototype of all
* modal windows or dialogs definition in AntOS
*
* @export
* @abstract
* @class SubWindow
* @extends {BaseModel}
*/
abstract class SubWindow extends BaseModel {
/**
* 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 SubWindow (class) name
* @memberof SubWindow
*/
constructor(name: string);
/**
* Exit the sub-window
*
* @returns {void}
* @memberof SubWindow
*/
quit(): void;
/**
* 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
*
*
* @returns {void}
* @memberof BaseDialog
*/
init(): void;
/**
* Main entry point after rendering of the sub-window
*
* @abstract
* @memberof SubWindow
*/
abstract main(): void;
/**
* Return the parent meta-data of the current
* sub-window
*
* @returns {API.PackageMetaType}
* @memberof SubWindow
*/
meta(): API.PackageMetaType;
/**
* Show the sub-window
*
* @memberof SubWindow
*/
show(): void;
/**
* Hide the sub-window
*
* @returns {void}
* @memberof SubWindow
*/
hide(): void;
/**
* blur the sub-window
*
* @returns {void}
* @memberof SubWindow
*/
blur(): void;
}
/**
* Abstract prototype of all AntOS dialogs widget
*
* @export
* @abstract
* @class BaseDialog
* @extends {SubWindow}
*/
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>;
/**
*Creates an instance of BaseDialog.
* @param {string} name Dialog (class) name
* @memberof BaseDialog
*/
constructor(name: string);
/**
* Function called when dialog exits
*
* @protected
* @param {BaseEvent} _e
* @returns {void}
* @memberof BaseDialog
*/
protected onexit(_e: BaseEvent): void;
}
/**
* 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}
*/
class BasicDialog extends BaseDialog {
/**
* 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
*
* @protected
* @type {(string | OS.API.VFS.BaseFileHandle)}
* @memberof BasicDialog
*/
protected markup: string | OS.API.VFS.BaseFileHandle;
/**
* If the `markup` variable is not provided, then
* 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 dialog name
* @param {(string | OS.API.VFS.BaseFileHandle)} [markup] UI scheme definition
* @memberof BasicDialog
*/
constructor(name: string, markup?: string | OS.API.VFS.BaseFileHandle);
/**
* Render the dialog using the UI scheme provided by either
* the `markup` instance variable or the `scheme` class variable
*
* @returns {void}
* @memberof BasicDialog
*/
init(): void;
/**
* Main entry point for the dialog
*
* @memberof BasicDialog
*/
main(): void;
}
/**
* The namespace `dialogs` is dedicated to all Dialog definition
* in AntOS
*/
namespace dialogs {
/**
* Simple prompt dialog to get user input text.
* The input data of the dialog:
*
* ```typescript
* {
* title: string, // window title
* label: string, // label text
* value: string, // user input text
* type: string // input type: text or password
* }
* ```
*
* The data passing from the dialog to the callback function is
* in the string text of the user input value
*
* @export
* @class PromptDialog
* @extends {BasicDialog}
*/
class PromptDialog extends BasicDialog {
/**
*Creates an instance of PromptDialog.
* @memberof PromptDialog
*/
constructor();
/**
* Main entry point
*
* @memberof PromptDialog
*/
main(): void;
}
/**
* 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
* @extends {BasicDialog}
*/
class TextDialog extends BasicDialog {
/**
*Creates an instance of TextDialog.
* @memberof TextDialog
*/
constructor();
/**
* Main entry point
*
* @memberof TextDialog
*/
main(): void;
}
/**
* A Calendar dialog allows user to select a date
*
* Input data:
*
* ```typescript
* {
* title: string // window title
* }
* ```
*
* @export
* @class CalendarDialog
* @extends {BasicDialog}
*/
class CalendarDialog extends BasicDialog {
/**
* Creates an instance of CalendarDialog.
*
* Callback data: a Date object represent the selected date
*
*
* @memberof CalendarDialog
*/
constructor();
/**
*
*
* @memberof CalendarDialog
*/
main(): void;
}
/**
* Color picker dialog
*
* Input data:
*
* ```typescript
* {
* title: string // window title
* }
* ```
* Callback data: [[ColorType]] object
*
* @export
* @class ColorPickerDialog
* @extends {BasicDialog}
*/
class ColorPickerDialog extends BasicDialog {
/**
*Creates an instance of ColorPickerDialog.
* @memberof ColorPickerDialog
*/
constructor();
/**
*
*
* @memberof ColorPickerDialog
*/
main(): void;
}
/**
* Show key-value pair of the input object
*
* Input data:
*
* ```typescript
* {
* title: string, // window title
* [propName:string]: any
* }
* ```
*
* No data for callback
*
* @export
* @class InfoDialog
* @extends {BasicDialog}
*/
class InfoDialog extends BasicDialog {
/**
*Creates an instance of InfoDialog.
* @memberof InfoDialog
*/
constructor();
/**
*
*
* @memberof InfoDialog
*/
main(): void;
}
/**
* A simple confirm dialog
*
* Input data:
*
* ```typescript
* {
* title: string, // window title
* icon?: string, // label icon
* iconclass?: string, // label iconclass
* text: string // label text
* }
* ```
*
* Callback data: `boolean`
*
* @export
* @class YesNoDialog
* @extends {BasicDialog}
*/
class YesNoDialog extends BasicDialog {
/**
*Creates an instance of YesNoDialog.
* @memberof YesNoDialog
*/
constructor();
/**
* Main entry point
*
* @memberof YesNoDialog
*/
main(): void;
}
/**
* A selection dialog provide user with a list of options to
* select.
*
* Input data:
*
* ```typescript
* {
* title: string, // window title
* data:
* {
* text: string,
* [propName:string]: any
* } [] // list data
* ```
*
* Callback data: the selected data in the input list
*
* @export
* @class SelectionDialog
* @extends {BasicDialog}
*/
class SelectionDialog extends BasicDialog {
/**
*Creates an instance of SelectionDialog.
* @memberof SelectionDialog
*/
constructor();
/**
* Main entry
*
* @memberof SelectionDialog
*/
main(): void;
}
/**
* An About dialog is dedicated to show the parent
* application meta-data
*
* Input data: no
*
* Callback data: no
*
* @export
* @class AboutDialog
* @extends {BasicDialog}
*/
class AboutDialog extends BasicDialog {
/**
*Creates an instance of AboutDialog.
* @memberof AboutDialog
*/
constructor();
/**
* Main entry point
*
* @returns {void}
* @memberof AboutDialog
*/
main(): void;
}
/**
* File dialog allows user to select a file/folder
*
* Input data:
*
* ```typescript
* {
* 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
*
* }
* ```
*
* Callback data:
*
* ```typescript
* {
* file: string, // selected file path
* name: string // user input file name
* }
* ```
*
* @export
* @class FileDialog
* @extends {BasicDialog}
*/
class FileDialog extends BasicDialog {
/**
*Creates an instance of FileDialog.
* @memberof FileDialog
*/
constructor();
/**
* Store the last opened directory
*
* @static
* @type {string}
* @memberof FileDialog
*/
static last_opened: string;
/**
*
*
* @returns {void}
* @memberof FileDialog
*/
main(): void;
}
/**
* Generic & dynamic key-value dialog. The content
* of the dialog consist of an array of label and input elements
* which are generated based on the input model
*
* The input data of the dialog should be:
*
* ```typescript
* {
* title: string, // window title
* model: {
* [propName:string]: string
* },
* data: {
* [propName:string]: string
* },
* allow_empty: boolean
* }
* ```
* Where:
* - keys of `model` are data fields, each key correspond to an input element
* - values of `model` are description texts of fields, each value correspond to a label text
* - data is the input data object in the format of model (optional)
*
* ```
* Example:
* {
* title: "Greeting",
* model: {
* name: "Your name",
* email: "Your email"
* },
* allow_empty: false
* }
*```
* The data passing from the dialog to the callback function is
* the user input data corresponding to the input model
*
* Example of callback data for the above model:
*
* ```
* {
* name: "John Doe",
* email: "jd@mail.com"
* }
* ```
*
* @export
* @class MultiInputDialog
* @extends {BasicDialog}
*/
class MultiInputDialog extends BasicDialog {
/**
* References to all the input fields in the
* dialog
*
* @private
* @type {HTMLElement[]}
* @memberof MultiInputDialog
*/
private inputs;
/**
*Creates an instance of MultiInputDialog.
* @memberof MultiInputDialog
*/
constructor();
/**
* Generate the scheme before rendering
*
* @memberof MultiInputDialog
*/
init(): void;
/**
* Main entry point
*
* @memberof MultiInputDialog
*/
main(): void;
}
/**
* Generic dynamic key-value dialog
*
* Allow user to input any data key-value based object:
*
* {
* [prop:string]: string;
* }
*
* @export
* @class KeyValueDialog
* @extends {BasicDialog}
*/
class KeyValueDialog extends BasicDialog {
/**
* Reference to the form container
*
* @private
* @type {HTMLDivElement}
* @memberof KeyValueDialog
*/
private container;
/**
* Creates an instance of KeyValueDialog.
* @memberof KeyValueDialog
*/
constructor();
/**
* Main entry point
*
* @memberof KeyValueDialog
*/
main(): void;
/**
* Add new input key-value field to the dialog
*
* @private
* @memberof KeyValueDialog
*/
private addField;
}
}
}
}
/// <reference types="jquery" />
declare namespace OS {
/**
* This namespace is dedicated to all APIs related to AntOS UI system,
* these API are called AFX APIs which handle:
* - The mouse and keyboard interaction with the UI system
* - UI rendering
* - Custom tags definition
* - Load/unload system, applications and services UI
* - System dialogs definition
*/
namespace GUI {
/**
* AntOS keyboard shortcut type definition
*
* @export
* @interface ShortcutType
*/
interface ShortcutType {
/**
* Placeholder for all shortcut callbacks, example:
* ```typescript
* fn_193462204.c = function() {..}
* // this function will be called when the hotkey `ALT-C` is triggered
* // fn_${"ALT".hash()} is fn_193462204
* ```
*
* @memberof ShortcutType
*/
[propName: string]: GenericObject<(e: JQuery.KeyDownEvent) => void>;
}
/**
* Basic item type definition which is usually used by some UI element
* such as list view, tree view, menu and grid view
*
*
* @export
* @interface BasicItemType
*/
interface BasicItemType {
/**
* Item text
*
* @type {(string | FormattedString)}
* @memberof BasicItemType
*/
text: string | FormattedString;
/**
* Item children, usually used by tree view or menu item
* This property is keep for compatibility purposes only.
* Otherwise, the [[nodes]] property should be used
*
* @type {BasicItemType[]}
* @memberof BasicItemType
*/
children?: BasicItemType[];
/**
* Item children, usually used by tree view or menu item
*
* @type {BasicItemType[]}
* @memberof BasicItemType
*/
nodes?: BasicItemType[];
[propName: string]: any;
}
/**
* Element id of the virtual desktop, used by JQuery
*/
var workspace: string;
/**
* Indicate whether the system is in fullscreen mode
*/
var fullscreen: boolean;
/**
* Reference to the current system dialog, only one dialog
* is allowed at a time. A dialog may have sub dialog
*/
var dialog: BaseDialog;
/**
* Convert an application html scheme to
* UI elements, then insert this UI scheme to the DOM tree.
*
* This function renders the UI of the application before calling the
* application's [[main]] function
*
* @export
* @param {string} html html scheme string
* @param {BaseModel} app reference to the target application
* @param {(Element | string)} parent
* The parent HTML element where the application is rendered.
* This is usually the reference to the virtual desktop element.
*/
function htmlToScheme(html: string, app: BaseModel, parent: Element | string): void;
/**
* Load an application scheme file then render
* it with [[htmlToScheme]]
*
* @export
* @param {string} path VFS path to the scheme file
* @param {BaseModel} app the target application
* @param {(HTMLElement | string)} parent The parent HTML element where the application is rendered.
*/
function loadScheme(path: string, app: BaseModel, parent: HTMLElement | string): void;
/**
* Clear the current system theme
*
* @export
*/
function clearTheme(): void;
/**
* Load a theme based on its name, then refresh the
* system UI theme
*
* @export
* @param {string} name name of the theme e.g. `antos_dark`
* @param {boolean} force force to clear the system theme before applying the new one
*/
function loadTheme(name: string, force: boolean): void;
/**
* Get the system dock tag
*
* @export
* @return {*} {GUI.tag.AppDockTag}
*/
function systemDock(): GUI.tag.AppDockTag;
/**
* Get the current virtual desktop
*
* @export
* @return {*} {GUI.tag.DesktopTag}
*/
function desktop(): GUI.tag.DesktopTag;
/**
* Open a system dialog.
*
* @export
* @param {(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
*/
function openDialog(d: string | BaseDialog, data: GenericObject<any>): Promise<any>;
/**
* Find a list of applications that support a specific mime
* type in the system packages meta-data
*
* @export
* @param {string} mime the mime type
* @returns {API.PackageMetaType[]}
*/
function appsByMime(mime: string): API.PackageMetaType[];
/**
* Find all applications that have services attached to it.
* This function allows to collect all the services available
* on the system. These services may or may not be running.
*
* @export
* @returns {GenericObject<API.PackageMetaType>} result in forme of:
* `service_name:service-meta-data` key-value pairs
*/
function appsWithServices(): GenericObject<API.PackageMetaType>;
/**
* Find an launch an application using input application argument
* such as VFS file meta-data.
*
* Based on the input application argument, the function will try
* to find all applications that is compatible with that argument.
* Three cases possible:
* - There is no application that can handle the argument, a message will
* be notified to user.
* - There is one application that can handle the argument, the application
* will be launched with the argument
* - There are many applications that can handle the arguments, a selection
* dialog will be popped up and allows user to select an application to launch.
*
* @export
* @param {AppArgumentsType} it application argument
* @returns {void}
*/
function openWith(it: AppArgumentsType): void;
/**
* Kil all processes related to an application, reload the application
* prototype definition and launch a new process of this application.
*
* This function is used only for debug purpose or used by
* AntOSDK during in-browser application development
*
* @export
* @param {string} app the application class name
* @param {AppArgumentsType[]} args application arguments
* @returns {void}
*/
function forceLaunch(app: string, args: AppArgumentsType[]): void;
/**
* Kill an running processes of an application, then
* unregister the application prototype definition
* from the [[application]] namespace.
*
* This process is similar to uninstall the application
* from the current system state
*
* @export
* @param {string} app
*/
function unloadApp(app: string): void;
/**
* Create a service process.
*
* Services are singleton processes, there is only
* one process of a service at a time
*
* @export
* @param {string} ph
* @returns {Promise<PM.ProcessType>}
*/
function pushService(ph: string): Promise<PM.ProcessType>;
/**
* Synchronously start a list of services
*
* @export
* @param {string[]} srvs list of service class names
* @returns {Promise<void>}
*/
function pushServices(srvs: string[]): Promise<void>;
/**
* Launch an application with arguments
*
* @export
* @param {string} app application class name
* @param {AppArgumentsType[]} args application arguments
*/
function launch(app: string, args: AppArgumentsType[]): Promise<OS.PM.ProcessType>;
/**
* Dock an application to the system application dock
*
* @export
* @param {BaseApplication} app reference to the application process
* @param {API.PackageMetaType} meta Application meta-data
* @returns {void}
*/
function dock(app: OS.application.BaseApplication, meta: API.PackageMetaType): void;
/**
* Toggle system fullscreen
*
* @export
*/
function toggleFullscreen(): void;
/**
* Remove an application process from the system application
* dock. This action will also exit the process
*
* @export
* @param {BaseApplication} app
* @returns
*/
function undock(app: application.BaseApplication): void;
/**
* Attach a running service process to the system tray
*
* @export
* @param {BaseService} srv reference to the running service process
* @returns {void}
*/
function attachservice(srv: application.BaseService): void;
/**
* Detach a running process from the system tray
*
* @export
* @param {BaseService} srv reference to the running service process
* @returns {void}
*/
function detachservice(srv: application.BaseService): void;
/**
* Register a hot key and its handle in the
* system shortcut
*
* @export
* @param {string} k the hotkey e.g. `ALT-C`
* @param {(e: JQuery.KeyPressEvent) => void} f handle function
* @param {boolean} force force to rebind the hotkey
* @returns {void}
*/
function bindKey(k: string, f: (e: JQuery.KeyDownEvent) => void, force?: boolean): void;
/**
* Load and apply system wallpaper from the setting object
*
* @export
* @param {setting.WPSettingType} obj wallpaper setting object
*/
function wallpaper(obj?: setting.WPSettingType): void;
/**
* Refresh the virtual desktop
*
* @export
*/
function refreshDesktop(): void;
/**
* Show the login screen and perform the login operation.
*
* Once login successfully, the [[startAntOS]] will be called
*
* @export
*/
function login(): void;
/**
* Start AntOS after a successful login.
*
* This function performs the following operations:
*
* - System cleanup
* - Apply system setting
* - Load desktop wallpaper and the current theme from the system setting
* - Load system package meta-data
* - Load and apply system locale and language
*
*
* @export
* @param {*} conf
*/
function startAntOS(conf: any): void;
/**
* HTML schemes used by the system:
* - The login screen scheme
* - The workspace including:
* - System panel
* - Virtual desktop
* - Context menu
* - System tooltip
*/
const schemes: GenericObject<string>;
}
}
/**
* Reference to the global this
*/
declare const Ant: typeof globalThis;
/**
* Extend the String prototype with some API
* functions used by AntOS API
*
* @interface String
*/
interface String {
/**
* Simple string hash function
*
* @returns {number}
* @memberof String
*/
hash(): number;
/**
* Parse the current string and convert it
* to an object of type [[Version]] if the string
* is in the format recognized by [[Version]],
* e.g.: `1.0.1-a`
*
* @returns {OS.Version}
* @memberof String
*/
__v(): OS.Version;
/**
* Convert the current string to base 64 string
*
* @returns {string}
* @memberof String
*/
asBase64(): string;
/**
* Unescape all escaped characters on the
* string using `\`
*
* @returns {string}
* @memberof String
*/
unescape(): string;
/**
* Escape the current string using backslash
*
* @returns {string}
* @memberof String
*/
escape(): string;
/**
* Convert the current string to uint8 array
*
* @returns {Uint8Array}
* @memberof String
*/
asUint8Array(): Uint8Array;
/**
* Format the current using input parameters.
* The current string should be a formatted string
* in the following form:
*
* ```typescript
* "example string: {0} and {1}".format("hello", "world")
* // return "example string: hello and world"
* ```
*
* @param {...any[]} args
* @returns {string}
* @memberof String
*/
format(...args: any[]): string;
/**
* Create a [[FormattedString]] object using the current
* string and the input parameters
*
* @param {...any[]} args
* @returns {OS.FormattedString}
* @memberof String
*/
f(...args: any[]): OS.FormattedString;
/**
* Check if the current string is translatable, if it
* is the case, translate the string to the language specified
* in the current system locale setting.
*
* A translatable string is a string in the following
* form: `"__(example string)"`
*
* @returns {string}
* @memberof String
*/
__(): string;
/**
* Translate current string to the language specified
* by the system locale setting
*
* @returns {string}
* @memberof String
*/
l(): string;
/**
* Trim left of a string by a mask string
*
* @param {string} arg specifies a sub-string to be removed
* @returns {string}
* @memberof String
*/
trimFromLeft(arg: string): string;
/**
* Trim right of a string by a mask string
*
* @param {string} arg specifies a sub-string to be removed
* @returns {string}
* @memberof String
*/
trimFromRight(arg: string): string;
/**
* Trim both left and right of a string by a mask string
*
* @param {string} arg specifies a sub-string to be removed
* @returns {string}
* @memberof String
*/
trimBy(arg: string): string;
}
/**
* Extend the Data prototype with the
* [[timestamp]] function
*
* @interface Date
*/
interface Date {
/**
* Return the timestamp of the current Date object
*
* @returns {number}
* @memberof Date
*/
timestamp(): number;
/**
* Covnert to GMTString
*
* @returns {number}
* @memberof Date
*/
toGMTString(): string;
}
/**
* Generic key-value pair object interface
*
* @interface GenericObject
* @template T
*/
interface GenericObject<T> {
[index: string]: T;
}
/**
* Global function to create a [[FormattedString]] from
* a formatted string and a list of parameters. Example
*
* ```typescript
* __("hello {0}", world) // return a FormattedString object
* ```
*
* @param {...any[]} args
* @returns {(OS.FormattedString | string)}
*/
declare function __(...args: any[]): OS.FormattedString | string;
/**
* This global function allow chaining stack trace from one error to
* another. It is particular helping when tracking the source of
* the error in promises chain which results in some obfuscated stack
* traces as the stack resets on every new promise.
*
* @param {Error} e
* @returns {Error}
*/
declare function __e(e: Error): Error;
/**
* This namespace is the main entry point of AntOS
* API
*/
declare namespace OS {
/**
* Represent a translatable formatted string
*
* @export
* @class FormattedString
*/
class FormattedString {
/**
* Format string in the following form
*
* ```typescript
* "format string with {0} and {1}"
* // {[0-9]} is the format pattern
* ```
*
* @type {string}
* @memberof FormattedString
*/
fs: string;
/**
* The value of the format pattern represented
* in [[fs]]
*
* @type {any[]}
* @memberof FormattedString
*/
values: any[];
/**
* Creates an instance of FormattedString.
* @param {string} fs format string
* @param {any[]} args input values of the format patterns
* @memberof FormattedString
*/
constructor(fs: string, args: any[]);
/**
* Convert FormattedString to String
*
* @returns {string}
* @memberof FormattedString
*/
toString(): string;
/**
* Translate the format string to the current system
* locale language, format the string with values and
* then converted it to normal `string`
*
* @returns {string}
* @memberof FormattedString
*/
__(): string;
/**
* Return the hash number of the formatted string
*
* @returns {number}
* @memberof FormattedString
*/
hash(): number;
/**
* Match the formatted string against a regular expression
* a string pattern
*
* @param {(string | RegExp)} t string or regular expression
* @returns {RegExpMatchArray}
* @memberof FormattedString
*/
match(t: string | RegExp): RegExpMatchArray;
/**
* Convert the formatted string to Base^$
*
* @returns {string}
* @memberof FormattedString
*/
asBase64(): string;
/**
* Un escape the formatted string
*
* @returns {string}
* @memberof FormattedString
*/
unescape(): string;
/**
* Escape the formatted string
*
* @returns {string}
* @memberof FormattedString
*/
escape(): string;
/**
* Convert the formatted string to uint8 array
*
* @returns {Uint8Array}
* @memberof FormattedString
*/
asUint8Array(): Uint8Array;
/**
* Input values for the format string
*
* @param {...any[]} args
* @memberof FormattedString
*/
format(...args: any[]): void;
}
/**
* This class represents the Version number format used by AntOS. A typical
* AntOS version number is in the following format:
*
* ```
* [major_number].[minor_number].[patch]-[branch]
*
* e.g.: 1.2.3-r means that:
* - version major number is 1
* - version minor number is 2
* - patch version is 3
* - the current branch is release `r`
* ```
*
* @export
* @class Version
*/
class Version {
/**
* The version string
*
* @type {string}
* @memberof Version
*/
string: string;
/**
* The current branch
* - 1: `a` - alpha branch
* - 2: `b` - beta branch
* - 3: `r` - release branch
*
* @private
* @type {number}
* @memberof Version
*/
private branch;
/**
* Version major number
*
* @type {number}
* @memberof Version
*/
major: number;
/**
* Version minor number
*
* @type {number}
* @memberof Version
*/
minor: number;
/**
* Version patch number
*
* @type {number}
* @memberof Version
*/
patch: number;
/**
*Creates an instance of Version.
* @param {string} string string represents the version
* @memberof Version
*/
constructor(string: string);
/**
* Compare the current version with another version.
*
* The comparison priority is `branch>major>minor>patch`.
*
* For the branch, the priority is `r>b>a`
*
* @param {(string | Version)} o version string or object
* @returns {(0 | 1 | -1)}
* Return 0 if the two versions are the same, 1 if
* the current version is newer than the input version,
* otherwise return -1
* @memberof Version
*/
compare(o: string | Version): 0 | 1 | -1;
/**
* Check if the current version is newer than
* the input version
*
* @param {(string | Version)} o version string or object
* @returns {boolean}
* @memberof Version
*/
nt(o: string | Version): boolean;
/**
* Check if the current version is older than
* the input version
*
* @param {(string | Version)} o version string or object
* @returns {boolean}
* @memberof Version
*/
ot(o: string | Version): boolean;
/**
* Return itself
*
* @returns {Version}
* @memberof Version
*/
__v(): Version;
/**
* Convert Version object to string
*
* @returns {string}
* @memberof Version
*/
toString(): string;
}
/**
* Variable represents the current AntOS version, it
* is an instance of [[Version]]
*/
const VERSION: Version;
/**
* Register a model prototype to the system namespace.
* There are two types of model to be registered, if the model
* is of type [[SubWindow]], its prototype will be registered
* in the [[dialogs]] namespace, otherwise, if the model type
* is [[Application]] or [[Service]], its prototype will be
* registered in the [[application]] namespace.
*
* When a model is loaded in the system, its prototype is registered
* for later uses
*
* @export
* @param {string} name class name
* @param {*} x the corresponding class
* @returns {*}
*/
function register(name: string, x: PM.ModelTypeClass): void;
/**
* This function cleans up the entire system and
* makes sure the system is in a new and clean session.
* It performs the following operations:
*
* - Kill all running processes
* - Unregister all global events and reset the global
* announcement system
* - Clear the current theme
* - Reset process manager and all system settings
*
* @export
*/
function cleanup(): void;
/**
* Booting up AntOS. This function checks whether the user
* is successfully logged in, then call [[startAntOS]], otherwise
* it shows the login screen
*
* @export
*/
function boot(): void;
/**
* Placeholder for all the callbacks that are called when the system
* exits. These callbacks are useful when an application or service wants
* to perform a particular task before shuting down the system
*/
const cleanupHandles: {
[index: string]: () => Promise<any>;
};
/**
* Perform the system shutdown operation. This function calls all
* clean up handles in [[cleanupHandles]], then save the system setting
* before exiting
*
* @export
*/
function exit(): void;
/**
* Register a callback to the system [[cleanupHandles]]
*
* @export
* @param {string} n callback string name
* @param {() => void} f the callback handle
* @returns
*/
function onexit(n: string, f: () => Promise<any>): () => Promise<any>;
/**
* The namespace API is dedicated to the definition of the core system APIs
* used by AntOS and its applications. The following core APIs are defined:
*
* - The AntOS announcement system
* - Virtual File system
* - Virtual Database
* - Low-level REST based client-server communication
* - Dependencies management
* - System utilities
*
* These APIs are considered as middle-ware that abstracts the client-server
* communication and provide the application layer with a standardized APIs
* for file/database access, system events handling (announcement), automatic
* dependencies resolving, etc.
*/
namespace API {
/**
* AntOS package meta-data type definition
*
* @export
* @interface PackageMetaType
*/
interface PackageMetaType {
/**
* The application class name, if the package has only services
* this property is ignored and [[pkgname]] should be specified
*
* @type {string}
* @memberof PackageMetaType
*/
app?: string;
/**
* Package name, in case of [[app]] being undefined, this property
* need to be specified
*
* @type {string}
* @memberof PackageMetaType
*/
pkgname?: string;
/**
* Package category
*
* @type {string}
* @memberof PackageMetaType
*/
category: string;
/**
* Package description string
*
* @type {string}
* @memberof PackageMetaType
*/
description: string;
/**
* List of services that is attached to the
* package
*
* @type {string[]}
* @memberof PackageMetaType
*/
services?: string[];
/**
* CSS icon class of the package
*
* @type {string}
* @memberof PackageMetaType
*/
iconclass?: string;
/**
* VFS application icon path
*
* @type {string}
* @memberof PackageMetaType
*/
icon?: string;
/**
* Package information
*
* @type {{
* author: string;
* email: string;
* [propName: string]: any;
* }}
* @memberof PackageMetaType
*/
info: {
/**
* Author of the package
*
* @type {string}
*/
author: string;
/**
* Author's email
*
* @type {string}
*/
email: string;
[propName: string]: any;
};
/**
* Application-specific locale definition. When the system locale changes,
* translatable texts inside the application will be first translated using
* the locale dictionary defined in the package meta-data. If no translation
* found, the system locale dictionary is used instead.
*
* A local dictionary definition should be in the following format:
*
* ```typescript
* {
* [locale_name: string]: {
* [origin_string]: string // translation string
* }
* }
* ```
*
* Example of locale dictionaries:
*
* ```typescript
* {
* "en_GB": {
* "Cancel": "Cancel",
* "Modify": "Modify"
* },
* "fr_FR": {
* "Cancel": "Annuler",
* "Modify": "Modifier"
* }
* }
* ```
*
* @type {{ [index: string]: GenericObject<string> }} locale dictionaries
* @memberof PackageMetaType
*/
locales: {
[index: string]: GenericObject<string>;
};
/**
* Mime types supported by the packages, regular expression can be used
* to specified a range of mimes in common
*
* @type {string[]}
* @memberof PackageMetaType
*/
mimes: string[];
/**
* Package (application) name
*
* @type {string}
* @memberof PackageMetaType
*/
name: string;
/**
* VFS path to package installation location
*
* @type {string}
* @memberof PackageMetaType
*/
path: string;
/**
* Package version, should be in a format conforming
* to the version definition in [[Version]] class
*
* @type {string}
* @memberof PackageMetaType
*/
version: string;
/**
* Package dependencies, each entry is in the following format
*
* `package_name@version`
*
* Example:
*
* ```json
* [
* "File@0.1.5-b"
* ]
* ```
*
* @type {string[]}
* @memberof PackageMetaType
*/
dependencies: string[];
[propName: string]: any;
}
/**
* Placeholder to store all loaded shared libraries. Once
* a shared library is firstly loaded, its identity will be
* stored in this variable. Based on this information, in
* the next use of the library, the system knows that the
* library is already loaded and ready to use.
*
* A shared library can be a javascript or a CSS file.
*/
const shared: GenericObject<boolean>;
/**
* Placeholder for all global search handles registered to the system.
* These callbacks will be called when user performs the search operation
* in the spotlight UI.
*
* Applications can define their own search handle to provide the spotlight UI
* with additional search results
*
*/
const searchHandle: GenericObject<(text: string) => any[]>;
/**
* Placeholder of the current system locale dictionary, the system uses
* this dictionary to translate all translatable texts to the current
* locale language
*/
var lang: GenericObject<string>;
/**
* Re-export the system announcement [[getMID]] function to the
* core API
*
* @export
* @returns {number}
*/
function mid(): number;
/**
* REST-based API.
*
* Perform a POST request to the server. Data exchanged
* is in `application/json`
*
* @export
* @param {string} p the server URI
* @param {*} d data object that will be converted to JSON
* @returns {Promise<any>} a promise on the result data
*/
function post(p: string, d: any): Promise<any>;
/**
* REST-based API.
*
* Perform a GET request and read back the data in
* `ArrayBuffer` (binary) format. This is useful for
* binary data reading
*
* @export
* @param {string} p resource URI
* @returns {Promise<ArrayBuffer>} a promise on the returned binary data
*/
function blob(p: string): Promise<ArrayBuffer>;
/**
* REST-based API.
*
* Send file to server
*
* @export
* @param {string} p resource URI
* @param {string} d VFS path of the destination file
* @returns {Promise<any>}
*/
function upload(p: string, d: string): Promise<any>;
/**
* REST-based API.
*
* Download a file
*
* @export
* @param {string} name file name
* @param {*} b file content
*/
function saveblob(name: string, b: any): void;
/**
* Helper function to trigger the global `loading`
* event. This event should be triggered in the
* beginning of a heavy task
*
* @export
* @param {number} q message id, see [[mid]]
* @param {string} p message string
*/
function loading(q: number, p: string): void;
/**
* Helper function to trigger the global `loaded`
* event: This event should be triggered in the
* end of a heavy task that has previously triggered
* the `loading` event
*
* @export
* @param {number} q the message id of the corresponding `loading` event
* @param {string} p the message string
* @param {string} m message status (`OK` of `FAIL`)
*/
function loaded(q: number, p: string, m: string): void;
/**
* Perform an REST GET request
*
* @export
* @param {string} p the URI of the request
* @param {string} [t=undefined] the response data type:
* - jsonp: the response is an json object
* - script: the response is a javascript code
* - xm, html: the response is a XML/HTML object
* - text: plain text
* @returns {Promise<any>} a Promise on the requested data
*/
function get(p: string, t?: string): Promise<any>;
/**
* REST-based API
*
* Perform a GET operation and executed the returned
* content as javascript
*
* @export
* @param {string} p URI resource
* @returns {Promise<any>} promise on the executed content
*/
function script(p: string): Promise<any>;
/**
* REST-based API
*
* Get the content of a global asset resource stored
* in `os://resources/`
*
* @export
* @param {string} r relative path to the resource
* @returns {Promise<any>} promise on the returned content
*/
function resource(r: string): Promise<any>;
/**
* Helper function to verify whether a shared library
* is loaded and ready to use
*
* @export
* @param {string} l path to the library
* @returns {boolean}
*/
function libready(l: string): boolean;
/**
* Load a shared library if not ready
*
* @export
* @param {string} l VFS path to the library
* @param {string} force force reload library
* @returns {Promise<void>} a promise on the result data
*/
function requires(l: string, force?: boolean): Promise<void>;
/**
* Synchronously load a list of shared libraries
*
* @export
* @param {string[]} libs list of shared libraries
* @returns {Promise<void>}
*/
function require(libs: string[]): Promise<void>;
/**
* The namespace packages is dedicated to all package management
* related APIs.
*/
namespace packages {
/**
* Fetch the package meta-data from the server
*
* @export
* @returns {Promise<RequestResult>} Promise on a [[RequestResult]].
* A success request result should contain a list of [[PackageMetaType]]
*/
function fetch(): Promise<RequestResult>;
/**
* Request the server to regenerate the package
* caches
*
* @export
* @returns {Promise<RequestResult>}
*/
function cache(): Promise<RequestResult>;
}
/**
* Save the current user setting
*
* @export
* @returns {Promise<RequestResult>} promise on a [[RequestResult]]
*/
function setting(): Promise<RequestResult>;
/**
* An apigateway allows client side to execute a custom server-side
* script and get back the result. This gateway is particularly
* useful in case of performing a task that is not provided by the core
* API
*
* @export
* @param {GenericObject<any>} d execution indication, provided only when ws is `false`
* otherwise, `d` should be written directly to the websocket stream as JSON object.
* Two possible formats of `d`:
* ```text
* execute an server-side script file:
*
* {
* path: [VFS path],
* parameters: [parameters of the server-side script]
* }
*
* or, execute directly a snippet of server-side script:
*
* { code: [server-side script code snippet as string] }
*
* ```
*
* @param {boolean} ws flag indicate whether to use websocket for the connection
* to the gateway API. In case of streaming data, the websocket is preferred
* @returns {Promise<any>} a promise on the result object (any)
*/
function apigateway(d: GenericObject<any>, ws: boolean): Promise<any>;
/**
* Perform the global search operation when user enter
* text in spotlight.
*
* This function will call all the search handles stored
* in [[searchHandle]] and build the search result based
* on output of these handle
*
* @export
* @param {string} text text to search
* @returns {any[]}
*/
function search(text: string): any[];
/**
* Register a search handle to the global [[searchHandle]]
*
* @export
* @param {string} name handle name string
* @param {(text: string) => any[]} fn search handle
*/
function onsearch(name: string, fn: (text: string) => any[]): void;
/**
* Set the current system locale: This function will
* find and load the locale dictionary definition file in the
* system asset resource, then trigger the global event
* `systemlocalechange` to translated all translatable text
* to the target language
*
* @export
* @param {string} name locale name, e.g. `en_GB`
* @returns {Promise<any>}
*/
function setLocale(name: string): Promise<any>;
/**
* Return an error Object: AntOS use this function to
* collect information (stack trace) from user reported
* error.
*
* @export
* @param {(string | FormattedString)} n error string
* @returns {Error}
*/
function throwe(n: string | FormattedString): Error;
/**
* Set value to the system clipboard
*
* @export
* @param {string} v clipboard value
* @returns {boolean}
*/
function setClipboard(v: string): boolean;
/**
* Get the clipboard data
*
* @export
* @returns {Promise<any>} Promise on the clipboard data
*/
function getClipboard(): Promise<any>;
/**
* A switcher object is a special object in which
* each object's property is a boolean option. All object's
* properties are mutual exclusive. It means that when a property
* is set to true, all other properties will be reset to false.
*
* Example:
*
* ```typescript
* let view = API.switcher("tree", "list", "icon")
* view.tree = true // view.list = false and view.icon = false
* view.list = true // view.tree = false and view.icon = false
* ```
*
* @export
* @returns {*}
*/
function switcher(...args: string[]): any;
}
}
/// <reference types="jquery" />
declare 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
*/
namespace application {
/**
* Abstract prototype of all AntOS applications.
* Any new application definition should extend
* this prototype
*
* @export
* @abstract
* @class BaseApplication
* @extends {BaseModel}
*/
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;
/**
* Loading animation check timeout
*
* @private
* @memberof BaseApplication
*/
private _loading_toh;
/**
* Store pending loading task
*
* @private
* @type {number[]}
* @memberof BaseApplication
*/
private _pending_task;
/**
*Creates an instance of BaseApplication.
* @param {string} name application name
* @param {AppArgumentsType[]} args application arguments
* @memberof BaseApplication
*/
constructor(name: string, args: AppArgumentsType[]);
/**
* Init the application, this function is called when the
* application process is created and docked in the application
* dock.
*
* The application UI will be rendered after the execution
* of this function.
*
* @returns {void}
* @memberof BaseApplication
*/
init(): void;
/**
* Render the application UI by first loading its scheme
* and then mount this scheme to the DOM tree
*
* @protected
* @returns {void}
* @memberof BaseApplication
*/
protected loadScheme(): void;
/**
* 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 the promise on a task to be performed
* @returns {Promise<void>}
* @memberof BaseApplication
*/
protected load(promise: Promise<any>): Promise<void>;
/**
* Bind a hotkey to the application, this function
* is used to define application keyboard shortcut
*
* @protected
* @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.KeyboardEventBase) => void): void;
/**
* Update the application local from the system
* locale or application specific locale configuration
*
* @param {string} name locale name e.g. `en_GB`
* @returns {void}
* @memberof BaseApplication
*/
updateLocale(name: string): void;
/**
* Execute the callback subscribed to a
* keyboard shortcut
*
* @param {string} fnk meta or modifier key e.g. `CTRL`, `ALT`, `SHIFT` or `META`
* @param {string} c a regular key
* @param {JQuery.KeyDownEvent} e JQuery keyboard event
* @returns {boolean} return whether the shortcut is executed
* @memberof BaseApplication
*/
shortcut(fnk: string, c: string, e: JQuery.KeyDownEvent): boolean;
/**
* Apply a setting to the application
*
* @protected
* @param {string} k the setting name
* @memberof BaseApplication
*/
protected applySetting(k: string): void;
/**
* Apply all settings to the application
*
* @protected
* @memberof BaseApplication
*/
protected applyAllSetting(): void;
/**
* Set a setting value to the application setting
* registry
*
* @protected
* @param {string} k setting name
* @param {*} v setting value
* @returns {void}
* @memberof BaseApplication
*/
protected registry(k: string, v: any): void;
/**
* Show the appliation
*
* @returns {void}
* @memberof BaseApplication
*/
show(): void;
/**
* Blur the application
*
* @returns {void}
* @memberof BaseApplication
*/
blur(): void;
/**
* Hide the application
*
* @returns {void}
* @memberof BaseApplication
*/
hide(): void;
/**
* Maximize or restore the application window size
* and its position
*
* @returns {void}
* @memberof BaseApplication
*/
toggle(): void;
/**
* Get the application title
*
* @returns {(string| FormattedString)}
* @memberof BaseApplication
*/
title(): string | FormattedString;
/**
* Function called when the application exit.
* If the input exit event is prevented, the application
* process will not be killed
*
*
* @protected
* @param {BaseEvent} evt exit event
* @memberof BaseApplication
*/
protected onexit(evt: BaseEvent): void;
/**
* Get the application meta-data
*
* @returns {API.PackageMetaType}
* @memberof BaseApplication
*/
meta(): API.PackageMetaType;
/**
* Base menu definition. This function
* returns the based menu definition of all applications.
* Other application specific menu entries
* should be defined in [[menu]] function
*
* @protected
* @returns {GUI.BasicItemType[]}
* @memberof BaseApplication
*/
protected baseMenu(): GUI.BasicItemType[];
/**
* 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;
/**
* Application specific menu definition
*
* @protected
* @returns {GUI.BasicItemType[]}
* @memberof BaseApplication
*/
protected menu(): GUI.BasicItemType[];
/**
* 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
* @memberof BaseApplication
*/
protected cleanup(e: BaseEvent): void;
/**
* Check if the loading tasks ended,
* if it the case, stop the animation
*
* @private
* @memberof BaseApplication
*/
private animation_check;
}
}
}
/// <reference types="jquery" />
declare namespace OS {
/**
* Application argument type definition
*
* @export
* @interface AppArgumentsType
*/
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}
*/
enum ModelType {
/**
* Applications
*/
Application = 0,
/**
* Services
*/
Service = 1,
/**
* Sub-window such as dialogs
*/
SubWindow = 2
}
/**
* Base AntOS event definition
*
* @export
* @class BaseEvent
*/
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;
/**
* 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 event name
* @param {boolean} force indicates whether the event is forced
* @memberof BaseEvent
*/
constructor(name: string, force: boolean);
/**
* Prevent the current event. This function
* has no effect if `force` is set to true
*
* @memberof BaseEvent
*/
preventDefault(): void;
}
/**
* The root model of all applications, dialogs or services
* in the system
*
* @export
* @abstract
* @class BaseModel
*/
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 {HTMLElement}
* @memberof BaseModel
*/
protected host: HTMLElement;
/**
* 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 javascript or css files that the model depends on. 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 class name
* @param {AppArgumentsType[]} args arguments
* @memberof BaseModel
*/
constructor(name: string, args: AppArgumentsType[]);
/**
* Getter: get the local announcer object
*
* @readonly
* @type {API.Announcer}
* @memberof BaseModel
*/
get observable(): API.Announcer;
/**
* Update the model locale
*
* @param {string} name
* @memberof BaseModel
*/
updateLocale(name: string): void;
/**
* Render the model's UI
*
* @protected
* @param {string} p VFS path to the UI scheme definition
* @returns {void}
* @memberof BaseModel
*/
protected render(p: string): void;
/**
* Exit the model
*
* @param {boolean} force set this value to `true` will bypass the prevented exit event by user
* @returns {void}
* @memberof BaseModel
*/
quit(force: boolean): void;
/**
* Model meta data, need to be implemented by
* subclasses
*
* @abstract
* @returns {API.PackageMetaType}
* @memberof BaseModel
*/
abstract meta(): API.PackageMetaType;
/**
* VFS path to the model asset
*
* @returns {string}
* @memberof BaseModel
*/
path(): string;
/**
* Execute a server side script and get back the result
*
* @protected
* @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
*/
protected call(cmd: GenericObject<any>): Promise<any>;
/**
* 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>}
* @memberof BaseModel
*/
protected stream(): Promise<WebSocket>;
/**
* Init the model before UI rendering
*
* @abstract
* @memberof BaseModel
*/
abstract init(): void;
/**
* Main entry point after UI rendering
*
* @abstract
* @memberof BaseModel
*/
abstract main(): void;
/**
* Show the model
*
* @abstract
* @memberof BaseModel
*/
abstract show(): void;
/**
* Hide the model
*
* @abstract
* @memberof BaseModel
*/
abstract hide(): void;
/**
* Function called when the model exits
*
* @protected
* @abstract
* @param {BaseEvent} e exit event
* @memberof BaseModel
*/
protected abstract onexit(e: BaseEvent): void;
/**
* subscribe once to a local event
*
* @protected
* @param {string} e name of the event
* @param {(d: any) => void} f event callback
* @returns {void}
* @memberof BaseModel
*/
protected one(e: string, f: (d: any) => void): void;
/**
* Subscribe to a local event
*
* @protected
* @param {string} e event name
* @param {(d: any) => void} f event callback
* @returns {void}
* @memberof BaseModel
*/
protected on(e: string, f: (d: any) => void): void;
/**
* Unsubscribe an event
*
* @protected
* @param {string} e event name or `*` (all events)
* @param {(d: any) => void} [f] callback to be unsubscribed, can be `undefined`
* @returns {void}
* @memberof BaseModel
*/
protected off(e: string, f?: (d: any) => void): void;
/**
* trigger a local event
*
* @param {string} e event name
* @param {*} [d] event data
* @returns {void}
* @memberof BaseModel
*/
trigger(e: string, d?: any): void;
/**
* subscribe to an event on the global announcement system
*
* @protected
* @param {string} e event name
* @param {(d: API.AnnouncementDataType<any>) => void} f event callback
* @returns {void}
* @memberof BaseModel
*/
subscribe(e: string, f: (d: API.AnnouncementDataType<any>) => void): void;
/**
* Open a dialog
*
* @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(d: GUI.BaseDialog | string, data?: GenericObject<any>): Promise<any>;
/**
* Open a [[YesNoDialog]] to confirm a task
*
* @protected
* @param {GenericObject<any>} data [[YesNoDialog]] input data
* @returns {Promise<boolean>}
* @memberof BaseModel
*/
protected ask(data: GenericObject<any>): Promise<boolean>;
/**
* Trigger a global event
*
* @protected
* @param {string} t event name
* @param {(string | FormattedString)} m event message
* @param {any} u_data user data object if any
* @returns {void}
* @memberof BaseModel
*/
protected publish(t: string, m: string | FormattedString, u_data?: any): void;
/**
* Publish a global notification
*
* @param {(string | FormattedString)} m notification string
* @param {any} u_data user data object if any
* @returns {void}
* @memberof BaseModel
*/
notify(m: string | FormattedString, data?: any): void;
/**
* Publish a global warning
*
* @param {(string | FormattedString)} m warning string
* @returns {void}
* @memberof BaseModel
*/
warn(m: string | FormattedString): void;
/**
* Report a global error
*
* @param {(string | FormattedString)} m error message
* @param {Error} [e] error object if any
* @returns
* @memberof BaseModel
*/
error(m: string | FormattedString, e?: Error): void;
/**
* Report a global fail event
*
* @param {string} m fail message
* @param {Error} [e] error object if any
* @returns
* @memberof BaseModel
*/
fail(m: string, e?: Error): void;
/**
* Throw an error inside the model
*
* @returns {Error}
* @memberof BaseModel
*/
throwe(): Error;
/**
* Update the model, this will update all its UI elements
*
* @returns {void}
* @memberof BaseModel
*/
update(): void;
/**
* Find a HTMLElement in the UI of the model
* using the `data-id` attribute of the element
*
* @protected
* @param {string} id
* @returns {HTMLElement}
* @memberof BaseModel
*/
protected find(id: string): HTMLElement;
/**
* Select all DOM Element inside the UI of the model
* using JQuery selector
*
* @protected
* @param {string} sel
* @returns {HTMLElement}
* @memberof BaseModel
*/
protected select(sel: string): JQuery<HTMLElement>;
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A switch tag is basically used to visualize an boolean data value.
*
* @export
* @class SwitchTag
* @extends {AFXTag}
*/
class SwitchTag extends AFXTag {
/**
* Placeholder for the onchange event handle
*
* @private
* @type {TagEventCallback<boolean>}
* @memberof SwitchTag
*/
private _onchange;
/**
* Setter: Turn on/off the switch
*
* Getter: Check whether the switch is turned on
*
* @memberof SwitchTag
*/
set swon(v: boolean);
get swon(): boolean;
/**
* Setter: Enable the switch
*
* Getter: Check whether the switch is enabled
*
* @memberof SwitchTag
*/
set enable(v: boolean);
get enable(): boolean;
/**
* Set the onchange event handle
*
* @memberof SwitchTag
*/
set onswchange(v: TagEventCallback<boolean>);
/**
* Mount the tag and bind the click event to the switch
*
* @protected
* @memberof SwitchTag
*/
protected mount(): void;
/**
* This function will turn the switch (on/off)
* and trigger the onchange event
*
* @private
* @param {JQuery.ClickEvent} e
* @returns
* @memberof SwitchTag
*/
private makechange;
/**
* Tag layout definition
*
* @protected
* @returns
* @memberof SwitchTag
*/
protected layout(): {
el: string;
ref: string;
}[];
/**
* Init the tag:
* - switch is turn off
* - switch is enabled
*
* @protected
* @memberof SwitchTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @memberof SwitchTag
*/
protected calibrate(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof SwitchTag
*/
protected reload(d?: any): void;
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Definition of system file view widget
*
* @export
* @class FileViewTag
* @extends {AFXTag}
*/
class FileViewTag extends AFXTag {
/**
* placeholder for file select event callback
*
* @private
* @type {TagEventCallback<API.FileInfoType>}
* @memberof FileViewTag
*/
private _onfileselect;
/**
* placeholder for file open event callback
*
* @private
* @type {TagEventCallback<API.FileInfoType>}
* @memberof FileViewTag
*/
private _onfileopen;
/**
* Reference to the all selected files meta-datas
*
* @private
* @type {API.FileInfoType[]}
* @memberof FileViewTag
*/
private _selectedFiles;
/**
* Data placeholder of the current working directory
*
* @private
* @type {API.FileInfoType[]}
* @memberof FileViewTag
*/
private _data;
/**
* The path of the current working directory
*
* @private
* @type {string}
* @memberof FileViewTag
*/
private _path;
/**
* Header definition of the widget grid view
*
* @private
* @type {(GenericObject<any>[])}
* @memberof FileViewTag
*/
private _header;
/**
* placeholder for the user-specified meta-data fetch function
*
* @private
* @memberof FileViewTag
*/
private _fetch;
/**
*Creates an instance of FileViewTag.
* @memberof FileViewTag
*/
constructor();
/**
* Init the widget before mounting
*
* @protected
* @memberof FileViewTag
*/
protected init(): void;
/**
* Update the current widget, do nothing
*
* @protected
* @param {*} [d]
* @memberof FileViewTag
*/
protected reload(d?: any): void;
/**
* set the function that allows to fetch file entries.
* This handle function should return a promise on
* an arry of [[API.FileInfoType]]
*
* @memberof FileViewTag
*/
set fetch(v: (p: string) => Promise<API.FileInfoType[]>);
/**
* set the callback handle for the file select event.
* The parameter of the callback should be an object
* of type [[TagEventType]]<T> with the data type `T` is [[API.FileInfoType]]
*
* @memberof FileViewTag
*/
set onfileselect(e: TagEventCallback<API.FileInfoType>);
/**
set the callback handle for the file open event.
* The parameter of the callback should be an object
* of type [[TagEventType]]<T> with the data type `T` is [[API.FileInfoType]]
*
* @memberof FileViewTag
*/
set onfileopen(e: TagEventCallback<API.FileInfoType>);
/**
* 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);
get view(): string;
/**
* 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);
get chdir(): boolean;
/**
* Setter : Enable or disable the status bar of the widget
*
* Getter: Check whether the status bar is enabled
*
* @memberof FileViewTag
*/
set status(v: boolean);
get status(): boolean;
/**
* 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);
get showhidden(): boolean;
/**
* Setter:
*
* Allow multiple selection on file view
*
* Getter:
*
* Check whether the multiselection is actived
*
* @memberof FileViewTag
*/
set multiselect(v: boolean);
get multiselect(): boolean;
/**
* Get the current selected file
*
* @readonly
* @type {API.FileInfoType}
* @memberof FileViewTag
*/
get selectedFile(): API.FileInfoType;
/**
* Get all selected files
*
* @readonly
* @type {API.FileInfoType[]}
* @memberof FileViewTag
*/
get selectedFiles(): API.FileInfoType[];
/**
* 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);
get path(): string;
/**
* Setter: Set the data of the current working directory
*
* Getter: Get the data of the current working directory
*
* @memberof FileViewTag
*/
set data(v: API.FileInfoType[]);
get data(): API.FileInfoType[];
/**
* Set the file drag and drop event handle. This allows application
* to define custom behavior of the event
*
* @memberof FileViewTag
*/
set ondragndrop(v: TagEventCallback<DnDEventDataType<TreeViewTag | ListViewItemTag | GridCellPrototype>>);
/**
* Sort file by its type
*
* @private
* @param {API.FileInfoType} a
* @param {API.FileInfoType} b
* @return {*} {number}
* @memberof FileViewTag
*/
private sortByType;
/**
* sort file by its name
*
* @private
* @param {API.FileInfoType} a first file meta-data
* @param {API.FileInfoType} b second file meta-data
* @returns {number}
* @memberof FileViewTag
*/
private sortByName;
/**
* calibrate the widget layout
*
* @memberof FileViewTag
*/
calibrate(): void;
/**
* Refresh the list view of the widget. This function
* is called when the view of the widget changed to `icon`
*
* @private
* @memberof FileViewTag
*/
private refreshList;
/**
* Refresh the grid view of the widget, this function is called
* when the view of the widget set to `list`
*
* @private
* @memberof FileViewTag
*/
private refreshGrid;
/**
* Refresh the Treeview of the widget, this function is called
* when the view of the widget set to `tree`
*
* @private
* @memberof FileViewTag
*/
private refreshTree;
/**
* Create the tree data from the list of input
* file meta-data
*
* @private
* @param {API.FileInfoType[]} data list of file meta-data
* @returns {TreeViewDataType[]}
* @memberof FileViewTag
*/
private getTreeData;
/**
* Refresh data of the current widget view
*
* @private
* @returns {void}
* @memberof FileViewTag
*/
private refreshData;
/**
* Switch between three view options
*
* @private
* @memberof FileViewTag
*/
private switchView;
/**
* This function triggers the file select event
*
* @private
* @param {API.FileInfoType} e selected file meta-data
* @memberof FileViewTag
*/
private fileselect;
/**
* This function triggers the file open event
*
* @private
* @param {API.FileInfoType} e selected file meta-data
* @memberof FileViewTag
*/
private filedbclick;
/**
* Mount the widget in the DOM tree
*
* @protected
* @memberof FileViewTag
*/
protected mount(): void;
/**
* Layout definition of the widget
*
* @protected
* @returns {TagLayoutType[]}
* @memberof FileViewTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
/// <reference types="jquery" />
/**
*
* Extend the HTMLElement interface with some utility function need
* by AFX API
*
* @interface HTMLElement
*/
interface HTMLElement {
/**
* Recursively update a tag and all its children
*
* @param {*} [d] data to send to all element in the DOM subtree
* @memberof HTMLElement
*/
update(d?: any): void;
/**
*
* AFX will automatically bind the context menu on an HTMLElement
* if this function is defined on that element. The function should
* define the content of the context menu and its action
*
* Once the context menu is bound to the element, all context menu handle
* defined on any child of this element will be ignored.
*
* @param {JQuery.MouseEventBase} e a mouse event
* @param {OS.GUI.tag.MenuTag} m The context menu element [[MenuTag]]
* @memberof HTMLElement
*/
contextmenuHandle(e: JQuery.MouseEventBase, m: OS.GUI.tag.MenuTag): void;
/**
* Mount the element and all the children on its DOM subtree. This action
* is performed in a top-down manner
*
* @memberof HTMLElement
*/
sync(): void;
/**
*
* This action allows to generated all the DOM nodes defined by all AFX tags
* in its hierarchy.
* It performs two operations, one top-down operation to generate all the
* necessary DOM nodes, another bottom-up operation to init all the AFX tag
* in the current element DOM hierarchy
*
* @param {OS.API.Announcer} o an AntOS observable object
* @memberof HTMLElement
*/
afxml(o: OS.API.Announcer): void;
/**
* Perform DOM generation ([[afxml]]) then mount ([[sync]]) all the
* elements.
*
* @param {OS.API.Announcer} o an AntOS observable object
* @param {boolean} [flag] indicates whether this is the top-most call of the operation
* @memberof HTMLElement
*/
uify(o: OS.API.Announcer, flag?: boolean): void;
/**
*
*
* @type {*}
* @memberof HTMLElement
*/
mozRequestFullScreen: any;
/**
*
*
* @type {*}
* @memberof HTMLElement
*/
webkitRequestFullscreen: any;
/**
*
*
* @type {*}
* @memberof HTMLElement
*/
msRequestFullscreen: any;
}
/**
*
*
* @interface Document
*/
interface Document {
mozCancelFullScreen: any;
webkitExitFullscreen: any;
cancelFullScreen: any;
}
declare namespace OS {
namespace GUI {
/**
* [[TagLayoutType]] interface using by AFX tags to defined
* its internal DOM hierarchy
*
* @export
* @interface TagLayoutType
*/
interface TagLayoutType {
/**
* Element tag name
*
* @type {string}
* @memberof TagLayoutType
*/
el: string;
/**
* Children layout of the current element
*
* @type {TagLayoutType[]}
* @memberof TagLayoutType
*/
children?: TagLayoutType[];
/**
* Reference name of the element used by AFX Tag
*
* @type {string}
* @memberof TagLayoutType
*/
ref?: string;
/**
* CSS class of the element
*
* @type {string}
* @memberof TagLayoutType
*/
class?: string;
/**
* this is the `data-id` attribute of the element,
* can be query by the [[aid]] Tag API function.
* Not to be confused with the DOM `id` attribute
*
* @type {(string | number)}
* @memberof TagLayoutType
*/
id?: string | number;
/**
* Tooltip text of the element
*
* @type {(string | FormattedString)}
* @memberof TagLayoutType
*/
tooltip?: string | FormattedString;
/**
* `data-width` of the element, not to be confused with
* the `width` attribute of the DOM element
*
* @type {number|string}
* @memberof TagLayoutType
*/
width?: number | string;
/**
** `data-height` of the element, not to be confused with
* the `height` attribute of the DOM element
*
* @type {number|string}
* @memberof TagLayoutType
*/
height?: number | string;
}
/**
* Data type for event issued by AFX tags
*
* @export
* @interface TagEventDataType
* @template T item template
*/
interface TagEventDataType<T> {
/**
* Reference to the item involved in the event
*
* @type {T}
* @memberof TagEventDataType
*/
item?: T;
[propName: string]: any;
}
/**
* Format of the event issued by AFX tags
*
* @export
* @interface TagEventType
* @template T data type
*/
interface TagEventType<T> {
/**
* `data-id` of the tag that trigger the
* event
*
* @type {(number | string)}
* @memberof TagEventType
*/
id: number | string;
/**
* Data object of the event
*
* @type {T}
* @memberof TagEventType
*/
data: T;
}
/**
* Drag and Drop data type sent between mouse events
*
* @export
* @interface DnDEventDataType
* @template T
*/
interface DnDEventDataType<T> {
/**
* Reference to the source DOM element
*
* @type {T}
* @memberof DnDEventDataType
*/
from: T[];
/**
* Reference to the target DOM element
*
* @type {T}
* @memberof DnDEventDataType
*/
to: T;
}
/**
* Tag event callback type
*/
type TagEventCallback<T> = (e: TagEventType<T>) => void;
/**
* Base abstract class for tag implementation, any AFX tag should be
* subclass of this class
*
* @export
* @abstract
* @class AFXTag
* @extends {HTMLElement}
*/
abstract class AFXTag extends HTMLElement {
/**
* The announcer object of the tag
*
* @type {API.Announcer}
* @memberof AFXTag
*/
observable: API.Announcer;
/**
* Reference to some of the tag's children
* element. This reference object is built
* based on the `ref` property found in the
* tag layout [[TagLayoutType]]
*
* @protected
* @type {GenericObject<HTMLElement>}
* @memberof AFXTag
*/
protected refs: GenericObject<HTMLElement>;
/**
* boolean value indicated whether the tag
* is already mounted in the DOM tree
*
* @protected
* @type {boolean}
* @memberof AFXTag
*/
protected _mounted: boolean;
/**
*Creates an instance of AFXTag.
* @memberof AFXTag
*/
constructor();
/**
* This function verifies if a property name of the input object
* corresponds to a setter of the current tag. If this is the
* case, it sets the value of that property to the setter
*
* @param {GenericObject<any>} v input object
* @memberof AFXTag
*/
set(v: GenericObject<any>): void;
/**
* Setter to set the tooltip text to the current tag.
* The text should be in the following format:
* ```text
* cr|cl|ct|cb: tooltip text
* ```
*
* @memberof AFXTag
*/
set tooltip(v: string);
/**
*
* This function looking for a property name of the tag
* in its prototype chain. The descriptor of the property
* will be returned if it exists
*
* @private
* @param {string} k the property name to be queried
* @returns {PropertyDescriptor} the property descriptor or undefined
* @memberof AFXTag
*/
private descriptor_of;
/**
* Setter: set the id of the tag in string or number
*
* Getter: get the id of the current tag
*
* @memberof AFXTag
*/
set aid(v: string | number);
get aid(): string | number;
/**
* Implementation from HTMLElement interface,
* this function mount the current tag hierarchy
*
* @returns {void}
* @memberof AFXTag
*/
sync(): void;
/**
* Generate the DOM hierarchy of the current tag
*
* @param {API.Announcer} o observable object
* @memberof AFXTag
*/
afxml(o: API.Announcer): void;
/**
* Update the current tag hierarchy
*
* @param {*} d any data object
* @memberof AFXTag
*/
update(d: any): void;
/**
* Init the current tag, this function
* is called before the [[mount]] function
*
* @protected
* @abstract
* @memberof AFXTag
*/
protected abstract init(): void;
/**
* Mount only the current tag
*
* @protected
* @abstract
* @memberof AFXTag
*/
protected abstract mount(): void;
/**
* Layout definition of a tag
*
* @protected
* @abstract
* @returns {TagLayoutType[]} tag layout object
* @memberof AFXTag
*/
protected abstract layout(): TagLayoutType[];
/**
* Update only the current tag, this function is
* called by [[update]] before chaining the
* update process to its children
*
* @protected
* @abstract
* @param {*} [d]
* @memberof AFXTag
*/
protected abstract reload(d?: any): void;
/**
* This function is used to re-render the current
* tag
*
* @protected
* @memberof AFXTag
*/
protected calibrate(): void;
/**
* This function parses the input layout object
* and generates all the elements defined by
* the tag
*
* @private
* @param {TagLayoutType} tag tag layout object
* @returns {Element} the DOM element specified by the tag layout
* @memberof AFXTag
*/
private mkui;
/**
* This function inserts or removes an attribute name
* to/from the target element based on the input `flag`.
*
* @protected
* @param {boolean} flag indicates whether the attribute name should be inserted o removed
* @param {string} v the attribute name
* @param {HTMLElement} [el] the target element
* @memberof AFXTag
*/
protected attsw(flag: boolean, v: string, el?: HTMLElement): void;
/**
* Insert the attribute name to the target element
*
* @protected
* @param {string} v the attribute name
* @param {HTMLElement} [el] the target element
* @memberof AFXTag
*/
protected atton(v: string, el?: HTMLElement): void;
/**
* Remove the attribute name from the target element
*
* @protected
* @param {string} v attribute name
* @param {HTMLElement} [el] the target element
* @memberof AFXTag
*/
protected attoff(v: string, el?: HTMLElement): void;
/**
* Verify if the target element has an attribute name
*
* @protected
* @param {string} v attribute name
* @param {HTMLElement} [el] target element
* @returns {boolean}
* @memberof AFXTag
*/
protected hasattr(v: string, el?: HTMLElement): boolean;
}
/**
* All the AFX tags are defined in this namespace,
* these tags are defined as custom DOM elements and will be
* stored in the `customElements` registry of the browser
*/
namespace tag {
/**
* Define an AFX tag as a custom element and add it to the
* global `customElements` registry. If the tag is redefined, i.e.
* the tag already exists, its behavior will be updated with the
* new definition
*
* @export
* @template T all classes that extends [[AFXTag]]
* @param {string} name name of the tag
* @param {{ new (): T }} cls the class that defines the tag
* @returns {void}
*/
function define<T extends AFXTag>(name: string, cls: {
new (): T;
}): void;
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* List item event data type
*/
type ListItemEventData = TagEventDataType<ListViewItemTag>;
/**
* A list item represent the individual view of an item in the [[ListView]].
* This class is an abstract prototype class, implementation of any
* list view item should extend it
*
*
* @export
* @abstract
* @class ListViewItemTag
* @extends {AFXTag}
*/
abstract class ListViewItemTag extends AFXTag {
/**
* Data placeholder for the list item
*
* @private
* @type {GenericObject<any>}
* @memberof ListViewItemTag
*/
private _data;
/**
* placeholder for the item select event callback
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewItemTag
*/
private _onselect;
/**
* Context menu event callback handle
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewItemTag
*/
private _onctxmenu;
/**
* Click event callback placeholder
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewItemTag
*/
private _onclick;
/**
* Double click event callback handle
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewItemTag
*/
private _ondbclick;
/**
* Item close event callback placeholder
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewItemTag
*/
private _onclose;
/**
*Creates an instance of ListViewItemTag.
* @memberof ListViewItemTag
*/
constructor();
/**
* Setter: Turn on/off the `closable` feature of the list item
*
* Getter: Check whether the item is closable
*
* @memberof ListViewItemTag
*/
set closable(v: boolean);
get closable(): boolean;
/**
* Set item select event handle
*
* @memberof ListViewItemTag
*/
set onitemselect(v: TagEventCallback<ListViewItemTag>);
/**
* Setter: select/unselect the current item
*
* Getter: Check whether the current item is selected
*
* @memberof ListViewItemTag
*/
set selected(v: boolean);
get selected(): boolean;
/**
* Set the context menu event handle
*
* @memberof ListViewItemTag
*/
set onctxmenu(v: TagEventCallback<ListViewItemTag>);
/**
* Set the item click event handle
*
* @memberof ListViewItemTag
*/
set onitemclick(v: TagEventCallback<ListViewItemTag>);
/**
* Set the item double click event handle
*
* @memberof ListViewItemTag
*/
set onitemdbclick(v: TagEventCallback<ListViewItemTag>);
/**
* set the item close event handle
*
* @memberof ListViewItemTag
*/
set onitemclose(v: TagEventCallback<ListViewItemTag>);
/**
* Mount the tag and bind some events
*
* @protected
* @memberof ListViewItemTag
*/
protected mount(): void;
/**
* Layout definition of the item tag.
* This function define the outer layout of the item.
* Custom inner layout of each item implementation should
* be defined in [[itemlayout]]
*
* @protected
* @returns {TagLayoutType[]}
* @memberof ListViewItemTag
*/
protected layout(): TagLayoutType[];
/**
* 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>);
get data(): GenericObject<any>;
/**
* Any subclass of this class should implement this
* function to provide its custom item layout
*
* @protected
* @abstract
* @returns {TagLayoutType}
* @memberof ListViewItemTag
*/
protected abstract itemlayout(): TagLayoutType;
/**
* This function is called when the item data is changed.
* It should be implemented in all subclass of this class
*
* @protected
* @abstract
* @memberof ListViewItemTag
*/
protected abstract ondatachange(): void;
}
/**
* The layout of a simple list item contains only a
* AFX label
*
* @export
* @class SimpleListItemTag
* @extends {ListViewItemTag}
*/
class SimpleListItemTag extends ListViewItemTag {
/**
*Creates an instance of SimpleListItemTag.
* @memberof SimpleListItemTag
*/
constructor();
/**
* Reset some property to default
*
* @protected
* @memberof SimpleListItemTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @memberof SimpleListItemTag
*/
protected calibrate(): void;
/**
* Refresh the inner label when the item data
* is changed
*
* @protected
* @returns {void}
* @memberof SimpleListItemTag
*/
protected ondatachange(): void;
/**
* Re-render the list item
*
* @protected
* @memberof SimpleListItemTag
*/
protected reload(): void;
/**
* List item custom layout definition
*
* @protected
* @returns {TagLayoutType}
* @memberof SimpleListItemTag
*/
protected itemlayout(): TagLayoutType;
}
/**
* This tag defines a traditional or a dropdown list widget.
* It contains a collection of list items in which layout
* of each item may be variable
*
* @export
* @class ListViewTag
* @extends {AFXTag}
*/
class ListViewTag extends AFXTag {
/**
* placeholder of list select event handle
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewTag
*/
private _onlistselect;
/**
* placeholder of list double click event handle
*
* @private
* @type {TagEventCallback<ListItemEventData>}
* @memberof ListViewTag
*/
private _onlistdbclick;
/**
* placeholder of list drag and drop event handle
*
* @private
* @type {TagEventCallback<DnDEventDataType<ListViewItemTag>>}
* @memberof ListViewTag
*/
private _ondragndrop;
/**
* placeholder of list item close event handle
*
* @private
* @memberof ListViewTag
*/
private _onitemclose;
/**
* placeholder of drag and drop mouse down event handle
*
* @private
* @memberof ListViewTag
*/
private _onmousedown;
/**
* placeholder of drag and drop mouse up event handle
*
* @private
* @memberof ListViewTag
*/
private _onmouseup;
/**
* placeholder of drag and drop mouse move event handle
*
* @private
* @memberof ListViewTag
*/
private _onmousemove;
/**
* Reference to the latest selected DOM item
*
* @private
* @type {ListViewItemTag}
* @memberof ListViewTag
*/
private _selectedItem;
/**
* A collection of selected items in the list.
* The maximum size of this collection is 1 if
* the [[multiselect]] feature is disabled
*
* @private
* @type {ListViewItemTag[]}
* @memberof ListViewTag
*/
private _selectedItems;
/**
* Data placeholder of the list
*
* @private
* @type {GenericObject<any>[]}
* @memberof ListViewTag
*/
private _data;
/**
* Event data passing between mouse event when performing
* drag and drop on the list
*
* @private
* @type {{ from: ListViewItemTag[]; to: ListViewItemTag }}
* @memberof ListViewTag
*/
private _dnd;
/**
*Creates an instance of ListViewTag.
* @memberof ListViewTag
*/
constructor();
/**
* Reset the tag's properties to the default values
*
* @protected
* @memberof ListViewTag
*/
protected init(): void;
/**
* This function does nothing
*
* @protected
* @param {*} [d]
* @memberof ListViewTag
*/
protected reload(d?: any): void;
/**
* Setter: toggle between dropdown and traditional list
*
* Getter: Check whether the list is dropdown or traditional list
*
* @memberof ListViewTag
*/
set dropdown(v: boolean);
/**
* Set drag and drop event handle
*
* @memberof ListViewTag
*/
set ondragndrop(v: TagEventCallback<DnDEventDataType<ListViewItemTag>>);
/**
* Set list select event handle
*
* @memberof ListViewTag
*/
set onlistselect(v: TagEventCallback<ListItemEventData>);
/**
* Set double click event handle
*
* @memberof ListViewTag
*/
set onlistdbclick(v: TagEventCallback<ListItemEventData>);
/**
* Set item close event handle
*
* @memberof ListViewTag
*/
set onitemclose(v: (e: TagEventType<ListItemEventData>) => boolean);
get dropdown(): boolean;
/**
* 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);
get itemtag(): string;
/**
* Setter:
*
* Turn on/off of the `multiselect` feature
*
* Getter:
*
* Check whether multi-select is allowed
* in this list
*
* @memberof ListViewTag
*/
set multiselect(v: boolean);
get multiselect(): boolean;
/**
* 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);
get dragndrop(): boolean;
/**
* Set the buttons layout of the list.
* Button layout allows to add some custom
* behaviors to the list.
*
* Each button data should define the [[onbtclick]]
* event handle to specify the custom behavior
*
* When the list is configured as dropdown. The buttons
* layout will be disabled
*
* Example of a button data:
*
* ```
* {
* text: "Button text",
* icon: "home://path/to/icon.png",
* iconclass: "icon-class-name",
* onbtclick: (e) => console.log(e)
* }
* ```
*
* @memberof ListViewTag
*/
set buttons(v: GenericObject<any>[]);
/**
* Getter: Get data of the list
*
* Setter: Set data to the list
*
* @type {GenericObject<any>[]}
* @memberof ListViewTag
*/
get data(): GenericObject<any>[];
set data(data: GenericObject<any>[]);
/**
* Do nothing
*
* @protected
* @memberof ListViewTag
*/
protected ondatachange(): void;
/**
* Setter: Select list item(s) by their indexes
*
* Getter: Get the indexes of all selected items
*
* @memberof ListViewTag
*/
set selected(idx: number | number[]);
/**
* Get the latest selected item
*
* @readonly
* @type {ListViewItemTag}
* @memberof ListViewTag
*/
get selectedItem(): ListViewItemTag;
/**
* Get all the selected items
*
* @readonly
* @type {ListViewItemTag[]}
* @memberof ListViewTag
*/
get selectedItems(): ListViewItemTag[];
get selected(): number | number[];
/**
* Add an item to the beginning of the list
*
* @param {GenericObject<any>} item
* @returns {ListViewItemTag} the added list item element
* @memberof ListViewTag
*/
unshift(item: GenericObject<any>): ListViewItemTag;
/**
* check whether the list has data
*
* @private
* @param {GenericObject<any>} v
* @returns
* @memberof ListViewTag
*/
private has_data;
/**
* Add an item to the beginning or end of the list
*
* @param {GenericObject<any>} item list item data
* @param {boolean} [flag] indicates whether to add the item in the beginning of the list
* @returns {ListViewItemTag} the added list item element
* @memberof ListViewTag
*/
push(item: GenericObject<any>, flag?: boolean): ListViewItemTag;
/**
* Delete an item
*
* @param {ListViewItemTag} item item DOM element
* @memberof ListViewTag
*/
delete(item: ListViewItemTag): void;
/**
* Select item next to the currently selected item.
* If there is no item selected, the first item will
* be selected
*
* @returns {void}
* @memberof ListViewTag
*/
selectNext(): void;
/**
* Select the previous item in the list.
*
* @returns {void}
* @memberof ListViewTag
*/
selectPrev(): void;
/**
* Unselect all the selected items in the list
*
* @returns {void}
* @memberof ListViewTag
*/
unselect(): void;
/**
* This function triggers the click event on an item
*
* @private
* @param {TagEventType} e tag event object
* @param {boolean} flag indicates whether this is a double click event
* @returns {void}
* @memberof ListViewTag
*/
private iclick;
/**
* This function triggers the double click event on an item
*
* @private
* @param {TagEventType} e tag event object
* @returns
* @memberof ListViewTag
*/
private idbclick;
/**
* This function triggers the list item select event
*
* @private
* @param {TagEventType} e tag event object
* @returns
* @memberof ListViewTag
*/
private iselect;
/**
* Mount the tag and bind some basic event
*
* @protected
* @returns {void}
* @memberof ListViewTag
*/
protected mount(): void;
/**
* This function triggers the item close event
*
* @private
* @param {TagEventType} e tag event object
* @returns {void}
* @memberof ListViewTag
*/
private iclose;
/**
* Show the dropdown list.
* This function is called only when the list is a dropdown
* list
*
* @protected
* @param {*} e
* @returns {void}
* @memberof ListViewTag
*/
protected showlist(e: any): void;
/**
* Hide the dropdown list.
* This function is called only when the list is a dropdown
* list
*
* @protected
* @param {*} e
* @memberof ListViewTag
*/
protected dropoff(e: any): void;
/**
* calibrate the list layout
*
* @protected
* @returns {void}
* @memberof ListViewTag
*/
protected calibrate(): void;
/**
* List view layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof ListViewTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A simple number sinner tag
*
* @export
* @class NSpinnerTag
* @extends {AFXTag}
*/
class NSpinnerTag extends AFXTag {
/**
* Placeholder for value change event handle
*
* @private
* @type {TagEventCallback<number>}
* @memberof NSpinnerTag
*/
private _onchange;
/**
* Placeholder for the spinner data
*
* @private
* @type {number}
* @memberof NSpinnerTag
*/
private _value;
/**
* Place holder for the spinner step
*
* @type {number}
* @memberof NSpinnerTag
*/
step: number;
/**
*Creates an instance of NSpinnerTag.
* @memberof NSpinnerTag
*/
constructor();
/**
* Init the spinner value to `0` and step to `1`
*
* @protected
* @memberof NSpinnerTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof NSpinnerTag
*/
protected reload(d?: any): void;
/**
* Set the value change event handle
*
* @memberof NSpinnerTag
*/
set onvaluechange(f: TagEventCallback<number>);
/**
* Mount the tag and bind basic events
*
* @protected
* @memberof NSpinnerTag
*/
protected mount(): void;
/**
* Calibrate the layout of the spinner
*
* @memberof NSpinnerTag
*/
calibrate(): void;
/**
* Setter: Set the spinner value
*
* Getter: Get the spinner value
*
* @memberof NSpinnerTag
*/
set value(v: number);
get value(): number;
/**
* Spinner layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof NSpinnerTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Tag event data type definition
*/
type TabEventData = TagEventDataType<ListViewItemTag>;
/**
* a TabBar allows to control a collection of tabs
*
* @export
* @class TabBarTag
* @extends {AFXTag}
*/
export class TabBarTag extends AFXTag {
/**
* Placeholder of currently selected tab index
*
* @private
* @type {number}
* @memberof TabBarTag
*/
private _selected;
/**
* Placeholder of tab close event handle
*
* @private
* @memberof TabBarTag
*/
private _ontabclose;
/**
* Placeholder of tab select event handle
*
* @private
* @type {TagEventCallback<TabEventData>}
* @memberof TabBarTag
*/
private _ontabselect;
/**
*Creates an instance of TabBarTag.
* @memberof TabBarTag
*/
constructor();
/**
* Init the tag
*
* @protected
* @memberof TabBarTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof TabBarTag
*/
protected reload(d?: any): void;
/**
* Setter: Enable/disable a tab to be closed
*
* Getter: Check whether tabs can be closed
*
* @memberof TabBarTag
*/
set closable(v: boolean);
get closable(): boolean;
/**
* Add a tab in the end of the tab bar
*
* @param {GenericObject<any>} item tab data
* @memberof TabBarTag
*/
push(item: GenericObject<any>): ListViewItemTag;
/**
* Delete a tab
*
* @param {ListViewItemTag} el reference to DOM element of a tab
* @memberof TabBarTag
*/
delete(el: ListViewItemTag): void;
/**
* Add a tab to the beginning of the tab bar
*
* @param {GenericObject<any>} item tab data
* @memberof TabBarTag
*/
unshift(item: GenericObject<any>): ListViewItemTag;
/**
* Setter: Set tabs data
*
* Getter: Get all tabs data
*
* @memberof TabBarTag
*/
set items(v: GenericObject<any>[]);
get items(): GenericObject<any>[];
/**
* Setter: Select a tab by its index
*
* Getter: Get the currently selected tab
*
* @memberof TabBarTag
*/
set selected(v: number | number[]);
get selected(): number | number[];
/**
* Set the tab close event handle
*
* @memberof TabBarTag
*/
set ontabclose(v: (e: TagEventType<TabEventData>) => boolean);
/**
* Set the tab select event handle
*
* @memberof TabBarTag
*/
set ontabselect(v: TagEventCallback<TabEventData>);
/**
* Mount the tab bar and bind some basic events
*
* @protected
* @memberof TabBarTag
*/
protected mount(): void;
/**
* TabBar layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof TabBarTag
*/
protected layout(): TagLayoutType[];
}
export {};
}
}
}
declare namespace OS {
namespace GUI {
/**
* Color type used by AFX API
*
* @export
* @interface ColorType
*/
interface ColorType {
/**
* Red chanel
*
* @type {number}
* @memberof ColorType
*/
r: number;
/**
* Green chanel
*
* @type {number}
* @memberof ColorType
*/
g: number;
/**
* Blue chanel
*
* @type {number}
* @memberof ColorType
*/
b: number;
/**
* Alpha chanel
*
* @type {number}
* @memberof ColorType
*/
a?: number;
/**
* color text in CSS format
*
* @type {string}
* @memberof ColorType
*/
text?: string;
/**
* Color in hex format
*
* @type {string}
* @memberof ColorType
*/
hex?: string;
}
namespace tag {
/**
* Class definition of Color picker widget
*
* @export
* @class ColorPickerTag
* @extends {AFXTag}
*/
class ColorPickerTag extends AFXTag {
/**
* The current selected color object
*
* @private
* @type {ColorType}
* @memberof ColorPickerTag
*/
private _selectedColor;
/**
* placeholder for the color select event callback
*
* @private
* @type {TagEventCallback<ColorType>}
* @memberof ColorPickerTag
*/
private _oncolorselect;
/**
* Creates an instance of ColorPickerTag.
* @memberof ColorPickerTag
*/
constructor();
/**
* Init tag before mounting, do nothing
*
* @protected
* @memberof ColorPickerTag
*/
protected init(): void;
/**
* Reload tag, do nothing
*
* @protected
* @param {*} [d]
* @memberof ColorPickerTag
*/
protected reload(d?: any): void;
/**
* Get selected color value
*
* @readonly
* @type {ColorType}
* @memberof ColorPickerTag
*/
get selectedColor(): ColorType;
/**
* Set the color select event handle
*
* @memberof ColorPickerTag
*/
set oncolorselect(v: TagEventCallback<ColorType>);
/**
* Mount the widget to DOM tree
*
* @protected
* @memberof ColorPickerTag
*/
protected mount(): void;
/**
* Build the color palette
*
* @private
* @memberof ColorPickerTag
*/
private build_palette;
/**
* layout definition of the widget
*
* @protected
* @returns {TagLayoutType[]}
* @memberof ColorPickerTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
/// <reference types="jquery" />
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A `resizer` tag is basically used to dynamically resize an element using mouse.
* It is usually put inside a [[TileLayoutTag]] an can be attached to any element. Example:
*
* The resizer tag in the following example will be attached to the first `afx-vbox`,
* and allows to resize this element using mouse
*
* ```xml
* <afx-hbox>
* <afx-vbox>...</afx-vbox>
* <afx-resizer></afx-resizer>
* <afx-vbox>...</afx-vbox>
* </afx-hbox>
* ```
*
* @export
* @class ResizerTag
* @extends {AFXTag}
*/
class ResizerTag extends AFXTag {
/**
* Reference to the element that this tag is attached to
*
* @private
* @type {*}
* @memberof ResizerTag
*/
private _resizable_el;
/**
* Reference to the resize event callback
*
* @private
* @type {TagEventCallback<any>}
* @memberof ResizerTag
*/
private _onresize;
/**
* Reference to the parent tag of the current tag.
* The parent tag should be an instance of a [[TileLayoutTag]]
* such as [[VBoxTag]] or [[HBoxTag]]
*
* @private
* @type {*}
* @memberof ResizerTag
*/
private _parent;
/**
* Placeholder of the minimum value that
* the attached element can be resized
*
* @private
* @type {number}
* @memberof ResizerTag
*/
private _minsize;
/**
*Creates an instance of ResizerTag.
* @memberof ResizerTag
*/
constructor();
/**
* Set the properties of the tag to default values
*
* @protected
* @memberof ResizerTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof ResizerTag
*/
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);
get dir(): string;
/**
* Getter : Check whether the resizer should attach to its next or previous element
*
* Setter: if `v=true` select next element as attached element of the resizer, otherwise
* select the previous element
* @readonly
* @type {boolean}
* @memberof ResizerTag
*/
get attachnext(): boolean;
set attachnext(v: boolean);
/**
* Setter:
* - set the resize event callback
*
* Getter:
* - get the resize event callback
*
* @memberof ResizerTag
*/
set onelresize(v: TagEventCallback<any>);
get onelresize(): TagEventCallback<any>;
/**
* Mount the tag to the DOM tree
*
* @protected
* @memberof ResizerTag
*/
protected mount(): void;
/**
* Enable draggable on the element
*
* @private
* @memberof ResizerTag
*/
private make_draggable;
/**
* Resize the attached element in the horizontal direction (width)
*
* @private
* @param {JQuery.MouseEventBase} e JQuery mouse event
* @returns {void}
* @memberof ResizerTag
*/
private horizontalResize;
/**
* Resize the attached element in the vertical direction (height)
*
* @protected
* @param {JQuery.MouseEventBase} e JQuery mouse event
* @returns {void}
* @memberof ResizerTag
*/
protected verticalResize(e: JQuery.MouseEventBase): void;
/**
* Layout definition of the tag, empty layout
*
* @protected
* @returns {TagLayoutType[]}
* @memberof ResizerTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* This class defines basic AFX label tag.
* A label contains a text and an icon (optional)
*
* @export
* @class LabelTag
* @extends {AFXTag}
*/
class LabelTag extends AFXTag {
/**
* placeholder of the text to be displayed
*
* @private
* @type {(string | FormattedString)}
* @memberof LabelTag
*/
private _text;
/**
*Creates an instance of LabelTag.
* @memberof LabelTag
*/
constructor();
/**
* this implementation does nothing in this tag
*
* @protected
* @memberof LabelTag
*/
protected mount(): void;
/**
* Refresh the text in the label
*
* @protected
* @param {*} d
* @memberof LabelTag
*/
protected reload(d: any): void;
/**
* Reset to default some property value
*
* @protected
* @memberof LabelTag
*/
protected init(): void;
/**
* This implementation of the function does nothing
*
* @protected
* @memberof LabelTag
*/
protected calibrate(): void;
/**
* Set the VFS path of the label icon
*
* @memberof LabelTag
*/
set icon(v: string);
/**
* Set the CSS class of the label icon
*
* @memberof LabelTag
*/
set iconclass(v: string);
/**
* Setter: Set the text of the label
*
* Getter: Get the text displayed on the label
*
* @memberof LabelTag
*/
set text(v: string | FormattedString);
get text(): string | FormattedString;
/**
* Setter: Turn on/off text selection
*
* Getter: Check whether the label is selectable
*
* @memberof LabelTag
*/
set selectable(v: boolean);
get swon(): boolean;
/**
* Lqbel layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof LabelTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
/**
* Tab container data type definition
*
* @export
* @interface TabContainerTabType
*/
interface TabContainerTabType {
/**
* Reference to the DOM element of the current container
*
* @type {HTMLElement}
* @memberof TabContainerTabType
*/
container: HTMLElement;
[propName: string]: any;
}
namespace tag {
/**
* A tab container allows to attach each tab on a [[TabBarTag]]
* with a container widget. The attached container widget should be
* composed inside a [[HBoxTag]]
*
* The tab bar in a tab container can be configured to display tabs
* in horizontal (row) or vertical (column) order. Default to vertical order
*
* Once a tab is selected, its attached container will be shown
*
* @export
* @class TabContainerTag
* @extends {AFXTag}
*/
class TabContainerTag extends AFXTag {
/**
* Reference to the currently selected tab DOM element
*
* @private
* @type {TabContainerTabType}
* @memberof TabContainerTag
*/
private _selectedTab;
/**
* Placeholder of the tab select event handle
*
* @private
* @type {TagEventCallback<TabContainerTabType>}
* @memberof TabContainerTag
*/
private _ontabselect;
/**
*Creates an instance of TabContainerTag.
* @memberof TabContainerTag
*/
constructor();
/**
* Init the tab bar direction to vertical (column)
*
* @protected
* @memberof TabContainerTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof TabContainerTag
*/
protected reload(d?: any): void;
/**
* Set the tab select event handle
*
* @memberof TabContainerTag
*/
set ontabselect(f: TagEventCallback<TabContainerTabType>);
/**
* Get all tab items in the container
*
* @readonly
* @type {TabContainerTabType[]}
* @memberof TabContainerTag
*/
get tabs(): TabContainerTabType[];
/**
* Select a tab by its index
*
* @memberof TabContainerTag
*/
set selectedIndex(i: number);
/**
* Setter:
*
* Set the tab bar direction:
* - `row`: horizontal direction
* - `column`: vertical direction
*
* Getter:
*
* Get the tab bar direction
*
* @memberof TabContainerTag
*/
set dir(v: "row" | "column");
get dir(): "row" | "column";
/**
* 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
*/
set selectedTab(v: TabContainerTabType);
get selectedTab(): TabContainerTabType;
/**
* Set the tab bar width, this function only
* works when the tab bar direction is set to
* `row`
*
* @memberof TabContainerTag
*/
set tabbarwidth(v: number);
/**
* Set the tab bar height, this function only works
* when the tab bar direction is set to `column`
*
* @memberof TabContainerTag
*/
set tabbarheight(v: number);
/**
* Add a new tab with container to the container
*
* item should be in the following format:
*
* ```ts
* {
* text: string,
* icon?: string,
* iconclass?: string,
* container: HTMLElement
* }
* ```
*
* @param {GenericObject<any>} item tab descriptor
* @param {boolean} insert insert the tab content to the container ?
* @returns {ListViewItemTag} the tab DOM element
* @memberof TabContainerTag
*/
addTab(item: GenericObject<any>, insert: boolean): ListViewItemTag;
/**
* Remove a tab from the container
*
* @param {ListViewItemTag} tab the tab item to be removed
* @memberof TabContainerTag
*/
removeTab(tab: ListViewItemTag): void;
/**
* Mount the tag and bind basic events
*
* @protected
* @memberof TabContainerTag
*/
protected mount(): void;
/**
* calibrate the tab container
*
* @memberof TabContainerTag
*/
calibrate(): void;
/**
* Layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof TabContainerTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
/**
* Extend the Array interface with some
* property needed by AFX API
*
* @interface Array
* @template T
*/
interface Array<T> {
/**
* Reference to a DOM element created by AFX API,
* this property is used by some AFX tags to refer
* to its child element in it data object
*
* @type {GenericObject<any>}
* @memberof Array
*/
domel?: GenericObject<any>;
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Row item event data type
*/
type GridRowEventData = TagEventDataType<GridRowTag>;
/**
* A grid Row is a simple element that
* contains a group of grid cell
*
* @export
* @class GridRowTag
* @extends {AFXTag}
*/
class GridRowTag extends AFXTag {
/**
* Data placeholder for a collection of cell data
*
* @type {GenericObject<any>[]}
* @memberof GridRowTag
*/
data: GenericObject<any>[];
/**
* placeholder for the row select event callback
*
* @private
* @type {TagEventCallback<GridRowEventData>}
* @memberof ListViewItemTag
*/
private _onselect;
/**
*Creates an instance of GridRowTag.
* @memberof GridRowTag
*/
constructor();
/**
* Set item select event handle
*
* @memberof ListViewItemTag
*/
set onrowselect(v: TagEventCallback<GridRowEventData>);
/**
* Setter: select/unselect the current item
*
* Getter: Check whether the current item is selected
*
* @memberof ListViewItemTag
*/
set selected(v: boolean);
get selected(): boolean;
/**
* Mount the tag, do nothing
*
* @protected
* @memberof GridRowTag
*/
protected mount(): void;
/**
* Init the tag before mounting: reset the data placeholder
*
* @protected
* @memberof GridRowTag
*/
protected init(): void;
/**
* Empty layout
*
* @protected
* @returns {TagLayoutType[]}
* @memberof GridRowTag
*/
protected layout(): TagLayoutType[];
/**
* This function does nothing in this tag
*
* @protected
* @memberof GridRowTag
*/
protected calibrate(): void;
/**
* This function does nothing in this tag
*
* @protected
* @param {*} [d]
* @memberof GridRowTag
*/
protected reload(d?: any): void;
}
/**
* Event data used by grid cell
*/
type CellEventData = TagEventDataType<GridCellPrototype>;
/**
* Prototype of any grid cell, custom grid cell
* definition should extend and implement this
* abstract prototype
*
* @export
* @abstract
* @class GridCellPrototype
* @extends {AFXTag}
*/
abstract class GridCellPrototype extends AFXTag {
/**
* placeholder for cell selected event callback
*
* @private
* @type {TagEventCallback<CellEventData>}
* @memberof GridCellPrototype
*/
private _oncellselect;
/**
* placeholder for cell double click event callback
*
* @private
* @type {TagEventCallback<CellEventData>}
* @memberof GridCellPrototype
*/
private _oncelldbclick;
/**
* Data placeholder of the current cell
*
* @private
* @type {GenericObject<any>}
* @memberof GridCellPrototype
*/
private _data;
/**
*Creates an instance of GridCellPrototype.
* @memberof GridCellPrototype
*/
constructor();
/**
* Set the cell selected event callback
*
* @memberof GridCellPrototype
*/
set oncellselect(v: TagEventCallback<CellEventData>);
/**
* Set the cell double click event callback
*
* @memberof GridCellPrototype
*/
set oncelldbclick(v: TagEventCallback<CellEventData>);
/**
* 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>);
get data(): GenericObject<any>;
/**
* 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);
get selected(): boolean;
/**
* Update the current cell. This will
* reset the cell data
*
* @protected
* @param {*} d
* @memberof GridCellPrototype
*/
protected reload(d: any): void;
/**
* Mount the current cell to the grid
*
* @protected
* @memberof GridCellPrototype
*/
protected mount(): void;
/**
* This function triggers the cell select
* event
*
* @private
* @param {TagEventType<GridCellPrototype>} e
* @param {boolean} flag
* @returns {void}
* @memberof GridCellPrototype
*/
private cellselect;
/**
* Abstract function called when the cell data changed.
* This should be implemented by subclasses
*
* @protected
* @abstract
* @memberof GridCellPrototype
*/
protected abstract ondatachange(): void;
}
/**
* Simple grid cell defines a grid cell with
* an [[LabelTag]] as it cell layout
*
* @export
* @class SimpleGridCellTag
* @extends {GridCellPrototype}
*/
class SimpleGridCellTag extends GridCellPrototype {
/**
*Creates an instance of SimpleGridCellTag.
* @memberof SimpleGridCellTag
*/
constructor();
/**
* Reset the label of the cell with its data
*
* @protected
* @memberof SimpleGridCellTag
*/
protected ondatachange(): void;
/**
* This function do nothing in this tag
*
* @protected
* @memberof SimpleGridCellTag
*/
protected init(): void;
/**
* This function do nothing in this tag
*
* @protected
* @memberof SimpleGridCellTag
*/
protected calibrate(): void;
/**
* The layout of the cell with a simple [[LabelTag]]
*
* @returns
* @memberof SimpleGridCellTag
*/
layout(): {
el: string;
ref: string;
}[];
}
/**
* A Grid contains a header and a collection grid rows
* which has the same number of cells as the number of
* the header elements
*
* @export
* @class GridViewTag
* @extends {AFXTag}
*/
class GridViewTag extends AFXTag {
/**
* Grid header definition
*
* @private
* @type {GenericObject<any>[]}
* @memberof GridViewTag
*/
private _header;
/**
* Grid rows data placeholder
*
* @private
* @type {GenericObject<any>[][]}
* @memberof GridViewTag
*/
private _rows;
/**
* Reference to the current selected row DOM element
*
* @private
* @type {GridRowTag}
* @memberof GridViewTag
*/
private _selectedRow;
/**
* A collection of selected grid rows DOM element
*
* @private
* @type {GridRowTag[]}
* @memberof GridViewTag
*/
private _selectedRows;
/**
* Reference to the current selected cell
*
* @private
* @type {GridCellPrototype}
* @memberof GridViewTag
*/
private _selectedCell;
/**
* Cell select event callback placeholder
*
* @private
* @type {TagEventCallback<CellEventData>}
* @memberof GridViewTag
*/
private _oncellselect;
/**
* Row select event callback placeholder
*
* @private
* @type {TagEventCallback<CellEventData>}
* @memberof GridViewTag
*/
private _onrowselect;
/**
* Cell double click event callback placeholder
*
* @private
* @type {TagEventCallback<CellEventData>}
* @memberof GridViewTag
*/
private _oncelldbclick;
/**
* Event data passing between mouse event when performing
* drag and drop on the list
*
* @private
* @type {{ from: GridRowTag[]; to: GridRowTag }}
* @memberof GridViewTag
*/
private _dnd;
/**
* placeholder of list drag and drop event handle
*
* @private
* @type {TagEventCallback<DnDEventDataType<GridRowTag>>}
* @memberof GridViewTag
*/
private _ondragndrop;
/**
* Creates an instance of GridViewTag.
* @memberof GridViewTag
*/
constructor();
/**
* Set drag and drop event handle
*
* @memberof GridViewTag
*/
set ondragndrop(v: TagEventCallback<DnDEventDataType<GridRowTag>>);
/**
* Setter: Enable/disable drag and drop event in the list
*
* Getter: Check whether the drag and drop event is enabled
*
* @memberof GridViewTag
*/
set dragndrop(v: boolean);
get dragndrop(): boolean;
/**
* placeholder of drag and drop mouse down event handle
*
* @private
* @memberof GridViewTag
*/
private _onmousedown;
/**
* placeholder of drag and drop mouse up event handle
*
* @private
* @memberof GridViewTag
*/
private _onmouseup;
/**
* placeholder of drag and drop mouse move event handle
*
* @private
* @memberof GridViewTag
*/
private _onmousemove;
/**
* Init the grid view before mounting.
* Reset all the placeholders to default values
*
* @protected
* @memberof GridViewTag
*/
protected init(): void;
/**
* This function does nothing
*
* @protected
* @param {*} [d]
* @memberof GridViewTag
*/
protected reload(d?: any): void;
/**
* set the cell select event callback
*
* @memberof GridViewTag
*/
set oncellselect(v: TagEventCallback<CellEventData>);
/**
* set the row select event callback
*
* @memberof GridViewTag
*/
set onrowselect(v: TagEventCallback<CellEventData>);
/**
* set the cell double click event callback
*
* @memberof GridViewTag
*/
set oncelldbclick(v: TagEventCallback<CellEventData>);
/**
* Setter: set the tag name of the header cells
*
* Getter: get the grid header tag name
*
* @memberof GridViewTag
*/
set headeritem(v: string);
get headeritem(): string;
/**
* Setter: set the tag name of the grid cell
*
* Getter: get the tag name of the grid cell
*
* @memberof GridViewTag
*/
set cellitem(v: string);
get cellitem(): string;
/**
* Setter: set the header data
*
* Getter: get the header data placeholder
*
* @type {GenericObject<any>[]}
* @memberof GridViewTag
*/
get header(): GenericObject<any>[];
set header(v: GenericObject<any>[]);
/**
* Get all the selected rows
*
* @readonly
* @type {GridRowTag[]}
* @memberof GridViewTag
*/
get selectedRows(): GridRowTag[];
/**
* Get the latest selected row
*
* @readonly
* @type {GridRowTag}
* @memberof GridViewTag
*/
get selectedRow(): GridRowTag;
/**
* Get the current selected cell
*
* @readonly
* @type {GridCellPrototype}
* @memberof GridViewTag
*/
get selectedCell(): GridCellPrototype;
/**
* Setter: set the rows data
*
* Getter: get the rows data
*
* @memberof GridViewTag
*/
set rows(rows: GenericObject<any>[][]);
get rows(): GenericObject<any>[][];
/**
* Setter: activate deactivate multi-select
*
* Getter: check whether the `multiselect` option is activated
*
* @memberof GridViewTag
*/
set multiselect(v: boolean);
get multiselect(): boolean;
/**
* Set and Get the resizable attribute
*
* This allows to enable/disable column resize feature
*
* @memberof GridViewTag
*/
set resizable(v: boolean);
get resizable(): boolean;
/**
* Sort the grid using a sort function
*
* @param {context: any} context of the executed function
* @param {(a:GenericObject<any>[], b:GenericObject<any>[]) => boolean} a sort function that compares two rows data
* * @param {index: number} current header index
* @returns {void}
* @memberof GridViewTag
*/
sort(context: any, fn: (a: GenericObject<any>[], b: GenericObject<any>[], index?: number) => number): void;
/**
* Delete a grid rows
*
* @param {GridRowTag} row row DOM element
* @returns {void}
* @memberof GridViewTag
*/
delete(row: GridRowTag): void;
/**
* Push a row to the grid
*
* @param {GenericObject<any>[]} row list of cell data
* @param {boolean} flag indicates where the row is add to beginning or end
* of the row
* @memberof GridViewTags
*/
push(row: GenericObject<any>[], flag: boolean): void;
/**
* Unshift a row to the grid
*
* @param {GenericObject<any>[]} row list of cell data in the row
* @memberof GridViewTag
*/
unshift(row: GenericObject<any>[]): void;
/**
* This function triggers the cell select event
*
* @private
* @param {TagEventType<CellEventData>} e event contains cell event data
* @param {boolean} flag indicates whether the event is double clicked
* @returns {void}
* @memberof GridViewTag
*/
private cellselect;
/**
* This function triggers the row select event, a cell select
* event will also trigger this event
*
* @param {TagEventType<GridRowEventData>} e
* @returns {void}
* @memberof GridViewTag
*/
private rowselect;
/**
* Unselect all the selected rows in the grid
*
* @returns {void}
* @memberof GridViewTag
*/
unselect(): void;
/**
* Check whether the grid has header
*
* @private
* @returns {boolean}
* @memberof GridViewTag
*/
private has_header;
/**
* Calibrate the grid
*
* @protected
* @memberof GridViewTag
*/
protected calibrate(): void;
/**
* Recalculate the size of each header cell, changing
* in header cell size will also resize the entire
* related column
*
* @private
* @returns {void}
* @memberof GridViewTag
*/
private calibrate_header;
/**
* Mount the grid view tag
*
* @protected
* @returns {void}
* @memberof GridViewTag
*/
protected mount(): void;
/**
* Layout definition of the grid view
*
* @protected
* @returns {TagLayoutType[]}
* @memberof GridViewTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A system panel contains the following elements:
* - Spotlight to access to applications menu
* - Current focused application menu
* - System tray for all running services running in background
*
* @export
* @class SystemPanelTag
* @extends {AFXTag}
*/
class SystemPanelTag extends AFXTag {
/**
* Reference to spotlight data
*
* @private
* @type {(GenericObject<string | FormattedString>)}
* @memberof SystemPanelTag
*/
private _osmenu;
/**
* Placeholder indicates whether the spotlight is currently shown
*
* @private
* @type {boolean}
* @memberof SystemPanelTag
*/
private _view;
/**
* Store pending loading task
*
* @private
* @type {number[]}
* @memberof SystemPanelTag
*/
private _pending_task;
/**
* Loading animation check timeout
*
* @memberof SystemPanelTag
*/
private _loading_toh;
/**
* Place holder for a private callback function
*
* @private
* @memberof SystemPanelTag
*/
private _cb;
/**
* Place holder for system app list
*
* @private
* @type {GenericObject<any>[]}
* @memberof SystemPanelTag
*/
private app_list;
/**
*Creates an instance of SystemPanelTag.
* @memberof SystemPanelTag
*/
constructor();
/**
* Do nothing
*
* @protected
* @memberof SystemPanelTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof SystemPanelTag
*/
protected reload(d?: any): void;
/**
* Attach a service to the system tray on the pannel,
* this operation is performed when a service is started
*
* @param {BaseService} s
* @returns
* @memberof SystemPanelTag
*/
attachservice(s: application.BaseService): void;
/**
* Launch the selected application from the spotlight
* applications list
*
* @private
* @returns {void}
* @memberof SystemPanelTag
*/
private open;
/**
* Perform spotlight search operation on keyboard event
*
* @private
* @param {JQuery.KeyboardEventBase} e
* @returns {void}
* @memberof SystemPanelTag
*/
private search;
/**
* detach a service from the system tray of the panel.
* This function is called when the corresponding running
* service is killed
*
* @param {BaseService} s
* @memberof SystemPanelTag
*/
detachservice(s: application.BaseService): void;
/**
* Layout definition of the panel
*
* @protected
* @returns {TagLayoutType[]}
* @memberof SystemPanelTag
*/
protected layout(): TagLayoutType[];
/**
* Refresh applications list on the spotlight widget
* from system packages meta-data
*
* @private
* @memberof SystemPanelTag
*/
private refreshAppList;
/**
* Show/hide the spotlight
*
* @private
* @param {boolean} flag
* @memberof SystemPanelTag
*/
private toggle;
/**
* Calibrate the spotlight widget
*
* @memberof SystemPanelTag
*/
calibrate(): void;
/**
* Refresh the pinned applications menu
*
* @private
* @memberof SystemPanelTag
*/
private RefreshPinnedApp;
/**
* Check if the loading tasks ended,
* if it the case, stop the animation
*
* @private
* @memberof SystemPanelTag
*/
private animation_check;
/**
* Mount the tag bind some basic event
*
* @protected
* @memberof SystemPanelTag
*/
protected mount(): void;
}
}
}
}
/// <reference types="jquery" />
declare namespace OS {
namespace GUI {
namespace tag {
/**
* This tag define a basic button and its behavior
*
* @export
* @class ButtonTag
* @extends {AFXTag}
*/
class ButtonTag extends AFXTag {
/**
* Variable hold the button click callback handle
*
* @private
* @type {TagEventCallback<JQuery.MouseEventBase>}
* @memberof ButtonTag
*/
private _onbtclick;
/**
* Custom user data
*
* @type {GenericObject<any>}
* @memberof ButtonTag
*/
data: GenericObject<any>;
/**
*Creates an instance of ButtonTag.
* @memberof ButtonTag
*/
constructor();
/**
* Set the click callback handle for the target button
*
* @memberof ButtonTag
*/
set onbtclick(v: TagEventCallback<JQuery.MouseEventBase>);
/**
* Set the path to the button icon, the path should be
* a VFS file path
*
* @memberof ButtonTag
*/
set icon(v: string);
/**
* Set the icon class to the button, this property
* allows to style the button icon using CSS
*
* @memberof ButtonTag
*/
set iconclass(v: string);
/**
* Setter: Set the text of the button
*
* Getter: Get the current button test
*
* @memberof ButtonTag
*/
set text(v: string | FormattedString);
get text(): string | FormattedString;
/**
* Setter: Enable or disable the button
*
* Getter: Get the `enable` property of the button
*
* @memberof ButtonTag
*/
set enable(v: boolean);
get enable(): boolean;
/**
* Setter: set or remove the attribute `selected` of the button
*
* Getter: check whether the attribute `selected` of the button is set
*
* @memberof ButtonTag
*/
set selected(v: boolean);
get selected(): boolean;
/**
* 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);
get toggle(): boolean;
/**
* Mount the tag
*
* @protected
* @memberof ButtonTag
*/
protected mount(): void;
/**
* Init the tag before mounting
*
* @protected
* @memberof ButtonTag
*/
protected init(): void;
/**
* Re-calibrate the button, do nothing in this tag
*
* @protected
* @memberof ButtonTag
*/
protected calibrate(): void;
/**
* Update the current tag, do nothing in this tag
*
* @param {*} [d]
* @memberof ButtonTag
*/
reload(d?: any): void;
/**
* Button layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof ButtonTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A tile layout organize it child elements
* in a fixed horizontal or vertical direction.
*
* The size of each child element is attributed based
* on its configuration of automatically based on the
* remaining space in the layout
*
*
* @export
* @class TileLayoutTag
* @extends {AFXTag}
*/
class TileLayoutTag extends AFXTag {
/**
*C reates an instance of TileLayoutTag.
* @memberof TileLayoutTag
*/
constructor();
/**
* Do nothing
*
* @protected
* @memberof TileLayoutTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof TileLayoutTag
*/
protected reload(d?: any): void;
/**
* Setter: Set the name of the tile container, should be: `hbox` or `vbox`
*
* Getter: Get the name of the tile container
*
* @memberof TileLayoutTag
*/
set name(v: string);
get name(): string;
/**
* Setter:
*
* SET the layout direction, should be:
* - `row`: horizontal direction
* - `column`: vertical direction
*
* Getter:
*
* Get layout direction
*
* @memberof TileLayoutTag
*/
set dir(v: "row" | "column");
get dir(): "row" | "column";
/**
* Mount the element
*
* @protected
* @returns {void}
* @memberof TileLayoutTag
*/
protected mount(): void;
/**
* re-organize the layout
*
* @returns {void}
* @memberof TileLayoutTag
*/
calibrate(): void;
/**
* Organize the layout in horizontal direction, only work when
* the layout direction set to horizontal
*
* @private
* @returns {void}
* @memberof TileLayoutTag
*/
private hcalibrate;
/**
* Organize the layout in vertical direction, only work when
* the layout direction set to vertical
*
* @private
* @returns {void}
* @memberof TileLayoutTag
*/
private vcalibrate;
/**
* Layout definition
*
* @returns
* @memberof TileLayoutTag
*/
layout(): {
el: string;
ref: string;
}[];
}
/**
* A HBox organize its child elements in horizontal direction
*
* @export
* @class HBoxTag
* @extends {TileLayoutTag}
*/
class HBoxTag extends TileLayoutTag {
/**
* Creates an instance of HBoxTag.
* @memberof HBoxTag
*/
constructor();
/**
* Mount the tag
*
* @protected
* @memberof HBoxTag
*/
protected mount(): void;
}
/**
* A VBox organize its child elements in vertical direction
*
* @export
* @class VBoxTag
* @extends {TileLayoutTag}
*/
class VBoxTag extends TileLayoutTag {
/**
*Creates an instance of VBoxTag.
* @memberof VBoxTag
*/
constructor();
/**
* Mount the tag
*
* @protected
* @memberof VBoxTag
*/
protected mount(): void;
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Tree view data type definition
*
* @export
* @interface TreeViewDataType
*/
interface TreeViewDataType {
/**
* The child nodes data of the current tree node
*
* @type {TreeViewDataType[]}
* @memberof TreeViewDataType
*/
nodes?: TreeViewDataType[];
/**
* Boolean indicates whether the current node is opened.
* Only work when the current node is not a leaf node
*
* @type {boolean}
* @memberof TreeViewDataType
*/
open?: boolean;
/**
* The node's path from the root node
*
* @type {string}
* @memberof TreeViewDataType
*/
path?: string;
/**
* Indicates whether this node should be selected
*
* @type {boolean}
* @memberof TreeViewDataType
*/
selected?: boolean;
[propName: string]: any;
}
/**
* Tree node event data type definition
*/
type TreeItemEventData = TagEventDataType<TreeViewItemPrototype>;
/**
* Abstract prototype of a tree node. All tree node definition should
* extend this class
*
* @class TreeViewItemPrototype
* @extends {AFXTag}
*/
abstract class TreeViewItemPrototype extends AFXTag {
/**
* Node data placeholder
*
* @private
* @type {TreeViewDataType}
* @memberof TreeViewItemPrototype
*/
private _data;
/**
* Placeholder for the indent level of the current node from root node
*
* @private
* @type {number}
* @memberof TreeViewItemPrototype
*/
private _indent;
/**
* private event object used by current node event
*
* @private
* @type {TagEventType<TreeItemEventData>}
* @memberof TreeViewItemPrototype
*/
private _evt;
/**
* Reference to the root node
*
* @type {TreeViewTag}
* @memberof TreeViewItemPrototype
*/
treeroot: TreeViewTag;
/**
* The tree path from the root node
*
* @type {string}
* @memberof TreeViewItemPrototype
*/
treepath: string;
/**
* Reference to the parent node of the current node
*
* @type {TreeViewTag}
* @memberof TreeViewItemPrototype
*/
parent: TreeViewTag;
/**
* Placeholder for the `fetch` function of the node.
* This function is used to fetch the child nodes of the
* current nodes. This function should return a promise on
* a list of [[TreeViewDataType]]
*
* @memberof TreeViewItemPrototype
*/
fetch: (d: TreeViewItemPrototype) => Promise<TreeViewDataType[]>;
/**
*Creates an instance of TreeViewItemPrototype.
* @memberof TreeViewItemPrototype
*/
constructor();
/**
* Update the tree, this function
* is used to refresh/expand/collapse the
* current node based on the input parameter
*
* @protected
* @param {*} p string indication, the value should be:
* - `expand`: expand the current node
* - `collapse`: collapse the current node
* - other string: this string is considered as a tree path of a node. If this value
* is the value of current node tree path, the node will be refreshed. Otherwise, nothing
* happens
* @returns {void}
* @memberof TreeViewItemPrototype
*/
protected reload(p: any): void;
/**
* 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);
get data(): TreeViewDataType;
/**
* 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);
get selected(): boolean;
/**
* 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);
get open(): boolean;
/**
* Setter: Set the current indent level of this node from the root node
*
* Getter: Get the current indent level
*
* @type {number}
* @memberof TreeViewItemPrototype
*/
get indent(): number;
set indent(v: number);
/**
* Check whether the current node is not a leaf node
*
* @private
* @returns {boolean}
* @memberof TreeViewItemPrototype
*/
private is_folder;
/**
* Getter: Get the child nodes data of the current node
*
* Setter: Set the child nodes data of the current node
*
* @type {TreeViewDataType[]}
* @memberof TreeViewItemPrototype
*/
get nodes(): TreeViewDataType[];
set nodes(nodes: TreeViewDataType[]);
/**
* Init the tag with default properties data
*
* @protected
* @memberof TreeViewItemPrototype
*/
protected init(): void;
/**
* Mount the tag and bind basic events
*
* @protected
* @memberof TreeViewItemPrototype
*/
protected mount(): void;
/**
* Layout definition of a node. This function
* returns the definition of the base outer layout
* of a node. Custom inner layout of the node should
* be defined in the [[itemlayout]] function
*
* @protected
* @returns {TagLayoutType[]}
* @memberof TreeViewItemPrototype
*/
protected layout(): TagLayoutType[];
/**
* This function need to be implemented by all subclasses
* to define the inner layout of the node
*
* @protected
* @abstract
* @returns {TagLayoutType[]}
* @memberof TreeViewItemPrototype
*/
protected abstract itemlayout(): TagLayoutType[];
/**
* This function is called when the node data change.
* It needs to be implemented on all subclasses of this
* class
*
* @protected
* @abstract
* @memberof TreeViewItemPrototype
*/
protected abstract ondatachange(): void;
}
/**
* SimpleTreeViewItem extends [[TreeViewItemPrototype]] and
* define it inner layout using a [[LabelTag]]
*
* @export
* @class SimpleTreeViewItem
* @extends {TreeViewItemPrototype}
*/
class SimpleTreeViewItem extends TreeViewItemPrototype {
/**
*Creates an instance of SimpleTreeViewItem.
* @memberof SimpleTreeViewItem
*/
constructor();
/**
* Refresh the label when data changed
*
* @protected
* @returns {void}
* @memberof SimpleTreeViewItem
*/
protected ondatachange(): void;
/**
* Inner layout definition
*
* @protected
* @returns
* @memberof SimpleTreeViewItem
*/
protected itemlayout(): {
el: string;
ref: string;
}[];
}
/**
* A tree view widget presents a hierarchical list of nodes.
*
* @export
* @class TreeViewTag
* @extends {AFXTag}
*/
class TreeViewTag extends AFXTag {
/**
* Reference to the selected node
*
* @private
* @type {TreeViewItemPrototype}
* @memberof TreeViewTag
*/
private _selectedItem;
/**
* Placeholder for tree select event handle
*
* @private
* @type {TagEventCallback<TreeItemEventData>}
* @memberof TreeViewTag
*/
private _ontreeselect;
/**
* Place holder for tree double click event handle
*
* @private
* @type {TagEventCallback<TreeItemEventData>}
* @memberof TreeViewTag
*/
private _ontreedbclick;
/**
* Placeholder for drag and drop event handle
*
* @private
* @type {TagEventCallback<DnDEventDataType<TreeViewTag>>}
* @memberof TreeViewTag
*/
private _ondragndrop;
/**
* Tree data placeholder
*
* @private
* @type {TreeViewDataType}
* @memberof TreeViewTag
*/
private _data;
/**
* Placeholder for private dragndrop mouse down event handle
*
* @private
* @memberof TreeViewTag
*/
private _treemousedown;
/**
* Placeholder for private dragndrop mouse up event handle
*
* @private
* @memberof TreeViewTag
*/
private _treemouseup;
/**
* Placeholder for private dragndrop mouse move event handle
*
* @private
* @memberof TreeViewTag
*/
private _treemousemove;
/**
* Private data object passing between dragndrop mouse event
*
* @private
* @type {{ from: TreeViewTag[]; to: TreeViewTag }}
* @memberof TreeViewTag
*/
private _dnd;
/**
* Reference to parent tree of the current tree.
* This value is undefined if the current tree is the root
*
* @type {TreeViewTag}
* @memberof TreeViewTag
*/
parent: TreeViewTag;
/**
* Reference to the root tree, this value is undefined
* if the curent tree is root
*
* @type {TreeViewTag}
* @memberof TreeViewTag
*/
treeroot: TreeViewTag;
/**
* tree path of the current tree from the root
*
* @type {string}
* @memberof TreeViewTag
*/
treepath: string;
/**
* Indent level of the current tree
*
* @type {number}
* @memberof TreeViewTag
*/
indent: number;
/**
* Indicates whether the tree should be expanded
*
* @type {boolean}
* @memberof TreeViewTag
*/
open: boolean;
/**
* Placeholder for the `fetch` function of the tree.
* This function is used to fetch the child nodes of the
* current tree. This function should return a promise on
* a list of [[TreeViewDataType]]
*
* @memberof TreeViewTag
*/
fetch: (d: TreeViewItemPrototype) => Promise<TreeViewDataType[]>;
/**
*Creates an instance of TreeViewTag.
* @memberof TreeViewTag
*/
constructor();
/**
* Init the tree view before mounting:
*
* @protected
* @memberof TreeViewTag
*/
protected init(): void;
/**
* Layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof TreeViewTag
*/
protected layout(): TagLayoutType[];
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof TreeViewTag
*/
protected reload(d?: any): void;
/**
* 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);
get dragndrop(): boolean;
/**
* Set the tree select event handle
*
* @memberof TreeViewTag
*/
set ontreeselect(v: TagEventCallback<TreeItemEventData>);
/**
* Set the tree double click event handle
*
* @memberof TreeViewTag
*/
set ontreedbclick(v: TagEventCallback<TreeItemEventData>);
/**
* 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);
get itemtag(): string;
/**
* Unselect the selected element in the tree
*
* @memberof TreeViewTag
*/
unselect(): void;
/**
* Setter: Set the selected node using its DOM element
*
* Getter: Get the DOM element of the selected node
*
* @type {TreeViewItemPrototype}
* @memberof TreeViewTag
*/
get selectedItem(): TreeViewItemPrototype;
set selectedItem(v: TreeViewItemPrototype);
/**
* Expand all nodes in the tree
*
* @returns {void}
* @memberof TreeViewTag
*/
expandAll(): void;
/**
* Collapse all nodes in the tree
*
* @returns {void}
* @memberof TreeViewTag
*/
collapseAll(): void;
/**
* This function will trigger the tree select or tree double click
* event
*
* @param {TagEventType} e
* @returns {void}
* @memberof TreeViewTag
*/
itemclick(e: TagEventType<TreeItemEventData>): void;
/**
* Check whether the current tree is a root tree
*
* @returns {boolean}
* @memberof TreeViewTag
*/
is_root(): boolean;
/**
* Check whether the current tree tag is a leaf
*
* @returns {boolean}
* @memberof TreeViewTag
*/
is_leaf(): boolean;
/**
* Set drag and drop event handle
*
* @memberof TreeViewTag
*/
set ondragndrop(v: TagEventCallback<DnDEventDataType<TreeViewTag>>);
/**
* 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);
get data(): TreeViewDataType;
/**
* Mount the tree view
*
* @protected
* @memberof TreeViewTag
*/
protected mount(): void;
}
}
}
}
/// <reference types="jquery" />
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Menu event data interface definition
*/
type MenuEventData = TagEventDataType<MenuEntryTag>;
/**
* This class defines the abstract prototype of an menu entry.
* Any implementation of menu entry tag should extend this class
*
* @export
* @abstract
* @class MenuEntryTag
* @extends {AFXTag}
*/
abstract class MenuEntryTag extends AFXTag {
/**
* Data placeholder of the menu entry
*
* @private
* @type {GenericObject<any>}
* @memberof MenuEntryTag
*/
private _data;
/**
* placeholder of `menu entry select` event handle
*
* @private
* @type {TagEventCallback<MenuEventData>}
* @memberof MenuEntryTag
*/
private _onmenuselect;
/**
* placeholder of `sub-menu entry select event` handle
*
* @private
* @type {TagEventCallback<MenuEventData>}
* @memberof MenuEntryTag
*/
private _onchildselect;
/**
* Reference to the parent menu entry of current one
*
* @type {MenuEntryTag}
* @memberof MenuEntryTag
*/
parent: MenuEntryTag;
/**
* Reference to the root menu entry
*
* @type {MenuTag}
* @memberof MenuEntryTag
*/
root: MenuTag;
/**
*Creates an instance of MenuEntryTag.
* @memberof MenuEntryTag
*/
constructor();
/**
* Init the tag before mounting
*
* @protected
* @memberof MenuEntryTag
*/
protected init(): void;
/**
* Set the `menu entry select` event handle
*
* @memberof MenuEntryTag
*/
set onmenuselect(v: TagEventCallback<MenuEventData>);
/**
* 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>);
get onchildselect(): TagEventCallback<MenuEventData>;
/**
* Setter: Set data to the entry
*
* Getter: Get data of the current menu entry
*
* @memberof MenuEntryTag
*/
set data(data: GenericObject<any>);
get data(): GenericObject<any>;
/**
* Check whether the current menu entry has sub-menu
*
* @protected
* @returns {boolean}
* @memberof MenuEntryTag
*/
protected has_nodes(): boolean;
/**
* Check whether the current menu entry is the root entry
*
* @protected
* @returns
* @memberof MenuEntryTag
*/
protected is_root(): boolean;
/**
* Layout definition of the menu entry
* This function define the outer layout of the menu entry.
* Custom inner layout of each item implementation should
* be defined in [[itemlayout]]
* @protected
* @returns {TagLayoutType[]}
* @memberof MenuEntryTag
*/
protected layout(): TagLayoutType[];
/**
* Setter: Set the sub-menu data
*
* Getter: Get the sub-menu data
*
* @memberof MenuEntryTag
*/
set nodes(v: GenericObject<any>[]);
get nodes(): GenericObject<any>[];
/**
* Bind some base event to the menu entry
*
* @protected
* @memberof MenuEntryTag
*/
protected mount(): void;
/**
* Hide the sub-menu of the current menu entry
*
* @private
* @returns {void}
* @memberof MenuEntryTag
*/
private submenuoff;
/**
* This function trigger two event:
* - the `onmenuselect` event on the current entry
* - the `onchildselect` event on the parent of the current entry
*
* @protected
* @param {JQuery.ClickEvent} e
* @memberof MenuEntryTag
*/
protected select(e: JQuery.ClickEvent): void;
/**
* custom inner layout of a menu entry
*
* @protected
* @abstract
* @returns {TagLayoutType[]}
* @memberof MenuEntryTag
*/
protected abstract itemlayout(): TagLayoutType[];
}
/**
* This class extends the [[MenuEntryTag]] prototype. It inner layout is
* defined with the following elements:
* - a [[SwitchTag]] acts as checker or radio
* - a [[LabelTag]] to display the content of the menu entry
* - a `span` element that display the keyboard shortcut of the entry
*
* @class SimpleMenuEntryTag
* @extends {MenuEntryTag}
*/
class SimpleMenuEntryTag extends MenuEntryTag {
/**
*Creates an instance of SimpleMenuEntryTag.
* @memberof SimpleMenuEntryTag
*/
constructor();
/**
* Reset some properties to default value
*
* @protected
* @memberof SimpleMenuEntryTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @memberof SimpleMenuEntryTag
*/
protected calibrate(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof SimpleMenuEntryTag
*/
protected reload(d?: any): void;
/**
* 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
*/
set switch(v: boolean);
get switch(): boolean;
/**
* Setter: Turn on/off the radio feature of the menu entry
*
* Getter: Check whether the radio feature is enabled
*
* @memberof SimpleMenuEntryTag
*/
set radio(v: boolean);
get radio(): boolean;
/**
* 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
*/
set checked(v: boolean);
get checked(): boolean;
/**
* Set the label icon using a VFS path
*
* @memberof SimpleMenuEntryTag
*/
set icon(v: string);
/**
* Set the label CSS icon class
*
* @memberof SimpleMenuEntryTag
*/
set iconclass(v: string);
/**
* Set the label text
*
* @memberof SimpleMenuEntryTag
*/
set text(v: string);
/**
* Set the keyboard shortcut text
*
* @memberof SimpleMenuEntryTag
*/
set shortcut(v: string);
/**
* Uncheck all sub-menu items of the current menu entry
* that have the radio feature enabled
*
* @returns {void}
* @memberof SimpleMenuEntryTag
*/
protected reset_radio(): void;
/**
* Mount the current tag
*
* @protected
* @memberof SimpleMenuEntryTag
*/
protected mount(): void;
/**
* Trigger the onmenuselect and onchildselect events
*
* @protected
* @param {JQuery.ClickEvent} e Mouse click event
* @returns {void}
* @memberof SimpleMenuEntryTag
*/
protected select(e: JQuery.ClickEvent): void;
/**
* Inner item layout of the menu entry
*
* @returns
* @memberof SimpleMenuEntryTag
*/
itemlayout(): ({
el: string;
ref: string;
class?: undefined;
} | {
el: string;
class: string;
ref: string;
})[];
}
/**
* A menu tag contains a collection of menu entries in which each
* entry maybe a leaf entry or may contain a submenu
*
* @export
* @class MenuTag
* @extends {AFXTag}
*/
class MenuTag extends AFXTag {
/**
* Reference to the parent menu entry of the current value.
* This value is `undefined` in case of the current menu is
* the root menu
*
* @type {MenuEntryTag}
* @memberof MenuTag
*/
parent: MenuEntryTag;
/**
* Reference to the root menu
*
* @type {MenuTag}
* @memberof MenuTag
*/
root: MenuTag;
/**
* The `pid` of the application that attached to this menu.
* This value is optional
*
* @type {number}
* @memberof MenuTag
*/
pid?: number;
/**
* placeholder for menu select event handle
*
* @private
* @type {TagEventCallback<MenuEventData>}
* @memberof MenuTag
*/
private _onmenuselect;
/**
* Menu data placeholder
*
* @private
* @type {GenericObject<any>[]}
* @memberof MenuTag
*/
private _items;
/**
*Creates an instance of MenuTag.
* @memberof MenuTag
*/
constructor();
/**
* Reset some properties to default value
*
* @protected
* @memberof MenuTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @memberof MenuTag
*/
protected calibrate(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof MenuTag
*/
protected reload(d?: any): void;
/**
* Setter: Set the menu items data
*
* Getter: Get menu items data
*
* @memberof MenuTag
*/
set items(data: GenericObject<any>[]);
get items(): GenericObject<any>[];
/**
* Setter: Set whether the current menu is a context menu
*
* Getter: Check whether the current menu is a context menu
*
* @memberof MenuTag
*/
set context(v: boolean);
get context(): boolean;
/**
* Set menu select event handle
*
* @memberof MenuTag
*/
set onmenuselect(v: TagEventCallback<MenuEventData>);
/**
* 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);
get contentag(): string;
/**
* Get the reference to the function that triggers
* the menu select event
*
* @readonly
* @type {TagEventCallback}
* @memberof MenuTag
*/
get onmenuitemselect(): TagEventCallback<MenuEventData>;
/**
* This function triggers the menu select event
*
* @private
* @param {TagEventType} e
* @memberof MenuTag
*/
private handleselect;
/**
* Show the current menu. This function is called
* only if the current menu is a context menu
*
* @param {JQuery.MouseEventBase} e JQuery mouse event
* @returns {void}
* @memberof MenuTag
*/
show(e: JQuery.MouseEventBase): void;
/**
* Test whether the current menu is the root menu
*
* @private
* @returns {boolean}
* @memberof MenuTag
*/
private is_root;
/**
* Mount the menu tag and bind some basic events
*
* @protected
* @returns {void}
* @memberof MenuTag
*/
protected mount(): void;
/**
* Add a menu entry to the beginning of the current
* menu
*
* @param {GenericObject<any>} item menu entry data
* @memberof MenuTag
*/
unshift(item: GenericObject<any>): void;
/**
* Delete a menu entry
*
* @param {MenuEntryTag} item reference to the DOM element of an menu entry
* @memberof MenuTag
*/
delete(item: MenuEntryTag): void;
/**
* Add an menu entry to the beginning or end of the menu
*
* @param {GenericObject<any>} item menu entry data
* @param {boolean} flag indicates whether the entry should be added to the beginning of the menu
* @returns {MenuEntryTag}
* @memberof MenuTag
*/
push(item: GenericObject<any>, flag: boolean): MenuEntryTag;
/**
* Menu tag layout definition
*
* @returns
* @memberof MenuTag
*/
layout(): {
el: string;
ref: string;
children: ({
el: string;
class: string;
ref?: undefined;
} | {
el: string;
ref: string;
class?: undefined;
})[];
}[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A slider or track bar is a graphical control element with which
* a user may set a value by moving an indicator, usually horizontally
*
* @class SliderTag
* @extends {AFXTag}
*/
class SliderTag extends AFXTag {
/**
* Slider max value placeholder
*
* @private
* @type {number}
* @memberof SliderTag
*/
private _max;
/**
* Current slider value placeholder
*
* @private
* @type {number}
* @memberof SliderTag
*/
private _value;
/**
* Placeholder of the on change event handle
*
* @private
* @type {TagEventCallback<number>}
* @memberof SliderTag
*/
private _onchange;
/**
* Placeholder of the on changing event handle
*
* @private
* @type {TagEventCallback<number>}
* @memberof SliderTag
*/
private _onchanging;
/**
* Creates an instance of SliderTag.
* @memberof SliderTag
*/
constructor();
/**
* Init the default value of the slider:
* - `max`: 100
* - `value`: 0
*
* @protected
* @memberof SliderTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof SliderTag
*/
protected reload(d?: any): void;
/**
* Set value change event handle.
* This handle will be triggered when the
* slider indicator is released
*
* @memberof SliderTag
*/
set onvaluechange(f: TagEventCallback<number>);
/**
* Set value changing event handle.
* This handle is triggered when moving the
* slider indicator
*
* @memberof SliderTag
*/
set onvaluechanging(f: TagEventCallback<number>);
/**
* Setter: Enable/disable the slider
*
* Getter: Check whether the slider is enabled
*
* @memberof SliderTag
*/
set enable(v: boolean);
get enable(): boolean;
/**
* Setter: Set the slider value
*
* Getter: Get the current slider value
*
* @memberof SliderTag
*/
set value(v: number);
get value(): number;
/**
* Setter: Set the maximum value of the slider
*
* Getter: Get the maximum value of the slider
*
* @memberof SliderTag
*/
set max(v: number);
get max(): number;
/**
* Mount the tag and bind some basic events
*
* @protected
* @memberof SliderTag
*/
protected mount(): void;
/**
* Calibrate the slide based on its value and max value
*
* @memberof SliderTag
*/
calibrate(): void;
/**
* enable dragging on the slider indicator
*
* @private
* @memberof SliderTag
*/
private enable_dragging;
/**
* Layout definition
*
* @protected
* @returns {TagLayoutType[]}
* @memberof SliderTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* An overlay tag is a layout tag that alway stay on top of
* the virtual desktop environment. Tile layout elements ([[VBoxTag]], [[HboxTag]])
* can be used inside this tag to compose elements
*
* @export
* @class OverlayTag
* @extends {AFXTag}
*/
class OverlayTag extends AFXTag {
/**
* Tag width placeholder
*
* @private
* @type {string}
* @memberof OverlayTag
*/
private _width;
/**
* Tag height place holder
*
* @private
* @type {string}
* @memberof OverlayTag
*/
private _height;
/**
*Creates an instance of OverlayTag.
* @memberof OverlayTag
*/
constructor();
/**
* Put the tag on top of the virtual desktop environment
*
* @protected
* @memberof OverlayTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof OverlayTag
*/
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
*/
set width(v: string);
get width(): string;
/**
* Setter:
*
* Set the tag height, the tag height should be in form of:
* `100px` of `80%`
*
* Getter:
*
* Get the tag height
*
* @memberof OverlayTag
*/
set height(v: string);
get height(): string;
/**
* Calibrate the element when mounting
*
* @protected
* @returns {void}
* @memberof OverlayTag
*/
protected mount(): void;
/**
* Calibrate the width and height of the tag
*
* @returns {void}
* @memberof OverlayTag
*/
calibrate(): void;
/**
* Layout definition of the tag
*
* @protected
* @returns {TagLayoutType[]}
* @memberof OverlayTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Meta tag that represents the virtual desktop environment.
* In near future, we may have multiple virtual desktop environments.
* Each desktop environment has a simple file manager and a window
* manager that render the window in a specific order.
*
* @export
* @class DesktopTag
* @extends {FloatListTag}
*/
class DesktopTag extends FloatListTag {
/**
* internal handle to the desktop file location
*
* @private
* @type {API.VFS.BaseFileHandle}
* @memberof DesktopTag
*/
private file;
/**
* local observer that detect if a new child element is
* added or removed
*
* @private
* @type {MutationObserver}
* @memberof DesktopTag
*/
private observer;
/**
* Internal list of the current opened window
*
* @private
* @type {Set<WindowTag>}
* @memberof DesktopTag
*/
private window_list;
/**
* Creates an instance of DesktopTag.
* @memberof DesktopTag
*/
constructor();
/**
* Mount the virtual desktop to the DOM tree
*
* @protected
* @memberof DesktopTag
*/
protected mount(): void;
/**
* Display all files and folders in the specific desktop location
*
* @return {*} {Promise<any>}
* @memberof DesktopTag
*/
refresh(): Promise<any>;
/**
* Remove this element from its parent
*
* @memberof DesktopTag
*/
remove(): void;
/**
* Active a window above all other windows
*
* @private
* @param {WindowTag} win
* @memberof DesktopTag
*/
private selectWindow;
/**
* Render all windows in order from bottom to top
*
* @private
* @memberof DesktopTag
*/
private render;
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A float list is a list of items in which each
* item can be moved (drag and drop) freely
*
* @export
* @class FloatListTag
* @extends {ListViewTag}
*/
class FloatListTag extends ListViewTag {
/**
* Update the current tag, do nothing
*
* @protected
* @param {*} [d]
* @memberof FloatListTag
*/
protected reload(d?: any): void;
/**
* Variable that hold the onready callback of
* the tag. This callback will be called after
* the tag is mounted
*
* @private
* @memberof FloatListTag
*/
private _onready;
/**
*Creates an instance of FloatListTag.
* @memberof FloatListTag
*/
constructor();
/**
* set the onready callback function to the tag.
* This callback will be called after
* the tag is mounted
*
* @memberof FloatListTag
*/
set onready(v: (e: FloatListTag) => void);
/**
* 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
*/
set dir(v: string);
get dir(): string;
/**
* Disable the dropdown option in this list
*
* @memberof FloatListTag
*/
set dropdown(v: boolean);
/**
* Disable the list buttons configuration in this
* list
*
* @memberof FloatListTag
*/
set buttons(v: GenericObject<any>[]);
/**
* Disable the `showlist` behavior in this list
*
* @protected
* @param {*} e
* @memberof FloatListTag
*/
protected showlist(e: any): void;
/**
* Disable the `dropoff` behavior in this list
*
* @protected
* @param {*} e
* @memberof FloatListTag
*/
protected dropoff(e: any): void;
/**
* Function called when the data of the list
* is changed
*
* @protected
* @memberof FloatListTag
*/
protected ondatachange(): void;
/**
* Mount the list to the DOM tree
*
* @protected
* @returns {void}
* @memberof FloatListTag
*/
protected mount(): void;
/**
* Push an element to the list
*
* @param {GenericObject<any>} v an element data
* @returns
* @memberof FloatListTag
*/
push(v: GenericObject<any>): ListViewItemTag;
/**
* Enable drag and drop on the list
*
* @private
* @param {ListViewItemTag} el the list item DOM element
* @memberof FloatListTag
*/
private enable_drag;
/**
* Calibrate the view of the list
*
* @memberof FloatListTag
*/
calibrate(): void;
}
}
}
}
declare namespace OS {
namespace GUI {
/**
*
* Interface for an application dock item
*
* @export
* @interface AppDockItemType
*/
interface AppDockItemType {
/**
* Reference to the application process represented
* by the dock item
*
* @type {application.BaseApplication}
* @memberof AppDockItemType
*/
app: application.BaseApplication;
/**
* Reference to the DOM element of
* the owner dock item
*
* @type {AFXTag}
* @memberof AppDockItemType
*/
domel?: AFXTag;
[propName: string]: any;
}
namespace tag {
/**
* This class define the AntOS system application dock tag
*
* @export
* @class AppDockTag
* @extends {AFXTag}
*/
class AppDockTag extends AFXTag {
/**
* variable holds the application select event
* callback handle
*
* @private
* @type {TagEventCallback<any>}
* @memberof AppDockTag
*/
private _onappselect;
/**
* Items data of the dock
*
* @private
* @type {AppDockItemType[]}
* @memberof AppDockTag
*/
private _items;
/**
* Reference to the currently select application
* process in the dock
*
* @private
* @type {AppDockItemType}
* @memberof AppDockTag
*/
private _selectedItem;
/**
*Creates an instance of AppDockTag.
* @memberof AppDockTag
*/
constructor();
/**
* Implementation of the abstract function: Update the current tag.
* It do nothing for this tag
*
* @protected
* @param {*} [d]
* @memberof AppDockTag
*/
protected reload(d?: any): void;
/**
* Init the tag before mounting
*
* @protected
* @memberof AppDockTag
*/
protected init(): void;
/**
* The tag layout, it is empty on creation but elements will
* be added automatically to it in operation
*
* @protected
* @returns {TagLayoutType[]}
* @memberof AppDockTag
*/
protected layout(): TagLayoutType[];
/**
* getter to get the dock items
*
* @readonly
* @type {AppDockItemType[]}
* @memberof AppDockTag
*/
get items(): AppDockItemType[];
/**
* 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);
get selectedApp(): application.BaseApplication;
/**
* Get selected item of the dock
*
* @readonly
* @type {AppDockItemType}
* @memberof AppDockTag
*/
get selectedItem(): AppDockItemType;
/**
* When a new application process is created, this function
* will be called to add new application entry to the dock.
* The added application will becomes the current selected
* application
*
* @param {AppDockItemType} item an application dock item entry
* @memberof AppDockTag
*/
newapp(item: AppDockItemType): void;
/**
* Delete and application entry from the dock.
* This function will be called when an application
* is exit
*
* @param {BaseApplication} a the application to be removed from the dock
* @memberof AppDockTag
*/
removeapp(a: application.BaseApplication): void;
/**
* Mount the current dock tag
*
* @protected
* @memberof AppDockTag
*/
protected mount(): void;
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* Tag that define system calendar widget
*
* @export
* @class CalendarTag
* @extends {AFXTag}
*/
class CalendarTag extends AFXTag {
/**
* The current selected day
*
* @private
* @type {number}
* @memberof CalendarTag
*/
private _day;
/**
* The current selected month
*
* @private
* @type {number}
* @memberof CalendarTag
*/
private _month;
/**
* The current selected year
*
* @private
* @type {number}
* @memberof CalendarTag
*/
private _year;
/**
* The current selected date object
*
* @private
* @type {Date}
* @memberof CalendarTag
*/
private _selectedDate;
/**
* placeholder for date select event callback
*
* @private
* @type {TagEventCallback<Date>}
* @memberof CalendarTag
*/
private _ondateselect;
/**
*Creates an instance of CalendarTag.
* @memberof CalendarTag
*/
constructor();
/**
* Init the tag before mounting
*
* @protected
* @memberof CalendarTag
*/
protected init(): void;
/**
* Update the current tag, doing nothing in this tag
*
* @protected
* @param {*} [d] any data object
* @memberof CalendarTag
*/
protected reload(d?: any): void;
/**
* Get the current selected date in the widget
*
* @readonly
* @type {Date}
* @memberof CalendarTag
*/
get selectedDate(): Date;
/**
* Set the date select event callback handle for the widget
*
* @memberof CalendarTag
*/
set ondateselect(v: TagEventCallback<Date>);
/**
* Mount the current widget to the DOM tree
*
* @protected
* @memberof CalendarTag
*/
protected mount(): void;
/**
* This function triggers the date select event
*
* @private
* @param {TagEventType} e AFX tag event data [[TagEventType]]
* @returns {void}
* @memberof CalendarTag
*/
private dateselect;
/**
* Calibrate the layout of the tag
*
* @protected
* @memberof CalendarTag
*/
protected calibrate(): void;
/**
* Display the previous month of the current month
*
* @private
* @memberof CalendarTag
*/
private prevmonth;
/**
* Display the next month of the current month
*
* @private
* @returns
* @memberof CalendarTag
*/
private nextmonth;
/**
* Visualize the calendar base on input date
*
* @private
* @param {Date} date
* @memberof CalendarTag
*/
private calendar;
/**
* Layout definition of the widget
*
* @protected
* @returns {TagLayoutType[]}
* @memberof CalendarTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare namespace OS {
namespace GUI {
namespace tag {
/**
* A WindowTag represents a virtual window element
* used by AntOS applications and dialogs.
*
* @export
* @class WindowTag
* @extends {AFXTag}
*/
class WindowTag extends AFXTag {
/**
* The element ID of the virtual desktop element
*
* @type {string}
* @memberof WindowTag
*/
desktop: string;
/**
* Window width placeholder
*
* @private
* @type {number}
* @memberof WindowTag
*/
private _width;
/**
* Window height placeholder
*
* @private
* @type {number}
* @memberof WindowTag
*/
private _height;
/**
* Placeholder indicates whether the current window is shown
*
* @private
* @type {boolean}
* @memberof WindowTag
*/
private _shown;
/**
* Placeholder indicates whether the current window is maximized
*
* @private
* @type {boolean}
* @memberof WindowTag
*/
private _isMaxi;
/**
* This placeholder stores the latest offset of the current window.
*
* @private
* @type {GenericObject<any>}
* @memberof WindowTag
*/
private _history;
/**
* This placeholder stores the offset of the virtual desktop element
*
* @private
* @type {GenericObject<any>}
* @memberof WindowTag
*/
private _desktop_pos;
/**
* Creates an instance of WindowTag.
* @memberof WindowTag
*/
constructor();
/**
* blur overlay: If active the window overlay will be shown
* on inactive (blur event)
*
* Setter: Enable the switch
*
* Getter: Check whether the switch is enabled
*
* @memberof WindowTag
*/
set blur_overlay(v: boolean);
get blur_overlay(): boolean;
/**
* Init window tag
* - `shown`: false
* - `isMaxi`: false
* - `minimizable`: false
* - `resizable`: true
* - `apptitle`: Untitled
*
* @protected
* @memberof WindowTag
*/
protected init(): void;
/**
* Do nothing
*
* @protected
* @memberof WindowTag
*/
protected calibrate(): void;
/**
* Do nothing
*
* @protected
* @param {*} [d]
* @memberof WindowTag
*/
protected reload(d?: any): void;
/**
* Setter: Set the window width
*
* Getter: Get the window width
*
* @memberof WindowTag
*/
set width(v: number);
get width(): number;
/**
* Setter: Set the window height
*
* Getter: Get the window height
*
* @memberof WindowTag
*/
set height(v: number);
get height(): number;
/**
* Setter: enable/disable window minimizable
*
* getter: Check whether the window is minimizable
*
* @memberof WindowTag
*/
set minimizable(v: boolean);
get minimizable(): boolean;
/**
* Setter: enable/disable widow resizable
*
* Getter: Check whether the current window is resizable
*
* @memberof WindowTag
*/
set resizable(v: boolean);
get resizable(): boolean;
/**
* Setter: Set the window title
*
* Getter: Get window title
*
* @memberof WindowTag
*/
set apptitle(v: string | FormattedString);
get apptitle(): string | FormattedString;
/**
* Resize all the children of the window based on its width and height
*
* @private
* @memberof WindowTag
*/
private resize;
/**
* Mount the window tag and bind basic events
*
* @protected
* @returns {void}
* @memberof WindowTag
*/
protected mount(): void;
/**
* Set the window size
*
* @private
* @param {GenericObject<any>} o format: `{ w: window_width, h: window_height }`
* @returns {void}
* @memberof WindowTag
*/
private setsize;
/**
* Enable to drag window on the virtual desktop
*
* @private
* @memberof WindowTag
*/
private enable_dragging;
/**
* Enable window resize, this only works if the window
* is resizable
*
* @private
* @memberof WindowTag
*/
private enable_resize;
/**
* Maximize the window or restore its previous width, height,
* and position
*
* @private
* @returns {void}
* @memberof WindowTag
*/
private toggle_window;
/**
* Layout definition of the window tag
*
* @protected
* @returns {TagLayoutType[]}
* @memberof WindowTag
*/
protected layout(): TagLayoutType[];
}
}
}
}
declare type VFSFileHandleClass = {
new (...args: any[]): OS.API.VFS.BaseFileHandle;
};
interface String {
/**
* Convert a string to VFS file handle.
*
* This function will create a file handle object from the string
* with the help of [[VFS.findHandles]]
*
* @returns {OS.API.VFS.BaseFileHandle}
* @memberof String
*/
asFileHandle(): OS.API.VFS.BaseFileHandle;
}
declare namespace OS {
namespace API {
/**
* User permission data type
*
* @export
* @interface UserPermissionType
*/
interface UserPermissionType {
read: boolean;
write: boolean;
exec: boolean;
}
/**
* VFS file meta-data data type
*
* @export
* @interface FileInfoType
*/
interface FileInfoType {
/**
* File mime type
*
* @type {string}
* @memberof FileInfoType
*/
mime: string;
/**
* File size
*
* @type {number}
* @memberof FileInfoType
*/
size: number;
/**
* File name
*
* @type {string}
* @memberof FileInfoType
*/
name: string;
/**
* File path
*
* @type {string}
* @memberof FileInfoType
*/
path: string;
/**
* File type:
* - `file`
* - `dir`
* - `app`
*
* @type {string}
* @memberof FileInfoType
*/
type: string;
/**
* File permission
*
* @type {{
* group: UserPermissionType;
* owner: UserPermissionType;
* other: UserPermissionType;
* }}
* @memberof FileInfoType
*/
perm?: {
/**
* Group permission
*
* @type {UserPermissionType}
*/
group: UserPermissionType;
/**
* Owner permission
*
* @type {UserPermissionType}
*/
owner: UserPermissionType;
/**
* Other permission
*
* @type {UserPermissionType}
*/
other: UserPermissionType;
};
/**
* Creation time
*
* @type {string}
* @memberof FileInfoType
*/
ctime?: string;
/**
* Modification time
*
* @type {string}
* @memberof FileInfoType
*/
mtime?: string;
/**
* Group id
*
* @type {number}
* @memberof FileInfoType
*/
gid?: number;
/**
* User id
*
* @type {number}
* @memberof FileInfoType
*/
uid?: number;
[propName: string]: any;
}
/**
* This namespace is dedicated to all APIs related to
* AntOS Virtual File System (VFS)
*/
namespace VFS {
/**
* Placeholder stores VFS file protocol patterns and its attached file handle class.
*
*/
const handles: GenericObject<VFSFileHandleClass>;
/**
* Register a protocol to a handle class
*
* @export
* @param {string} protos VFS protocol pattern
* @param {VFSFileHandleClass} cls handle class
*/
function register(protos: string, cls: VFSFileHandleClass): void;
/**
* Load custom VFS handles if the package vfsx available
*
* @export
* @param {boolean} [force] force load the file
* @return {*} {Promise<any>}
*/
function loadVFSX(force?: boolean): Promise<any>;
/**
* Looking for a attached file handle class of a string protocol
*
* When converting a string to file handle, the system will look
* for a protocol pattern in the string, if the protocol found,
* its attached handle class (found in [[VFS.handles]]) will be
* used to initialize a file handle object from the string
*
* ```typescript
* "home://data/test.txt".asFileHandle() // -> an instance of RemoteFileHandle
* ```
* @export
* @param {string} proto protocol string
* @returns {VFSFileHandleClass[]}
*/
function findHandles(proto: string): VFSFileHandleClass[];
/**
* Abstract prototype of all all VFS file handle definition.
*
* This prototype provides a standardized interface to access
* to different underlay file systems such as remote file,
* cloud file (Dropbox, Google drive, etc.), URL or memory-based file
*
* @export
* @abstract
* @class BaseFileHandle
*/
abstract class BaseFileHandle {
/**
* Flag indicates whether the file is dirty
*
* @type {boolean}
* @memberof BaseFileHandle
*/
dirty: boolean;
/**
* Once read, file content will be cached in this placeholder
*
* @private
* @type {*}
* @memberof BaseFileHandle
*/
private _cache;
/**
* Flag indicated whether the file meta-data is loaded
*
* @type {boolean}
* @memberof BaseFileHandle
*/
ready: boolean;
/**
* File path
*
* @type {string}
* @memberof BaseFileHandle
*/
path: string;
/**
* File protocol e.g:
* - `os://`
* - `home://`
*
* @type {string}
* @memberof BaseFileHandle
*/
protocol: string;
/**
* List of path segments
*
* @type {string[]}
* @memberof BaseFileHandle
*/
genealogy: string[];
/**
* File base name
*
* @type {string}
* @memberof BaseFileHandle
*/
basename: string;
/**
* Once loaded, [[ready]] will be set to true and
* file meta-data will be stored in this place holder
*
* @type {FileInfoType}
* @memberof BaseFileHandle
*/
info: FileInfoType;
/**
* File extension
*
* @type {string}
* @memberof BaseFileHandle
*/
ext: string;
/**
*
* File type
* @type {string}
* @memberof BaseFileHandle
*/
type: string;
/**
*Creates an instance of BaseFileHandle.
* @param {string} path file path
* @memberof BaseFileHandle
*/
constructor(path: string);
/**
* Set a file path to the current file handle
*
* @param {string} p
* @returns {void}
* @memberof BaseFileHandle
*/
setPath(p: string): void;
/**
* Getter: Get the file basename
* Setter: set the file name
*
* @returns {string}
* @memberof BaseFileHandle
*/
get filename(): string;
set filename(v: string);
/**
* Getter: Get the file cache
* Setter: set the file cache
*
* @returns {any}
* @memberof BaseFileHandle
*/
get cache(): any;
set cache(v: any);
/**
* Set data to the file cache
*
* @param {*} v data object
* @returns {BaseFileHandle}
* @memberof BaseFileHandle
*/
setCache(v: any): BaseFileHandle;
/**
* Return the object itself
*
* @returns {BaseFileHandle}
* @memberof BaseFileHandle
*/
asFileHandle(): BaseFileHandle;
/**
* Check whether the current file is the root of the file tree
*
* @returns {boolean}
* @memberof BaseFileHandle
*/
isRoot(): boolean;
/**
* Check whether the current file is a hidden file
*
* @returns {boolean}
* @memberof BaseFileHandle
*/
isHidden(): boolean;
/**
* Get hash number of the current file path
*
* @returns {number}
* @memberof BaseFileHandle
*/
hash(): number;
/**
* Convert the current file cache to Base64
*
* @protected
* @param {string} t type of the file cache:
* - `object`
* - `mime type`
* @returns {(Promise<string | ArrayBuffer>)} promise on the converted data
* @memberof BaseFileHandle
*/
protected b64(t: string): Promise<string | ArrayBuffer>;
/**
* Get the parent file handle of the current file
*
* @returns {BaseFileHandle}
* @memberof BaseFileHandle
*/
parent(): BaseFileHandle;
/**
* Load the file meta-data before performing
* any task
*
* @returns {Promise<FileInfoType>} a promise on file meta-data
* @memberof BaseFileHandle
*/
onready(): Promise<FileInfoType>;
/**
* Public read operation
*
* This function calls the [[_rd]] function to perform the operation.
*
* If the current file is a directory, then the operation
* will return the meta-data of all files inside of the directory.
* Otherwise, file content will be returned
*
* @param {string} t data type
* - jsonp: the response is an json object
* - script: the response is a javascript code
* - xml, html: the response is a XML/HTML object
* - text: plain text
* - binary
*
* @returns {Promise<any>} a promise on the file content
* @memberof BaseFileHandle
*/
read(t?: string): Promise<any>;
/**
* Write the file cache to the actual file
*
* This function calls the [[_wr]] function to perform the operation
*
* @param {string} t data type
* - `base64`
* - `object`
* - `mime type`
*
* @returns {Promise<RequestResult>} promise on the operation result
* @memberof BaseFileHandle
*/
write(t: string): Promise<RequestResult>;
/**
* Sub-directory creation
*
* This function calls the [[_mk]] function to perform the operation
*
* @param {string} d sub directory name
* @returns {Promise<RequestResult>} promise on the operation result
* @memberof BaseFileHandle
*/
mk(d: string): Promise<RequestResult>;
/**
* Delete the file
*
* This function calls the [[_rm]] function to perform the operation
*
* @returns {Promise<RequestResult>} promise on the operation result
* @memberof BaseFileHandle
*/
remove(): Promise<RequestResult>;
/**
* Upload a file to the current directory
*
* Only work when the current file is a directory
*
* This function calls the [[_up]] function to perform the operation
*
* @returns {Promise<RequestResult>} promise on the operation result
* @memberof BaseFileHandle
*/
upload(): Promise<RequestResult>;
/**
* Share the file by publish it.
*
* Only work with file
*
* This function calls the [[_pub]] function to perform the operation
*
* @returns {Promise<RequestResult>} promise on operation result
* @memberof BaseFileHandle
*/
publish(): Promise<RequestResult>;
/**
* Download the file.
*
* Only work with file
*
* This function calls the [[_down]] function to perform the operation
*
* @returns {Promise<any>} Promise on the operation result
* @memberof BaseFileHandle
*/
download(): Promise<any>;
/**
* Move the current file to another location
*
* This function calls the [[_mv]] function to perform the operation
*
* @param {string} d destination location
* @returns {Promise<RequestResult>} promise on the operation result
* @memberof BaseFileHandle
*/
move(d: string): Promise<RequestResult>;
/**
* Execute the current file.
*
* This action depends on each file protocol
*
* This function calls the [[_exec]] function to perform the operation
*
* @returns {Promise<any>}
* @memberof BaseFileHandle
*/
execute(): Promise<any>;
/**
* Get an accessible link to the file
* that can be accessed from the browser
*
* @returns {string}
* @memberof BaseFileHandle
*/
getlink(): string;
/**
* Helper function returns a promise on unsupported action
*
* @param {string} t action name
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected unsupported(t: string): Promise<RequestResult>;
/**
* trigger cache changed event
*
* This function triggered when the file cached changed
*
* @protected
* @memberof BaseFileHandle
*/
protected _cache_changed(): void;
/**
* Low level protocol-specific read operation
*
* This function should be overridden on the file handle class
* that supports the operation
*
* @protected
* @param {string} t data type, see [[read]]
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _rd(t: string): Promise<RequestResult>;
/**
* Low level protocol-specific write operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @protected
* @param {string} t data type, see [[write]]
* @param {*} [d]
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _wr(t: string, d?: any): Promise<RequestResult>;
/**
* Low level protocol-specific sub-directory creation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @protected
* @param {string} d sub directory name
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _mk(d: string): Promise<RequestResult>;
/**
* Low level protocol-specific delete operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _rm(): Promise<RequestResult>;
/**
* Low level protocol-specific move operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @protected
* @param {string} d
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _mv(d: string): Promise<RequestResult>;
/**
* Low level protocol-specific upload operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _up(): Promise<RequestResult>;
/**
* Low level protocol-specific download operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @returns {Promise<any>}
* @memberof BaseFileHandle
*/
protected _down(): Promise<any>;
/**
* Low level protocol-specific execute operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _exec(): Promise<RequestResult>;
/**
* Low level protocol-specific share operation
*
* This function should be overridden by the file handle class
* that supports the operation
*
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
protected _pub(): Promise<RequestResult>;
/**
* Read the current file meta-data
*
* should be implemented by subclasses
*
* @abstract
* @returns {Promise<RequestResult>}
* @memberof BaseFileHandle
*/
abstract meta(): Promise<RequestResult>;
}
/**
* Remote file handle allows to perform file operation
* on AntOS remote server files. Its protocol is defined
* by the following pattern:
*
* ```
* ^(home|desktop|os|Untitled)$
* ```
*
* @class RemoteFileHandle
* @extends {BaseFileHandle}
*/
class RemoteFileHandle extends BaseFileHandle {
/**
*Creates an instance of RemoteFileHandle.
* @param {string} path file path
* @memberof RemoteFileHandle
*/
constructor(path: string);
/**
* Read remote file meta-data
*
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
meta(): Promise<RequestResult>;
/**
* Remote file access link
*
* @returns {string}
* @memberof RemoteFileHandle
*/
getlink(): string;
/**
* Read remote file content.
*
* If the current file is a directory, then the operation
* will return the meta-data of all files inside of the directory.
* Otherwise, file content will be returned
*
* @protected
* @param {string} t data type see [[read]]
* @returns {Promise<any>}
* @memberof RemoteFileHandle
*/
protected _rd(t: string): Promise<any>;
/**
* Write file cache to the remote file
*
* @protected
* @param {string} t data type see [[write]]
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
protected _wr(t: string): Promise<RequestResult>;
/**
* Create sub directory
*
* Only work on directory file handle
*
* @protected
* @param {string} d sub directory name
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
protected _mk(d: string): Promise<RequestResult>;
/**
* Delete file/folder
*
* @protected
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
protected _rm(): Promise<RequestResult>;
/**
* Move file/folder
*
* @protected
* @param {string} d
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
protected _mv(d: string): Promise<RequestResult>;
/**
* Upload a file
*
* Only work with directory file handle
*
* @protected
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
protected _up(): Promise<RequestResult>;
/**
* Download a file
*
* only work with file
*
* @protected
* @returns {Promise<void>}
* @memberof RemoteFileHandle
*/
protected _down(): Promise<void>;
/**
* Publish a file
*
* @protected
* @returns {Promise<RequestResult>}
* @memberof RemoteFileHandle
*/
protected _pub(): Promise<RequestResult>;
}
/**
* Package file is remote file ([[RemoteFileHandle]]) located either in
* the local user packages location or system packages
* location, it should be in the following format:
*
* ```
* pkg://PKG_NAME/path/to/file
*
* ```
*
* The system will locale the package name PKG_NAME either in the system domain
* or in user domain and return the correct path to the package
*
* @export
* @class PackageFileHandle
* @extends {RemoteFileHandle}
*/
class PackageFileHandle extends RemoteFileHandle {
/**
*Creates an instance of PackageFileHandle.
* @param {string} pkg_path package path in string
* @memberof PackageFileHandle
*/
constructor(pkg_path: string);
}
/**
* Application file is an AntOS special file allowing to
* refer to an application as a regular file. Its protocol
* pattern is defined as:
*
* ```typescript
* "^app$" // e.g. app://Setting
* ```
*
* @class ApplicationHandle
* @extends {BaseFileHandle}
*/
class ApplicationHandle extends BaseFileHandle {
/**
*Creates an instance of ApplicationHandle.
* @param {string} path file path
* @memberof ApplicationHandle
*/
constructor(path: string);
/**
* Read application meta-data
*
* @returns {Promise<RequestResult>}
* @memberof ApplicationHandle
*/
meta(): Promise<RequestResult>;
/**
* If the current file is root (e.g. `app://`), the operation
* will return all system packages meta-data.
*
* Otherwise, an error will be thrown
*
* @protected
* @param {string} t
* @returns {Promise<any>}
* @memberof ApplicationHandle
*/
protected _rd(t: string): Promise<any>;
}
/**
* A buffer file handle represents a virtual file that is stored
* on the system memory. Its protocol pattern is defined as:
*
* ```typescript
* "^mem$" // e.g. mem://test.txt
* ```
*
* @class BufferFileHandle
* @extends {BaseFileHandle}
*/
class BufferFileHandle extends BaseFileHandle {
/**
*Creates an instance of BufferFileHandle.
* @param {string} path file path
* @param {string} mime file mime-type
* @param {*} data file data
* @memberof BufferFileHandle
*/
constructor(path: string, mime: string, data: any);
/**
* init the mem file tree if necessary
*/
private init_file_tree;
/**
* cache changed handle
*/
protected _cache_changed(): void;
/**
* Read the file meta-data
*
* @returns {Promise<RequestResult>}
* @memberof BufferFileHandle
*/
meta(): Promise<RequestResult>;
/**
* Load the file meta-data before performing
* any task
*
* @returns {Promise<FileInfoType>} a promise on file meta-data
* @memberof BufferFileHandle
*/
onready(): Promise<FileInfoType>;
/**
* Read file content stored in the file cached
*
* @protected
* @param {string} t data type see [[read]]
* @returns {Promise<any>}
* @memberof BufferFileHandle
*/
protected _rd(t: string): Promise<any>;
/**
* Write data to the file cache
*
* @protected
* @param {string} t data type, see [[write]]
* @returns {Promise<RequestResult>}
* @memberof BufferFileHandle
*/
protected _wr(t: string): Promise<RequestResult>;
/**
* Create sub directory
*
* Only work on directory file handle
*
* @protected
* @param {string} d sub directory name
* @returns {Promise<RequestResult>}
* @memberof BufferFileHandle
*/
protected _mk(d: string): Promise<RequestResult>;
/**
* Delete file/folder
*
* @protected
* @returns {Promise<RequestResult>}
* @memberof BufferFileHandle
*/
protected _rm(): Promise<RequestResult>;
setPath(p: string): void;
private updatePath;
/**
* Move file/folder
*
* @protected
* @param {string} d
* @returns {Promise<RequestResult>}
* @memberof BufferFileHandle
*/
protected _mv(d: string): Promise<RequestResult>;
/**
* Download the buffer file
*
* @protected
* @returns {Promise<void>}
* @memberof BufferFileHandle
*/
protected _down(): Promise<void>;
}
/**
* URL file handle represents a HTTP/HTTPs link url
* as an AntOS VFS file handle. Its protocol is defined as
*
* ```
* ^(http|https|ftp)$
* ```
*
* @class URLFileHandle
* @extends {BaseFileHandle}
*/
class URLFileHandle extends BaseFileHandle {
/**
*Creates an instance of URLFileHandle.
* @param {string} path
* @memberof URLFileHandle
*/
constructor(path: string);
/**
* Read file meta-data
*
* @returns {Promise<RequestResult>}
* @memberof URLFileHandle
*/
meta(): Promise<RequestResult>;
/**
* Read URL content
*
* @protected
* @param {string} t data type see [[read]]
* @returns {Promise<any>}
* @memberof URLFileHandle
*/
protected _rd(t: string): Promise<any>;
}
/**
* Shared file handle represents all AntOS shared file.
* Its protocol is defined as:
*
* ```
* ^shared$
* ```
*
* @class SharedFileHandle
* @extends {API.VFS.BaseFileHandle}
*/
class SharedFileHandle extends API.VFS.BaseFileHandle {
/**
*Creates an instance of SharedFileHandle.
* @param {string} path file path
* @memberof SharedFileHandle
*/
constructor(path: string);
/**
* Read file meta-data
*
* @returns {Promise<RequestResult>}
* @memberof SharedFileHandle
*/
meta(): Promise<RequestResult>;
/**
* Read file content
*
* @protected
* @param {string} t data type, see [[read]]
* @returns {Promise<any>}
* @memberof SharedFileHandle
*/
protected _rd(t: string): Promise<any>;
/**
* write data to shared file
*
* @protected
* @param {string} t data type, see [[write]]
* @param {string} d file data
* @returns {Promise<RequestResult>}
* @memberof SharedFileHandle
*/
protected _wr(t: string, d: string): Promise<RequestResult>;
/**
* Un-publish the file
*
* @protected
* @returns {Promise<RequestResult>}
* @memberof SharedFileHandle
*/
protected _rm(): Promise<RequestResult>;
/**
* Download shared file
*
* @protected
* @returns {Promise<void>}
* @memberof SharedFileHandle
*/
protected _down(): Promise<void>;
/**
* Un publish the file
*
* @protected
* @returns {Promise<RequestResult>}
* @memberof SharedFileHandle
*/
protected _pub(): Promise<RequestResult>;
}
/**Utilities global functions */
/**
* Read a file content from a zip archive
*
* The content type should be:
* - base64 : the result will be a string, the binary in a base64 form.
* - text (or string): the result will be an unicode string.
* - binarystring: the result will be a string in “binary” form, using 1 byte per char (2 bytes).
* - array: the result will be an Array of bytes (numbers between 0 and 255).
* - uint8array : the result will be a Uint8Array. This requires a compatible browser.
* - arraybuffer : the result will be a ArrayBuffer. This requires a compatible browser.
* - blob : the result will be a Blob. This requires a compatible browser. *
* If file_name is not specified, the first file_name in the zip archive will be read
* @export
* @param {string} file zip file
* @param {string} type content type to read
* @param {string} [file_name] the file should be read from the zip archive
* @return {*} {Promise<any>}
*/
function readFileFromZip(file: string, type: string, file_name?: string): Promise<any>;
/**
* Cat all files to a single out-put
*
* @export
* @param {string[]} list list of VFS files
* @param {string} data input data string that will be cat to the files content
* @param {string} join_by join on files content by this string
* @return {*} {Promise<string>}
*/
function cat(list: string[], data: string, join_by?: string): Promise<string>;
/**
* Read all files content on the list
*
* @export
* @param {string[]} list list of VFS files
* @param {GenericObject<string>[]} contents content array
* @return {void}
*/
function read_files(list: string[]): Promise<GenericObject<string>[]>;
/**
* Copy files to a folder
*
* @export
* @param {string[]} files list of files
* @param {string} to destination folder
* @return {*} {Promise<any[]>}
*/
function copy(files: string[], to: string): Promise<any[]>;
/**
* Create a zip archive from a folder
*
* @export
* @param {string} src source file/folder
* @param {string} dest destination archive
* @return {*} {Promise<void>}
*/
function mkar(src: string, dest: string): Promise<void>;
/**
* Create a list of directories
*
* @export
* @param {string[]} list of directories to be created
* @param {boolen} sync sync/async of directory creation
* @return {*} {Promise<any>}
*/
function mkdirAll(list: string[], sync?: boolean): Promise<any>;
/**
*
*
* @export Extract a zip fle
* @param {string} zfile zip file to extract
* @param {(zip:any) => Promise<string>} [dest_callback] a callback to get extraction destination
* @return {*} {Promise<void>}
*/
function extractZip(zfile: string | API.VFS.BaseFileHandle, dest_callback: (zip: any) => Promise<string>): Promise<void>;
/**
* Make files from a set of template files
*
* @export
* @param {Array<string[]>} list mapping paths between templates files and created files
* @param {string} path files destination
* @param {(data: string) => string} callback: pre-processing files content before writing to destination files
* @return {*} {Promise<any[]>}
*/
function mktpl(list: Array<string[]>, path: string, callback: (data: string) => string): Promise<any[]>;
}
}
}
declare namespace OS {
/**
* This namespace is dedicated to everything related to the
* global system settings
*/
namespace setting {
/**
* User setting type definition
*
* @export
* @interface UserSettingType
*/
interface UserSettingType {
/**
* User full name
*
* @type {string}
* @memberof UserSettingType
*/
name: string;
/**
* User name
*
* @type {string}
* @memberof UserSettingType
*/
username: string;
/**
* User id
*
* @type {number}
* @memberof UserSettingType
*/
id: number;
/**
* User groups
*
* @type {{ [index: number]: string }}
* @memberof UserSettingType
*/
group?: {
[index: number]: string;
};
[propName: string]: any;
}
/**
* Virtual desktop setting data type
*
* @export
* @interface DesktopSettingType
*/
interface DesktopSettingType {
/**
* Desktop VFS path
*
* @type {string}
* @memberof DesktopSettingType
*/
path: string;
/**
* Desktop menu, can be added automatically by applications
*
* @type {GUI.BasicItemType[]}
* @memberof DesktopSettingType
*/
menu: GUI.BasicItemType[];
/**
* Show desktop hidden files
*
* @type {boolean}
* @memberof DesktopSettingType
*/
showhidden: boolean;
[propName: string]: any;
}
/**
* Wallpaper setting data type
*
* @export
* @interface WPSettingType
*/
interface WPSettingType {
/**
* Repeat wallpaper:
* - `repeat`
* - `repeat-x`
* - `repeat-y`
* - `no-repeat`
*
* @type {string}
* @memberof WPSettingType
*/
repeat: string;
/**
* Wallpaper size
* - `contain`
* - `cover`
* - `auto`
*
* @type {string}
* @memberof WPSettingType
*/
size: string;
/**
* VFS path to the wallpaper image
*
* @type {string}
* @memberof WPSettingType
*/
url: string;
}
/**
* Theme setting data type
*
* @export
* @interface ThemeSettingType
*/
interface ThemeSettingType {
/**
* Theme name, this value is used for looking
* theme file in system asset
*
* @type {string}
* @memberof ThemeSettingType
*/
name: string;
/**
* Theme user-friendly text
*
* @type {string}
* @memberof ThemeSettingType
*/
text: string;
}
/**
* Appearance setting data type
*
* @export
* @interface AppearanceSettingType
*/
interface AppearanceSettingType {
/**
* Current theme name
*
* @type {string}
* @memberof AppearanceSettingType
*/
theme: string;
/**
* All themes available in the system
*
* @type {ThemeSettingType[]}
* @memberof AppearanceSettingType
*/
themes: ThemeSettingType[];
/**
* Current wallpaper setting
*
* @type {WPSettingType}
* @memberof AppearanceSettingType
*/
wp: WPSettingType;
/**
* All wallpapers available in the system
*
* @type {string[]}
* @memberof AppearanceSettingType
*/
wps: string[];
}
/**
* VFS Mount points setting data type
*
* @export
* @interface VFSMountPointSettingType
*/
interface VFSMountPointSettingType {
/**
* Path to the mount point
*
* @type {string}
* @memberof VFSMountPointSettingType
*/
path: string;
/**
* User friendly mount point name
*
* @type {string}
* @memberof VFSMountPointSettingType
*/
text: string;
[propName: string]: any;
}
/**
* VFS setting data type
*
* @export
* @interface VFSSettingType
*/
interface VFSSettingType {
/**
* mount points setting
*
* @type {VFSMountPointSettingType[]}
* @memberof VFSSettingType
*/
mountpoints: VFSMountPointSettingType[];
[propName: string]: any;
}
/**
* Global system setting data type
*
* @export
* @interface SystemSettingType
*/
interface SystemSettingType {
/**
* System error report URL
*
* @type {string}
* @memberof SystemSettingType
*/
error_report: string;
/**
* Current system locale e.g. `en_GB`
*
* @type {string}
* @memberof SystemSettingType
*/
locale: string;
/**
* System menus
*
* @type {API.PackageMetaType[]}
* @memberof API.PackageMetaType
*/
menu: API.PackageMetaType[];
/**
* Packages meta-data
*
* @type {{ [index: string]: API.PackageMetaType }}
* @memberof SystemSettingType
*/
packages: {
[index: string]: API.PackageMetaType;
};
/**
* Path to the installed packages
*
* @type {{
* user: string;
* system: string;
* }}
* @memberof SystemSettingType
*/
pkgpaths: {
/**
* User specific packages install location
*
* @type {string}
*/
user: string;
/**
* System packages install location
*
* @type {string}
*/
system: string;
};
/**
* Package repositories setting.
* This configuration is used by [[MarketPlace]]
* for package management
*
* @type {{
* text: string;
* url: string;
* }[]}
* @memberof SystemSettingType
*/
repositories: {
/**
* Repository name
*
* @type {string}
*/
text: string;
/**
* Repository uri
*
* @type {string}
*/
url: string;
}[];
/**
* Startup applications and services
*
* @type {{
* apps: string[];
* services: string[];
* }}
* @memberof SystemSettingType
*/
startup: {
/**
* List of application names
*
* @type {string[]}
*/
apps: string[];
/**
* List of service names
*
* @type {string[]}
*/
services: string[];
/**
* List of pinned applications
*
* @type {string[]}
*/
pinned: string[];
};
}
/**
* User settings
*/
var user: UserSettingType;
/**
* Application settings
*/
var applications: GenericObject<any>;
/**
* Desktop settings
*/
var desktop: DesktopSettingType;
/**
* Appearance settings
*/
var appearance: AppearanceSettingType;
/**
* VFS settings
*/
var VFS: VFSSettingType;
/**
* System settings
*/
var system: SystemSettingType;
}
/**
* Reset the system settings to default values
*
* @export
*/
function resetSetting(): void;
/**
* Apply the input parameter object to system settings.
* This object could be an object loaded from
* setting JSON file saved on the server.
*
* @export
* @param {*} conf
*/
function systemSetting(conf: any): void;
}
/// <reference types="jquery" />
declare namespace OS {
namespace application {
/**
* Services are processes that run in the background and
* are waken up in certain circumstances such as by global
* events or user interactions.
*
* Each service takes an entry in the system tray menu
* located on the system panel. This menu entry is used
* to access to service visual contents such as: options,
* task performing based on user interaction, etc.
*
* Services are singleton processes, there is only
* one process of a service at a time
*
* @export
* @abstract
* @class BaseService
* @extends {BaseModel}
*/
abstract class BaseService extends BaseModel {
/**
* The service icon shown in the system tray
*
* @type {string}
* @memberof BaseService
*/
icon: string;
/**
* CSS class of the service icon shown in the system tray
*
* @type {string}
* @memberof BaseService
*/
iconclass: string;
/**
* Text of the service shown in the system tray
*
* @type {string}
* @memberof BaseService
*/
text: string;
/**
* Reference to the menu entry DOM element attached
* to the service
*
* @type {HTMLElement}
* @memberof BaseService
*/
domel: HTMLElement;
/**
* Reference to the timer that periodically executes the callback
* defined in [[watch]].
*
* @private
* @type {number}
* @memberof BaseService
*/
private timer;
/**
* Reference to the system tray menu
*
* @type {HTMLElement}
* @memberof BaseService
*/
holder: HTMLElement;
/**
* Placeholder for service select callback
*
* @memberof BaseService
*/
onmenuselect: (d: OS.GUI.TagEventType<GUI.tag.MenuEventData>) => void;
/**
*Creates an instance of BaseService.
* @param {string} name service class name
* @param {AppArgumentsType[]} args service arguments
* @memberof BaseService
*/
constructor(name: string, args: AppArgumentsType[]);
/**
* Do nothing
*
* @memberof BaseService
*/
hide(): void;
/**
* Init the service before attaching it to
* the system tray: event subscribe, scheme
* loading.
*
* Should be implemented by all subclasses
*
* @abstract
* @memberof BaseService
*/
abstract init(): void;
/**
* Refresh the service menu entry in the
* system tray
*
* @memberof BaseService
*/
update(): void;
/**
* Get the service meta-data
*
* @returns {API.PackageMetaType}
* @memberof BaseService
*/
meta(): API.PackageMetaType;
/**
* Attach the service to a menu element
* such as the system tray menu
*
* @param {HTMLElement} h
* @memberof BaseService
*/
attach(h: HTMLElement): void;
/**
* Set the callback that will be called periodically
* after a period of time.
*
* Each service should only have at most one watcher
*
* @protected
* @param {number} t period time in seconds
* @param {() => void} f callback function
* @returns {number}
* @memberof BaseService
*/
protected watch(t: number, f: () => void): number;
/**
* This function is called when the service
* is exited
*
* @protected
* @param {BaseEvent} evt exit event
* @returns
* @memberof BaseService
*/
protected onexit(evt: BaseEvent): JQuery<HTMLElement>;
/**
* Do nothing
*
* @memberof BaseService
*/
main(): void;
/**
* Do nothing
*
* @memberof BaseService
*/
show(): void;
/**
* Awake the service, this function is usually called when
* the system tray menu entry attached to the service is
* selected.
*
* This function should be implemented by all subclasses
*
* @abstract
* @param {GUI.TagEventType} e
* @memberof BaseService
*/
abstract awake(e: GUI.TagEventType<GUI.tag.MenuEventData>): void;
/**
* Do nothing
*
* @protected
* @param {BaseEvent} evt
* @memberof BaseService
*/
protected cleanup(evt: BaseEvent): void;
}
}
}
declare namespace OS {
namespace API {
/**
* Data type exchanged via
* the global Announcement interface
*
* @export
* @interface AnnouncementDataType
*/
interface AnnouncementDataType<T> {
/**
* message string
*
* @type {string| FormattedString}
* @memberof AppAnnouncementDataType
*/
message: string | FormattedString;
/**
* Process ID
*
* @type {number}
* @memberof AppAnnouncementDataType
*/
id: number;
/**
* App name
*
* @type {string | FormattedString}
* @memberof AppAnnouncementDataType
*/
name: string | FormattedString;
/**
* Icon file
*
* @type {string}
* @memberof AppAnnouncementDataType
*/
icon?: string;
/**
* App icon class
*
* @type {string}
* @memberof AppAnnouncementDataType
*/
iconclass?: string;
/**
* User specific data
*
* @type {*}
* @memberof AppAnnouncementDataType
*/
u_data?: T;
}
/**
* Observable entry type definition
*
* @export
* @interface ObservableEntryType
*/
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
*/
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
*/
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();
/**
* Disable the announcer, when this function is called
* all events and their callbacks will be removed
*
* @returns
* @memberof Announcer
*/
disable(): boolean;
/**
* Subscribe to an event, the callback will be called
* every time the corresponding event is trigged
*
* @param {string} evtName event name
* @param {(d: any) => void} callback The corresponding callback
* @returns {void}
* @memberof Announcer
*/
on(evtName: string, callback: (d: any) => void): void;
/**
* Subscribe to an event, the callback will
* be called only once and then removed from the announcer
*
* @param {string} evtName event name
* @param {(d: any) => void} callback the corresponding callback
* @returns {void}
* @memberof Announcer
*/
one(evtName: string, callback: (d: any) => void): void;
/**
* Unsubscribe the callback from an event
*
* @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;
/**
* Trigger an event
*
* @param {string} evtName event name
* @param {*} data data object that will be send to all related callback
* @returns {void}
* @memberof Announcer
*/
trigger(evtName: string, data: any): void;
}
}
/**
* 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
*/
namespace announcer {
/**
* The global announcer object that manages global events
* and callbacks
*/
var observable: API.Announcer;
/**
* This variable is used to allocate the `id` of all messages
* passing between publishers and subscribers in the
* system announcement
*/
var quota: 0;
/**
* Placeholder of all global events listeners
*/
var listeners: API.AnnouncerListenerType;
/**
* Subscribe to a global event
*
* @export
* @param {string} e event name
* @param {(d: API.AnnouncementDataType<any>) => void} f event callback
* @param {GUI.BaseModel} a the process (Application/service) related to the callback
*/
function on(e: string, f: (d: API.AnnouncementDataType<any>) => void, a: BaseModel): void;
/**
* Trigger a global event
*
* @export
* @param {string} e event name
* @param {*} d data passing to all related callback
*/
function trigger(e: string, d: any): void;
/**
* Report system fail. This will trigger the global `fail`
* event
*
* @export
* @param {(string | FormattedString)} m message string
* @param {Error} e error to be reported
*/
function osfail(m: string | FormattedString, e: Error): void;
/**
* Report system error. This will trigger the global `error`
* event
*
* @export
* @param {(string | FormattedString)} m message string
* @param {Error} e error to be reported
*/
function oserror(m: string | FormattedString, e: Error): void;
/**
* Trigger system notification (`info` event)
*
* @export
* @param {(string | FormattedString)} m notification message
*/
function osinfo(m: string | FormattedString): void;
/**
*
*
* @export
* @param {string} e event name
* @param {(string| FormattedString)} m event message
* @param {*} [d] user data
*/
function ostrigger(e: string, m: string | FormattedString, d?: any): void;
/**
* Unregister a process (application/service) from
* the global announcement system
*
* @export
* @param {GUI.BaseModel} app reference to the process
* @returns {void}
*/
function unregister(app: BaseModel): void;
/**
* Allocate message id
*
* @export
* @returns {number}
*/
function getMID(): number;
}
}
declare namespace OS {
namespace API {
/**
* Simple Virtual Database (VDB) application API.
*
* This API abstracts and provides a standard way to
* connect to a server-side relational database (e.g. sqlite).
*
* Each user when connected has their own database previously
* created. All VDB operations related to that user will be
* performed on this database.
*
* The creation of user database need to be managed by the server-side API.
* The VDB API assumes that the database already exist. All operations
* is performed in tables level
*
* @export
* @class DB
*/
class DB {
/**
* A table name on the user's database
*
* @private
* @type {string}
* @memberof DB
*/
private table;
/**
*Creates an instance of DB.
* @param {string} table table name
* @memberof DB
*/
constructor(table: string);
/**
* Save data to the current table. The input
* data must conform to the table record format.
*
* On the server side, if the table doest not
* exist yet, it should be created automatically
* by inferring the data structure of the input
* object
*
* @param {GenericObject<any>} d data object represents a current table record
* @returns {Promise<API.RequestResult>}
* @memberof DB
*/
save(d: GenericObject<any>): Promise<API.RequestResult>;
/**
* delete record(s) from the current table by
* a conditional object
*
* @param {*} c conditional object, c can be:
*
* * a `number`: the operation will delete the record with `id = c`
* * a `string`: The SQL string condition that selects record to delete
* * a conditional object represents a SQL condition statement as an object,
* example: `pid = 10 AND cid = 2` is represented by:
*
* ```typescript
* {
* exp: {
* "and": {
* pid: 10,
* cid: 2
* }
* }
* ```
*
* @returns {Promise<API.RequestResult>}
* @memberof DB
*/
delete(c: GenericObject<any> | number | string): Promise<API.RequestResult>;
/**
* Get a record in the table by its primary key
*
* @param {number} id the primary key value
* @returns {Promise<GenericObject<any>>} Promise on returned record data
* @memberof DB
*/
get(id: number): Promise<GenericObject<any>>;
/**
* Find records by a condition
*
* @param {GenericObject<any>} cond conditional object
*
* a conditional object represents a SQL condition statement as an object,
* example: `pid = 10 AND cid = 2 ORDER BY date DESC` is represented by:
*
* ```typescript
* {
* exp: {
* "and": {
* pid: 10,
* cid: 2
* }
* },
* order: {
* date: "DESC"
* }
* }
* ```
* @returns {Promise<GenericObject<any>[]>}
* @memberof DB
*/
find(cond: GenericObject<any>): Promise<GenericObject<any>[]>;
}
}
}
declare namespace OS {
/**
* This namespace dedicated to all operations related to system
* process management
*/
namespace PM {
/**
* A process is either an instance of an application or a service
*/
type ProcessType = application.BaseApplication | application.BaseService;
/**
* Alias to all classes that extends [[BaseModel]]
*/
type ModelTypeClass = {
new <T extends BaseModel>(args: AppArgumentsType[]): T;
};
/**
* Process id allocator, when a new process is created, the value of
* this variable is increased
*/
var pidalloc: number;
/**
* All running processes is stored in this variables
*/
/**
* Current active process ID
*/
var pidactive: number;
var processes: GenericObject<BaseModel[]>;
/**
* Create a new process of application or service
*
* @export
* @param {string} app class name string
* @param {ProcessTypeClass} cls prototype class
* @param {GUI.AppArgumentsType[]} [args] process arguments
* @returns {Promise<ProcessType>} a promise on the created process
*/
function createProcess(app: string, cls: ModelTypeClass, args?: AppArgumentsType[]): Promise<ProcessType>;
/**
* Get the reference to a process using its id
*
* @export
* @param {number} pid
* @returns {BaseModel}
*/
function appByPid(pid: number): BaseModel;
/**
* Kill a process
*
* @export
* @param {OS.GUI.BaseModel} app reference to the process
* @returns {void}
*/
function kill(app: BaseModel): void;
/**
* Kill all process of an application or service
*
* @export
* @param {string} app process class name
* @param {boolean} force force exit all process
* @returns {void}
*/
function killAll(app: string, force: boolean): void;
/**
* Get the current active application
* @export
* @returns {BaseModel}
*/
function getActiveApp(): BaseModel;
}
}