diff --git a/public/index.html b/public/index.html index 3f8cc407f..bf8d129ac 100644 --- a/public/index.html +++ b/public/index.html @@ -6707,7 +6707,7 @@
- Go back + Go back
diff --git a/public/locales/ru-ru.json b/public/locales/ru-ru.json index 00f94e88d..328051038 100644 --- a/public/locales/ru-ru.json +++ b/public/locales/ru-ru.json @@ -2403,7 +2403,6 @@ "Croak it": "Только кваканье лягушек и стрёкот сверчков", "${0} character hidden.": "Персонажей скрыто: ${0}.", "${0} characters hidden.": "Персонажей скрыто: ${0}.", - "pagination_of": "из", "/ page": "/ стр.", "Context Length": "Размер контекста", "Added On": "Добавлена", @@ -2421,5 +2420,6 @@ "Text Completion Preset": "Пресет для режима Text Completion", "Update enabled": "Обновить включенные", "Could not connect to API": "Не удалось подключиться к API", - "Connected to API": "Соединение с API установлено" + "Connected to API": "Соединение с API установлено", + "Go back": "Назад" } diff --git a/public/script.js b/public/script.js index 960ed5c55..c73efb23b 100644 --- a/public/script.js +++ b/public/script.js @@ -177,6 +177,8 @@ import { uuidv4, equalsIgnoreCaseAndAccents, localizePagination, + renderPaginationDropdown, + paginationDropdownChangeHandler, } from './scripts/utils.js'; import { debounce_timeout, IGNORE_SYMBOL } from './scripts/constants.js'; @@ -1525,10 +1527,12 @@ export async function printCharacters(fullRefresh = false) { const entities = getEntitiesList({ doFilter: true }); + const pageSize = Number(accountStorage.getItem(storageKey)) || per_page_default; + console.log('pageSize for characters = ' + pageSize); + const sizeChangerOptions = [10, 25, 50, 100, 250, 500, 1000]; $('#rm_print_characters_pagination').pagination({ dataSource: entities, - pageSize: Number(accountStorage.getItem(storageKey)) || per_page_default, - sizeChangerOptions: [10, 25, 50, 100, 250, 500, 1000], + pageSize, pageRange: 1, pageNumber: saveCharactersPage || 1, position: 'top', @@ -1537,6 +1541,7 @@ export async function printCharacters(fullRefresh = false) { prevText: '<', nextText: '>', formatNavigator: PAGINATION_TEMPLATE, + formatSizeChanger: renderPaginationDropdown(pageSize, sizeChangerOptions), showNavigator: true, callback: async function (/** @type {Entity[]} */ data) { $(listId).empty(); @@ -1573,8 +1578,10 @@ export async function printCharacters(fullRefresh = false) { eventSource.emit(event_types.CHARACTER_PAGE_LOADED); }, - afterSizeSelectorChange: function (e) { + afterSizeSelectorChange: function (e, size) { accountStorage.setItem(storageKey, e.target.value); + console.log('pageSize for characters after getting updated = ' + accountStorage.getItem(storageKey)); + paginationDropdownChangeHandler(e, size); }, afterPaging: function (e) { saveCharactersPage = e; diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index 78ce0b275..b3b0f3806 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -14,6 +14,8 @@ import { resetScrollHeight, initScrollHeight, localizePagination, + renderPaginationDropdown, + paginationDropdownChangeHandler, } from './utils.js'; import { RA_CountCharTokens, humanizedDateTime, dragElement, favsToHotswap, getMessageTimeStamp } from './RossAscends-mods.js'; import { power_user, loadMovingUIState, sortEntitiesList } from './power-user.js'; @@ -1375,6 +1377,8 @@ function getGroupCharacters({ doFilter, onlyMembers } = {}) { function printGroupCandidates() { const storageKey = 'GroupCandidates_PerPage'; + const pageSize = Number(accountStorage.getItem(storageKey)) || 5; + const sizeChangerOptions = [5, 10, 25, 50, 100, 200, 500, 1000]; $('#rm_group_add_members_pagination').pagination({ dataSource: getGroupCharacters({ doFilter: true, onlyMembers: false }), pageRange: 1, @@ -1383,12 +1387,13 @@ function printGroupCandidates() { prevText: '<', nextText: '>', formatNavigator: PAGINATION_TEMPLATE, + formatSizeChanger: renderPaginationDropdown(pageSize, sizeChangerOptions), showNavigator: true, showSizeChanger: true, - pageSize: Number(accountStorage.getItem(storageKey)) || 5, - sizeChangerOptions: [5, 10, 25, 50, 100, 200, 500, 1000], - afterSizeSelectorChange: function (e) { + pageSize, + afterSizeSelectorChange: function (e, size) { accountStorage.setItem(storageKey, e.target.value); + paginationDropdownChangeHandler(e, size); }, callback: function (data) { $('#rm_group_add_members').empty(); @@ -1404,6 +1409,8 @@ function printGroupMembers() { const storageKey = 'GroupMembers_PerPage'; $('.rm_group_members_pagination').each(function () { let that = this; + const pageSize = Number(accountStorage.getItem(storageKey)) || 5; + const sizeChangerOptions = [5, 10, 25, 50, 100, 200, 500, 1000]; $(this).pagination({ dataSource: getGroupCharacters({ doFilter: false, onlyMembers: true }), pageRange: 1, @@ -1414,10 +1421,11 @@ function printGroupMembers() { formatNavigator: PAGINATION_TEMPLATE, showNavigator: true, showSizeChanger: true, - pageSize: Number(accountStorage.getItem(storageKey)) || 5, - sizeChangerOptions: [5, 10, 25, 50, 100, 200, 500, 1000], - afterSizeSelectorChange: function (e) { + formatSizeChanger: renderPaginationDropdown(pageSize, sizeChangerOptions), + pageSize, + afterSizeSelectorChange: function (e, size) { accountStorage.setItem(storageKey, e.target.value); + paginationDropdownChangeHandler(e, size); }, callback: function (data) { $('.rm_group_members').empty(); diff --git a/public/scripts/personas.js b/public/scripts/personas.js index 6b9fc1e0d..1aeefa0b9 100644 --- a/public/scripts/personas.js +++ b/public/scripts/personas.js @@ -22,7 +22,7 @@ import { } from '../script.js'; import { persona_description_positions, power_user } from './power-user.js'; import { getTokenCountAsync } from './tokenizers.js'; -import { PAGINATION_TEMPLATE, clearInfoBlock, debounce, delay, download, ensureImageFormatSupported, flashHighlight, getBase64Async, getCharIndex, isFalseBoolean, isTrueBoolean, onlyUnique, parseJsonFile, setInfoBlock, localizePagination } from './utils.js'; +import { PAGINATION_TEMPLATE, clearInfoBlock, debounce, delay, download, ensureImageFormatSupported, flashHighlight, getBase64Async, getCharIndex, isFalseBoolean, isTrueBoolean, onlyUnique, parseJsonFile, setInfoBlock, localizePagination, renderPaginationDropdown, paginationDropdownChangeHandler } from './utils.js'; import { debounce_timeout } from './constants.js'; import { FILTER_TYPES, FilterHelper } from './filters.js'; import { groups, selected_group } from './group-chats.js'; @@ -250,16 +250,18 @@ export async function getUserAvatars(doRender = true, openPageAt = '') { const storageKey = 'Personas_PerPage'; const listId = '#user_avatar_block'; const perPage = Number(accountStorage.getItem(storageKey)) || 5; + const sizeChangerOptions = [5, 10, 25, 50, 100, 250, 500, 1000]; $('#persona_pagination_container').pagination({ dataSource: entities, pageSize: perPage, - sizeChangerOptions: [5, 10, 25, 50, 100, 250, 500, 1000], + sizeChangerOptions, pageRange: 1, pageNumber: savePersonasPage || 1, position: 'top', showPageNumbers: false, showSizeChanger: true, + formatSizeChanger: renderPaginationDropdown(perPage, sizeChangerOptions), prevText: '<', nextText: '>', formatNavigator: PAGINATION_TEMPLATE, @@ -272,8 +274,9 @@ export async function getUserAvatars(doRender = true, openPageAt = '') { updatePersonaUIStates(); localizePagination($('#persona_pagination_container')); }, - afterSizeSelectorChange: function (e) { + afterSizeSelectorChange: function (e, size) { accountStorage.setItem(storageKey, e.target.value); + paginationDropdownChangeHandler(e, size); }, afterPaging: function (e) { savePersonasPage = e; diff --git a/public/scripts/tags.js b/public/scripts/tags.js index 1b9ba8502..2705da21c 100644 --- a/public/scripts/tags.js +++ b/public/scripts/tags.js @@ -318,7 +318,7 @@ function getTagBlock(tag, entities, hidden = 0, isUseless = false) { template.find('.avatar').css({ 'background-color': tag.color, 'color': tag.color2 }).attr('title', `[Folder] ${tag.name}`); template.find('.ch_name').text(tag.name).attr('title', `[Folder] ${tag.name}`); template.find('.bogus_folder_hidden_counter').text(hidden > 0 ? `${hidden} hidden` : ''); - template.find('.bogus_folder_counter').text(`${count} ${count != 1 ? 'characters' : 'character'}`); + template.find('.bogus_folder_counter').text(`${count} ` + (count != 1 ? t`characters` : t`character`)); template.find('.bogus_folder_icon').addClass(tagFolder.fa_icon); if (isUseless) template.addClass('useless'); diff --git a/public/scripts/utils.js b/public/scripts/utils.js index c760b9f97..dd500efb4 100644 --- a/public/scripts/utils.js +++ b/public/scripts/utils.js @@ -22,21 +22,29 @@ import { getCurrentLocale, t, translate } from './i18n.js'; export const PAGINATION_TEMPLATE = '<%= rangeStart %>-<%= rangeEnd %> .. <%= totalNumber %>'; export const localizePagination = function(container) { - let options = container.find('option'); - for (let option of options) { - option = $(option); - try { - option.text(option.text().replace('/ page', translate('/ page'))); - } catch (e) { - // means that i18n facilities aren't ready, so there's no point doing anything - console.error(e); - return; - } - } container.find('[title="Next page"]').attr('title', translate('Next page')); container.find('[title="Previous page"]').attr('title', translate('Previous page')); }; +export const renderPaginationDropdown = function(pageSize, sizeChangerOptions) { + let sizeSelect = ``; + return sizeSelect; +} + +export const paginationDropdownChangeHandler = function(event, size) { + let dropdown = $(event?.originalEvent?.currentTarget || event.delegateTarget).find('select'); + dropdown.find('[selected]').removeAttr('selected'); + dropdown.find(`[value=${size}]`).attr('selected', ''); +} + /** * Navigation options for pagination. * @enum {number}