diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-07-19 17:16:28 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-07-19 17:16:28 +0300 |
commit | e4384360a16dd9a19d4d2d25d0ef1f2b862ed2a6 (patch) | |
tree | 2fcdfa7dcdb9db8f5208b2562f4b4e803d671243 /app/assets/javascripts/blob | |
parent | ffda4e7bcac36987f936b4ba515995a6698698f0 (diff) |
Add latest changes from gitlab-org/gitlab@16-2-stable-eev16.2.0-rc42
Diffstat (limited to 'app/assets/javascripts/blob')
-rw-r--r-- | app/assets/javascripts/blob/line_highlighter.js | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/app/assets/javascripts/blob/line_highlighter.js b/app/assets/javascripts/blob/line_highlighter.js index a8932f8c73b..1ec204b4034 100644 --- a/app/assets/javascripts/blob/line_highlighter.js +++ b/app/assets/javascripts/blob/line_highlighter.js @@ -1,6 +1,5 @@ /* eslint-disable func-names, no-underscore-dangle, no-param-reassign, consistent-return */ -import $ from 'jquery'; import { scrollToElement } from '~/lib/utils/common_utils'; // LineHighlighter @@ -52,11 +51,12 @@ const LineHighlighter = function (options = {}) { }; LineHighlighter.prototype.bindEvents = function () { - const $fileHolder = $(this.options.fileHolderSelector); - - $fileHolder.on('click', 'a[data-line-number]', this.clickHandler); - $fileHolder.on('highlight:line', this.highlightHash); - window.addEventListener('hashchange', (e) => this.highlightHash(e.target.location.hash)); + const fileHolder = document.querySelector(this.options.fileHolderSelector); + if (fileHolder) { + fileHolder.addEventListener('click', this.clickHandler); + fileHolder.addEventListener('highlight:line', this.highlightHash); + window.addEventListener('hashchange', (e) => this.highlightHash(e.target.location.hash)); + } }; LineHighlighter.prototype.highlightHash = function (newHash) { @@ -82,29 +82,35 @@ LineHighlighter.prototype.highlightHash = function (newHash) { }; LineHighlighter.prototype.clickHandler = function (event) { - let range; - event.preventDefault(); - this.clearHighlight(); - const lineNumber = $(event.target).closest('a').data('lineNumber'); - const current = this.hashToRange(this._hash); - if (!(current[0] && event.shiftKey)) { - // If there's no current selection, or there is but Shift wasn't held, - // treat this like a single-line selection. - this.setHash(lineNumber); - return this.highlightLine(lineNumber); - } else if (event.shiftKey) { - if (lineNumber < current[0]) { - range = [lineNumber, current[0]]; - } else { - range = [current[0], lineNumber]; + const isLine = event.target.matches('a[data-line-number]'); + if (isLine) { + let range; + event.preventDefault(); + this.clearHighlight(); + const lineNumber = parseInt(event.target.dataset.lineNumber, 10); + const current = this.hashToRange(this._hash); + if (!(current[0] && event.shiftKey)) { + // If there's no current selection, or there is but Shift wasn't held, + // treat this like a single-line selection. + this.setHash(lineNumber); + return this.highlightLine(lineNumber); + } else if (event.shiftKey) { + if (lineNumber < current[0]) { + range = [lineNumber, current[0]]; + } else { + range = [current[0], lineNumber]; + } + this.setHash(range[0], range[1]); + return this.highlightRange(range); } - this.setHash(range[0], range[1]); - return this.highlightRange(range); } }; LineHighlighter.prototype.clearHighlight = function () { - return $(`.${this.highlightLineClass}`).removeClass(this.highlightLineClass); + const highlightedLines = document.getElementsByClassName(this.highlightLineClass); + Array.from(highlightedLines).forEach(function (line) { + line.classList.remove(this.highlightLineClass); + }, this); }; // Convert a URL hash String into line numbers @@ -133,7 +139,10 @@ LineHighlighter.prototype.hashToRange = function (hash) { // // lineNumber - Line number to highlight LineHighlighter.prototype.highlightLine = function (lineNumber) { - return $(`#LC${lineNumber}`).addClass(this.highlightLineClass); + const lineElement = document.getElementById(`LC${lineNumber}`); + if (lineElement) { + lineElement.classList.add(this.highlightLineClass); + } }; // Highlight all lines within a range @@ -144,7 +153,7 @@ LineHighlighter.prototype.highlightRange = function (range) { const results = []; const ref = range[0] <= range[1] ? range : range.reverse(); - for (let lineNumber = range[0]; lineNumber <= ref[1]; lineNumber += 1) { + for (let lineNumber = ref[0]; lineNumber <= ref[1]; lineNumber += 1) { results.push(this.highlightLine(lineNumber)); } |