提交 cfca250b 编写于 作者: J Johannes Rieken

HTML editor input and preview command

上级 40aca7b5
......@@ -5,6 +5,7 @@
'use strict';
import {Registry} from 'vs/platform/platform';
import URI from 'vs/base/common/uri';
import nls = require('vs/nls');
import {Promise} from 'vs/base/common/winjs.base';
import {IWorkspaceContextService} from 'vs/platform/workspace/common/workspace';
......@@ -15,7 +16,8 @@ import {StringEditor} from 'vs/workbench/browser/parts/editor/stringEditor';
import {DiffEditorInput} from 'vs/workbench/common/editor/diffEditorInput';
import {UntitledEditorInput} from 'vs/workbench/common/editor/untitledEditorInput';
import {ResourceEditorInput} from 'vs/workbench/common/editor/resourceEditorInput';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {HtmlEditorInput} from 'vs/workbench/common/editor/htmlEditorInput';
import {IInstantiationService, ServicesAccessor} from 'vs/platform/instantiation/common/instantiation';
import {TextDiffEditor} from 'vs/workbench/browser/parts/editor/textDiffEditor';
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import {BinaryResourceDiffEditor} from 'vs/workbench/browser/parts/editor/binaryDiffEditor';
......@@ -27,6 +29,7 @@ import {Scope, IActionBarRegistry, Extensions as ActionBarExtensions, ActionBarC
import {SyncActionDescriptor} from 'vs/platform/actions/common/actions';
import {SyncDescriptor} from 'vs/platform/instantiation/common/descriptors';
import {KeyMod, KeyCode} from 'vs/base/common/keyCodes';
import {KeybindingsRegistry} from 'vs/platform/keybinding/common/keybindingsRegistry';
// Register String Editor
(<IEditorRegistry>Registry.as(EditorExtensions.Editors)).registerEditor(
......@@ -148,4 +151,25 @@ class IFrameEditorActionContributor extends EditorInputActionContributor {
}
// Contribute to IFrame Editor Inputs
actionBarRegistry.registerActionBarContributor(Scope.EDITOR, IFrameEditorActionContributor);
\ No newline at end of file
actionBarRegistry.registerActionBarContributor(Scope.EDITOR, IFrameEditorActionContributor);
// Register Commands
KeybindingsRegistry.registerCommandDesc({
id: 'workbench.html.preview',
weight: KeybindingsRegistry.WEIGHT.workbenchContrib(0),
description: {
description: 'Preview an html document.',
args: [{ name: 'uri', description: 'Uri of the document to preview.', constraint: URI }]
},
handler(accessor: ServicesAccessor, args: [URI]) {
let [resource] = args;
let name = resource.fsPath;
let input = accessor.get(IInstantiationService).createInstance(HtmlEditorInput, resource, name, undefined);
return accessor.get(IWorkbenchEditorService).openEditor(input)
.then(editor => true);
},
context: undefined,
primary: undefined
});
/*---------------------------------------------------------------------------------------------
* 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 {TPromise} from 'vs/base/common/winjs.base';
import URI from 'vs/base/common/uri';
import {IEditorService} from 'vs/platform/editor/common/editor';
import {IModelService} from 'vs/editor/common/services/modelService';
import {IFrameEditorInput} from 'vs/workbench/common/editor/iframeEditorInput';
import {IFrameEditorModel} from 'vs/workbench/common/editor/iframeEditorModel';
export class HtmlEditorInput extends IFrameEditorInput {
private _editorService: IEditorService;
private _modelService: IModelService;
constructor(resource: URI, name: string, description: string,
@IEditorService editorService: IEditorService,
@IModelService modelService: IModelService
) {
super(resource, name, description);
this._editorService = editorService;
this._modelService = modelService;
}
public resolve(refresh?: boolean): TPromise<IFrameEditorModel> {
return this._editorService.resolveEditorModel({ resource: this.getResource() }).then(model => {
if (!this._modelService.getModel(this.getResource())) {
throw new Error('Cannot load content for: ' + this.getResource());
}
return super.resolve(refresh);
});
}
protected createModel(): IFrameEditorModel {
// todo@joh check mode?
// todo@joh listen to model changes!
const model = this._modelService.getModel(this.getResource());
const result = new IFrameEditorModel(this.getResource());
result.setContents('', model.getValue(), ''); // change this
return result;
}
public createNew(resource: URI): IFrameEditorInput {
return;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册