Use objects for pagination select creation

1e573426398b00adb49316dd8a1eab7d9618b0c1

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +23 -7Ignore whitespace
public/scripts/utils.js+22 -7
@@ -14,7 +14,7 @@ import { Popup, POPUP_RESULT, POPUP_TYPE } from './popup.js';
1414import { SlashCommandClosure } from './slash-commands/SlashCommandClosure.js';
1515import { getTagsList } from './tags.js';
1616import { groups, selected_group } from './group-chats.js';
1717import { getCurrentLocale, t, translate } from './i18n.js';
1818
1919/**
2020 * Function returning pagination status string template.
@@ -22,21 +22,36 @@ import { getCurrentLocale, t, translate } from './i18n.js';
2222export const PAGINATION_TEMPLATE = '<%= rangeStart %>-<%= rangeEnd %> .. <%= totalNumber %>';
2323
2424export const localizePagination = function(container) {
2525 container.find('[title="Next page"]').attr('title', translate('t`Next page')`);
2626 container.find('[title="Previous page"]').attr('title', translate('t`Previous page')`);
2727};
2828
29+/**
30+ * Renders a dropdown for selecting page size in pagination.
31+ * @param {number} pageSize Page size
32+ * @param {number[]} sizeChangerOptions Array of page size options
33+ * @returns {string} The rendered dropdown element as a string
34+ */
2935export const renderPaginationDropdown = function(pageSize, sizeChangerOptions) {
30- let sizeSelect = '<select class="J-paginationjs-size-select">';
36+ const sizeSelect = document.createElement('select');
37+ sizeSelect.classList.add('J-paginationjs-size-select');
38+
3139 if (sizeChangerOptions.indexOf(pageSize) === -1) {
3240 sizeChangerOptions.unshift(pageSize);
3341 sizeChangerOptions.sort((a, b) => a - b);
3442 }
43+
3544 for (let i = 0; i < sizeChangerOptions.length; i++) {
36- sizeSelect += `<option value="${sizeChangerOptions[i]}"${(sizeChangerOptions[i] === pageSize ? ' selected' : '')}>${sizeChangerOptions[i]} ` + t`/ page` + '</option>';
45+ const option = document.createElement('option');
46+ option.value = `${sizeChangerOptions[i]}`;
47+ option.textContent = `${sizeChangerOptions[i]} ${t`/ page`}`;
48+ if (sizeChangerOptions[i] === pageSize) {
49+ option.setAttribute('selected', 'selected');
50+ }
51+ sizeSelect.appendChild(option);
3752 }
38- sizeSelect += '</select>';
53+
3954 return sizeSelect.outerHTML;
4055};
4156
4257export const paginationDropdownChangeHandler = function(event, size) {
public/style.css+1 -0
@@ -5715,6 +5715,7 @@ body:not(.movingUI) .drawer-content.maximized {
57155715 width: unset;
57165716 margin: 0;
57175717 font-size: calc(var(--mainFontSize) * 0.85);
5718+ padding-right: 20px;
57185719}
57195720
57205721.paginationjs-pages ul li a {