Prevent rollover on keyboard left swipe if repeating (#3644)

* Prevent rollover on keyboard left swipe if repeating
Closes #3636

* Ditto for right swipe

* Remove goofy comment leftover
This commit is contained in:
Cohee
2025-03-09 16:12:24 +02:00
committed by GitHub
2 changed files with 28 additions and 7 deletions

View File

@@ -8746,11 +8746,17 @@ function formatSwipeCounter(current, total) {
return `${current}\u200b/\u200b${total}`; return `${current}\u200b/\u200b${total}`;
} }
function swipe_left() { // when we swipe left..but no generation. /**
* Handles the swipe to the left event.
* @param {JQuery.Event} _event Event.
* @param {object} params Additional parameters.
* @param {string} [params.source] The source of the swipe event.
* @param {boolean} [params.repeated] Is the swipe event repeated.
*/
function swipe_left(_event, { source, repeated } = {}) {
if (chat.length - 1 === Number(this_edit_mes_id)) { if (chat.length - 1 === Number(this_edit_mes_id)) {
closeMessageEditor(); closeMessageEditor();
} }
if (isStreamingEnabled() && streamingProcessor) { if (isStreamingEnabled() && streamingProcessor) {
streamingProcessor.onStopStreaming(); streamingProcessor.onStopStreaming();
} }
@@ -8758,6 +8764,11 @@ function swipe_left() { // when we swipe left..but no generation.
// Make sure ad-hoc changes to extras are saved before swiping away // Make sure ad-hoc changes to extras are saved before swiping away
syncMesToSwipe(); syncMesToSwipe();
// If the user is holding down the key and we're at the first swipe, don't do anything
if (source === 'keyboard' && repeated && chat[chat.length - 1].swipe_id === 0) {
return;
}
const swipe_duration = 120; const swipe_duration = 120;
const swipe_range = '700px'; const swipe_range = '700px';
chat[chat.length - 1]['swipe_id']--; chat[chat.length - 1]['swipe_id']--;
@@ -8883,8 +8894,14 @@ function swipe_left() { // when we swipe left..but no generation.
} }
} }
// when we click swipe right button /**
const swipe_right = () => { * Handles the swipe to the right event.
* @param {JQuery.Event} _event Event.
* @param {object} params Additional parameters.
* @param {string} [params.source] The source of the swipe event.
* @param {boolean} [params.repeated] Is the swipe event repeated.
*/
function swipe_right(_event, { source, repeated } = {}) {
if (chat.length - 1 === Number(this_edit_mes_id)) { if (chat.length - 1 === Number(this_edit_mes_id)) {
closeMessageEditor(); closeMessageEditor();
} }
@@ -8917,6 +8934,10 @@ const swipe_right = () => {
if (chat.length === 1 && chat[0]['swipe_id'] !== undefined && chat[0]['swipe_id'] === chat[0]['swipes'].length - 1) { // if swipe_right is called on the last alternate greeting, loop back around if (chat.length === 1 && chat[0]['swipe_id'] !== undefined && chat[0]['swipe_id'] === chat[0]['swipes'].length - 1) { // if swipe_right is called on the last alternate greeting, loop back around
chat[0]['swipe_id'] = 0; chat[0]['swipe_id'] = 0;
} else { } else {
// If the user is holding down the key and we're at the last swipe, don't do anything
if (source === 'keyboard' && repeated && chat[chat.length - 1].swipe_id === chat[chat.length - 1].swipes.length - 1) {
return;
}
chat[chat.length - 1]['swipe_id']++; // make new slot in array chat[chat.length - 1]['swipe_id']++; // make new slot in array
} }
if (chat[chat.length - 1].extra) { if (chat[chat.length - 1].extra) {
@@ -9065,7 +9086,7 @@ const swipe_right = () => {
}, },
}); });
} }
}; }
export const CONNECT_API_MAP = { export const CONNECT_API_MAP = {
// Default APIs not contined inside text gen / chat gen // Default APIs not contined inside text gen / chat gen

View File

@@ -1143,7 +1143,7 @@ export function initRossMods() {
$('#shadow_select_chat_popup').css('display') === 'none' && $('#shadow_select_chat_popup').css('display') === 'none' &&
!isInputElementInFocus() !isInputElementInFocus()
) { ) {
$('.swipe_left:last').click(); $('.swipe_left:last').trigger('click', { source: 'keyboard', repeated: event.repeat });
return; return;
} }
} }
@@ -1156,7 +1156,7 @@ export function initRossMods() {
$('#shadow_select_chat_popup').css('display') === 'none' && $('#shadow_select_chat_popup').css('display') === 'none' &&
!isInputElementInFocus() !isInputElementInFocus()
) { ) {
$('.swipe_right:last').click(); $('.swipe_right:last').trigger('click', { source: 'keyboard', repeated: event.repeat });
return; return;
} }
} }