Add title tooltip to expression sprites Closes #2596

1ea2134936ac4b09c0863b618b79606bf45a619e

Wolfsblvt <wolfsblvt@gmail.com>

1 files changed, +14 -4Showing whitespace changes
public/scripts/extensions/expressions/index.js+14 -4
@@ -196,6 +196,8 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
196196 }
197197
198198 const expressionImage = vnContainer.find(`.expression-holder[data-avatar="${avatar}"]`);
199+ /** @type {JQuery<HTMLElement>} */
200+ let img;
199201
200202 const memberSpriteFolderName = getSpriteFolderName({ original_avatar: character.avatar }, character.name);
201203
@@ -212,7 +214,7 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
212214 await validateImages(memberSpriteFolderName, true);
213215 setExpressionOverrideHtml(true); // <= force clear expression override input
214216 const path = spriteFile?.imageSrc || '';
215217 const img = expressionImage.find('img');
216218 await setImage(img, path);
217219 }
218220 expressionImage.toggleClass('hidden', !spriteFile);
@@ -224,13 +226,19 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
224226 $('#visual-novel-wrapper').append(template);
225227 dragElement($(template[0]));
226228 template.toggleClass('hidden', !spriteFile);
227229 awaitimg setImage(= template.find('img'), spriteFile?.imageSrc || '');
230+ await setImage(img, spriteFile?.imageSrc || '');
228231 const fadeInPromise = new Promise(resolve => {
229232 template.fadeIn(250, () => resolve());
230233 });
231234 setSpritePromises.push(fadeInPromise);
232235 }
233236
237+ img.attr('data-sprite-folder-name', spriteFolderName);
238+ img.attr('data-expression', expression);
239+ img.attr('data-sprite-filename', spriteFile?.fileName || null);
240+ img.attr('title', expression);
241+
234242 if (spriteFile) console.info(`Expression set for group member ${character.name}`, { expression: spriteFile.expression, file: spriteFile.fileName });
235243 else if (expressionImage.length) console.info(`Expression unset for group member ${character.name} - No sprite found`, { expression: expression });
236244 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
13951403 expressionClone.attr('data-sprite-folder-name', spriteFolderName);
13961404 expressionClone.attr('data-expression', expression);
13971405 expressionClone.attr('data-sprite-filename', spriteFile.fileName);
1406+ expressionClone.attr('title', expression);
13981407 //add invisible clone to html
13991408 expressionClone.appendTo($('#expression-holder'));
14001409
@@ -1454,9 +1463,8 @@ async function setExpression(spriteFolderName, expression, { force = false, over
14541463 }
14551464 else {
14561465 img.attr('data-sprite-folder-name', spriteFolderName);
1457- img.attr('data-expression', expression);
14581466
14591467 $(img).off('error');
14601468
14611469 if (extension_settings.expressions.showDefault && expression !== RESET_SPRITE_LABEL) {
14621470 setDefaultEmojiForImage(img, expression);
@@ -1484,6 +1492,7 @@ function setDefaultEmojiForImage(img, expression) {
14841492 img.attr('src', defImgUrl);
14851493 img.attr('data-expression', expression);
14861494 img.attr('data-sprite-filename', null);
1495+ img.attr('title', expression);
14871496 img.addClass('default');
14881497}
14891498
@@ -1496,6 +1505,7 @@ function setNoneForImage(img, expression) {
14961505 img.attr('src', '');
14971506 img.attr('data-expression', expression);
14981507 img.attr('data-sprite-filename', null);
1508+ img.attr('title', expression);
14991509 img.removeClass('default');
15001510}
15011511