Add title tooltip to expression sprites

Closes #2596
This commit is contained in:
Wolfsblvt
2025-02-01 23:43:45 +01:00
parent fb2ee756dd
commit 1ea2134936

View File

@@ -196,6 +196,8 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
} }
const expressionImage = vnContainer.find(`.expression-holder[data-avatar="${avatar}"]`); const expressionImage = vnContainer.find(`.expression-holder[data-avatar="${avatar}"]`);
/** @type {JQuery<HTMLElement>} */
let img;
const memberSpriteFolderName = getSpriteFolderName({ original_avatar: character.avatar }, character.name); const memberSpriteFolderName = getSpriteFolderName({ original_avatar: character.avatar }, character.name);
@@ -212,7 +214,7 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
await validateImages(memberSpriteFolderName, true); await validateImages(memberSpriteFolderName, true);
setExpressionOverrideHtml(true); // <= force clear expression override input setExpressionOverrideHtml(true); // <= force clear expression override input
const path = spriteFile?.imageSrc || ''; const path = spriteFile?.imageSrc || '';
const img = expressionImage.find('img'); img = expressionImage.find('img');
await setImage(img, path); await setImage(img, path);
} }
expressionImage.toggleClass('hidden', !spriteFile); expressionImage.toggleClass('hidden', !spriteFile);
@@ -224,13 +226,19 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
$('#visual-novel-wrapper').append(template); $('#visual-novel-wrapper').append(template);
dragElement($(template[0])); dragElement($(template[0]));
template.toggleClass('hidden', !spriteFile); template.toggleClass('hidden', !spriteFile);
await setImage(template.find('img'), spriteFile?.imageSrc || ''); img = template.find('img');
await setImage(img, spriteFile?.imageSrc || '');
const fadeInPromise = new Promise(resolve => { const fadeInPromise = new Promise(resolve => {
template.fadeIn(250, () => resolve()); template.fadeIn(250, () => resolve());
}); });
setSpritePromises.push(fadeInPromise); setSpritePromises.push(fadeInPromise);
} }
img.attr('data-sprite-folder-name', spriteFolderName);
img.attr('data-expression', expression);
img.attr('data-sprite-filename', spriteFile?.fileName || null);
img.attr('title', expression);
if (spriteFile) console.info(`Expression set for group member ${character.name}`, { expression: spriteFile.expression, file: spriteFile.fileName }); if (spriteFile) console.info(`Expression set for group member ${character.name}`, { expression: spriteFile.expression, file: spriteFile.fileName });
else if (expressionImage.length) console.info(`Expression unset for group member ${character.name} - No sprite found`, { expression: expression }); else if (expressionImage.length) console.info(`Expression unset for group member ${character.name} - No sprite found`, { expression: expression });
else console.info(`Expression not available for group member ${character.name}`, { expression: expression }); else console.info(`Expression not available for group member ${character.name}`, { expression: expression });
@@ -1395,6 +1403,7 @@ async function setExpression(spriteFolderName, expression, { force = false, over
expressionClone.attr('data-sprite-folder-name', spriteFolderName); expressionClone.attr('data-sprite-folder-name', spriteFolderName);
expressionClone.attr('data-expression', expression); expressionClone.attr('data-expression', expression);
expressionClone.attr('data-sprite-filename', spriteFile.fileName); expressionClone.attr('data-sprite-filename', spriteFile.fileName);
expressionClone.attr('title', expression);
//add invisible clone to html //add invisible clone to html
expressionClone.appendTo($('#expression-holder')); expressionClone.appendTo($('#expression-holder'));
@@ -1454,9 +1463,8 @@ async function setExpression(spriteFolderName, expression, { force = false, over
} }
else { else {
img.attr('data-sprite-folder-name', spriteFolderName); img.attr('data-sprite-folder-name', spriteFolderName);
img.attr('data-expression', expression);
$(img).off('error'); img.off('error');
if (extension_settings.expressions.showDefault && expression !== RESET_SPRITE_LABEL) { if (extension_settings.expressions.showDefault && expression !== RESET_SPRITE_LABEL) {
setDefaultEmojiForImage(img, expression); setDefaultEmojiForImage(img, expression);
@@ -1484,6 +1492,7 @@ function setDefaultEmojiForImage(img, expression) {
img.attr('src', defImgUrl); img.attr('src', defImgUrl);
img.attr('data-expression', expression); img.attr('data-expression', expression);
img.attr('data-sprite-filename', null); img.attr('data-sprite-filename', null);
img.attr('title', expression);
img.addClass('default'); img.addClass('default');
} }
@@ -1496,6 +1505,7 @@ function setNoneForImage(img, expression) {
img.attr('src', ''); img.attr('src', '');
img.attr('data-expression', expression); img.attr('data-expression', expression);
img.attr('data-sprite-filename', null); img.attr('data-sprite-filename', null);
img.attr('title', expression);
img.removeClass('default'); img.removeClass('default');
} }