tinyurl.com 縮短網址按鈕

在頁面左下角設置一個縮短網址的按鈕,點按即可從 tinyurl.com 取得目前頁面的縮址

目前為 2022-06-04 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name tinyurl.com - URL shorten button
  3. // @name:zh-TW tinyurl.com 縮短網址按鈕
  4. // @name:zh-CN tinyurl.com 缩短网址按钮
  5. // @description Add a URL shorten button to the bottom left corner. Click it to get a shortened URL (by tinyurl.com) of current page.
  6. // @description:zh-TW 在頁面左下角設置一個縮短網址的按鈕,點按即可從 tinyurl.com 取得目前頁面的縮址
  7. // @description:zh-CN 在页面左下角设置一个缩短网址的按钮,点按即可从 tinyurl.com 取得当前页面的缩址
  8. // @namespace https://greasyfork.org/zh-TW/users/393133-evan-tseng
  9. // @version 0.33
  10. // @author Evan Tseng
  11. // @include *://*
  12. // @grant none
  13. // @run-at document-body
  14. // @license MIT
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. 'use strict';
  19. if(location.hostname == "tinyurl.com") {
  20. var url = new URL(location.href);
  21. if(url.searchParams.get("trigger") == "shortenButton") {
  22. var tu = document.body.innerText;
  23. document.body.innerHTML = "";
  24. if(tu.indexOf("https://tinyurl.com/") == 0) {
  25. document.write(`<style>
  26. html, body { background:#bbb; overflow:hidden }
  27. body { width:300px; height:32px; text-align:center; padding:3px 0; margin:0; vertical-align:middle }
  28. #sUrl, #ccBtn { font-size:14px; height:24px; line-height:24px; vertical-align:middle; padding:0 .5em; }
  29. #sUrl { width:15em; text-align:center; color:222; border:1px inset #eee; border-radius:1mm }
  30. #ccBtn { width:4em; color:#000; background:#ddd; border:1px solid #888; border-radius:2mm; cursor:pointer }
  31. input, button { outline:none }
  32. input:focus, button:focus { box-shadow:0 0 1mm 1px #08f }
  33. @media (prefers-color-scheme: light) {
  34. #ccBtn:hover { filter:brightness(1.2) }
  35. #ccBtn:active { filter:brightness(.9) }
  36. }
  37. @media (prefers-color-scheme: dark) {
  38. #ccBtn:hover { filter:brightness(1.5) }
  39. #ccBtn:active { filter:brightness(.75) }
  40. }
  41. </style>`);
  42. document.write('<div><input id="sUrl" value="' + tu + '" readonly/> <button id="ccBtn" onclick="copyUrl()">Copy</button></div>');
  43. document.write(`<script>
  44. function copyUrl() {
  45. let txtBox = document.querySelector("#sUrl");
  46. txtBox.focus();
  47. txtBox.select();
  48. document.execCommand("copy");
  49. txtBox.setSelectionRange(0,0)
  50. window.close();
  51. }
  52. document.querySelector("#ccBtn").focus();
  53. </script>`);
  54. }
  55. else if(tu.indexOf('Error') == 0) {
  56. document.write(`
  57. <style> body { font:400 10pt sans-serif; color:#222; background:#ccc; padding:0; margin:0; } </style>
  58. <p>Unable to shorten this URL.</p>`);
  59. }
  60. else {
  61. document.write(`
  62. <style> body { font:400 10pt sans-serif; color:#222; background:#ccc; padding:0; margin:0; } </style>
  63. <p>Please logout your TinyURL account. Try using the shorten button script with anonymous.</p>`);
  64. }
  65. }
  66. }
  67. else if(window.self === window.top) {
  68. (function(){
  69. const TUcss = `
  70. .__TUwrap__ { position:fixed; left: 0; bottom:33mm; z-index:22222222 }
  71. .__TUbg__ { position:fixed; top:0; left:0; background:rgba(0,0,0,.5); width:100vw; height:100vh; z-index:-1; backdrop-filter:blur(2mm); -webkit-backdrop-filter:blur(2mm); visibility:hidden; opacity:0; transition:.5s, width 0s, height 0s }
  72. .__TUbtn__ { position:absolute; left:-6pt; transform:rotate(90deg); font:400 12pt sans-serif!important; color:#333!important; background:#ddd!important; padding:0 .5em!important; margin:0 -20pt!important; line-height:1.6!important; border:1px solid #888; border-radius:5px 5px 0 0; box-shadow:0 0 0 1px rgba(0,0,0,.4); opacity:.4; white-space:nowrap; cursor:pointer; transition:.3s; }
  73. .__TUbtn__:hover { left:-1px; box-shadow: 2px 0 2mm 1px rgba(0,0,0,.5); opacity:1; transition:.1s;}
  74. .__TUbtn__:active { color:#eee!important; background:#666!important; box-shadow: inset 1px 0 1mm 1px rgba(0,0,0,.5); transition:.07s}
  75. .__TUbox__ { position:absolute; left:10mm; top:-4mm; display:none; box-sizing:content-box; width:300px; height:32px; padding:3mm; border-radius:3mm; background:#bbb; box-shadow:0 1mm 5mm rgba(0,0,0,.3); backdrop-filter:blur(3mm); -webkit-backdrop-filter:blur(3mm)}
  76. .__TUbox__:before { position:absolute; top:20px; left:-7px; display:block; content:""; border-top:7px solid transparent;border-bottom:7px solid transparent; border-right:7px solid #bbb; z-index:2 }
  77. .__TUpage__ { display:block!important; width:300px; height:32px; background:transparent; background-image:none; border:none; }`;
  78. var cssStyle = document.createElement('style');
  79. if(cssStyle.styleSheet) cssStyle.styleSheet.cssText = TUcss;
  80. else cssStyle.appendChild(document.createTextNode(TUcss));
  81. document.querySelector('head').appendChild(cssStyle);
  82.  
  83. var TUwrap = null,
  84. TUbg = null,
  85. TUbox = null,
  86. TUpage = null;
  87.  
  88. function query(theUrl){
  89. close();
  90. let queryURL = 'https://tinyurl.com/api-create.php?trigger=shortenButton&url=' + encodeURIComponent(theUrl);
  91. TUpage = document.createElement('iframe');
  92. TUpage.setAttribute('class', '__TUpage__');
  93. TUpage.src = queryURL;
  94. TUbox.appendChild(TUpage);
  95. TUbox.setAttribute('style', 'display:block;');
  96. TUbg.setAttribute('style', 'visibility:visible; opacity:1')
  97. }
  98.  
  99. function close(){
  100. if(TUpage) {
  101. TUbox.setAttribute('style', 'display:none');
  102. TUpage.remove();
  103. TUpage = null;
  104. }
  105. TUbg.setAttribute('style', 'visibility:hidden; opacity:0')
  106. }
  107.  
  108. if(TUwrap == null) {
  109. TUwrap = document.createElement('div');
  110. TUwrap.setAttribute('class', '__TUwrap__');
  111. TUbg = document.createElement('div');
  112. TUbg.setAttribute('class', '__TUbg__');
  113. let TUbtn = document.createElement('button');
  114. TUbtn.setAttribute('class', '__TUbtn__');
  115. TUbtn.innerText = "TinyURL"
  116. TUbox = document.createElement('div');
  117. TUbox.setAttribute('class', '__TUbox__');
  118.  
  119. TUwrap.appendChild(TUbg);
  120. TUwrap.appendChild(TUbtn);
  121. TUwrap.appendChild(TUbox);
  122. document.body.appendChild(TUwrap);
  123. TUbg.addEventListener('click', close );
  124. TUbtn.addEventListener('click', function(){ query(location.href) });
  125. }
  126. })();
  127. }
  128.  
  129. })();