11import config from "../config.js" ;
2- import { isTitle , tabs } from "./tabs.js" ;
2+ import { allScripts } from "../scripts/index.js" ;
3+ import { isTitle , refreshSpecialTabs , specialTabs , tabs } from "./tabs.js" ;
34import { getFlag , t , toggleLang } from "./helpers/lang.js" ;
45import { checkBlackWhiteList , runScriptInCurrentTab } from "./helpers/utils.js" ;
5- import { activeTabIdSaver , recentScriptsSaver } from "./helpers/storage.js" ;
6+ import {
7+ activeTabIdSaver ,
8+ favoriteScriptsSaver ,
9+ recentScriptsSaver ,
10+ } from "./helpers/storage.js" ;
611
712const tabDiv = document . querySelector ( "div.tab" ) ;
813const contentDiv = document . querySelector ( "div.content" ) ;
@@ -24,18 +29,31 @@ async function initLanguage() {
2429}
2530
2631async function createTabs ( ) {
32+ // prepare tabs
33+ await refreshSpecialTabs ( ) ;
34+
2735 // clear UI
2836 tabDiv . innerHTML = "" ;
2937 contentDiv . innerHTML = "" ;
3038
3139 // make new UI
32- for ( let tab of tabs ) {
40+ const allTabs = [ ...specialTabs , ...tabs ] ;
41+ for ( let tab of allTabs ) {
3342 // create tab button
3443 const tabBtn = document . createElement ( "button" ) ;
3544 tabBtn . className = "tablinks" ;
3645 tabBtn . innerHTML = t ( tab . name ) ;
3746 tabBtn . type = "button" ;
3847 tabBtn . setAttribute ( "content-id" , tab . id ) ;
48+
49+ // show scripts count
50+ if ( tab . showCount ) {
51+ let avaiCount = tab . scripts . filter ( ( script ) => ! isTitle ( script ) ) . length ;
52+ let allCount = Object . keys ( allScripts ) . length ;
53+ tabBtn . innerHTML += ` (${ avaiCount } /${ allCount } )` ;
54+ }
55+
56+ // custom style
3957 if ( tab . style && typeof tab . style === "object" )
4058 Object . entries ( tab . style ) . forEach ( ( [ key , value ] ) => {
4159 tabBtn . style [ key ] = value ;
@@ -50,7 +68,7 @@ async function createTabs() {
5068
5169 // open tab
5270 let activeTabId = await activeTabIdSaver . get ( ) ;
53- activeTabId && openTab ( tabs . find ( ( tab ) => tab . id === activeTabId ) ) ;
71+ activeTabId && openTab ( allTabs . find ( ( tab ) => tab . id === activeTabId ) ) ;
5472}
5573
5674async function openTab ( tab ) {
@@ -65,22 +83,26 @@ async function openTab(tab) {
6583 . classList . add ( "active" ) ;
6684}
6785
68- function createTabContent ( tab ) {
86+ async function createTabContent ( tab ) {
6987 // create tab content
7088 const contentContainer = document . createElement ( "div" ) ;
7189 contentContainer . className = "tabcontent" ;
7290
7391 // create button for scripts in tabcontent
7492 if ( ! tab . scripts ?. length ) {
7593 const emptyText = document . createElement ( "h3" ) ;
76- emptyText . innerText = t ( {
77- en : "Nothing here yet..." ,
78- vi : "Chưa có gì ở đây hết..." ,
94+ emptyText . style . padding = "30px 0" ;
95+ emptyText . style . color = "#19143b" ;
96+ emptyText . innerHTML = t ( {
97+ en : `<i class="fa-solid fa-circle-info"></i> Nothing here yet...` ,
98+ vi : `<i class="fa-solid fa-circle-info"></i> Chưa có gì ở đây hết...` ,
7999 } ) ;
80100 contentContainer . appendChild ( emptyText ) ;
81101 } else {
102+ const favoriteScriptIds = await favoriteScriptsSaver . getIds ( ) ;
82103 tab . scripts . forEach ( ( script ) => {
83- contentContainer . appendChild ( createScriptButton ( script ) ) ;
104+ let isFavorite = favoriteScriptIds . find ( ( id ) => script . id === id ) ;
105+ contentContainer . appendChild ( createScriptButton ( script , isFavorite ) ) ;
84106 } ) ;
85107 }
86108
@@ -89,7 +111,7 @@ function createTabContent(tab) {
89111 contentDiv . appendChild ( contentContainer ) ;
90112}
91113
92- function createScriptButton ( script ) {
114+ function createScriptButton ( script , isFavorite = false ) {
93115 // Section title
94116 if ( isTitle ( script ) ) {
95117 const title = document . createElement ( "h3" ) ;
@@ -144,6 +166,19 @@ function createScriptButton(script) {
144166 title . innerText = t ( script . name ) ;
145167 button . appendChild ( title ) ;
146168
169+ // add to favorite button
170+ const addFavoriteBtn = document . createElement ( "i" ) ;
171+ addFavoriteBtn . className = isFavorite
172+ ? "fa-solid fa-star active"
173+ : "fa-regular fa-star" ;
174+ addFavoriteBtn . onclick = ( e ) => {
175+ e . stopPropagation ( ) ;
176+ e . preventDefault ( ) ;
177+
178+ favoriteScriptsSaver . toggle ( script ) . then ( createTabs ) ;
179+ } ;
180+ button . appendChild ( addFavoriteBtn ) ;
181+
147182 // tooltip
148183 const tooltip = document . createElement ( "span" ) ;
149184 tooltip . classList . add ( "tooltiptext" ) ;
0 commit comments