mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 17:25:39 +01:00
124 lines
4.1 KiB
TypeScript
124 lines
4.1 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
'use strict';
|
|
|
|
import * as mode from './htmlMode';
|
|
|
|
import Emitter = monaco.Emitter;
|
|
import IEvent = monaco.IEvent;
|
|
import IDisposable = monaco.IDisposable;
|
|
|
|
declare var require: <T>(moduleId: [string], callback: (module: T) => void) => void;
|
|
|
|
// --- HTML configuration and defaults ---------
|
|
|
|
export class LanguageServiceDefaultsImpl implements monaco.languages.html.LanguageServiceDefaults {
|
|
|
|
private _onDidChange = new Emitter<monaco.languages.html.LanguageServiceDefaults>();
|
|
private _options: monaco.languages.html.Options;
|
|
private _languageId: string;
|
|
|
|
constructor(languageId: string, options: monaco.languages.html.Options) {
|
|
this._languageId = languageId;
|
|
this.setOptions(options);
|
|
}
|
|
|
|
get onDidChange(): IEvent<monaco.languages.html.LanguageServiceDefaults> {
|
|
return this._onDidChange.event;
|
|
}
|
|
|
|
get languageId(): string {
|
|
return this._languageId;
|
|
}
|
|
|
|
get options(): monaco.languages.html.Options {
|
|
return this._options;
|
|
}
|
|
|
|
setOptions(options: monaco.languages.html.Options): void {
|
|
this._options = options || Object.create(null);
|
|
this._onDidChange.fire(this);
|
|
}
|
|
}
|
|
|
|
const formatDefaults: monaco.languages.html.HTMLFormatConfiguration = {
|
|
tabSize: 4,
|
|
insertSpaces: false,
|
|
wrapLineLength: 120,
|
|
unformatted: 'a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var',
|
|
indentInnerHtml: false,
|
|
preserveNewLines: true,
|
|
maxPreserveNewLines: null,
|
|
indentHandlebars: false,
|
|
endWithNewline: false,
|
|
extraLiners: 'head, body, /html'
|
|
};
|
|
|
|
const htmlOptionsDefault: monaco.languages.html.Options = {
|
|
format: formatDefaults,
|
|
suggest: { html5: true, angular1: true, ionic: true }
|
|
}
|
|
|
|
const handlebarOptionsDefault: monaco.languages.html.Options = {
|
|
format: formatDefaults,
|
|
suggest: { html5: true }
|
|
}
|
|
|
|
const razorOptionsDefault: monaco.languages.html.Options = {
|
|
format: formatDefaults,
|
|
suggest: { html5: true, razor: true }
|
|
}
|
|
|
|
const htmlLanguageId = 'html';
|
|
const handlebarsLanguageId = 'handlebars';
|
|
const razorLanguageId = 'razor';
|
|
|
|
const htmlDefaults = new LanguageServiceDefaultsImpl(htmlLanguageId, htmlOptionsDefault);
|
|
const handlebarDefaults = new LanguageServiceDefaultsImpl(handlebarsLanguageId, handlebarOptionsDefault);
|
|
const razorDefaults = new LanguageServiceDefaultsImpl(razorLanguageId, razorOptionsDefault);
|
|
|
|
// Export API
|
|
function createAPI(): typeof monaco.languages.html {
|
|
return {
|
|
htmlDefaults: htmlDefaults,
|
|
razorDefaults: handlebarDefaults,
|
|
handlebarDefaults: razorDefaults
|
|
}
|
|
}
|
|
monaco.languages.html = createAPI();
|
|
|
|
// --- Registration to monaco editor ---
|
|
|
|
function withMode(callback: (module: typeof mode) => void): void {
|
|
require<typeof mode>(['vs/language/html/htmlMode'], callback);
|
|
}
|
|
|
|
monaco.languages.register({
|
|
id: htmlLanguageId,
|
|
extensions: ['.html', '.htm', '.shtml', '.xhtml', '.mdoc', '.jsp', '.asp', '.aspx', '.jshtm'],
|
|
aliases: ['HTML', 'htm', 'html', 'xhtml'],
|
|
mimetypes: ['text/html', 'text/x-jshtm', 'text/template', 'text/ng-template']
|
|
});
|
|
monaco.languages.register({
|
|
id: handlebarsLanguageId,
|
|
extensions: ['.handlebars', '.hbs'],
|
|
aliases: ['Handlebars', 'handlebars'],
|
|
mimetypes: ['text/x-handlebars-template']
|
|
});
|
|
monaco.languages.register({
|
|
id: razorLanguageId,
|
|
extensions: ['.cshtml'],
|
|
aliases: ['Razor', 'razor'],
|
|
mimetypes: ['text/x-cshtml']
|
|
});
|
|
monaco.languages.onLanguage(htmlLanguageId, () => {
|
|
withMode(mode => mode.setupMode(htmlDefaults));
|
|
});
|
|
monaco.languages.onLanguage(handlebarsLanguageId, () => {
|
|
withMode(mode => mode.setupMode(handlebarDefaults));
|
|
});
|
|
monaco.languages.onLanguage(razorLanguageId, () => {
|
|
withMode(mode => mode.setupMode(razorDefaults));
|
|
});
|