From mboxrd@z Thu Jan 1 00:00:00 1970 From: andy at warmcat.com (Andy Green) Date: Sun, 24 Jun 2018 10:44:54 +0800 Subject: [PATCH v3 6/6] line-range-highlight: copy URL to clipboard on click In-Reply-To: <152980795804.2873.3939128717470466784.stgit@mail.warmcat.com> References: <152980795804.2873.3939128717470466784.stgit@mail.warmcat.com> Message-ID: <152980829459.2873.7085053956237952034.stgit@mail.warmcat.com> Since the only reason to click on the line number links is to get the corresponding #URL to share, this patch makes that process more convenient by copying the highlit area, be it a single line or a range, to the clipboard on each click of the line number links. Signed-off-by: Andy Green --- cgit.js | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/cgit.js b/cgit.js index 2cfad29..e2c3799 100644 --- a/cgit.js +++ b/cgit.js @@ -89,8 +89,29 @@ function cgit_line_range_highlight() e.scrollIntoView(true); } +function cgit_copy_clipboard(value) +{ + var inp = document.createElement("textarea"); + var e = document.getElementById("linenumber_td"); + + inp.type = "text"; + inp.value = value; + /* hidden style stops it working for clipboard */ + inp.setAttribute('readonly', ''); + inp.style.position = "absolute"; + inp.style.left = "-1000px"; + + e.appendChild(inp); + + inp.select(); + + document.execCommand("copy"); + + inp.remove(); +} + function cgit_line_range_click(e) { - var t = e.target.id; + var t = e.target.id, cp; cgit_line_range_override = null; @@ -101,13 +122,13 @@ function cgit_line_range_click(e) { * is called, and override it there. */ - if (window.location.hash && window.location.hash.indexOf("-") < 0) + if (window.location.hash && window.location.hash.indexOf("-") < 0) { if (parseInt(window.location.hash.substring(2)) < parseInt(t.substring(1))) /* forwards */ - cgit_line_range_override = + cp = cgit_line_range_override = window.location + '-' + t.substring(1); else /* backwards */ - cgit_line_range_override = + cp = cgit_line_range_override = window.location.href.substring(0, window.location.href.length - window.location.hash.length) + @@ -115,6 +136,13 @@ function cgit_line_range_click(e) { window.location.href.substring( window.location.href.length - window.location.hash.length + 2); + } else + cp = window.location.href.substring(0, + window.location.href.length - + window.location.hash.length) + + '#n' + t.substring(1); + + cgit_copy_clipboard(cp); } /* line range highlight */