// defaults and polyfills // eslint-disable-next-line no-undef window = self; // eslint-disable-next-line no-undef top = self; const kubioNoop = function () {}; document = { createElement() { return { style: [], setAttribute: kubioNoop, attachEvent: kubioNoop, }; }, attachEvent: kubioNoop, addEventListener: kubioNoop, querySelectorAll() { return []; }, }; // wp imported scripts need to load kubio-style-manager // {{{importScriptsPlaceholder}}} const fonts = {}; // eslint-disable-next-line no-undef wp.hooks.addAction( 'kubio.google-fonts.load', 'kubio.google-fonts.load', function (nextFonts) { nextFonts.forEach(function (font) { fonts[font.family] = fonts[font.family] || []; // eslint-disable-next-line no-undef fonts[font.family] = lodash.uniq( fonts[font.family].concat(font.variants) ); }); } ); const renderStyle = function (payload) { // eslint-disable-next-line no-undef const dynamicStyle = lodash.get(payload.data, 'dynamicStyle', {}); // eslint-disable-next-line no-undef const renderer = new kubio.styleManager.BlockStyleRender( // eslint-disable-next-line no-undef lodash.omit(payload.data, 'dynamicStyle'), payload.parentDetails, payload.canUseHtml, payload.document || null ); const styleRef = renderer.model ? renderer.model.styleRef : null; const localId = renderer.model ? renderer.model.id : null; return { css: renderer.export(), dynamicRules: renderer.exportDynamicStyle(dynamicStyle), styleRef, localId, responseHash: payload.hash, fonts: Object.keys(fonts).map((family) => ({ family, variants: fonts[family], })), }; }; // actual web worker runner // eslint-disable-next-line no-undef self.addEventListener('message', (event) => { const action = event.data.action; const hash = event.data.hash; const payload = lodash.isObject(event.data.payload) ? event.data.payload : JSON.parse(event.data.payload); let response = null; switch (action) { case 'EXPORT_CSS': response = renderStyle(payload); break; case 'TEST': response = 'test'; break; } // eslint-disable-next-line no-undef self.postMessage({ hash, payload: response, }); }); // eslint-disable-next-line no-undef self.postMessage('WORKER_LOADED');