Sleazy Fork is available in English.

manageLinksLib

manage download links

Dit script moet niet direct worden geïnstalleerd - het is een bibliotheek voor andere scripts om op te nemen met de meta-richtlijn // @require https://update.sleazyfork.org/scripts/436827/1047951/manageLinksLib.js

  1. /*
  2. manageLinks v0.1
  3. https://github.com/hoothin/UserScripts/tree/master/True%20URL%20downloads/managerLinks.js
  4. (c) 2017-2017 by Hoothin Wang. All rights reserved.
  5. */
  6. var specialUrl = /^thunder|^magnet|^ed2k/i,
  7. simplefilter = /\.php|\.htm|\.jsp|\.asp|\/[^\.]+$/i,
  8. resReg = /.*(^thunder|^magnet|^ed2k|\.torrent$|\.mp4$|\.rar$|\.7z$|\.zip$|\.rmvb$|\.mkv$|\.avi$|\.iso$|\.mp3$|\.txt$|\.exe$|\.chm$|\.pdf$|\.ppt$|\.doc$|\.pptx$|\.docx$|\.epub$|\.xlsx$|\.xls$|\.flac$|\.wma$|\.wav$|\.aac$|\.ape$|\.mid$|\.ogg$|\.m4a$|\.dts$|\.dsd$|\.apk$|\.flv$).*/i,
  9. linksArr = [],frame,linkPair = {},customReg,
  10. lang = {
  11. copyAll : "全部复制",
  12. copySel : "复制选中",
  13. addTips : "%i代表递增 %n代表文件名",
  14. sortByName : "按文件名排序",
  15. sortByUrl : "按网址排序",
  16. sortByType : "按扩展名排序",
  17. preHolder : "批量前缀",
  18. nextHolder : "批量后缀",
  19. closeBtn : "关闭",
  20. typeHead : "类型:"
  21. };
  22.  
  23. var by = function(byName, secName) {
  24. var compare = function(o, p, name) {
  25. var a, b;
  26. if (typeof o === "object" && typeof p === "object" && o && p) {
  27. a = o[name];
  28. b = p[name];
  29. if (a === b) {
  30. return 0;
  31. }
  32. if (typeof a === typeof b) {
  33. return a < b ? -1 : 1;
  34. }
  35. return typeof a < typeof b ? -1 : 1;
  36. } else {
  37. throw("error");
  38. }
  39. }
  40. return function(o, p) {
  41. var result = compare(o, p, byName);
  42. if (secName && result == 0) {
  43. result = compare(o, p, secName);
  44. }
  45. return result;
  46. }
  47. }
  48.  
  49. if (!Array.prototype.indexOf) {
  50. Array.prototype.indexOf = function (item) {
  51. var index = -1;
  52. for (var i = 0, length = this.length; i < length; i++) {
  53. if (this[i] == item) {
  54. index = i;
  55. }
  56. }
  57. return index;
  58. };
  59. }
  60.  
  61. function getLinks() {
  62. [].forEach.call(document.querySelectorAll('a'), function(link){
  63. if (link.className != "whx-a" && ((customReg && customReg.test(link.href)) || specialUrl.test(link.href) || (!simplefilter.test(link.href) && resReg.test(link.href))) && linksArr.indexOf(link.href) == -1) {
  64. linksArr.push(link.href);
  65. linkPair[link.href]=link;
  66. }
  67. });
  68. [].forEach.call(document.querySelectorAll('source'), function(link){
  69. if (((customReg && customReg.test(link.href)) || specialUrl.test(link.href) || (!simplefilter.test(link.href) && resReg.test(link.href))) && linksArr.indexOf(link.src) == -1) {
  70. linksArr.push(link.src);
  71. linkPair[link.href]=link;
  72. }
  73. });
  74. }
  75.  
  76. function initLang(l){
  77. if (!l) return;
  78. lang = l;
  79. }
  80.  
  81. function setLinkCustomReg(r){
  82. customReg = r;
  83. }
  84.  
  85. function showLinkFrame(callBack) {
  86. var linkItems = [];
  87. var typeHtml = lang.typeHead+" ";
  88. if (!frame) {
  89. $('<style>#managerLinksLinks>div{display: inline-block;width: 100%;}#managerLinksLinks>div:nth-of-type(odd){ background:#ffffff;}#managerLinksLinks>div:nth-of-type(even){ background:#f5f5f5;}#managerLinksContent input{border-width:2px;border-style:outset;border-color:buttonface;border-image:initial;border: 1px #DADADA solid;padding: 5px;border-radius: 8px;font-weight: bold;font-size: 9pt;outline: none;}#managerLinksContent input[type=button]:hover {border: 1px #C6C6C6 solid;box-shadow: 1px 1px 1px #EAEAEA;color: #333333;background: #F7F7F7;}#managerLinksContent input[type=button]:active {box-shadow: inset 1px 1px 1px #DFDFDF; }#managerLinksLinks>div>input{float:left;height: 20px;}#managerLinksLinks>div>a{width:230px;display:block;overflow:hidden;word-break:keep-all;white-space:nowrap;text-overflow:ellipsis;float:left;}#managerLinksLinks{display:block;width:100%;overflow:auto;word-wrap:break-word;}#managerLinksType>a{text-decoration:none;}#managerLinksType{word-break:break-word;max-height:200px;overflow-y:auto;overflow-x:hidden;width:290px;margin-left:5px;}.managerLinksOverlay{height:100%; width:100%; position:fixed; top:0; z-index:99998; opacity:0.3; filter: alpha(opacity=30); background-color:#000;}.managerLinksBody{width:300px;height:auto;max-height:80%;min-height:200px;position:fixed;left:50%;top:50%;margin-top:-250px;margin-left:-150px;z-index:99998;background-color:#ffffff;border:1px solid #afb3b6;border-radius:10px;opacity:0.95;filter:alpha(opacity=95);box-shadow:5px 5px 20px 0px #000;}.managerLinksBody>.sort>input{width:33.3%}.managerLinksBody>.addTxt{white-space: nowrap;}.managerLinksBody>.addTxt>input{width: 136px;margin: 1px;border-radius: 2px;}.managerLinksBody>.fun>input{width: 33.3%;}.managerLinksLinks>div{width:100%;height:20px;overflow:hidden;}</style>').appendTo('head');
  90. frame = $(`<div id="managerLinksContent" style="display:none;">
  91. <div class="managerLinksOverlay"></div>
  92. <div class="managerLinksBody">
  93. <div id="managerLinksType"></div>
  94. <div class="sort"><input id="managerLinksSortByName" value="${lang.sortByName}" type="button"><input id="managerLinksSortByUrl" value="${lang.sortByUrl}" type="button"><input id="managerLinksSortByType" value="${lang.sortByType}" type="button">
  95. </div>
  96. <div id="managerLinksLinks"></div>
  97. <div title="${lang.addTips}" class="addTxt"><input id="managerLinksPre" type="text" placeholder="${lang.preHolder}"><input id="managerLinksAfter" type="text" placeholder="${lang.nextHolder}">
  98. </div>
  99. <div class="fun"><input id="managerLinksCopyAll" value="${lang.copyAll}" type="button"><input id="managerLinksCopySel" value="${lang.copySel}" type="button"><input id="managerLinksClose" value="${lang.closeBtn}" type="button">
  100. </div>
  101. </div>
  102. </div>`);
  103. $(document.body).append(frame);
  104. $("#managerLinksSortByName").click(function() {
  105. $("#managerLinksLinks").html("");
  106. linkItems.sort(by("linkName", "href"));
  107. linkItems.forEach(function(item) {
  108. $("#managerLinksLinks").append(item.item);
  109. });
  110. });
  111. $("#managerLinksSortByUrl").click(function() {
  112. $("#managerLinksLinks").html("");
  113. linkItems.sort(by("href", "type"));
  114. linkItems.forEach(function(item) {
  115. $("#managerLinksLinks").append(item.item);
  116. });
  117. });
  118. $("#managerLinksSortByType").click(function() {
  119. $("#managerLinksLinks").html("");
  120. linkItems.sort(by("type", "href"));
  121. linkItems.forEach(function(item) {
  122. $("#managerLinksLinks").append(item.item);
  123. });
  124. });
  125. $("#managerLinksCopyAll").click(function() {
  126. var pre = $("#managerLinksPre").val();
  127. var after = $("#managerLinksAfter").val();
  128. var resultStr = "",i=0;
  129. linkItems.forEach(function(item) {
  130. i++;
  131. var linkName = decodeURIComponent(item.linkName);
  132. resultStr += (pre.replace(/%i/g,i+"").replace(/%n/g,linkName) + item.href + after.replace(/%i/g,i+"").replace(/%n/g,linkName) + "\n");
  133. });
  134. callBack(resultStr);
  135. });
  136. $("#managerLinksCopySel").click(function() {
  137. var pre = $("#managerLinksPre").val();
  138. var after = $("#managerLinksAfter").val();
  139. var resultStr = "",i=0;
  140. linkItems.forEach(function(item) {
  141. i++;
  142. if (item.item.children("input")[0].checked) {
  143. var linkName = decodeURIComponent(item.linkName);
  144. resultStr += (pre.replace(/%i/g,i+"").replace(/%n/g,linkName) + item.href + after.replace(/%i/g,i+"").replace(/%n/g,linkName) + "\n");
  145. }
  146. });
  147. if(resultStr != "")
  148. callBack(resultStr);
  149. });
  150. $("#managerLinksClose").click(function() {
  151. frame.hide();
  152. });
  153. $("#managerLinksContent>div")[0].onclick = function() {
  154. frame.hide();
  155. };
  156. }
  157. getLinks();
  158. if(linksArr.length == 0){
  159. callBack();
  160. return;
  161. }
  162. $("#managerLinksLinks").html("");
  163. linksArr.forEach(function(link) {
  164. var type;
  165. if(resReg.test(link)){
  166. type = link.replace(resReg, "$1");
  167. }else{
  168. type = link;
  169. let matchArr = link.match(customReg);
  170. if(matchArr){
  171. type = matchArr[1] || matchArr[0];
  172. }
  173. if(type && type.length > 10){
  174. type = type.substr(0, 10);
  175. }
  176. }
  177. var linkName = linkPair[link].innerText;
  178. if (linkName) linkName = linkName.trim();
  179. if (!linkName) linkName = type.indexOf(".") == -1 ? link : link.replace(/.*\/([^\/]+)$/i, "$1");
  180. if (typeHtml.indexOf(type) == -1) {
  181. typeHtml += '<a href="javascript:void(0);">' + type + "</a> ";
  182. }
  183. var linkItem = $('<div title="' + link + '"><input type="checkbox"/><a href="' + link + '">' + decodeURIComponent(linkName) + '</a></div>');
  184. $("#managerLinksLinks").append(linkItem);
  185. linkItems.push({
  186. item: linkItem,
  187. href: link,
  188. type: type,
  189. linkName: linkName
  190. });
  191. });
  192. $("#managerLinksType").html(typeHtml);
  193. $("#managerLinksType>a").click(function(e) {
  194. var selected = this.style.textDecoration == "underline";
  195. this.style.textDecoration = selected ? "" : "underline";
  196. var type = this.innerHTML;
  197. linkItems.forEach(function(item) {
  198. if (item.type == type) {
  199. item.item.children("input")[0].checked = !selected;
  200. }
  201. });
  202. });
  203. frame.show();
  204. $("#managerLinksLinks").height($(".managerLinksBody").height() - $("#managerLinksType").height() - $("#managerLinksSortByName").height() * 3 - 38);
  205. $(".managerLinksBody").hide();
  206. $(".managerLinksBody").show();
  207. $(".managerLinksBody").css('margin-top',-$(".managerLinksBody").height() / 2);
  208. }