提交 742fb528 编写于 作者: C Christof Marti

Fit watermark into code org (fixes #13069)

上级 809cef10
......@@ -230,6 +230,10 @@ export class TestPartService implements IPartService {
return true;
}
public getContainer(part): HTMLElement {
return null;
}
public isStatusBarHidden(): boolean {
return false;
}
......
......@@ -74,7 +74,6 @@ import {MenuService} from 'vs/platform/actions/common/menuService';
import {IContextMenuService} from 'vs/platform/contextview/browser/contextView';
import {IEnvironmentService} from 'vs/platform/environment/common/environment';
import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry';
import * as watermark from 'vs/workbench/parts/watermark/watermark';
export const MessagesVisibleContext = new RawContextKey<boolean>('globalMessageVisible', false);
export const EditorsVisibleContext = new RawContextKey<boolean>('editorIsOpen', false);
......@@ -470,6 +469,11 @@ export class Workbench implements IPartService {
return false;
}
const container = this.getContainer(part);
return DOM.isAncestor(activeElement, container);
}
public getContainer(part: Parts): HTMLElement {
let container: Builder = null;
switch (part) {
case Parts.ACTIVITYBAR_PART:
......@@ -488,8 +492,7 @@ export class Workbench implements IPartService {
container = this.statusbarPart.getContainer();
break;
}
return DOM.isAncestor(activeElement, container.getHTMLElement());
return container && container.getHTMLElement();
}
public isVisible(part: Parts): boolean {
......@@ -783,10 +786,6 @@ export class Workbench implements IPartService {
role: 'main'
});
if (this.telemetryService.getExperiments().showCommandsWatermark) {
this.toDispose.push(watermark.create(editorContainer, this.keybindingService));
}
this.editorPart.create(editorContainer);
}
......
......@@ -5,10 +5,16 @@
'use strict';
import 'vs/css!./watermark';
import {Builder, $} from 'vs/base/browser/builder';
import {IDisposable} from 'vs/base/common/lifecycle';
import {IKeybindingService} from 'vs/platform/keybinding/common/keybinding';
import { $ } from 'vs/base/browser/builder';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import * as nls from 'vs/nls';
import { Parts, IPartService } from 'vs/workbench/services/part/common/partService';
import { Registry } from 'vs/platform/platform';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
const entries = [
{
......@@ -35,28 +41,61 @@ const entries = [
const UNBOUND = nls.localize('watermark.unboundCommand', "unbound");
export function create(container: Builder, keybindingService: IKeybindingService): IDisposable {
const watermark = $(container)
.addClass('has-watermark')
.div({ 'class': 'watermark' });
const box = $(watermark)
.div({ 'class': 'watermark-box' });
function update() {
const builder = $(box);
builder.clearChildren();
entries.map(entry => {
builder.element('dl', {}, dl => {
dl.element('dt', {}, dt => dt.text(entry.text));
dl.element('dd', {}, dd => dd.innerHtml(
entry.ids
.map(id => keybindingService.lookupKeybindings(id).slice(0, 1)
.map(k => `<span class="shortcuts">${keybindingService.getLabelFor(k)}</span>`)
.join('') || UNBOUND)
.join(' / ')
));
export class WatermarkContribution implements IWorkbenchContribution {
private toDispose: IDisposable[] = [];
constructor(
@ILifecycleService lifecycleService: ILifecycleService,
@IPartService private partService: IPartService,
@IKeybindingService private keybindingService: IKeybindingService,
@ITelemetryService telemetryService: ITelemetryService
) {
if (telemetryService.getExperiments().showCommandsWatermark) {
lifecycleService.onShutdown(this.dispose, this);
this.partService.joinCreation().then(() => {
this.create();
});
}
}
public getId() {
return 'vs.watermark';
}
private create(): void {
const container = this.partService.getContainer(Parts.EDITOR_PART);
const watermark = $()
.div({ 'class': 'watermark' });
const box = $(watermark)
.div({ 'class': 'watermark-box' });
const update = () => {
const builder = $(box);
builder.clearChildren();
entries.map(entry => {
builder.element('dl', {}, dl => {
dl.element('dt', {}, dt => dt.text(entry.text));
dl.element('dd', {}, dd => dd.innerHtml(
entry.ids
.map(id => this.keybindingService.lookupKeybindings(id).slice(0, 1)
.map(k => `<span class="shortcuts">${this.keybindingService.getLabelFor(k)}</span>`)
.join('') || UNBOUND)
.join(' / ')
));
});
});
});
};
update();
watermark.build(container, 0);
$(container)
.addClass('has-watermark');
this.toDispose.push(this.keybindingService.onDidUpdateKeybindings(update));
}
public dispose(): void {
this.toDispose = dispose(this.toDispose);
}
update();
return keybindingService.onDidUpdateKeybindings(update);
}
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench)
.registerWorkbenchContribution(WatermarkContribution);
......@@ -45,6 +45,11 @@ export interface IPartService {
*/
hasFocus(part: Parts): boolean;
/**
* Returns the parts HTML element, if there is one.
*/
getContainer(part: Parts): HTMLElement;
/**
* Returns iff the part is visible.
*/
......
......@@ -93,3 +93,5 @@ import 'vs/workbench/electron-browser/main.contribution';
import 'vs/workbench/electron-browser/main';
import 'vs/workbench/parts/themes/test/electron-browser/themes.test.contribution';
import 'vs/workbench/parts/watermark/browser/watermark';
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册