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

Extract emmet loading boilerplate

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