Indicates extensions that add tools in the list
| @@ -184,6 +184,7 @@ function downloadAssetsList(url) { | ||
| 184 | 184 | const url = isValidUrl(asset['url']) ? asset['url'] : ''; |
| 185 | 185 | const title = assetType === 'extension' ? `Extension repo/guide: ${url}` : 'Preview in browser'; |
| 186 | 186 | const previewIcon = (assetType === 'extension' || assetType === 'character') ? 'fa-arrow-up-right-from-square' : 'fa-headphones-simple'; |
| 187 | + const toolTag = assetType === 'extension' && asset['tool']; | |
| 187 | 188 | |
| 188 | 189 | const assetBlock = $('<i></i>') |
| 189 | 190 | .append(element) |
| @@ -193,12 +194,20 @@ function downloadAssetsList(url) { | ||
| 193 | 194 | <a class="asset_preview" href="${url}" target="_blank" title="${title}"> |
| 194 | 195 | <i class="fa-solid fa-sm ${previewIcon}"></i> |
| 195 | 196 | </a> |
| 197 | + ${toolTag ? '<span class="tag" title="Adds a function tool"><i class="fa-solid fa-sm fa-wrench"></i> Tool</span>' : ''} | |
| 196 | 198 | </span> |
| 197 | 199 | <small class="asset-description"> |
| 198 | 200 | ${description} |
| 199 | 201 | </small> |
| 200 | 202 | </div>`); |
| 201 | 203 | |
| 204 | + assetBlock.find('.tag').on('click', function (e) { | |
| 205 | + const a = document.createElement('a'); | |
| 206 | + a.href = 'https://docs.sillytavern.app/for-contributors/function-calling/'; | |
| 207 | + a.target = '_blank'; | |
| 208 | + a.click(); | |
| 209 | + }); | |
| 210 | + | |
| 202 | 211 | if (assetType === 'character') { |
| 203 | 212 | if (asset.highlight) { |
| 204 | 213 | assetBlock.find('.asset-name').append('<i class="fa-solid fa-sm fa-trophy"></i>'); |
| @@ -354,7 +363,7 @@ async function openCharacterBrowser(forceDefault) { | ||
| 354 | 363 | for (const character of characters.sort((a, b) => a.name.localeCompare(b.name))) { |
| 355 | 364 | const listElement = template.find(character.highlight ? '.contestWinnersList' : '.featuredCharactersList'); |
| 356 | 365 | const characterElement = $(await renderExtensionTemplateAsync(MODULE_NAME, 'character', character)); |
| 357 | 366 | const downloadButton = characterElement.find('.characterAssetDownloadButton'); |
| 358 | 367 | const checkMark = characterElement.find('.characterAssetCheckMark'); |
| 359 | 368 | const isInstalled = isAssetInstalled('character', character.id); |
| 360 | 369 | |
| @@ -164,3 +164,12 @@ | ||
| 164 | 164 | gap: 5px; |
| 165 | 165 | align-items: center; |
| 166 | 166 | } |
| 167 | + | |
| 168 | +.asset-name .tag { | |
| 169 | + gap: 5px; | |
| 170 | + align-items: baseline; | |
| 171 | + font-size: calc(var(--mainFontSize)* 0.8); | |
| 172 | + cursor: pointer; | |
| 173 | + opacity: 0.9; | |
| 174 | + margin-left: 2px; | |
| 175 | +} | |