From 92fc3dd021a72c57005513b81f417e7cbab7d646 Mon Sep 17 00:00:00 2001 From: Sage Vaillancourt Date: Thu, 2 Feb 2023 14:36:40 -0500 Subject: [PATCH] Now a bitbucket addon. Performs some simple UI enhancements. --- Makefile | 4 +- background.js | 38 ++++----------- backtick-comments.js | 107 +++++++++++++++++++++++++++++++++++++++++++ csharp-quotes.js | 17 +++++++ img/icon128.png | Bin 7705 -> 25573 bytes img/icon48.png | Bin 2574 -> 16009 bytes manifest.json | 34 ++++++++++---- utils.js | 13 ++++++ var-highlighter.js | 89 +++++++++++++++++++++++++++++++++++ 9 files changed, 260 insertions(+), 42 deletions(-) create mode 100644 backtick-comments.js create mode 100644 csharp-quotes.js create mode 100644 utils.js create mode 100644 var-highlighter.js diff --git a/Makefile b/Makefile index 2bd591f..ad9ac9c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -old-reddit-redirect.zip: *.json *.js img/* *.md *.txt - zip -r old-reddit-redirect.zip * -x .git/* -x img/screenshot.png -x .gitignore -x Makefile +bitbucket-fork-redirect.zip: *.json *.js img/* *.md *.txt + zip -r bitbucket-fork-redirect.zip * -x .git/* -x img/screenshot.png -x .gitignore -x Makefile clean: rm *.zip diff --git a/background.js b/background.js index abb306e..5c2efac 100644 --- a/background.js +++ b/background.js @@ -1,36 +1,14 @@ -const oldReddit = "https://old.reddit.com"; -const excludedPaths = [ - "/poll", - "/rpan", - "/settings", - "/topics", - "/community-points", -]; +chrome.webRequest.onBeforeRequest.addListener(details => { + const url = new URL(details.url) -chrome.webRequest.onBeforeRequest.addListener( - function (details) { - const url = new URL(details.url); + if (url.hostname !== "git.add123.com") return + if (!url.pathname.endsWith("plugins/servlet/search")) return + if (details.url.includes("fork:") || details.url.includes("fork%3A")) return - if (url.hostname === "old.reddit.com") return; - - for (const path of excludedPaths) { - if (url.pathname.indexOf(path) === 0) return; - } - - if (url.pathname.indexOf("/gallery") === 0) { - return { redirectUrl: oldReddit + '/comments' + url.pathname.slice("/gallery".length) }; - } - - return { redirectUrl: oldReddit + url.pathname + url.search + url.hash }; + return { redirectUrl: `${details.url}%20fork%3Afalse` } }, { - urls: [ - "*://reddit.com/*", - "*://www.reddit.com/*", - "*://np.reddit.com/*", - "*://amp.reddit.com/*", - "*://i.reddit.com/*", - ], + urls: [ "https://git.add123.com/*" ], types: [ "main_frame", "sub_frame", @@ -43,4 +21,4 @@ chrome.webRequest.onBeforeRequest.addListener( ], }, ["blocking"] -); +) diff --git a/backtick-comments.js b/backtick-comments.js new file mode 100644 index 0000000..2c66728 --- /dev/null +++ b/backtick-comments.js @@ -0,0 +1,107 @@ +const jsKeywords = new Set([ + "abstract", "arguments", "await*", "boolean", "break", "byte", "case", + "catch", "char", "class*", "const", "continue", "debugger", "default", + "delete", "do", "double", "else", "enum*", "eval", "export*", "extends*", + "false", "final", "finally", "float", "for", "function", "goto", "if", + "implements", "import*", "in", "instanceof", "int", "interface", "let*", + "long", "native", "new", "null", "package", "private", "protected", "public", + "return", "short", "static", "super*", "switch", "synchronized", "this", + "throw", "throws", "transient", "true", "try", "typeof", "var", "void", + "volatile", "while", "with", "yield" +]) + +const csKeywords = new Set([ + "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", + "checked", "class", "const", "continue", "decimal", "default", "delegate", + "do", "double", "else", "enum", "event", "explicit", "extern", "false", + "finally", "fixed", "float", "for", "foreach", "goto", "if", "implicit", + "in", "int", "interface", "internal", "is", "lock", "long", "namespace", + "new", "null", "object", "operator", "out", "override", "params", "private", + "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", + "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", + "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", + "unsafe", "ushort", "using", "virtual", "void", "volatile", "while", +]) + +const javaKeywords = new Set([ + "abstract", "continue", "for", "new", "switch", "assert", "default", + "goto", "package", "synchronized", "boolean", "do", "if", "private", + "this", "break", "double", "implements", "protected", "throw", "byte", + "else", "import", "public", "throws", "case", "enum", "instanceof", + "return", "transient", "catch", "extends", "int", "short", "try", "char", + "final", "interface", "static", "void", "class", "finally", "long", + "strictfp", "volatile", "const", "float", "native", "super", "while", +]) + +const keywordMap = { + js: jsKeywords, + mjs: jsKeywords, + java: javaKeywords, + cs: csKeywords, + none: new Set() +} + + +const bookendedWith = (text, bookend) => text.startsWith(bookend) && text.endsWith(bookend) + +const getClass = (text, keywords) => { + if (keywords.has(text)) { + return 'hl-keyword' + } + + if (bookendedWith(text, '"')) { + return 'hl-string' + } + + return 'hl-variable' +} + +const getKeywords = () => keywordMap[getFileName().replace(/.*\./g, '')] || keywordMap.none + +const commentSpan = innerText => { + const span = document.createElement('span') + span.innerText = innerText + span.classList.add('hl-comment') + return span +} + +const colorCodeInComment = (codeStart = '`', codeEnd) => { + codeEnd ??= codeStart + const processed = new Set() + const keywords = getKeywords() + getClassNameElementsArray('hl-comment').forEach(element => { + if (!element.innerText?.startsWith(codeStart) || processed.has(element)) { + return + } + const codeStartElement = commentSpan(codeStart) + element.replaceWith(codeStartElement, element) + element.innerText = element.innerText.replace(codeStart, '') + while (element) { + if (!element.classList.contains('hl-comment')) { + break + } + processed.add(element) + element.classList.remove('hl-comment') + const text = element.innerText.replaceAll(codeStart, '').replaceAll(codeEnd, '') + element.classList.add(getClass(text, keywords)) + const codeEndIndex = element.innerText.indexOf(codeEnd) + if (codeEndIndex > -1) { + const codeEndElement = commentSpan(element.innerText.substring(codeEndIndex)) + element.innerText = element.innerText.substring(0, codeEndIndex) + element.replaceWith(element, codeEndElement) + break + } + element = element.nextElementSibling + } + }) +} + +const commentCodeFix = () => { + colorCodeInComment('`', '`') + colorCodeInComment('', '') + colorCodeInComment('
', '
') + colorCodeInComment('', '') +} + + +addFix(commentCodeFix) diff --git a/csharp-quotes.js b/csharp-quotes.js new file mode 100644 index 0000000..506dbe2 --- /dev/null +++ b/csharp-quotes.js @@ -0,0 +1,17 @@ +const fixCSharpStrings = () => { + const hasCSharpFileName = getFileName().endsWith('.cs') + if (!hasCSharpFileName) { + return + } + getClassNameElementsArray('hl-string') + .filter(e => e.innerText.includes('@"') || e.innerText.includes('@$""')) + .forEach(e => { + const s = e.innerHTML + const firstQuote = s.indexOf('"') + 1 + const spanned = s.substring(firstQuote, s.length - 1).replaceAll('""', '""') + e.innerHTML = s.substring(0, firstQuote) + spanned + '"' + }) +} + + +addFix(fixCSharpStrings) diff --git a/img/icon128.png b/img/icon128.png index e999360b85e738366a33b8ccbaec31712e343dd3..a4e1bfa7b9eabe3e1917a05b874c3d629e3ee5f2 100644 GIT binary patch literal 25573 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 literal 7705 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 Ty)Y;X00000NkvXXu0mjfcn_oQ diff --git a/img/icon48.png b/img/icon48.png index b1452a86cd4b80aa936f66c2c89d2b32a9775256..7c7baebbb6be6fcdf870d192b921ea60a0f03c06 100644 GIT binary patch literal 16009 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
H(WYCm_WXIT>qA!d%S zZhzpLjv&#=`)V_V*>qQ>PMuRSqRt^`r#VmoN+o17_6c`5jy4>pw+9kV$xgpyeU&;> z%3luzfLDc?akpBDvlUY1dw!h_OXd7DgtH2SgwdIGnGVGB8vCL;r}Hx=NGGtZ5I~Be zV#GR&NR4~zptV|=yAz%oQ1g(xJnKJ6iF*11ZeWm+%Nbi(_Fq={ zN2S7jK7k@^!P^M5O0x`{(cNmP(Ov`S3P+O~d0l6vOR}|fEo|5fH*bgfCc_EERe$o= zcbIipj(jRXr0*pE-2XDY?;k-OPMH9j4yTi8jYzemNwKAA7tp-u$^Q5xww;zI_QF^0ftA<6;-#>tqHIu0kC$biYhvTJHYRFT@}CP) z^pP|uPVhH^Z#B5wjE#=6sNi73Vt*ZR6@gz-(xcKW!0oNR8GigbBTGsJr>=2(+gaSl z{!K8Kq22RxXK%4E{C+p2Virv7HY%zs7!}aG*~q}9wtv(I*WEC+RtWg) zdZ=(QG&D5*^m7?FeGKwheC|qweGHtDX0P(*vQFeij8m~vo4cMg;L>*t8e8Dr$H8eq zY%ULc{~3et2YO-S7HHp%2K4s!PIo}pLDLX`U%?PO*7E77H2W`kQy|%NGP97p2+J)L zhrbbi_-muit*o-h!ha<>W%nOpeAJL0ij$#elt?5}g6tgV6G$QOiE%p^<$zvcc8NbK zdjpvigpSxhSDXfH%5DCNj&zx8on*6F4jno)JqLhM_-iU23AOf#{WQ=mfC$htquA{Z zLONNV-}PBEmo*KtX|mZYU0q#tcXy)~!*e_bpBP2`Ipej^Dyt`=G7? ze5;_k&Uls{LVr(QBpE%=slhn?HBBTu-P5kvH$gJ%%vw0IR7726x_0lJF25;3zs z|9sh7NGIS=j~W%$S9cN$h1kD;|I`MYH$vh9^q&JYGzBRkL2;pZYtUETh+a_=D-+{z z;VkrrKvP+@SaO>Wq;)Nz0P{B|+;0vTW}X2E!I8X|SH@OA?P^$3 zQ@$1`J@Mfr3`HRRu|b=FR}tJ(udt~~wZncI_>m*X8+M(!4&XL3pvwzAT{r0UVhS#V z4QgCcZGR-JDi2h+rkYgRxWWCSS>wb<(vV4BktYIJwOI14TERy9&FjFMz(L#Is3Stm94MOJv;z;D z6Mmd)G3X8fF8~Marjqk^pvaLm=1qLZ%-YTcZaiyho7aIiCo}A9%`xA%76SOq7WX!@ z(b{PCn8Ymbodd$a2_Oh`O=_FDnq#5&Ui8V8R-hT!46MZ%(H4K)CJmecjsm@=rim@| b<2L^VB9Wj{PjR<700000NkvXXu0mjfGpft< diff --git a/manifest.json b/manifest.json index 75273ea..a4a37f4 100644 --- a/manifest.json +++ b/manifest.json @@ -1,27 +1,41 @@ { - "name": "Old Reddit Redirect", - "description": "Ensure Reddit always loads the old design", - "version": "1.6.1", + "name": "ADD Git NoFork", + "description": "Ensure searches don't include forks", + "version": "1.0.2", "manifest_version": 2, - "background": { "scripts": ["background.js"] }, + "browser_specific_settings": { + "gecko": { + "id": "svaillancourt@add123.com" + } + }, + "background": { + "scripts": ["background.js"] + }, "icons": { "48": "img/icon48.png", "128": "img/icon128.png" }, "content_scripts": [ { - "matches": ["*://old.reddit.com/*"], + "matches": ["*://git.add123.com/*"], "css": ["styles.css"], "run_at": "document_start" + }, + { + "matches": ["*://git.add123.com/*"], + "js": [ + "utils.js", + "csharp-quotes.js", + "backtick-comments.js", + "var-highlighter.js" + ], + "run_at": "document_start" } ], "permissions": [ + "activeTab", "webRequest", "webRequestBlocking", - "*://reddit.com/*", - "*://www.reddit.com/*", - "*://np.reddit.com/*", - "*://amp.reddit.com/*", - "*://i.reddit.com/*" + "*://git.add123.com/*" ] } diff --git a/utils.js b/utils.js new file mode 100644 index 0000000..37315db --- /dev/null +++ b/utils.js @@ -0,0 +1,13 @@ +const NEW_PAGE_DELAY = 1000 +const CURRENT_PAGE_DELAY = 300 + +const getClassNameElementsArray = className => + Object.values(document.getElementsByClassName(className)) + +// Runs on "complete" load and when https://urlurl.url#this-hash-value changes +const addFix = fixFunc => { + window.addEventListener('load', () => setTimeout(fixFunc, NEW_PAGE_DELAY)) + addEventListener('hashchange', () => setTimeout(fixFunc, CURRENT_PAGE_DELAY)) +} + +const getFileName = () => getClassNameElementsArray('file-breadcrumbs-segment-highlighted').map(e => e.innerText)[0] diff --git a/var-highlighter.js b/var-highlighter.js new file mode 100644 index 0000000..e5138e6 --- /dev/null +++ b/var-highlighter.js @@ -0,0 +1,89 @@ +const getVarElements = () => [ + ...getClassNameElementsArray('hl-variable'), + ...getClassNameElementsArray('hl-def'), + ...getClassNameElementsArray('hl-type') +] + +let currentSelected + +const selectVar = varName => { + if (!varName) { + return + } + // Clear existing colors + getClassNameElementsArray(selectedClass) + .forEach(e => e.classList.remove(selectedClass)) + + // Color vars with matching text + getVarElements() + .filter(e => e.innerText === varName) + .forEach(e => e.classList.add(selectedClass)) + + currentSelected = varName +} + +const selectedClass = 'sages-selected-variable' + +const getTagMatching = (name, matcher) => { + const elements = Object.values(document.getElementsByTagName(name)).filter(matcher) + return elements.length ? elements[0] : null +} + +const addVariableClickers = skipExpandos => { + const getSearchButton = () => getTagMatching( + 'button', e => e.dataset?.testid === 'search-action-button') + + const getSearchBox = () => getTagMatching('input', e => e.name === 'changes-search-input') + + if (!skipExpandos) { + getClassNameElementsArray('expand-context-button').forEach(e => { + const currentOnClick = e.onclick + e.onclick = (...args) => { + currentOnClick && currentOnClick(...args) + setTimeout(() => { + selectVar(currentSelected) + addVariableClickers(true) + }, CURRENT_PAGE_DELAY) + } + }) + } + + getVarElements() + .forEach(e => { + e.onclick = () => selectVar(e.innerText) + e.ondblclick = () => { + let searchBox = getSearchBox() + + if (!searchBox) { + getSearchButton()?.click() + searchBox = getSearchBox() + } + + searchBox.value = e.innerText + searchBox.dispatchEvent(new window.Event('change', { bubbles: true })) + } + }) + +} + + +addFix(() => { + const styleSheet = document.createElement('style') + styleSheet.innerText = ` + .${selectedClass} { + background: rgb(255, 253, 170) !important; + border-radius: 3px; + padding: 2px !important; + margin: -2px !important; + /* + padding-left: 2px !important; + padding-right: 2px !important; + margin-left: -2px !important; + margin-right: -2px !important; + */ + }` + + document.head.appendChild(styleSheet) + addVariableClickers() + selectVar(currentSelected) +})