section(data-i18n-aria-label="basic stats")#basic-stats .characteristics h2(data-i18n='characteristics') - const groupHolder = Object.values(characteristics).reduce((acc,obj)=>{ const endIndex = Math.max(acc.length - 1,0) if(!acc[endIndex] || acc[endIndex][1]){ const dest = []; dest.push(obj); acc.push(dest); }else{ acc[endIndex].push(obj); } return acc; },[]); each arr in groupHolder .even-flow each obj in arr - const trigger = {affects:obj.affects}; +statContainer({class:obj.name}) +input-label({ inputObj:{name:obj.name,type:'number',trigger}, spanObj:{'data-i18n':`${obj.name}-abbreviation`,role:'heading','aria-level':3}, divObj:{class:'stacked center no-gap'} }) .attributes h2(data-i18n='attributes') - const attrHolder = attributes.reduce((acc,name) => { const endIndex = Math.max(acc.length - 1,0) if(!acc[endIndex] || acc[endIndex][1]){ const dest = []; dest.push(name); acc.push(dest); }else{ acc[endIndex].push(name); } return acc; },[]); each arr in attrHolder .even-flow each name in arr +attributeHolder(name) .armor-movement.collapse-container +collapse('armor-collapse')(checked) h2(data-i18n='armor-movement') each obj in movementArmor +statContainer({class:obj.name.replace(/\s.+/,'')}).circle +input-label({ inputObj:{type:'number',...obj}, spanObj:{'data-i18n':`${obj.name} abbreviation`,role:'heading','aria-level':3}, divObj:{class:`stacked center no-gap`} }) .headed-textarea.armor-details.collapse-container.tiny-gap .flex-box.half-gap(style="width:100%") +text({name:'armor name',value:'','data-i18n-placeholder':'equipped armor',class:'flex-min-content underlined'}) +action({ name:'unequip armor', 'data-i18n':'unequip', class:'control-button', trigger:{triggeredFuncs:['equipArmor']} }) +adaptiveTextarea({name:'armor details',class:'boxed underlined--light'}).expanded