mirror of
https://github.com/lxsang/antos-frontend.git
synced 2025-04-08 09:36:45 +02:00
Add features:
- add bootstrap icon font support - classing applications by categories in start menu
This commit is contained in:
parent
78f09934d2
commit
51bf3e3df5
Binary file not shown.
@ -529,6 +529,52 @@ namespace OS {
|
|||||||
SCOPES: "https://www.googleapis.com/auth/drive",
|
SCOPES: "https://www.googleapis.com/auth/drive",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!setting.applications.categories)
|
||||||
|
{
|
||||||
|
setting.applications.categories = [
|
||||||
|
{
|
||||||
|
text: __("All"),
|
||||||
|
iconclass: "bi bi-gear-wide"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Media"),
|
||||||
|
iconclass: "bi bi-disc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Development"),
|
||||||
|
iconclass: "bi bi-hammer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Education"),
|
||||||
|
iconclass: "fa fa-graduation-cap"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Game"),
|
||||||
|
iconclass: "fa fa-gamepad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Graphics"),
|
||||||
|
iconclass: "bi bi-palette-fill"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Network"),
|
||||||
|
iconclass: "fa fa-globe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Office"),
|
||||||
|
iconclass: "bi bi-building"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("System"),
|
||||||
|
iconclass: "fa bi-gear-wide-connected"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: __("Utility"),
|
||||||
|
iconclass: "bi bi-tools"
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register handle for application search
|
// Register handle for application search
|
||||||
|
@ -53,6 +53,16 @@ namespace OS {
|
|||||||
*/
|
*/
|
||||||
private _cb: (e: JQuery.MouseEventBase) => void;
|
private _cb: (e: JQuery.MouseEventBase) => void;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Place holder for system app list
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @type {GenericObject<any>[]}
|
||||||
|
* @memberof SystemPanelTag
|
||||||
|
*/
|
||||||
|
private app_list: GenericObject<any>[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*Creates an instance of SystemPanelTag.
|
*Creates an instance of SystemPanelTag.
|
||||||
* @memberof SystemPanelTag
|
* @memberof SystemPanelTag
|
||||||
@ -66,6 +76,7 @@ namespace OS {
|
|||||||
this._view = false;
|
this._view = false;
|
||||||
this._pending_task = [];
|
this._pending_task = [];
|
||||||
this._loading_toh = undefined;
|
this._loading_toh = undefined;
|
||||||
|
this.app_list= [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -131,6 +142,8 @@ namespace OS {
|
|||||||
*/
|
*/
|
||||||
private search(e: JQuery.KeyboardEventBase): void {
|
private search(e: JQuery.KeyboardEventBase): void {
|
||||||
const applist = this.refs.applist as ListViewTag;
|
const applist = this.refs.applist as ListViewTag;
|
||||||
|
const catlist = this.refs.catlist as ListViewTag;
|
||||||
|
catlist.selected = 0;
|
||||||
switch (e.which) {
|
switch (e.which) {
|
||||||
case 27:
|
case 27:
|
||||||
// escape key
|
// escape key
|
||||||
@ -153,7 +166,9 @@ namespace OS {
|
|||||||
var text = (this.refs.search as HTMLInputElement)
|
var text = (this.refs.search as HTMLInputElement)
|
||||||
.value;
|
.value;
|
||||||
if (!(text.length >= 3)) {
|
if (!(text.length >= 3)) {
|
||||||
return this.refreshAppList();
|
(this.refs.applist as ListViewTag).data = this.app_list;
|
||||||
|
(this.refs.applist as ListViewTag).selected = -1;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
var result = Ant.OS.API.search(text);
|
var result = Ant.OS.API.search(text);
|
||||||
if (result.length === 0) {
|
if (result.length === 0) {
|
||||||
@ -232,9 +247,24 @@ namespace OS {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
el: "afx-list-view",
|
el: "afx-hbox",
|
||||||
id: "applist",
|
children: [
|
||||||
ref: "applist",
|
{
|
||||||
|
el: "afx-list-view",
|
||||||
|
id: "catlist",
|
||||||
|
ref: "catlist",
|
||||||
|
width:"40%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
el: "afx-resizer",
|
||||||
|
width: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
el: "afx-list-view",
|
||||||
|
id: "applist",
|
||||||
|
ref: "applist",
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
el: "afx-hbox",
|
el: "afx-hbox",
|
||||||
@ -274,19 +304,22 @@ namespace OS {
|
|||||||
* @memberof SystemPanelTag
|
* @memberof SystemPanelTag
|
||||||
*/
|
*/
|
||||||
private refreshAppList(): void {
|
private refreshAppList(): void {
|
||||||
|
let catlist_el = (this.refs.catlist as tag.ListViewTag);
|
||||||
let k: string, v: API.PackageMetaType;
|
let k: string, v: API.PackageMetaType;
|
||||||
const list = [];
|
const catlist = new Set();
|
||||||
|
this.app_list = [];
|
||||||
for (k in Ant.OS.setting.system.packages) {
|
for (k in Ant.OS.setting.system.packages) {
|
||||||
v = Ant.OS.setting.system.packages[k];
|
v = Ant.OS.setting.system.packages[k];
|
||||||
if (v && v.app) {
|
if (v && v.app) {
|
||||||
list.push(v);
|
this.app_list.push(v);
|
||||||
|
catlist.add(v.category.__());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (k in Ant.OS.setting.system.menu) {
|
for (k in Ant.OS.setting.system.menu) {
|
||||||
v = Ant.OS.setting.system.menu[k];
|
v = Ant.OS.setting.system.menu[k];
|
||||||
list.push(v);
|
this.app_list.push(v);
|
||||||
}
|
}
|
||||||
list.sort(function (a, b) {
|
this.app_list.sort(function (a, b) {
|
||||||
if (a.text < b.text) {
|
if (a.text < b.text) {
|
||||||
return -1;
|
return -1;
|
||||||
} else if (a.text > b.text) {
|
} else if (a.text > b.text) {
|
||||||
@ -295,7 +328,26 @@ namespace OS {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
(this.refs.applist as ListViewTag).data = list;
|
// build up the category menu
|
||||||
|
const cat_list_data = [];
|
||||||
|
cat_list_data.push(OS.setting.applications.categories[0]);
|
||||||
|
(OS.setting.applications.categories as Array<GenericObject<any>>)
|
||||||
|
.forEach((v) =>{
|
||||||
|
if(catlist.has(v.text.__()))
|
||||||
|
{
|
||||||
|
cat_list_data.push(v);
|
||||||
|
catlist.delete(v.text.__());
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// put the remainder to the data
|
||||||
|
catlist.forEach((c) => {
|
||||||
|
cat_list_data.push({
|
||||||
|
text: c,
|
||||||
|
iconclass: "bi bi-gear-wide"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
catlist_el.data = cat_list_data;
|
||||||
|
catlist_el.selected = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -438,7 +490,22 @@ namespace OS {
|
|||||||
return this.toggle(false);
|
return this.toggle(false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Ant.OS.announcer.trigger("syspanelloaded", undefined);
|
const catlist = (this.refs.catlist as tag.ListViewTag);
|
||||||
|
catlist.onlistselect = (e) => {
|
||||||
|
const applist = (this.refs.applist as ListViewTag);
|
||||||
|
if(catlist.selected === 0)
|
||||||
|
{
|
||||||
|
applist.data = this.app_list;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// filter app by data
|
||||||
|
applist.data = this.app_list.filter((el) =>{
|
||||||
|
return el.category.__() === e.data.item.data.text.__();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
applist.selected = -1;
|
||||||
|
};
|
||||||
$(this.refs.overlay)
|
$(this.refs.overlay)
|
||||||
.css("left", 0)
|
.css("left", 0)
|
||||||
.css("top", `${$(this.refs.panel).height()}px`)
|
.css("top", `${$(this.refs.panel).height()}px`)
|
||||||
@ -488,6 +555,7 @@ namespace OS {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.RefreshPinnedApp();
|
this.RefreshPinnedApp();
|
||||||
|
Ant.OS.announcer.trigger("syspanelloaded", undefined);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,19 +159,19 @@ namespace OS {
|
|||||||
* `data-width` of the element, not to be confused with
|
* `data-width` of the element, not to be confused with
|
||||||
* the `width` attribute of the DOM element
|
* the `width` attribute of the DOM element
|
||||||
*
|
*
|
||||||
* @type {number}
|
* @type {number|string}
|
||||||
* @memberof TagLayoutType
|
* @memberof TagLayoutType
|
||||||
*/
|
*/
|
||||||
width?: number;
|
width?: number|string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
** `data-height` of the element, not to be confused with
|
** `data-height` of the element, not to be confused with
|
||||||
* the `height` attribute of the DOM element
|
* the `height` attribute of the DOM element
|
||||||
*
|
*
|
||||||
* @type {number}
|
* @type {number|string}
|
||||||
* @memberof TagLayoutType
|
* @memberof TagLayoutType
|
||||||
*/
|
*/
|
||||||
height?: number;
|
height?: number|string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
"email": "xsang.le@gmail.com",
|
"email": "xsang.le@gmail.com",
|
||||||
"licences": "GPLv3"
|
"licences": "GPLv3"
|
||||||
},
|
},
|
||||||
"version":"0.1.3-b",
|
"version":"0.1.4-b",
|
||||||
"category":"Developments",
|
"category":"Development",
|
||||||
"iconclass":"fa fa-pencil-square-o",
|
"iconclass":"fa fa-pencil-square-o",
|
||||||
"mimes":[
|
"mimes":[
|
||||||
"text/.*",
|
"text/.*",
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
"author": "Xuan Sang LE",
|
"author": "Xuan Sang LE",
|
||||||
"email": "xsang.le@gmail.com"
|
"email": "xsang.le@gmail.com"
|
||||||
},
|
},
|
||||||
"version":"0.1.1-a",
|
"version":"0.1.2-a",
|
||||||
"category":"System",
|
"category":"System",
|
||||||
"iconclass":"fa fa-hdd-o",
|
"iconclass":"fa fa-hdd-o",
|
||||||
"mimes":["dir"],
|
"mimes":["dir"],
|
||||||
|
@ -46,15 +46,17 @@ afx-sys-panel afx-overlay
|
|||||||
{
|
{
|
||||||
background-color: #363636;
|
background-color: #363636;
|
||||||
border: 1px solid #262626;
|
border: 1px solid #262626;
|
||||||
width: 250px;
|
|
||||||
}
|
}
|
||||||
afx-sys-panel afx-list-view[data-id="applist"]
|
afx-sys-panel afx-list-view[data-id="applist"],
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"],
|
||||||
|
afx-sys-panel afx-resizer
|
||||||
{
|
{
|
||||||
border-top: 1px solid #262626;
|
border-top: 1px solid #262626;
|
||||||
border-bottom: 1px solid #262626;
|
border-bottom: 1px solid #262626;
|
||||||
}
|
}
|
||||||
|
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li
|
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li,
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] > div.list-container > ul li
|
||||||
{
|
{
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
@ -65,18 +67,27 @@ afx-sys-panel afx-hbox[data-id="btlist"] afx-button button
|
|||||||
{
|
{
|
||||||
border: 0;
|
border: 0;
|
||||||
border-left: 1px solid #262626;
|
border-left: 1px solid #262626;
|
||||||
|
border-top: 1px solid #262626;
|
||||||
}
|
}
|
||||||
|
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li:hover{
|
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li:hover,
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] > div.list-container > ul li:hover
|
||||||
|
{
|
||||||
background-color: #cecece;
|
background-color: #cecece;
|
||||||
color: #262626;
|
color: #262626;
|
||||||
}
|
}
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li.selected
|
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li.selected,
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] > div.list-container > ul li.selected
|
||||||
|
|
||||||
{
|
{
|
||||||
background-color: #116cd6;
|
background-color: #116cd6;
|
||||||
color:white;
|
color:white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] .label-text {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] afx-label.search-header {
|
afx-sys-panel afx-list-view[data-id="applist"] afx-label.search-header {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
|
@ -46,15 +46,17 @@ afx-sys-panel afx-overlay
|
|||||||
{
|
{
|
||||||
background-color: #e7e7e7;
|
background-color: #e7e7e7;
|
||||||
border: 1px solid #9c9C9C;
|
border: 1px solid #9c9C9C;
|
||||||
width: 250px;
|
|
||||||
}
|
}
|
||||||
afx-sys-panel afx-list-view[data-id="applist"]
|
afx-sys-panel afx-list-view[data-id="applist"],
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"],
|
||||||
|
afx-sys-panel afx-resizer
|
||||||
{
|
{
|
||||||
border-top: 1px solid #afafaf;
|
border-top: 1px solid #afafaf;
|
||||||
border-bottom: 1px solid #afafaf;
|
border-bottom: 1px solid #afafaf;
|
||||||
}
|
}
|
||||||
|
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li
|
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li,
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] > div.list-container > ul li
|
||||||
{
|
{
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
@ -65,17 +67,27 @@ afx-sys-panel afx-hbox[data-id="btlist"] afx-button button
|
|||||||
{
|
{
|
||||||
border: 0;
|
border: 0;
|
||||||
border-left: 1px solid #afafaf;
|
border-left: 1px solid #afafaf;
|
||||||
|
border-top: 1px solid #afafaf;
|
||||||
}
|
}
|
||||||
|
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li:hover{
|
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li:hover,
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] > div.list-container > ul li:hover
|
||||||
|
|
||||||
|
{
|
||||||
background-color: #cecece;
|
background-color: #cecece;
|
||||||
}
|
}
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li.selected
|
afx-sys-panel afx-list-view[data-id="applist"] > div.list-container > ul li.selected,
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] > div.list-container > ul li.selected
|
||||||
{
|
{
|
||||||
background-color: #116cd6;
|
background-color: #116cd6;
|
||||||
color:white;
|
color:white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
afx-sys-panel afx-list-view[data-id="catlist"] .label-text {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
afx-sys-panel afx-list-view[data-id="applist"] afx-label.search-header {
|
afx-sys-panel afx-list-view[data-id="applist"] afx-label.search-header {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
|
@ -10,6 +10,10 @@ afx-sys-panel > div{
|
|||||||
position:absolute;
|
position:absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
afx-sys-panel afx-overlay
|
||||||
|
{
|
||||||
|
width: 400px;
|
||||||
|
}
|
||||||
afx-sys-panel > div.loading::before{
|
afx-sys-panel > div.loading::before{
|
||||||
background-color: orangered;
|
background-color: orangered;
|
||||||
content: "";
|
content: "";
|
||||||
|
1345
src/themes/system/bootstrap-icons.css
vendored
Normal file
1345
src/themes/system/bootstrap-icons.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/themes/system/fonts/bootstrap-icons.woff
Normal file
BIN
src/themes/system/fonts/bootstrap-icons.woff
Normal file
Binary file not shown.
BIN
src/themes/system/fonts/bootstrap-icons.woff2
Normal file
BIN
src/themes/system/fonts/bootstrap-icons.woff2
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user