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