"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); const vscode = require("vscode"); const dispose_1 = require("../util/dispose"); const file_1 = require("./file"); class HTMLFileTopmostLineMonitor { constructor() { this.disposables = []; this.pendingUpdates = new Map(); this.throttle = 50; this._onDidChangeTopmostLineEmitter = new vscode.EventEmitter(); this.onDidChangeTopmostLine = this._onDidChangeTopmostLineEmitter.event; vscode.window.onDidChangeTextEditorVisibleRanges(event => { if (file_1.isHTMLFile(event.textEditor.document)) { const line = getVisibleLine(event.textEditor); if (typeof line === 'number') { this.updateLine(event.textEditor.document.uri, line); } } }, null, this.disposables); } dispose() { dispose_1.disposeAll(this.disposables); } updateLine(resource, line) { const key = resource.toString(); if (!this.pendingUpdates.has(key)) { // schedule update setTimeout(() => { if (this.pendingUpdates.has(key)) { this._onDidChangeTopmostLineEmitter.fire({ resource, line: this.pendingUpdates.get(key) }); this.pendingUpdates.delete(key); } }, this.throttle); } this.pendingUpdates.set(key, line); } } exports.HTMLFileTopmostLineMonitor = HTMLFileTopmostLineMonitor; /** * Get the top-most visible range of `editor`. * * Returns a fractional line number based the visible character within the line. * Floor to get real line number */ function getVisibleLine(editor) { if (!editor.visibleRanges.length) { return undefined; } const firstVisiblePosition = editor.visibleRanges[0].start; const lineNumber = firstVisiblePosition.line; const line = editor.document.lineAt(lineNumber); const progress = firstVisiblePosition.character / (line.text.length + 2); return lineNumber + progress; } exports.getVisibleLine = getVisibleLine;