(function(doc, appName) { const fs = new Map( Object.entries(JSON.parse(doc.querySelector(`[data-${appName}-fs]`).textContent)) ); const appendScript = function(src) { var $script = doc.createElement('script'); $script.src = src; doc.body.appendChild($script); }; // polyfills if (!('TextDecoder' in window)) { appendScript(fs.get(`${['text-encoding', 'encoding-indexes'].join('/')}.js`)); appendScript(fs.get(`${['text-encoding', 'encoding'].join('/')}.js`)); } if (!(window.CSS && window.CSS.escape)) { appendScript(fs.get(`${['css.escape', 'css.escape'].join('/')}.js`)); } try { const $appMeta = doc.querySelector(`[name="${appName}/config/environment"]`); // pick out the operatorConfig from our application/json script tag const operatorConfig = JSON.parse(doc.querySelector(`[data-${appName}-config]`).textContent); // pick out the ember config from its meta tag const emberConfig = JSON.parse(decodeURIComponent($appMeta.getAttribute('content'))); // rootURL is a special variable that requires settings before ember // boots via ember's HTML metadata tag, the variable is equivalent to // the -ui-content-path Consul flag (or `ui_config { content_path = ""}`) // There will potentially be one or two more 'pre-init' variables that we need. // Anything not 'pre-init' should use ui_config. // Check the value to make sure its there and a string const rootURL = typeof operatorConfig.ContentPath !== 'string' ? '' : operatorConfig.ContentPath; if (rootURL.length > 0) { emberConfig.rootURL = rootURL; } $appMeta.setAttribute('content', encodeURIComponent(JSON.stringify(emberConfig))); } catch (e) { throw new Error(`Unable to parse ${appName} settings: ${e.message}`); } })(document, 'consul-ui');