diff options
author | zrose584 <57181548+zrose584@users.noreply.github.com> | 2020-10-12 17:52:01 +0200 |
---|---|---|
committer | zrose584 <57181548+zrose584@users.noreply.github.com> | 2020-10-12 17:52:01 +0200 |
commit | d2ee49ec453999904381ec592f38a9a34e02044c (patch) | |
tree | ffb4861d06e8932e41d2c500124d06f7abb17db7 /youtube/static/js | |
parent | 2cfc6dec39ccdcc0c5fe2eea73f47b7040e51833 (diff) | |
download | yt-local-d2ee49ec453999904381ec592f38a9a34e02044c.tar.lz yt-local-d2ee49ec453999904381ec592f38a9a34e02044c.tar.xz yt-local-d2ee49ec453999904381ec592f38a9a34e02044c.zip |
add 't' hotkey
Diffstat (limited to 'youtube/static/js')
-rw-r--r-- | youtube/static/js/common.js | 59 | ||||
-rw-r--r-- | youtube/static/js/hotkeys.js | 5 |
2 files changed, 64 insertions, 0 deletions
diff --git a/youtube/static/js/common.js b/youtube/static/js/common.js index 2997f61..2db4390 100644 --- a/youtube/static/js/common.js +++ b/youtube/static/js/common.js @@ -49,6 +49,65 @@ function doXhr(url, callback=null) { return xhr; } +// https://stackoverflow.com/a/30810322 +function copyTextToClipboard(text) { + var textArea = document.createElement("textarea"); + + // + // *** This styling is an extra step which is likely not required. *** + // + // Why is it here? To ensure: + // 1. the element is able to have focus and selection. + // 2. if element was to flash render it has minimal visual impact. + // 3. less flakyness with selection and copying which **might** occur if + // the textarea element is not visible. + // + // The likelihood is the element won't even render, not even a + // flash, so some of these are just precautions. However in + // Internet Explorer the element is visible whilst the popup + // box asking the user for permission for the web page to + // copy to the clipboard. + // + + // Place in top-left corner of screen regardless of scroll position. + textArea.style.position = 'fixed'; + textArea.style.top = 0; + textArea.style.left = 0; + + // Ensure it has a small width and height. Setting to 1px / 1em + // doesn't work as this gives a negative w/h on some browsers. + textArea.style.width = '2em'; + textArea.style.height = '2em'; + + // We don't need padding, reducing the size if it does flash render. + textArea.style.padding = 0; + + // Clean up any borders. + textArea.style.border = 'none'; + textArea.style.outline = 'none'; + textArea.style.boxShadow = 'none'; + + // Avoid flash of white box if rendered for any reason. + textArea.style.background = 'transparent'; + + + textArea.value = text; + + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + + try { + var successful = document.execCommand('copy'); + var msg = successful ? 'successful' : 'unsuccessful'; + console.log('Copying text command was ' + msg); + } catch (err) { + console.log('Oops, unable to copy'); + } + + document.body.removeChild(textArea); +} + window.addEventListener('DOMContentLoaded', function() { cur_track_idx = getDefaultTranscriptTrackIdx(); diff --git a/youtube/static/js/hotkeys.js b/youtube/static/js/hotkeys.js index b295db9..5688ef3 100644 --- a/youtube/static/js/hotkeys.js +++ b/youtube/static/js/hotkeys.js @@ -36,6 +36,11 @@ function onKeyDown(e) { if (tt.mode == "showing") tt.mode = "disabled"; else tt.mode = "showing"; } + else if (c == "t") { + let video_id = JSON.parse(Q(".video-info input[name=video_info_list]").value).id + let ts = Math.floor(Q("video").currentTime); + copyTextToClipboard(`https://youtu.be/${video_id}?t=${ts}`); + } } window.addEventListener('DOMContentLoaded', function() { |