MetroSave

Add Save button to Metrolyrics site

  1. // ==UserScript==
  2. // @name MetroSave
  3. // @namespace greasyfork.org/Zart
  4. // @version 2.2
  5. // @date 2017-03-16
  6. // @description Add Save button to Metrolyrics site
  7. // @author Zart
  8. // @icon http://www.metrolyrics.com/favicon.ico
  9. // @include http://www.metrolyrics.com/*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. /* //Fix Mozilla bug with innerText
  16. if (/Firefox/.test(navigator.userAgent)){
  17. var it = function(){var r=document.createRange();r.selectNode(this);var sel=window.getSelection();sel.addRange(r);var s=sel.toString();sel.removeAllRanges();return s;};
  18. Object.defineProperty(HTMLElement.prototype, 'innerText', {get: it});}
  19.  
  20. var lyr = document.getElementsByClassName('verse');
  21. if (!lyr.length) return false;
  22. for (var i=0,s=[]; i<lyr.length; s.push(lyr[i++].innerText));
  23. var cop = document.getElementsByClassName('writers');
  24. for (i=0; i<cop.length-1; s.push(cop[i++].innerText));
  25. var src = document.getElementsByClassName('lyric-source')[0]; //mobile
  26. if(src) {src.lastChild.remove();src.lastChild.remove();s.push(src.innerText);}
  27. s = s.join('\n\n').replace(/\n/gm,'\r\n');*/
  28.  
  29. var r=document.querySelectorAll('.verse,.writers:not(:last-child),.lyric-source>*:not(:nth-last-child(-n+2))');
  30. if (!r.length) return;
  31. for (var i=0,s=[]; i<r.length; i++){
  32. for (var j=0; j<r[i].childNodes.length; s.push(r[i].childNodes[j++].textContent));
  33. if(r[i].tagName=='P') s.push('\n\n'); else s.push('\n');}
  34. s = s.join('\n').replace(/\n{2,3}/g,'\n').replace(/\n/gm,'\r\n');
  35.  
  36. var ss = document.styleSheets[0];
  37. ss.insertRule('.lyrics-top .social-bar a{width:calc((100% - 10px)/4)!important}',0);
  38. ss.insertRule('.container-8 .social-bar a{width: 20%!important}',0); //mobile
  39. var btn = document.getElementsByClassName('social-link');
  40. var a = btn[0].parentNode.insertBefore(document.createElement('A'), btn[0]);
  41. a.target = 'void';
  42. a.download = ml.lyricName + '.txt';
  43. var unsafe = /[^\0-\x7f\xa9]/, BOM = '\ufeff';
  44. if (unsafe.test(s))
  45. a.href = encodeURI('data:text/plain;utf8,' + BOM + s);
  46. else
  47. a.href = 'data:text/plain;quoted-printable,' + escape(s);
  48.  
  49. a.style.cssText = 'background-color: green; background-position: center; background-repeat: no-repeat;';
  50. a.style.backgroundImage='url("data:image/gif;base64,R0lGODlhEAARAIABAP///wAAACH5BAkKAAEALAAAAAAQABEAAAIjjA2px6jfzoMxzFVvqlZzDXxeNjrg1Z1YejYqiYoUx9LMFhUAOw==")';
  51. a.style.marginRight = window.getComputedStyle(btn[0]).marginRight; //mobile+desktop
  52. })();