consul/ui/packages/consul-ui/app/instance-initializers/ivy-codemirror.js

40 lines
1.2 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
/* globals CodeMirror */
export function initialize(application) {
const appName = application.application.name;
const doc = application.lookup('service:-document');
// pick codemirror syntax highlighting paths out of index.html
const fs = new Map(
Object.entries(JSON.parse(doc.querySelector(`[data-${appName}-fs]`).textContent))
);
// configure syntax highlighting for CodeMirror
CodeMirror.modeURL = {
replace: function (n, mode) {
switch (mode.trim()) {
case 'javascript':
return fs.get(['codemirror', 'mode', 'javascript', 'javascript.js'].join('/'));
case 'ruby':
return fs.get(['codemirror', 'mode', 'ruby', 'ruby.js'].join('/'));
case 'yaml':
return fs.get(['codemirror', 'mode', 'yaml', 'yaml.js'].join('/'));
case 'xml':
return fs.get(['codemirror', 'mode', 'xml', 'xml.js'].join('/'));
}
},
};
const IvyCodeMirrorComponent = application.resolveRegistration('component:ivy-codemirror');
// Make sure ivy-codemirror respects/maintains a `name=""` attribute
IvyCodeMirrorComponent.reopen({
attributeBindings: ['name'],
});
}
export default {
initialize,
};