mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
HR betwn WI Entries; fading for solo sprites
This commit is contained in:
@@ -2819,7 +2819,7 @@
|
|||||||
<div class="tags rm_tag_filter"></div>
|
<div class="tags rm_tag_filter"></div>
|
||||||
</div>
|
</div>
|
||||||
<!-- a div containing a dynamically updated count of characters currently displayed -->
|
<!-- a div containing a dynamically updated count of characters currently displayed -->
|
||||||
<div id="rm_character_count" ></div>
|
<div id="rm_character_count"></div>
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -3300,7 +3300,12 @@
|
|||||||
|
|
||||||
<input class="menu_button delete_entry_button" type="submit" value="Delete Entry" />
|
<input class="menu_button delete_entry_button" type="submit" value="Delete Entry" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="wide100p">
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -3619,4 +3624,4 @@
|
|||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@@ -620,6 +620,8 @@ async function setExpression(character, expression, force) {
|
|||||||
console.debug('entered setExpressions');
|
console.debug('entered setExpressions');
|
||||||
await validateImages(character);
|
await validateImages(character);
|
||||||
const img = $('img.expression');
|
const img = $('img.expression');
|
||||||
|
const prevExpressionSrc = img.attr('src');
|
||||||
|
const expressionClone = img.clone()
|
||||||
|
|
||||||
const sprite = (spriteCache[character] && spriteCache[character].find(x => x.label === expression));
|
const sprite = (spriteCache[character] && spriteCache[character].find(x => x.label === expression));
|
||||||
console.debug('checking for expression images to show..');
|
console.debug('checking for expression images to show..');
|
||||||
@@ -643,21 +645,62 @@ async function setExpression(character, expression, force) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//only swap expressions when necessary
|
||||||
|
if (prevExpressionSrc !== sprite.path
|
||||||
|
&& !img.hasClass('expression-animating')) {
|
||||||
|
//clone expression
|
||||||
|
expressionClone.addClass('expression-clone')
|
||||||
|
//make invisible and remove id to prevent double ids
|
||||||
|
//must be made invisible to start because they share the same Z-index
|
||||||
|
expressionClone.attr('id', '').css({ opacity: 0 });
|
||||||
|
//add new sprite path to clone src
|
||||||
|
expressionClone.attr('src', sprite.path);
|
||||||
|
//add invisible clone to html
|
||||||
|
expressionClone.appendTo($("#expression-holder"))
|
||||||
|
|
||||||
img.attr('src', sprite.path);
|
const duration = 200;
|
||||||
img.removeClass('default');
|
|
||||||
img.off('error');
|
//add animation flags to both images
|
||||||
img.on('error', function () {
|
//to prevent multiple expression changes happening simultaneously
|
||||||
console.debug('Expression image error', sprite.path);
|
img.addClass('expression-animating')
|
||||||
$(this).attr('src', '');
|
//position absolute prevent the original from jumping around during transition
|
||||||
$(this).off('error');
|
img.css('position', 'absolute')
|
||||||
if (force && extension_settings.expressions.showDefault) {
|
expressionClone.addClass('expression-animating')
|
||||||
|
//fade the clone in
|
||||||
|
expressionClone.css({
|
||||||
|
opacity: 0
|
||||||
|
}).animate({
|
||||||
|
opacity: 1
|
||||||
|
}, duration)
|
||||||
|
//when finshed fading in clone, fade out the original
|
||||||
|
.promise().done(function () {
|
||||||
|
img.animate({
|
||||||
|
opacity: 0
|
||||||
|
}, duration);
|
||||||
|
//remove old expression
|
||||||
|
img.remove();
|
||||||
|
//replace ID so it becomes the new 'original' expression for next change
|
||||||
|
expressionClone.attr('id', 'expression-image')
|
||||||
|
expressionClone.removeClass('expression-animating')
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
expressionClone.removeClass('expression-clone');
|
||||||
|
|
||||||
|
expressionClone.removeClass('default');
|
||||||
|
expressionClone.off('error');
|
||||||
|
expressionClone.on('error', function () {
|
||||||
|
console.debug('Expression image error', sprite.path);
|
||||||
|
$(this).attr('src', '');
|
||||||
|
$(this).off('error');
|
||||||
|
if (force && extension_settings.expressions.showDefault) {
|
||||||
|
setDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (extension_settings.expressions.showDefault) {
|
||||||
setDefault();
|
setDefault();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
} else {
|
|
||||||
if (extension_settings.expressions.showDefault) {
|
|
||||||
setDefault();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,8 +708,8 @@ async function setExpression(character, expression, force) {
|
|||||||
console.debug('setting default');
|
console.debug('setting default');
|
||||||
const defImgUrl = `/img/default-expressions/${expression}.png`;
|
const defImgUrl = `/img/default-expressions/${expression}.png`;
|
||||||
//console.log(defImgUrl);
|
//console.log(defImgUrl);
|
||||||
img.attr('src', defImgUrl);
|
expressionClone.attr('src', defImgUrl);
|
||||||
img.addClass('default');
|
expressionClone.addClass('default');
|
||||||
}
|
}
|
||||||
document.getElementById("expression-holder").style.display = '';
|
document.getElementById("expression-holder").style.display = '';
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,9 @@
|
|||||||
|
|
||||||
#visual-novel-wrapper .expression-holder {
|
#visual-novel-wrapper .expression-holder {
|
||||||
width: max-content;
|
width: max-content;
|
||||||
|
display: flex;
|
||||||
|
left: unset;
|
||||||
|
right: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
#visual-novel-wrapper .hidden {
|
#visual-novel-wrapper .hidden {
|
||||||
@@ -31,21 +34,6 @@
|
|||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/* .expression-holder {
|
|
||||||
min-width: 100px;
|
|
||||||
min-height: 100px;
|
|
||||||
max-height: 90vh;
|
|
||||||
max-width: 90vh;
|
|
||||||
width: calc((100vw - var(--sheldWidth)) /2);
|
|
||||||
position: absolute;
|
|
||||||
padding: 0;
|
|
||||||
filter: drop-shadow(2px 2px 2px #51515199);
|
|
||||||
z-index: 29;
|
|
||||||
overflow: hidden;
|
|
||||||
display: none;
|
|
||||||
bottom: 0;
|
|
||||||
} */
|
|
||||||
|
|
||||||
.expression-holder {
|
.expression-holder {
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
min-height: 100px;
|
min-height: 100px;
|
||||||
@@ -55,6 +43,7 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
left: 0;
|
||||||
filter: drop-shadow(2px 2px 2px #51515199);
|
filter: drop-shadow(2px 2px 2px #51515199);
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -62,8 +51,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
img.expression {
|
img.expression {
|
||||||
|
min-width: 100px;
|
||||||
|
min-height: 100px;
|
||||||
|
max-height: 90vh;
|
||||||
|
max-width: 90vh;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
bottom: 0;
|
||||||
|
padding: 0;
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
@@ -79,6 +73,10 @@ img.expression.default {
|
|||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.expression-clone {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
.debug-image {
|
.debug-image {
|
||||||
display: none;
|
display: none;
|
||||||
visibility: collapse;
|
visibility: collapse;
|
||||||
|
@@ -3784,6 +3784,11 @@ label[for="extensions_autoconnect"] {
|
|||||||
color: lightgray;
|
color: lightgray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* possible place for WI Entry header styling */
|
||||||
|
/* .world_entry_form .inline-drawer-header {
|
||||||
|
background-color: var(--SmartThemeShadowColor);
|
||||||
|
} */
|
||||||
|
|
||||||
#extensions_settings .inline-drawer-toggle.inline-drawer-header,
|
#extensions_settings .inline-drawer-toggle.inline-drawer-header,
|
||||||
#extensions_settings2 .inline-drawer-toggle.inline-drawer-header {
|
#extensions_settings2 .inline-drawer-toggle.inline-drawer-header {
|
||||||
background-image: linear-gradient(348deg, var(--white30a)2%, var(--grey30a)10%, var(--black70a)95%, var(--SmartThemeQuoteColor)100%);
|
background-image: linear-gradient(348deg, var(--white30a)2%, var(--grey30a)10%, var(--black70a)95%, var(--SmartThemeQuoteColor)100%);
|
||||||
@@ -4413,6 +4418,9 @@ body.waifuMode .expression-holder {
|
|||||||
bottom: 0;
|
bottom: 0;
|
||||||
filter: drop-shadow(2px 2px 2px #51515199);
|
filter: drop-shadow(2px 2px 2px #51515199);
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
margin: 0 auto;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* movingUI*/
|
/* movingUI*/
|
||||||
@@ -4789,16 +4797,13 @@ body.waifuMode .zoomed_avatar {
|
|||||||
|
|
||||||
body.waifuMode .expression-holder {
|
body.waifuMode .expression-holder {
|
||||||
display: inline;
|
display: inline;
|
||||||
width: unset;
|
|
||||||
max-height: unset;
|
|
||||||
max-width: unset;
|
|
||||||
bottom: unset;
|
|
||||||
left: unset;
|
|
||||||
top: unset;
|
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
width: 100vw;
|
width: max-content;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
filter: drop-shadow(2px 2px 2px #51515199);
|
filter: drop-shadow(2px 2px 2px #51515199);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
@@ -5092,5 +5097,4 @@ body.waifuMode .zoomed_avatar {
|
|||||||
background-color: var(--SmartThemeBlurTintColor);
|
background-color: var(--SmartThemeBlurTintColor);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 14px;
|
line-height: 14px;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue
Block a user