in src/executable-code/index.js [279:348]
static create(target, options) {
let targetNodes;
if (typeof target === 'string') {
targetNodes = arrayFrom(document.querySelectorAll(target));
} else if (target instanceof Node) {
targetNodes = [target];
} else if (target instanceof NodeList === false) {
throw new Error(`'target' type should be string|Node|NodeList, ${typeof target} given`);
}
// Return empty array if there is no nodes attach to
if (targetNodes.length === 0) {
return Promise.resolve([]);
}
return WebDemoApi.getCompilerVersions().then((versions) => {
const instances = [];
targetNodes.forEach((node) => {
const config = getConfigFromElement(node, true);
const minCompilerVersion = config.minCompilerVersion;
let latestStableVersion = null;
let compilerVersion = null;
// Skip empty and already initialized nodes
if (
node.textContent.trim() === '' ||
node.getAttribute(INITED_ATTRIBUTE_NAME) === 'true'
) {
return;
}
if (versions) {
versions.sort(function({ version: version1 }, { version: version2 }) {
if (version1 < version2) return -1;
if (version1 > version2) return 1;
return 0;
});
let listOfVersions = versions.map(version => version.version);
if (listOfVersions.includes(config.version)) {
compilerVersion = config.version;
} else if (listOfVersions.includes(options.version)) {
compilerVersion = options.version;
} else {
versions.forEach((compilerConfig) => {
if (compilerConfig.latestStable) {
latestStableVersion = compilerConfig.version;
}
});
compilerVersion = latestStableVersion;
}
if (minCompilerVersion) {
compilerVersion = minCompilerVersion > latestStableVersion
? versions[versions.length - 1].version
: latestStableVersion;
}
instances.push(new ExecutableCode(node, {compilerVersion}, options));
} else {
console.error('Cann\'t get kotlin version from server');
instances.push(new ExecutableCode(node, {highlightOnly: true}));
}
});
return instances;
});
}