mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-23 18:19:12 +01:00
toggle comment across html nodes #27629
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { getNode, isStyleSheet } from './util';
|
||||
import { getNode, isStyleSheet, getNodesInBetween } from './util';
|
||||
import parse from '@emmetio/html-matcher';
|
||||
import parseStylesheet from '@emmetio/css-parser';
|
||||
import Node from '@emmetio/node';
|
||||
@@ -58,19 +58,29 @@ export function toggleComment() {
|
||||
}
|
||||
|
||||
function toggleCommentHTML(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): [vscode.Range[], vscode.Position, vscode.Position] {
|
||||
let offset = document.offsetAt(selection.start);
|
||||
let nodeToUpdate = getNode(rootNode, offset);
|
||||
if (!nodeToUpdate) {
|
||||
const selectionStart = document.offsetAt(selection.isReversed ? selection.active : selection.anchor);
|
||||
const selectionEnd = document.offsetAt(selection.isReversed ? selection.anchor : selection.active);
|
||||
|
||||
let startNode = getNode(rootNode, selectionStart, true);
|
||||
let endNode = getNode(rootNode, selectionEnd, true);
|
||||
|
||||
if (!startNode || !endNode) {
|
||||
return [[], null, null];
|
||||
}
|
||||
|
||||
let rangesToUnComment = getRangesToUnCommentHTML(nodeToUpdate, document);
|
||||
if (nodeToUpdate.type === 'comment') {
|
||||
let allNodes: Node[] = getNodesInBetween(startNode, endNode);
|
||||
let rangesToUnComment: vscode.Range[] = [];
|
||||
|
||||
allNodes.forEach(node => {
|
||||
rangesToUnComment = rangesToUnComment.concat(getRangesToUnCommentHTML(node, document));
|
||||
});
|
||||
|
||||
if (startNode.type === 'comment') {
|
||||
return [rangesToUnComment, null, null];
|
||||
}
|
||||
|
||||
let positionForCommentStart = document.positionAt(nodeToUpdate.start);
|
||||
let positionForCommentEnd = document.positionAt(nodeToUpdate.end);
|
||||
let positionForCommentStart = document.positionAt(allNodes[0].start);
|
||||
let positionForCommentEnd = document.positionAt(allNodes[allNodes.length - 1].end);
|
||||
return [rangesToUnComment, positionForCommentStart, positionForCommentEnd];
|
||||
}
|
||||
|
||||
@@ -95,8 +105,8 @@ function getRangesToUnCommentHTML(node: Node, document: vscode.TextDocument): vs
|
||||
|
||||
function toggleCommentStylesheet(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): [vscode.Range[], vscode.Position, vscode.Position] {
|
||||
|
||||
let selectionStart = document.offsetAt(selection.anchor);
|
||||
let selectionEnd = document.offsetAt(selection.active);
|
||||
const selectionStart = document.offsetAt(selection.isReversed ? selection.active : selection.anchor);
|
||||
const selectionEnd = document.offsetAt(selection.isReversed ? selection.anchor : selection.active);
|
||||
|
||||
// If current node is commented, then uncomment and return
|
||||
let rangesToUnComment = getRangesToUnCommentStylesheet(rootNode, selectionStart, selectionEnd, document, true);
|
||||
|
||||
Reference in New Issue
Block a user