Lyrics-Translate-Tweaks

Collection of Tweaks for Lyrics Translate.

Disable Copy Protection

Disables the copy protection for lyricstranslate.com, allowing you to copy full song lyrics.

Usage

Add the filter list to uBlock Origin. Here’s the source link:

https://lyrics.nikoboi.dev/blocklist.txt

You can also just add these to “My filters”:

lyricstranslate.com##+js(aeld, copy)
lyricstranslate.com##+js(aeld, beforecopy)

The filter will work on both desktop and mobile.

uBlock Origin add tutorial

  1. Select extension in the top-right.

  2. Click the three gears to open the settings.

  3. Under “Filter lists” at the top, scroll down to the bottom.

  4. Select “Import…”

  5. Paste the URL linked above.

  6. Hit “Apply changes” at the top.

Tested with Firefox + uBlock Origin.

Disable Copy Protection can also be installed as a userscript; click me

Userscript manager needed; (Violentmonkey for Firefox/Tampermonkey for Chromium)

Demonstration

Normally, when you try to copy more than one verse you get:

Ein kleiner Mensch stirbt nur zum Schein
wollte ganz alleine sein
das kleine Herz stand still für Stunden
so hat man es für tot befunden
es wird verscharrt in nassem Sand
mit einer Spieluhr in der Hand

Der erste Schnee d
https://lyricstranslate.com/en/Rammstein-Spieluhr-lyrics.html

But with Disable Copy Protection you can copy the entire text:

Ein kleiner Mensch stirbt nur zum Schein
wollte ganz alleine sein
das kleine Herz stand still für Stunden
so hat man es für tot befunden
es wird verscharrt in nassem Sand
mit einer Spieluhr in der Hand

Der erste Schnee das Grab bedeckt
hat ganz sanft das Kind geweckt
in einer kalten Winternacht
ist das kleine Herz erwacht

Als der Frost ins Kind geflogen
hat es die Spieluhr aufgezogen
eine Melodie im Wind
und aus der Erde singt das Kind

Hoppe hoppe Reiter
und kein Engel steigt herab
mein Herz schlägt nicht mehr weiter
nur der Regen weint am Grab
hoppe hoppe Reiter
eine Melodie im Wind
mein Herz schlägt nicht mehr weiter
und aus der Erde singt das Kind

Der kalte Mond in voller Pracht
hört die Schreie in der Nacht
und kein Engel steigt herab
nur der Regen weint am Grab

Zwischen harten Eichendielen
wird es mit der Spieluhr spielen
eine Melodie im Wind
und aus der Erde singt das Kind

Hoppe hoppe Reiter
und kein Engel steigt herab
mein Herz schlägt nicht mehr weiter
nur der Regen weint am Grab
hoppe hoppe Reiter
eine Melodie im Wind
mein Herz schlägt nicht mehr weiter
und aus der Erde singt das Kind

Hoppe hoppe Reiter
mein Herz schlägt nicht mehr weiter

Am Totensonntag hörten sie
aus Gottes Acker diese Melodie
da haben sie es ausgebettet
das kleine Herz im Kind gerettet

Hoppe hoppe Reiter
eine Melodie im Wind
mein Herz schlägt nicht mehr weiter
und auf der Erde singt das Kind
hoppe hoppe Reiter
und kein Engel steigt herab
mein Herz schlägt nicht mehr weiter
nur der Regen weint am Grab

Hoppe hoppe Reiter
Eine Melodie im Wind
Mein Herz schlägt nicht mehr weiter
Und auf der Erde singt das Kind

Technical

LyricsTranslate intercepts your copy operations using a copy event listener on the song container. When a selection exceeds a set threshold (220 characters), the handler replaces it with a truncated version and appends a link to the page just before it’s sent to the clipboard.

The Userscript neutralizes this behavior by intercepting the copy event first, leaving the native interception logic asleep.

The uBlock Origin filters achieve the same effect even earlier by blocking any copy or beforecopy listeners from being added to the page in the first place, effectively taking out the native logic in its sleep.

This is how the site natively yoinks your copy events:

function(e) {
  if (typeof window.getSelection == "undefined") return;
  var body_element = document.getElementsByClassName('song-node')[0];
  var selection = window.getSelection();
  var COPYLIMIT = 220; // Obvious function is obvious. Apparently the copy limit is 220 characters.
  if (("" + selection).length < COPYLIMIT) return;
  var newdiv = document.createElement('div');
  newdiv.style.position = 'absolute';
  newdiv.style.left = '-99999px'; // Slick move.
  body_element.appendChild(newdiv);
  var range = selection.getRangeAt(0);
  var documentFragment = range.cloneContents();
  var tempDiv = document.createElement("div");
  tempDiv.appendChild(documentFragment);
  trimContent(tempDiv, COPYLIMIT);
  newdiv.appendChild(tempDiv);
  if (selection.getRangeAt(0).commonAncestorContainer.nodeName == "PRE") {
    newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
  }
  var linkname = window.location.protocol + '//' + window.location.hostname;
  if (document.location.href.length < 65) {
    linkname = document.location.href;
  }
  newdiv.innerHTML += "<a href='" + // New link constructor ig.
    document.location.href + "'>" +
    document.location.href + "</a>";
  selection.selectAllChildren(newdiv);
  window.setTimeout(function() {
    body_element.removeChild(newdiv);
  }, 200);
}

This event is tied to <div id="songnode" class="song-node">.

File Tree

.
├── allow-copying.user.js
├── blocklist.txt
├── LICENSE
└── README.md

1 directory, 4 files

Contributing

Feel free to fork this repository and submit issues or pull requests if you have any suggestions or improvements. If you encounter any bugs or have feature requests, please open an issue.

Credits

Created by Nikoboi

Script and filters coughed up by ChatGPT

License

This project is licensed under the GNU General Public License V3. See LICENSE for details.

Disable Copy Protection works like an ad-blocker by blocking specific script features and does not unlock or bypass any paid features. We do not endorse bypassing paid features, nor do we encourage violating any website’s terms of service.