import { modifier } from 'ember-modifier'; const STYLE_RULE = 1; const getCustomProperties = function() { return Object.fromEntries( [...document.styleSheets].reduce( (prev, item) => prev.concat( [...item.cssRules] .filter(item => item.type === STYLE_RULE) .reduce((prev, rule) => { const props = [...rule.style] .filter(prop => prop.startsWith('--')) .map(prop => [prop.trim(), rule.style.getPropertyValue(prop).trim()]); return [...prev, ...props]; }, []) ), [] ) ); }; const props = getCustomProperties(); export default modifier(function($element, [returns], hash) { const re = new RegExp(`^--${hash.prefix || '.'}${hash.group || ''}+`); const obj = {}; Object.entries(props).forEach(([key, value]) => { const res = key.match(re); if(res) { let prop = res[0]; if (prop.charAt(prop.length - 1) === '-') { prop = prop.substr(0, prop.length - 1); } if (typeof obj[prop] === 'undefined') { obj[prop] = {}; } obj[prop][key] = value; } }); returns(obj); });