提交 d1076741 编写于 作者: M Matt Bierner

Move show hide logic into HideableElement

上级 7da5d304
...@@ -244,29 +244,38 @@ const nlsTabFocusMode = nls.localize('tabFocusModeEnabled', "Tab Moves Focus"); ...@@ -244,29 +244,38 @@ const nlsTabFocusMode = nls.localize('tabFocusModeEnabled', "Tab Moves Focus");
const nlsScreenReaderDetected = nls.localize('screenReaderDetected', "Screen Reader Optimized"); const nlsScreenReaderDetected = nls.localize('screenReaderDetected', "Screen Reader Optimized");
const nlsScreenReaderDetectedTitle = nls.localize('screenReaderDetectedExtra', "If you are not using a Screen Reader, please change the setting `editor.accessibilitySupport` to \"off\"."); const nlsScreenReaderDetectedTitle = nls.localize('screenReaderDetectedExtra', "If you are not using a Screen Reader, please change the setting `editor.accessibilitySupport` to \"off\".");
function setDisplay(el: HTMLElement, desiredValue: string): void {
if (el.style.display !== desiredValue) { class HideableElement {
el.style.display = desiredValue; private _showing = true;
constructor(
public readonly element: HTMLElement
) { }
public show(): void { this.toggle(true); }
public hide(): void { this.toggle(false); }
public toggle(shouldShow: boolean): void {
if (shouldShow !== this._showing) {
this._showing = shouldShow;
this.element.style.display = shouldShow ? '' : 'none';
}
} }
} }
function show(el: HTMLElement): void {
setDisplay(el, '');
}
function hide(el: HTMLElement): void {
setDisplay(el, 'none');
}
export class EditorStatus implements IStatusbarItem { export class EditorStatus implements IStatusbarItem {
private state: State; private state: State;
private element: HTMLElement; private element: HTMLElement;
private tabFocusModeElement: HTMLElement; private tabFocusModeElement: HideableElement;
private screenRedearModeElement: HTMLElement; private screenRedearModeElement: HideableElement;
private indentationElement: HTMLElement; private indentationElement: HideableElement;
private selectionElement: HTMLElement; private selectionElement: HideableElement;
private encodingElement: HTMLElement; private encodingElement: HideableElement;
private eolElement: HTMLElement; private eolElement: HideableElement;
private modeElement: HTMLElement; private modeElement: HideableElement;
private metadataElement: HTMLElement; private metadataElement: HideableElement;
private toDispose: IDisposable[]; private toDispose: IDisposable[];
private activeEditorListeners: IDisposable[]; private activeEditorListeners: IDisposable[];
private delayedRender: IDisposable | null; private delayedRender: IDisposable | null;
...@@ -292,46 +301,46 @@ export class EditorStatus implements IStatusbarItem { ...@@ -292,46 +301,46 @@ export class EditorStatus implements IStatusbarItem {
render(container: HTMLElement): IDisposable { render(container: HTMLElement): IDisposable {
this.element = append(container, $('.editor-statusbar-item')); this.element = append(container, $('.editor-statusbar-item'));
this.tabFocusModeElement = append(this.element, $('a.editor-status-tabfocusmode.status-bar-info')); this.tabFocusModeElement = new HideableElement(append(this.element, $('a.editor-status-tabfocusmode.status-bar-info')));
this.tabFocusModeElement.title = nls.localize('disableTabMode', "Disable Accessibility Mode"); this.tabFocusModeElement.element.title = nls.localize('disableTabMode', "Disable Accessibility Mode");
this.tabFocusModeElement.onclick = () => this.onTabFocusModeClick(); this.tabFocusModeElement.element.onclick = () => this.onTabFocusModeClick();
this.tabFocusModeElement.textContent = nlsTabFocusMode; this.tabFocusModeElement.element.textContent = nlsTabFocusMode;
hide(this.tabFocusModeElement); this.tabFocusModeElement.hide();
this.screenRedearModeElement = append(this.element, $('a.editor-status-screenreadermode.status-bar-info')); this.screenRedearModeElement = new HideableElement(append(this.element, $('a.editor-status-screenreadermode.status-bar-info')));
this.screenRedearModeElement.textContent = nlsScreenReaderDetected; this.screenRedearModeElement.element.textContent = nlsScreenReaderDetected;
this.screenRedearModeElement.title = nlsScreenReaderDetectedTitle; this.screenRedearModeElement.element.title = nlsScreenReaderDetectedTitle;
this.screenRedearModeElement.onclick = () => this.onScreenReaderModeClick(); this.screenRedearModeElement.element.onclick = () => this.onScreenReaderModeClick();
hide(this.screenRedearModeElement); this.screenRedearModeElement.hide();
this.selectionElement = append(this.element, $('a.editor-status-selection')); this.selectionElement = new HideableElement(append(this.element, $('a.editor-status-selection')));
this.selectionElement.title = nls.localize('gotoLine', "Go to Line"); this.selectionElement.element.title = nls.localize('gotoLine', "Go to Line");
this.selectionElement.onclick = () => this.onSelectionClick(); this.selectionElement.element.onclick = () => this.onSelectionClick();
hide(this.selectionElement); this.selectionElement.hide();
this.indentationElement = append(this.element, $('a.editor-status-indentation')); this.indentationElement = new HideableElement(append(this.element, $('a.editor-status-indentation')));
this.indentationElement.title = nls.localize('selectIndentation', "Select Indentation"); this.indentationElement.element.title = nls.localize('selectIndentation', "Select Indentation");
this.indentationElement.onclick = () => this.onIndentationClick(); this.indentationElement.element.onclick = () => this.onIndentationClick();
hide(this.indentationElement); this.indentationElement.hide();
this.encodingElement = append(this.element, $('a.editor-status-encoding')); this.encodingElement = new HideableElement(append(this.element, $('a.editor-status-encoding')));
this.encodingElement.title = nls.localize('selectEncoding', "Select Encoding"); this.encodingElement.element.title = nls.localize('selectEncoding', "Select Encoding");
this.encodingElement.onclick = () => this.onEncodingClick(); this.encodingElement.element.onclick = () => this.onEncodingClick();
hide(this.encodingElement); this.encodingElement.hide();
this.eolElement = append(this.element, $('a.editor-status-eol')); this.eolElement = new HideableElement(append(this.element, $('a.editor-status-eol')));
this.eolElement.title = nls.localize('selectEOL', "Select End of Line Sequence"); this.eolElement.element.title = nls.localize('selectEOL', "Select End of Line Sequence");
this.eolElement.onclick = () => this.onEOLClick(); this.eolElement.element.onclick = () => this.onEOLClick();
hide(this.eolElement); this.eolElement.hide();
this.modeElement = append(this.element, $('a.editor-status-mode')); this.modeElement = new HideableElement(append(this.element, $('a.editor-status-mode')));
this.modeElement.title = nls.localize('selectLanguageMode', "Select Language Mode"); this.modeElement.element.title = nls.localize('selectLanguageMode', "Select Language Mode");
this.modeElement.onclick = () => this.onModeClick(); this.modeElement.element.onclick = () => this.onModeClick();
hide(this.modeElement); this.modeElement.hide();
this.metadataElement = append(this.element, $('span.editor-status-metadata')); this.metadataElement = new HideableElement(append(this.element, $('span.editor-status-metadata')));
this.metadataElement.title = nls.localize('fileInfo', "File Information"); this.metadataElement.element.title = nls.localize('fileInfo', "File Information");
hide(this.metadataElement); this.metadataElement.hide();
this.delayedRender = null; this.delayedRender = null;
this.toRender = null; this.toRender = null;
...@@ -378,72 +387,64 @@ export class EditorStatus implements IStatusbarItem { ...@@ -378,72 +387,64 @@ export class EditorStatus implements IStatusbarItem {
private _renderNow(changed: StateChange): void { private _renderNow(changed: StateChange): void {
if (changed.tabFocusMode) { if (changed.tabFocusMode) {
if (this.state.tabFocusMode && this.state.tabFocusMode === true) { this.tabFocusModeElement.toggle(!!this.state.tabFocusMode);
show(this.tabFocusModeElement);
} else {
hide(this.tabFocusModeElement);
}
} }
if (changed.screenReaderMode) { if (changed.screenReaderMode) {
if (this.state.screenReaderMode && this.state.screenReaderMode === true) { this.screenRedearModeElement.toggle(!!this.state.screenReaderMode);
show(this.screenRedearModeElement);
} else {
hide(this.screenRedearModeElement);
}
} }
if (changed.indentation) { if (changed.indentation) {
if (this.state.indentation) { if (this.state.indentation) {
this.indentationElement.textContent = this.state.indentation; this.indentationElement.element.textContent = this.state.indentation;
show(this.indentationElement); this.indentationElement.show();
} else { } else {
hide(this.indentationElement); this.indentationElement.hide();
} }
} }
if (changed.selectionStatus) { if (changed.selectionStatus) {
if (this.state.selectionStatus && !this.state.screenReaderMode) { if (this.state.selectionStatus && !this.state.screenReaderMode) {
this.selectionElement.textContent = this.state.selectionStatus; this.selectionElement.element.textContent = this.state.selectionStatus;
show(this.selectionElement); this.selectionElement.show();
} else { } else {
hide(this.selectionElement); this.selectionElement.hide();
} }
} }
if (changed.encoding) { if (changed.encoding) {
if (this.state.encoding) { if (this.state.encoding) {
this.encodingElement.textContent = this.state.encoding; this.encodingElement.element.textContent = this.state.encoding;
show(this.encodingElement); this.encodingElement.show();
} else { } else {
hide(this.encodingElement); this.encodingElement.hide();
} }
} }
if (changed.EOL) { if (changed.EOL) {
if (this.state.EOL) { if (this.state.EOL) {
this.eolElement.textContent = this.state.EOL === '\r\n' ? nlsEOLCRLF : nlsEOLLF; this.eolElement.element.textContent = this.state.EOL === '\r\n' ? nlsEOLCRLF : nlsEOLLF;
show(this.eolElement); this.eolElement.show();
} else { } else {
hide(this.eolElement); this.eolElement.hide();
} }
} }
if (changed.mode) { if (changed.mode) {
if (this.state.mode) { if (this.state.mode) {
this.modeElement.textContent = this.state.mode; this.modeElement.element.textContent = this.state.mode;
show(this.modeElement); this.modeElement.show();
} else { } else {
hide(this.modeElement); this.modeElement.hide();
} }
} }
if (changed.metadata) { if (changed.metadata) {
if (this.state.metadata) { if (this.state.metadata) {
this.metadataElement.textContent = this.state.metadata; this.metadataElement.element.textContent = this.state.metadata;
show(this.metadataElement); this.metadataElement.show();
} else { } else {
hide(this.metadataElement); this.metadataElement.hide();
} }
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册