提交 81e91db4 编写于 作者: A Alex Dima

Extract emmet loading boilerplate

上级 632f218e
......@@ -22,19 +22,37 @@ interface IEmmetConfiguration {
};
}
export abstract class EmmetEditorAction extends EditorAction {
class LazyEmmet {
protected editorAccessor: EditorAccessor;
private configurationService: IConfigurationService = null;
private static _INSTANCE = new LazyEmmet();
constructor(descriptor: IEditorActionDescriptorData, editor: ICommonCodeEditor, configurationService: IConfigurationService) {
super(descriptor, editor, Behaviour.Writeable);
this.editorAccessor = new EditorAccessor(editor);
this.configurationService = configurationService;
public static withConfiguredEmmet(configurationService:IConfigurationService, callback:(_emmet: typeof emmet) => void): TPromise<void> {
return LazyEmmet._INSTANCE.withEmmetPreferences(configurationService, callback);
}
private _emmetPromise: TPromise<typeof emmet>;
constructor() {
this._emmetPromise = null;
}
public withEmmetPreferences(configurationService:IConfigurationService, callback:(_emmet: typeof emmet) => void): TPromise<void> {
return this._loadEmmet().then((_emmet: typeof emmet) => {
this._withEmmetPreferences(configurationService, _emmet, callback);
});
}
private _loadEmmet(): TPromise<typeof emmet> {
if (!this._emmetPromise) {
this._emmetPromise = new TPromise<typeof emmet>((c, e) => {
require(['emmet'], c, e);
});
}
return this._emmetPromise;
}
private updateEmmetPreferences(_emmet: typeof emmet) {
let preferences = this.configurationService.getConfiguration<IEmmetConfiguration>().emmet.preferences;
private updateEmmetPreferences(configurationService:IConfigurationService, _emmet: typeof emmet) {
let preferences = configurationService.getConfiguration<IEmmetConfiguration>().emmet.preferences;
for (let key in preferences) {
try {
_emmet.preferences.set(key, preferences[key]);
......@@ -42,13 +60,13 @@ export abstract class EmmetEditorAction extends EditorAction {
_emmet.preferences.define(key, preferences[key]);
}
}
let syntaxProfile = this.configurationService.getConfiguration<IEmmetConfiguration>().emmet.syntaxProfiles;
let syntaxProfile = configurationService.getConfiguration<IEmmetConfiguration>().emmet.syntaxProfiles;
_emmet.profile.reset();
_emmet.loadProfiles(syntaxProfile);
}
private resetEmmetPreferences(_emmet: typeof emmet) {
let preferences = this.configurationService.getConfiguration<IEmmetConfiguration>().emmet.preferences;
private resetEmmetPreferences(configurationService:IConfigurationService, _emmet: typeof emmet) {
let preferences = configurationService.getConfiguration<IEmmetConfiguration>().emmet.preferences;
for (let key in preferences) {
try {
_emmet.preferences.remove(key);
......@@ -57,43 +75,45 @@ export abstract class EmmetEditorAction extends EditorAction {
}
}
private _withEmmetPreferences(configurationService:IConfigurationService, _emmet:typeof emmet, callback:(_emmet: typeof emmet) => void): void {
try {
this.updateEmmetPreferences(configurationService, _emmet);
callback(_emmet);
} finally {
this.resetEmmetPreferences(configurationService, _emmet);
}
}
}
export abstract class EmmetEditorAction extends EditorAction {
protected editorAccessor: EditorAccessor;
private configurationService: IConfigurationService = null;
constructor(descriptor: IEditorActionDescriptorData, editor: ICommonCodeEditor, configurationService: IConfigurationService) {
super(descriptor, editor, Behaviour.Writeable);
this.editorAccessor = new EditorAccessor(editor);
this.configurationService = configurationService;
}
abstract runEmmetAction(_emmet: typeof emmet);
protected noExpansionOccurred() {
// default do nothing
}
public run(): TPromise<boolean> {
public run(): TPromise<void> {
if (!this.editorAccessor.isEmmetEnabledMode()) {
this.noExpansionOccurred();
return ;
}
return this._withEmmet().then((_emmet) => {
this._withEmmetPreferences(_emmet, () => {
this.editorAccessor.onBeforeEmmetAction();
this.runEmmetAction(_emmet);
this.editorAccessor.onAfterEmmetAction();
});
return true;
});
}
private _withEmmet(): TPromise<typeof emmet> {
return new TPromise<typeof emmet>((c, e) => {
require(['emmet'], c, e);
return LazyEmmet.withConfiguredEmmet(this.configurationService, (_emmet) => {
this.editorAccessor.onBeforeEmmetAction();
this.runEmmetAction(_emmet);
this.editorAccessor.onAfterEmmetAction();
});
}
private _withEmmetPreferences(_emmet:typeof emmet, callback:() => void): void {
try {
this.updateEmmetPreferences(_emmet);
callback();
} finally {
this.resetEmmetPreferences(_emmet);
}
}
}
export class BasicEmmetEditorAction extends EmmetEditorAction {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册