@@ -140,13 +140,15 @@ def install_extension_from_url(dirname, url):
140
140
shutil .rmtree (tmpdir , True )
141
141
142
142
143
- def install_extension_from_index (url ):
143
+ def install_extension_from_index (url , hide_tags ):
144
144
ext_table , message = install_extension_from_url (None , url )
145
145
146
- return refresh_available_extensions_from_data (), ext_table , message
146
+ code , _ = refresh_available_extensions_from_data (hide_tags )
147
147
148
+ return code , ext_table , message
148
149
149
- def refresh_available_extensions (url ):
150
+
151
+ def refresh_available_extensions (url , hide_tags ):
150
152
global available_extensions
151
153
152
154
import urllib .request
@@ -155,13 +157,25 @@ def refresh_available_extensions(url):
155
157
156
158
available_extensions = json .loads (text )
157
159
158
- return url , refresh_available_extensions_from_data (), ''
160
+ code , tags = refresh_available_extensions_from_data (hide_tags )
161
+
162
+ return url , code , gr .CheckboxGroup .update (choices = tags ), ''
163
+
164
+
165
+ def refresh_available_extensions_for_tags (hide_tags ):
166
+ code , _ = refresh_available_extensions_from_data (hide_tags )
159
167
168
+ return code , ''
160
169
161
- def refresh_available_extensions_from_data ():
170
+
171
+ def refresh_available_extensions_from_data (hide_tags ):
162
172
extlist = available_extensions ["extensions" ]
163
173
installed_extension_urls = {normalize_git_url (extension .remote ): extension .name for extension in extensions .extensions }
164
174
175
+ tags = available_extensions .get ("tags" , {})
176
+ tags_to_hide = set (hide_tags )
177
+ hidden = 0
178
+
165
179
code = f"""<!-- { time .time ()} -->
166
180
<table id="available_extensions">
167
181
<thead>
@@ -178,17 +192,24 @@ def refresh_available_extensions_from_data():
178
192
name = ext .get ("name" , "noname" )
179
193
url = ext .get ("url" , None )
180
194
description = ext .get ("description" , "" )
195
+ extension_tags = ext .get ("tags" , [])
181
196
182
197
if url is None :
183
198
continue
184
199
200
+ if len ([x for x in extension_tags if x in tags_to_hide ]) > 0 :
201
+ hidden += 1
202
+ continue
203
+
185
204
existing = installed_extension_urls .get (normalize_git_url (url ), None )
186
205
187
206
install_code = f"""<input onclick="install_extension_from_index(this, '{ html .escape (url )} ')" type="button" value="{ "Install" if not existing else "Installed" } " { "disabled=disabled" if existing else "" } class="gr-button gr-button-lg gr-button-secondary">"""
188
207
208
+ tags_text = ", " .join ([f"<span class='extension-tag' title='{ tags .get (x , '' )} '>{ x } </span>" for x in extension_tags ])
209
+
189
210
code += f"""
190
211
<tr>
191
- <td><a href="{ html .escape (url )} " target="_blank">{ html .escape (name )} </a></td>
212
+ <td><a href="{ html .escape (url )} " target="_blank">{ html .escape (name )} </a><br /> { tags_text } < /td>
192
213
<td>{ html .escape (description )} </td>
193
214
<td>{ install_code } </td>
194
215
</tr>
@@ -199,7 +220,10 @@ def refresh_available_extensions_from_data():
199
220
</table>
200
221
"""
201
222
202
- return code
223
+ if hidden > 0 :
224
+ code += f"<p>Extension hidden: { hidden } </p>"
225
+
226
+ return code , list (tags )
203
227
204
228
205
229
def create_ui ():
@@ -238,21 +262,30 @@ def create_ui():
238
262
extension_to_install = gr .Text (elem_id = "extension_to_install" , visible = False )
239
263
install_extension_button = gr .Button (elem_id = "install_extension_button" , visible = False )
240
264
265
+ with gr .Row ():
266
+ hide_tags = gr .CheckboxGroup (value = ["ads" , "localization" ], label = "Hide extensions with tags" , choices = ["script" , "ads" , "localization" ])
267
+
241
268
install_result = gr .HTML ()
242
269
available_extensions_table = gr .HTML ()
243
270
244
271
refresh_available_extensions_button .click (
245
- fn = modules .ui .wrap_gradio_call (refresh_available_extensions , extra_outputs = [gr .update (), gr .update ()]),
246
- inputs = [available_extensions_index ],
247
- outputs = [available_extensions_index , available_extensions_table , install_result ],
272
+ fn = modules .ui .wrap_gradio_call (refresh_available_extensions , extra_outputs = [gr .update (), gr .update (), gr . update () ]),
273
+ inputs = [available_extensions_index , hide_tags ],
274
+ outputs = [available_extensions_index , available_extensions_table , hide_tags , install_result ],
248
275
)
249
276
250
277
install_extension_button .click (
251
278
fn = modules .ui .wrap_gradio_call (install_extension_from_index , extra_outputs = [gr .update (), gr .update ()]),
252
- inputs = [extension_to_install ],
279
+ inputs = [extension_to_install , hide_tags ],
253
280
outputs = [available_extensions_table , extensions_table , install_result ],
254
281
)
255
282
283
+ hide_tags .change (
284
+ fn = modules .ui .wrap_gradio_call (refresh_available_extensions_for_tags , extra_outputs = [gr .update ()]),
285
+ inputs = [hide_tags ],
286
+ outputs = [available_extensions_table , install_result ]
287
+ )
288
+
256
289
with gr .TabItem ("Install from URL" ):
257
290
install_url = gr .Text (label = "URL for extension's git repository" )
258
291
install_dirname = gr .Text (label = "Local directory name" , placeholder = "Leave empty for auto" )
0 commit comments