set even/odd class based on html { --columns: # } variable
This commit is contained in:
parent
1d0ca613f9
commit
349c33b478
|
@ -50,7 +50,13 @@ function onRuntimeMessage(msg) {
|
|||
case 'styleDeleted':
|
||||
handleDelete(msg.id);
|
||||
break;
|
||||
case 'styleApply':
|
||||
case 'styleReplaceAll':
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
setTimeout(sorter.updateStripes, 0, {onlyWhenColumnsChanged: true});
|
||||
}
|
||||
|
||||
|
||||
|
@ -117,9 +123,6 @@ function showStyles(styles = [], matchUrlIds) {
|
|||
style,
|
||||
name: style.name.toLocaleLowerCase() + '\n' + style.name,
|
||||
})),
|
||||
}).map((info, index) => {
|
||||
info.index = index;
|
||||
return info;
|
||||
});
|
||||
let index = 0;
|
||||
let firstRun = true;
|
||||
|
@ -149,7 +152,7 @@ function showStyles(styles = [], matchUrlIds) {
|
|||
}
|
||||
renderBin.appendChild(entry);
|
||||
}
|
||||
filterAndAppend({container: renderBin});
|
||||
filterAndAppend({container: renderBin}).then(sorter.updateStripes);
|
||||
if (index < sorted.length) {
|
||||
requestAnimationFrame(renderStyles);
|
||||
if (firstRun) setTimeout(recreateStyleTargets, 0, {styles, iconsOnly: true});
|
||||
|
@ -174,7 +177,7 @@ function showStyles(styles = [], matchUrlIds) {
|
|||
}
|
||||
|
||||
|
||||
function createStyleElement({style, name, index}) {
|
||||
function createStyleElement({style, name}) {
|
||||
// query the sub-elements just once, then reuse the references
|
||||
if ((createStyleElement.parts || {}).newUI !== newUI.enabled) {
|
||||
const entry = template[`style${newUI.enabled ? 'Compact' : ''}`];
|
||||
|
@ -227,7 +230,6 @@ function createStyleElement({style, name, index}) {
|
|||
(style.enabled ? 'enabled' : 'disabled') +
|
||||
(style.updateUrl ? ' updatable' : '') +
|
||||
(style.usercssData ? ' usercss' : '');
|
||||
if (index !== undefined) entry.classList.add(index % 2 ? 'odd' : 'even');
|
||||
|
||||
if (style.url) {
|
||||
$('.homepage', entry).appendChild(parts.homepageIcon.cloneNode(true));
|
||||
|
|
|
@ -61,6 +61,8 @@ const sorter = (() => {
|
|||
|
||||
const splitRegex = /\s*,\s*/;
|
||||
|
||||
let columns = 1;
|
||||
|
||||
function addOptions() {
|
||||
let container;
|
||||
const select = $('#manage.newUI.sort');
|
||||
|
@ -140,15 +142,37 @@ const sorter = (() => {
|
|||
updateStripes();
|
||||
}
|
||||
|
||||
function updateStripes() {
|
||||
function updateStripes({onlyWhenColumnsChanged} = {}) {
|
||||
if (onlyWhenColumnsChanged && !updateColumnCount()) return;
|
||||
let index = 0;
|
||||
[...installed.children].forEach(entry => {
|
||||
const list = entry.classList;
|
||||
if (!list.contains('hidden')) {
|
||||
list.add(index % 2 ? 'odd' : 'even');
|
||||
list.remove(index++ % 2 ? 'even' : 'odd');
|
||||
let isOdd = false;
|
||||
const flipRows = columns % 2 === 0;
|
||||
for (const {classList} of installed.children) {
|
||||
if (classList.contains('hidden')) continue;
|
||||
classList.toggle('odd', isOdd);
|
||||
classList.toggle('even', !isOdd);
|
||||
if (flipRows && ++index >= columns) {
|
||||
index = 0;
|
||||
} else {
|
||||
isOdd = !isOdd;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function updateColumnCount() {
|
||||
let newValue = 1;
|
||||
for (let el = document.documentElement.lastElementChild;
|
||||
el.localName === 'style';
|
||||
el = el.previousElementSibling) {
|
||||
if (el.textContent.includes('--columns:')) {
|
||||
newValue = Math.max(1, getComputedStyle(document.documentElement).getPropertyValue('--columns') | 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (columns !== newValue) {
|
||||
columns = newValue;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function showHelp(event) {
|
||||
|
@ -168,6 +192,7 @@ const sorter = (() => {
|
|||
prefs.subscribe(['manage.newUI.sort'], update);
|
||||
$('#sorter-help').onclick = showHelp;
|
||||
addOptions();
|
||||
updateColumnCount();
|
||||
}
|
||||
|
||||
return {init, update, sort, updateStripes};
|
||||
|
|
Loading…
Reference in New Issue
Block a user