From 0bbe2882adce129a97f4ad7b335703151a56bf65 Mon Sep 17 00:00:00 2001 From: Charly Koch Date: Wed, 16 Jul 2025 18:56:44 +0200 Subject: [PATCH 1/3] chore: add screenshot --- assets/screenshots/small-promo-tile-440-280.png | Bin 0 -> 63236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/screenshots/small-promo-tile-440-280.png diff --git a/assets/screenshots/small-promo-tile-440-280.png b/assets/screenshots/small-promo-tile-440-280.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c544fe149cb40bb018f728cadcbdc851cb68f1 GIT binary patch literal 63236 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�)PAzLTyb32GOxcxz-gLBBpl}SnR9&h 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 HVZi?Ymlv=C literal 0 HcmV?d00001 From fb8bc7644e3eeddfd964e0f79b0d19288924c833 Mon Sep 17 00:00:00 2001 From: Charly Koch Date: Wed, 16 Jul 2025 18:57:38 +0200 Subject: [PATCH 2/3] feat: add support for .feature files as gherkin --- content_script.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/content_script.js b/content_script.js index b66ff6a..779b8cf 100644 --- a/content_script.js +++ b/content_script.js @@ -1,10 +1,11 @@ // Helper to map file extensions to Prism language aliases https://prismjs.com/#supported-languages const filePatternToLanguage = { - '*.csproj': 'markup', - 'directory.build.props': 'markup', - 'directory.build.targets': 'markup', - 'directory.packages.props': 'markup', - 'nuget.config': 'markup', + '*.csproj': 'markup', + 'directory.build.props': 'markup', + 'directory.build.targets': 'markup', + 'directory.packages.props': 'markup', + 'nuget.config': 'markup', + '*.feature': 'gherkin' }; function getLanguageFromFileName(fileName) { From 771b95d44e5829459f7c295d8639906b3d74960d Mon Sep 17 00:00:00 2001 From: Charly Koch Date: Wed, 16 Jul 2025 18:58:39 +0200 Subject: [PATCH 3/3] fix: avoid highlight non-code elements such as plus minus signs --- content_script.js | 217 +++++++++++++++++++++++++--------------------- manifest.json | 2 +- 2 files changed, 117 insertions(+), 102 deletions(-) diff --git a/content_script.js b/content_script.js index 779b8cf..6c198a0 100644 --- a/content_script.js +++ b/content_script.js @@ -9,93 +9,113 @@ const filePatternToLanguage = { }; function getLanguageFromFileName(fileName) { - if (!fileName) return null; - const lowerFileName = fileName.toLowerCase(); - - for (const [pattern, value] of Object.entries(filePatternToLanguage)) { - const regexPattern = pattern - .replace(/\./g, '\\.') - .replace(/\*/g, '.*'); - const regex = new RegExp(`^${regexPattern}$`); - - if (regex.test(lowerFileName)) { - return value; - } + if (!fileName) return null; + const lowerFileName = fileName.toLowerCase(); + + for (const [pattern, value] of Object.entries(filePatternToLanguage)) { + const regexPattern = pattern + .replace(/\./g, '\\.') + .replace(/\*/g, '.*'); + const regex = new RegExp(`^${regexPattern}$`); + + if (regex.test(lowerFileName)) { + return value; } - - const extension = lowerFileName.substring(lowerFileName.lastIndexOf('.') + 1); - return extension || null; + } + + const extension = lowerFileName.substring(lowerFileName.lastIndexOf('.') + 1); + return extension || null; } let theme = ""; function getTheme(element) { - if (theme) return theme; - const color = window.getComputedStyle(element).color; - - // Extract RGB components - const rgb = color.match(/\d+/g).map(Number); - let [r, g, b] = rgb; - - // Convert to relative luminance (sRGB) - [r, g, b] = [r, g, b].map((c) => { - c /= 255; - return c <= 0.03928 - ? c / 12.92 - : Math.pow((c + 0.055) / 1.055, 2.4); - }); - - const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b; - - theme = luminance > 0.5 ? 'prismjs-tomorrow-night' : 'prism-one-light'; - return theme; + if (theme) return theme; + const color = window.getComputedStyle(element).color; + + // Extract RGB components + const rgb = color.match(/\d+/g).map(Number); + let [r, g, b] = rgb; + + // Convert to relative luminance (sRGB) + [r, g, b] = [r, g, b].map((c) => { + c /= 255; + return c <= 0.03928 + ? c / 12.92 + : Math.pow((c + 0.055) / 1.055, 2.4); + }); + + const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b; + + theme = luminance > 0.5 ? 'prismjs-tomorrow-night' : 'prism-one-light'; + return theme; } function processFileDiff(fileDiffElement) { - let fileNameElement = fileDiffElement.querySelector('.repos-change-summary-file-icon-container + .flex-column .text-ellipsis'); - - const fileName = fileNameElement ? fileNameElement.textContent.trim() : null; - const language = getLanguageFromFileName(fileName); - - let originalLineElements = fileDiffElement.querySelectorAll('.monospaced-text > .repos-line-content'); - - originalLineElements.forEach(originalLineElement => { - if (!originalLineElement.classList.contains('ado-syntax-highlighted')) { - const highlightedLine = originalLineElement.cloneNode(true); - - const code = document.createElement('code'); // Temporary element - code.className = `language-${language}`; - code.innerHTML = highlightedLine.innerHTML; - Prism.highlightElement(code, false, () => { - const contentDiv = document.createElement('div'); - contentDiv.innerHTML = code.innerHTML; - contentDiv.classList.add(getTheme(originalLineElement)); - highlightedLine.innerHTML = ''; - highlightedLine.appendChild(contentDiv); - highlightedLine.classList.add('ado-syntax-highlighted'); - - // Hide the original line. - // This is a hack to make the line comment button functional. Otherwise it breaks. - originalLineElement.style.display = 'none'; - - // Insert the highlighted version after the original - originalLineElement.parentNode.insertBefore(highlightedLine, originalLineElement.nextSibling) - }); - } - }); + if (fileDiffElement.querySelector('.ado-syntax-highlighted')) { + return; + } + + let fileNameElement = fileDiffElement.querySelector('.repos-change-summary-file-icon-container + .flex-column .text-ellipsis'); + + const fileName = fileNameElement ? fileNameElement.textContent.trim() : null; + const language = getLanguageFromFileName(fileName); + + let originalLineElements = fileDiffElement.querySelectorAll('.monospaced-text > .repos-line-content'); + + originalLineElements.forEach(originalLineElement => { + if (!originalLineElement.classList.contains('ado-syntax-highlighted')) { + + const elementsToPreserve = []; + const nonCodeQuery = '.screen-reader-only, span[aria-hidden="true"]'; + originalLineElement.querySelectorAll(nonCodeQuery).forEach(el => { + elementsToPreserve.push(el.cloneNode(true)); + }); + + const codeContainer = originalLineElement.cloneNode(true); + codeContainer.querySelectorAll(nonCodeQuery).forEach(el => el.remove()); + const codeToHighlight = codeContainer.innerHTML; + + const highlightedLine = originalLineElement.cloneNode(true); + + const code = document.createElement('code'); // Temporary element + code.className = `language-${language}`; + code.innerHTML = codeToHighlight; + Prism.highlightElement(code, false, () => { + const contentDiv = document.createElement('div'); + contentDiv.innerHTML = code.innerHTML; + contentDiv.classList.add(getTheme(originalLineElement)); + highlightedLine.innerHTML = ''; + + elementsToPreserve.forEach(el => { + highlightedLine.appendChild(el); + }); + + highlightedLine.appendChild(contentDiv); + highlightedLine.classList.add('ado-syntax-highlighted'); + + // Hide the original line. + // This is a hack to make the line comment button functional. Otherwise it breaks. + originalLineElement.style.display = 'none'; + + // Insert the highlighted version after the original + originalLineElement.parentNode.insertBefore(highlightedLine, originalLineElement.nextSibling) + }); + } + }); } function applySyntaxHighlighting() { - // Only apply highlighting if we're on a PR page - if (!window.location.href.includes('/_git/') || !window.location.href.includes('/pullrequest/')) { - return; - } + // Only apply highlighting if we're on a PR page + if (!window.location.href.includes('/_git/') || !window.location.href.includes('/pullrequest/')) { + return; + } - console.log("ADO Syntax Highlighter: Applying..."); + console.log("ADO Syntax Highlighter: Applying..."); - const fileDiffPanels = document.querySelectorAll('.repos-summary-header'); - fileDiffPanels.forEach(fileDiffPanel => { - processFileDiff(fileDiffPanel); - }); + const fileDiffPanels = document.querySelectorAll('.repos-summary-header'); + fileDiffPanels.forEach(fileDiffPanel => { + processFileDiff(fileDiffPanel); + }); } console.log("ADO Syntax Highlighter: Content script loaded."); @@ -104,41 +124,36 @@ console.log("ADO Syntax Highlighter: Content script loaded."); applySyntaxHighlighting(); function debounce(func, wait) { - let timeout; - return function executedFunction(...args) { - const later = () => { - clearTimeout(timeout); - func(...args); - }; - clearTimeout(timeout); - timeout = setTimeout(later, wait); + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; } -const debouncedApplyHighlighting = debounce(applySyntaxHighlighting, 500); +const debouncedApplyHighlighting = debounce(applySyntaxHighlighting, 250); // Listen for URL changes window.addEventListener('popstate', debouncedApplyHighlighting); // Observe DOM changes for dynamically loaded content new MutationObserver((mutationsList) => { - for (const mutation of mutationsList) { - if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { - let needsHighlighting = false; - mutation.addedNodes.forEach(node => { - if (node.nodeType === Node.ELEMENT_NODE) { - if (node.matches?.('.repos-summary-code-diff, .vc-diff-viewer, .diff-frame, .repos-diff-contents-row, .bolt-card, .repos-pr-iteration-file-header')) { - needsHighlighting = true; - } - if (node.querySelector?.('.repos-summary-code-diff, .vc-diff-viewer, .diff-frame, .repos-diff-contents-row, .bolt-card, .repos-pr-iteration-file-header')) { - needsHighlighting = true; - } - } - }); - - if (needsHighlighting) { - debouncedApplyHighlighting(); - break; - } + for (const mutation of mutationsList) { + if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { + for (const node of mutation.addedNodes) { + if (node.nodeType === Node.ELEMENT_NODE) { + if ( + node.matches?.('.repos-summary-code-diff, .vc-diff-viewer, .diff-frame, .repos-diff-contents-row, .bolt-card, .repos-pr-iteration-file-header') || + node.querySelector?.('.repos-summary-code-diff, .vc-diff-viewer, .diff-frame, .repos-diff-contents-row, .bolt-card, .repos-pr-iteration-file-header') + ) { + debouncedApplyHighlighting(); + return; + } } + } } + } }).observe(document.body, { childList: true, subtree: true }); diff --git a/manifest.json b/manifest.json index b34f38a..9c91693 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/chrome-manifest", "manifest_version": 3, "name": "Azure DevOps PR Syntax Highlighter", - "version": "0.1.0", + "version": "0.1.1", "description": "Adds syntax highlighting to partial file diffs in Azure DevOps Pull Requests.", "icons": { "16": "assets/icons/icon16.png",