More work on tl
| @@ -6707,7 +6707,7 @@ | |||
| 6707 | </div> | 6707 | </div> |
| 6708 | <div class="flex-container wide100pLess70px character_select_container height100p alignitemscenter"> | 6708 | <div class="flex-container wide100pLess70px character_select_container height100p alignitemscenter"> |
| 6709 | <div class="wide100p character_name_block"> | 6709 | <div class="wide100p character_name_block"> |
| 6710 | <span class="ch_name">Go back</span> | 6710 | <span class="ch_name" data-i18n="Go back">Go back</span> |
| 6711 | </div> | 6711 | </div> |
| 6712 | </div> | 6712 | </div> |
| 6713 | </div> | 6713 | </div> |
| @@ -2403,7 +2403,6 @@ | |||
| 2403 | "Croak it": "Только кваканье лягушек и стрёкот сверчков", | 2403 | "Croak it": "Только кваканье лягушек и стрёкот сверчков", |
| 2404 | "${0} character hidden.": "Персонажей скрыто: ${0}.", | 2404 | "${0} character hidden.": "Персонажей скрыто: ${0}.", |
| 2405 | "${0} characters hidden.": "Персонажей скрыто: ${0}.", | 2405 | "${0} characters hidden.": "Персонажей скрыто: ${0}.", |
| 2406 | "pagination_of": "из", | ||
| 2407 | "/ page": "/ стр.", | 2406 | "/ page": "/ стр.", |
| 2408 | "Context Length": "Размер контекста", | 2407 | "Context Length": "Размер контекста", |
| 2409 | "Added On": "Добавлена", | 2408 | "Added On": "Добавлена", |
| @@ -2421,5 +2420,6 @@ | |||
| 2421 | "Text Completion Preset": "Пресет для режима Text Completion", | 2420 | "Text Completion Preset": "Пресет для режима Text Completion", |
| 2422 | "Update enabled": "Обновить включенные", | 2421 | "Update enabled": "Обновить включенные", |
| 2423 | "Could not connect to API": "Не удалось подключиться к API", | 2422 | "Could not connect to API": "Не удалось подключиться к API", |
| 2424 | "Connected to API": "Соединение с API установлено" | 2423 | "Connected to API": "Соединение с API установлено", |
| 2424 | "Go back": "Назад" | ||
| 2425 | } | 2425 | } |
| @@ -177,6 +177,8 @@ import { | |||
| 177 | uuidv4, | 177 | uuidv4, |
| 178 | equalsIgnoreCaseAndAccents, | 178 | equalsIgnoreCaseAndAccents, |
| 179 | localizePagination, | 179 | localizePagination, |
| 180 | renderPaginationDropdown, | ||
| 181 | paginationDropdownChangeHandler, | ||
| 180 | } from './scripts/utils.js'; | 182 | } from './scripts/utils.js'; |
| 181 | import { debounce_timeout, IGNORE_SYMBOL } from './scripts/constants.js'; | 183 | import { debounce_timeout, IGNORE_SYMBOL } from './scripts/constants.js'; |
| 182 | 184 | ||
| @@ -1525,10 +1527,12 @@ export async function printCharacters(fullRefresh = false) { | |||
| 1525 | 1527 | ||
| 1526 | const entities = getEntitiesList({ doFilter: true }); | 1528 | const entities = getEntitiesList({ doFilter: true }); |
| 1527 | 1529 | ||
| 1530 | const pageSize = Number(accountStorage.getItem(storageKey)) || per_page_default; | ||
| 1531 | console.log('pageSize for characters = ' + pageSize); | ||
| 1532 | const sizeChangerOptions = [10, 25, 50, 100, 250, 500, 1000]; | ||
| 1528 | $('#rm_print_characters_pagination').pagination({ | 1533 | $('#rm_print_characters_pagination').pagination({ |
| 1529 | dataSource: entities, | 1534 | dataSource: entities, |
| 1530 | pageSize: Number(accountStorage.getItem(storageKey)) || per_page_default, | 1535 | pageSize, |
| 1531 | sizeChangerOptions: [10, 25, 50, 100, 250, 500, 1000], | ||
| 1532 | pageRange: 1, | 1536 | pageRange: 1, |
| 1533 | pageNumber: saveCharactersPage || 1, | 1537 | pageNumber: saveCharactersPage || 1, |
| 1534 | position: 'top', | 1538 | position: 'top', |
| @@ -1537,6 +1541,7 @@ export async function printCharacters(fullRefresh = false) { | |||
| 1537 | prevText: '<', | 1541 | prevText: '<', |
| 1538 | nextText: '>', | 1542 | nextText: '>', |
| 1539 | formatNavigator: PAGINATION_TEMPLATE, | 1543 | formatNavigator: PAGINATION_TEMPLATE, |
| 1544 | formatSizeChanger: renderPaginationDropdown(pageSize, sizeChangerOptions), | ||
| 1540 | showNavigator: true, | 1545 | showNavigator: true, |
| 1541 | callback: async function (/** @type {Entity[]} */ data) { | 1546 | callback: async function (/** @type {Entity[]} */ data) { |
| 1542 | $(listId).empty(); | 1547 | $(listId).empty(); |
| @@ -1573,8 +1578,10 @@ export async function printCharacters(fullRefresh = false) { | |||
| 1573 | 1578 | ||
| 1574 | eventSource.emit(event_types.CHARACTER_PAGE_LOADED); | 1579 | eventSource.emit(event_types.CHARACTER_PAGE_LOADED); |
| 1575 | }, | 1580 | }, |
| 1576 | afterSizeSelectorChange: function (e) { | 1581 | afterSizeSelectorChange: function (e, size) { |
| 1577 | accountStorage.setItem(storageKey, e.target.value); | 1582 | accountStorage.setItem(storageKey, e.target.value); |
| 1583 | console.log('pageSize for characters after getting updated = ' + accountStorage.getItem(storageKey)); | ||
| 1584 | paginationDropdownChangeHandler(e, size); | ||
| 1578 | }, | 1585 | }, |
| 1579 | afterPaging: function (e) { | 1586 | afterPaging: function (e) { |
| 1580 | saveCharactersPage = e; | 1587 | saveCharactersPage = e; |
| @@ -14,6 +14,8 @@ import { | |||
| 14 | resetScrollHeight, | 14 | resetScrollHeight, |
| 15 | initScrollHeight, | 15 | initScrollHeight, |
| 16 | localizePagination, | 16 | localizePagination, |
| 17 | renderPaginationDropdown, | ||
| 18 | paginationDropdownChangeHandler, | ||
| 17 | } from './utils.js'; | 19 | } from './utils.js'; |
| 18 | import { RA_CountCharTokens, humanizedDateTime, dragElement, favsToHotswap, getMessageTimeStamp } from './RossAscends-mods.js'; | 20 | import { RA_CountCharTokens, humanizedDateTime, dragElement, favsToHotswap, getMessageTimeStamp } from './RossAscends-mods.js'; |
| 19 | import { power_user, loadMovingUIState, sortEntitiesList } from './power-user.js'; | 21 | import { power_user, loadMovingUIState, sortEntitiesList } from './power-user.js'; |
| @@ -1375,6 +1377,8 @@ function getGroupCharacters({ doFilter, onlyMembers } = {}) { | |||
| 1375 | 1377 | ||
| 1376 | function printGroupCandidates() { | 1378 | function printGroupCandidates() { |
| 1377 | const storageKey = 'GroupCandidates_PerPage'; | 1379 | const storageKey = 'GroupCandidates_PerPage'; |
| 1380 | const pageSize = Number(accountStorage.getItem(storageKey)) || 5; | ||
| 1381 | const sizeChangerOptions = [5, 10, 25, 50, 100, 200, 500, 1000]; | ||
| 1378 | $('#rm_group_add_members_pagination').pagination({ | 1382 | $('#rm_group_add_members_pagination').pagination({ |
| 1379 | dataSource: getGroupCharacters({ doFilter: true, onlyMembers: false }), | 1383 | dataSource: getGroupCharacters({ doFilter: true, onlyMembers: false }), |
| 1380 | pageRange: 1, | 1384 | pageRange: 1, |
| @@ -1383,12 +1387,13 @@ function printGroupCandidates() { | |||
| 1383 | prevText: '<', | 1387 | prevText: '<', |
| 1384 | nextText: '>', | 1388 | nextText: '>', |
| 1385 | formatNavigator: PAGINATION_TEMPLATE, | 1389 | formatNavigator: PAGINATION_TEMPLATE, |
| 1390 | formatSizeChanger: renderPaginationDropdown(pageSize, sizeChangerOptions), | ||
| 1386 | showNavigator: true, | 1391 | showNavigator: true, |
| 1387 | showSizeChanger: true, | 1392 | showSizeChanger: true, |
| 1388 | pageSize: Number(accountStorage.getItem(storageKey)) || 5, | 1393 | pageSize, |
| 1389 | sizeChangerOptions: [5, 10, 25, 50, 100, 200, 500, 1000], | 1394 | afterSizeSelectorChange: function (e, size) { |
| 1390 | afterSizeSelectorChange: function (e) { | ||
| 1391 | accountStorage.setItem(storageKey, e.target.value); | 1395 | accountStorage.setItem(storageKey, e.target.value); |
| 1396 | paginationDropdownChangeHandler(e, size); | ||
| 1392 | }, | 1397 | }, |
| 1393 | callback: function (data) { | 1398 | callback: function (data) { |
| 1394 | $('#rm_group_add_members').empty(); | 1399 | $('#rm_group_add_members').empty(); |
| @@ -1404,6 +1409,8 @@ function printGroupMembers() { | |||
| 1404 | const storageKey = 'GroupMembers_PerPage'; | 1409 | const storageKey = 'GroupMembers_PerPage'; |
| 1405 | $('.rm_group_members_pagination').each(function () { | 1410 | $('.rm_group_members_pagination').each(function () { |
| 1406 | let that = this; | 1411 | let that = this; |
| 1412 | const pageSize = Number(accountStorage.getItem(storageKey)) || 5; | ||
| 1413 | const sizeChangerOptions = [5, 10, 25, 50, 100, 200, 500, 1000]; | ||
| 1407 | $(this).pagination({ | 1414 | $(this).pagination({ |
| 1408 | dataSource: getGroupCharacters({ doFilter: false, onlyMembers: true }), | 1415 | dataSource: getGroupCharacters({ doFilter: false, onlyMembers: true }), |
| 1409 | pageRange: 1, | 1416 | pageRange: 1, |
| @@ -1414,10 +1421,11 @@ function printGroupMembers() { | |||
| 1414 | formatNavigator: PAGINATION_TEMPLATE, | 1421 | formatNavigator: PAGINATION_TEMPLATE, |
| 1415 | showNavigator: true, | 1422 | showNavigator: true, |
| 1416 | showSizeChanger: true, | 1423 | showSizeChanger: true, |
| 1417 | pageSize: Number(accountStorage.getItem(storageKey)) || 5, | 1424 | formatSizeChanger: renderPaginationDropdown(pageSize, sizeChangerOptions), |
| 1418 | sizeChangerOptions: [5, 10, 25, 50, 100, 200, 500, 1000], | 1425 | pageSize, |
| 1419 | afterSizeSelectorChange: function (e) { | 1426 | afterSizeSelectorChange: function (e, size) { |
| 1420 | accountStorage.setItem(storageKey, e.target.value); | 1427 | accountStorage.setItem(storageKey, e.target.value); |
| 1428 | paginationDropdownChangeHandler(e, size); | ||
| 1421 | }, | 1429 | }, |
| 1422 | callback: function (data) { | 1430 | callback: function (data) { |
| 1423 | $('.rm_group_members').empty(); | 1431 | $('.rm_group_members').empty(); |
| @@ -22,7 +22,7 @@ import { | |||
| 22 | } from '../script.js'; | 22 | } from '../script.js'; |
| 23 | import { persona_description_positions, power_user } from './power-user.js'; | 23 | import { persona_description_positions, power_user } from './power-user.js'; |
| 24 | import { getTokenCountAsync } from './tokenizers.js'; | 24 | import { getTokenCountAsync } from './tokenizers.js'; |
| 25 | import { PAGINATION_TEMPLATE, clearInfoBlock, debounce, delay, download, ensureImageFormatSupported, flashHighlight, getBase64Async, getCharIndex, isFalseBoolean, isTrueBoolean, onlyUnique, parseJsonFile, setInfoBlock, localizePagination } from './utils.js'; | 25 | import { PAGINATION_TEMPLATE, clearInfoBlock, debounce, delay, download, ensureImageFormatSupported, flashHighlight, getBase64Async, getCharIndex, isFalseBoolean, isTrueBoolean, onlyUnique, parseJsonFile, setInfoBlock, localizePagination, renderPaginationDropdown, paginationDropdownChangeHandler } from './utils.js'; |
| 26 | import { debounce_timeout } from './constants.js'; | 26 | import { debounce_timeout } from './constants.js'; |
| 27 | import { FILTER_TYPES, FilterHelper } from './filters.js'; | 27 | import { FILTER_TYPES, FilterHelper } from './filters.js'; |
| 28 | import { groups, selected_group } from './group-chats.js'; | 28 | import { groups, selected_group } from './group-chats.js'; |
| @@ -250,16 +250,18 @@ export async function getUserAvatars(doRender = true, openPageAt = '') { | |||
| 250 | const storageKey = 'Personas_PerPage'; | 250 | const storageKey = 'Personas_PerPage'; |
| 251 | const listId = '#user_avatar_block'; | 251 | const listId = '#user_avatar_block'; |
| 252 | const perPage = Number(accountStorage.getItem(storageKey)) || 5; | 252 | const perPage = Number(accountStorage.getItem(storageKey)) || 5; |
| 253 | const sizeChangerOptions = [5, 10, 25, 50, 100, 250, 500, 1000]; | ||
| 253 | 254 | ||
| 254 | $('#persona_pagination_container').pagination({ | 255 | $('#persona_pagination_container').pagination({ |
| 255 | dataSource: entities, | 256 | dataSource: entities, |
| 256 | pageSize: perPage, | 257 | pageSize: perPage, |
| 257 | sizeChangerOptions: [5, 10, 25, 50, 100, 250, 500, 1000], | 258 | sizeChangerOptions, |
| 258 | pageRange: 1, | 259 | pageRange: 1, |
| 259 | pageNumber: savePersonasPage || 1, | 260 | pageNumber: savePersonasPage || 1, |
| 260 | position: 'top', | 261 | position: 'top', |
| 261 | showPageNumbers: false, | 262 | showPageNumbers: false, |
| 262 | showSizeChanger: true, | 263 | showSizeChanger: true, |
| 264 | formatSizeChanger: renderPaginationDropdown(perPage, sizeChangerOptions), | ||
| 263 | prevText: '<', | 265 | prevText: '<', |
| 264 | nextText: '>', | 266 | nextText: '>', |
| 265 | formatNavigator: PAGINATION_TEMPLATE, | 267 | formatNavigator: PAGINATION_TEMPLATE, |
| @@ -272,8 +274,9 @@ export async function getUserAvatars(doRender = true, openPageAt = '') { | |||
| 272 | updatePersonaUIStates(); | 274 | updatePersonaUIStates(); |
| 273 | localizePagination($('#persona_pagination_container')); | 275 | localizePagination($('#persona_pagination_container')); |
| 274 | }, | 276 | }, |
| 275 | afterSizeSelectorChange: function (e) { | 277 | afterSizeSelectorChange: function (e, size) { |
| 276 | accountStorage.setItem(storageKey, e.target.value); | 278 | accountStorage.setItem(storageKey, e.target.value); |
| 279 | paginationDropdownChangeHandler(e, size); | ||
| 277 | }, | 280 | }, |
| 278 | afterPaging: function (e) { | 281 | afterPaging: function (e) { |
| 279 | savePersonasPage = e; | 282 | savePersonasPage = e; |
| @@ -318,7 +318,7 @@ function getTagBlock(tag, entities, hidden = 0, isUseless = false) { | |||
| 318 | template.find('.avatar').css({ 'background-color': tag.color, 'color': tag.color2 }).attr('title', `[Folder] ${tag.name}`); | 318 | template.find('.avatar').css({ 'background-color': tag.color, 'color': tag.color2 }).attr('title', `[Folder] ${tag.name}`); |
| 319 | template.find('.ch_name').text(tag.name).attr('title', `[Folder] ${tag.name}`); | 319 | template.find('.ch_name').text(tag.name).attr('title', `[Folder] ${tag.name}`); |
| 320 | template.find('.bogus_folder_hidden_counter').text(hidden > 0 ? `${hidden} hidden` : ''); | 320 | template.find('.bogus_folder_hidden_counter').text(hidden > 0 ? `${hidden} hidden` : ''); |
| 321 | template.find('.bogus_folder_counter').text(`${count} ${count != 1 ? 'characters' : 'character'}`); | 321 | template.find('.bogus_folder_counter').text(`${count} ` + (count != 1 ? t`characters` : t`character`)); |
| 322 | template.find('.bogus_folder_icon').addClass(tagFolder.fa_icon); | 322 | template.find('.bogus_folder_icon').addClass(tagFolder.fa_icon); |
| 323 | if (isUseless) template.addClass('useless'); | 323 | if (isUseless) template.addClass('useless'); |
| 324 | 324 | ||
| @@ -22,21 +22,29 @@ import { getCurrentLocale, t, translate } from './i18n.js'; | |||
| 22 | export const PAGINATION_TEMPLATE = '<%= rangeStart %>-<%= rangeEnd %> .. <%= totalNumber %>'; | 22 | export const PAGINATION_TEMPLATE = '<%= rangeStart %>-<%= rangeEnd %> .. <%= totalNumber %>'; |
| 23 | 23 | ||
| 24 | export const localizePagination = function(container) { | 24 | export const localizePagination = function(container) { |
| 25 | let options = container.find('option'); | ||
| 26 | for (let option of options) { | ||
| 27 | option = $(option); | ||
| 28 | try { | ||
| 29 | option.text(option.text().replace('/ page', translate('/ page'))); | ||
| 30 | } catch (e) { | ||
| 31 | // means that i18n facilities aren't ready, so there's no point doing anything | ||
| 32 | console.error(e); | ||
| 33 | return; | ||
| 34 | } | ||
| 35 | } | ||
| 36 | container.find('[title="Next page"]').attr('title', translate('Next page')); | 25 | container.find('[title="Next page"]').attr('title', translate('Next page')); |
| 37 | container.find('[title="Previous page"]').attr('title', translate('Previous page')); | 26 | container.find('[title="Previous page"]').attr('title', translate('Previous page')); |
| 38 | }; | 27 | }; |
| 39 | 28 | ||
| 29 | export const renderPaginationDropdown = function(pageSize, sizeChangerOptions) { | ||
| 30 | let sizeSelect = `<select class="J-paginationjs-size-select">`; | ||
| 31 | if (sizeChangerOptions.indexOf(pageSize) === -1) { | ||
| 32 | sizeChangerOptions.unshift(pageSize); | ||
| 33 | sizeChangerOptions.sort((a, b) => a - b); | ||
| 34 | } | ||
| 35 | for (let i = 0; i < sizeChangerOptions.length; i++) { | ||
| 36 | sizeSelect += `<option value="${sizeChangerOptions[i]}"${(sizeChangerOptions[i] === pageSize ? ' selected' : '')}>${sizeChangerOptions[i]} ` + t`/ page` + `</option>`; | ||
| 37 | } | ||
| 38 | sizeSelect += `</select>`; | ||
| 39 | return sizeSelect; | ||
| 40 | } | ||
| 41 | |||
| 42 | export const paginationDropdownChangeHandler = function(event, size) { | ||
| 43 | let dropdown = $(event?.originalEvent?.currentTarget || event.delegateTarget).find('select'); | ||
| 44 | dropdown.find('[selected]').removeAttr('selected'); | ||
| 45 | dropdown.find(`[value=${size}]`).attr('selected', ''); | ||
| 46 | } | ||
| 47 | |||
| 40 | /** | 48 | /** |
| 41 | * Navigation options for pagination. | 49 | * Navigation options for pagination. |
| 42 | * @enum {number} | 50 | * @enum {number} |