Magic Userscript+ : 显示当前网站所有可用的UserJS脚本 Jaeger

显示当前网站的所有可用UserJS(Tampermonkey)脚本,交流QQ群:104267383

当前为 2021-03-11 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Magic Userscript+ : Show Site All UserJS
  3. // @name:zh Magic Userscript+ : 显示当前网站所有可用的UserJS脚本 Jaeger
  4. // @name:zh-CN Magic Userscript+ : 显示当前网站所有可用的UserJS脚本 Jaeger
  5. // @name:zh-TW Magic Userscript+ : 顯示當前網站所有可用的UserJS腳本 Jaeger
  6. // @name:ja Magic Userscript+ : 現在のサイトの利用可能なすべてのUserJSスクリプトを表示するJaeger
  7. // @name:ru-RU Magic Userscript+ : Показать пользовательские скрипты (UserJS) для сайта. Jaeger
  8. // @name:ru Magic Userscript+ : Показать пользовательские скрипты (UserJS) для сайта. Jaeger
  9. // @namespace https://github.com/magicoflolis/Userscript-Plus
  10. // @version 2.3.10
  11. // @description Show current site all UserJS,The easier way to install UserJs for Tampermonkey.
  12. // @description:zh 显示当前网站的所有可用UserJS(Tampermonkey)脚本,交流QQ群:104267383
  13. // @description:zh-CN 显示当前网站的所有可用UserJS(Tampermonkey)脚本,交流QQ群:104267383
  14. // @description:zh-TW 顯示當前網站的所有可用UserJS(Tampermonkey)腳本,交流QQ群:104267383
  15. // @description:ja 現在のサイトで利用可能なすべてのUserJS(Tampermonkey)スクリプトを表示します。
  16. // @description:ru-RU Показывает пользовательские скрипты (UserJS) для сайта. Легкий способ установить пользовательские скрипты для Tampermonkey.
  17. // @description:ru Показывает пользовательские скрипты (UserJS) для сайта. Легкий способ установить пользовательские скрипты для Tampermonkey.
  18. // @author Magic of Lolis
  19. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3ggEBCQHM3fXsAAAAVdJREFUOMudkz2qwkAUhc/goBaGJBgUtBCZyj0ILkpwAW7Bws4yO3AHLiCtEFD8KVREkoiFxZzX5A2KGfN4F04zMN+ce+5c4LMUgDmANYBnrnV+plBSi+FwyHq9TgA2LQpvCiEiABwMBtzv95RSfoNEHy8DYBzHrNVqVEr9BWKcqNFoxF6vx3a7zc1mYyC73a4MogBg7vs+z+czO50OW60Wt9stK5UKp9Mpj8cjq9WqDTBHnjAdxzGQZrPJw+HA31oulzbAWgLoA0CWZVBKIY5jzGYzdLtdE9DlcrFNrY98zobqOA6TJKHW2jg4nU5sNBpFDp6mhVe5rsvVasUwDHm9Xqm15u12o+/7Hy0gD8KatOd5vN/v1FozTVN6nkchxFuI6hsAAIMg4OPxMJCXdtTbR7JJCMEgCJhlGUlyPB4XfumozInrupxMJpRSRtZlKoNYl+m/6/wDuWAjtPfsQuwAAAAASUVORK5CYII=
  20. // @include *
  21. // @require https://greasyfork.org/scripts/23419-l-js/code/ljs.js
  22. // @require https://greasyfork.org/scripts/23420-userjs-base-js/code/userjs-basejs.js
  23. // @resource uiJs https://cdn.jsdelivr.net/gh/jae-jae/Userscript-Plus/dist/ui.gf.js?_=1615253800696
  24. // @resource ui https://cdn.jsdelivr.net/gh/jae-jae/Userscript-Plus/dist/ui.html?_=1615253800697
  25. // @resource count https://greasyfork.org/scripts/by-site.json
  26. // @resource adult https://sleazyfork.org/scripts/by-site.json
  27. // @grant GM_xmlhttpRequest
  28. // @grant GM_getResourceText
  29. // @grant GM_getValue
  30. // @grant GM_setValue
  31. // @grant unsafeWindow
  32. // @noframes
  33. // @connect cdn.bootcss.com
  34. // @connect raw.githubusercontent.com
  35. // @connect gist.githubusercontent.com
  36. // @connect cdnjs.cloudflare.com
  37. // @connect greasyfork.org
  38. // @connect sleazyfork.org
  39. // @connect cdn.jsdelivr.net
  40. // @run-at document-end
  41. // ==/UserScript==
  42.  
  43. unsafeWindow.GmAjax = GM_xmlhttpRequest;
  44.  
  45. (function() {
  46.  
  47. 'use strict';
  48.  
  49. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  50.  
  51. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  52.  
  53. var FetchUserjs = function () {
  54. function FetchUserjs() {
  55. _classCallCheck(this, FetchUserjs);
  56.  
  57. this.host = this.getMainHost();
  58. this.showTime = 10;
  59. this.quietKey = 'jae_fetch_userjs_quiet';
  60. this.countKey = 'jae_fetch_userjs_count';
  61. this.adultKey = 'jae_fetch_userjs_adult';
  62. this.tplBox = '<div id="jae_userscript_box"><style>.jae-userscript{position:fixed;width:370px;bottom:10px;right:20px;z-index:9999999999;height:56px}.jae-userscript-shadow{box-shadow:0 1px 4px rgba(0,0,0,.3),\\t\\t\\t\\t0px 0 20px rgba(0,0,0,.1) inset}.jae-userscript-shadow::before,.jae-userscript-shadow::after{content:"";position:absolute;z-index:-1}.jae-userscript-shadow::before,.jae-userscript-shadow::after{content:"";position:absolute;z-index:-1;bottom:15px;left:10px;width:50%;height:20%}.jae-userscript-shadow::before,.jae-userscript-shadow::after{content:"";position:absolute;z-index:-1;bottom:15px;left:10px;width:50%;height:20%;box-shadow:0 15px 10px rgba(0,0,0,.7);transform:rotate(-3deg)}.jae-userscript-shadow::after{right:10px;left:auto;transform:rotate(3deg)}</style><div class="jae-userscript" class=""></div></div>';
  63. }
  64.  
  65. _createClass(FetchUserjs, [{
  66. key: 'getMainHost',
  67. value: function getMainHost() {
  68. var host = window.location.hostname;
  69. return psl.get(host) || host.split('.').splice(-2).join('.');
  70. }
  71. }, {
  72. key: 'getCountData',
  73. value: function getCountData(host) {
  74. var countData = GM_getResourceText('count');
  75. countData = JSON.parse(countData);
  76. var count = countData[host];
  77. sessionStorage.setItem(this.countKey, count);
  78. return count;
  79. }
  80. }, {
  81. key: 'getAdultData',
  82. value: function getAdultData(host) {
  83. var adultData = GM_getResourceText('adult');
  84. adultData = JSON.parse(adultData);
  85. var adult = adultData[host];
  86. sessionStorage.setItem(this.adultKey, adult);
  87. return adult;
  88. }
  89. }, {
  90. key: 'setSize',
  91. value: function setSize(w, h) {
  92. $('.jae-userscript').css({
  93. width: w,
  94. height: h
  95. });
  96. }
  97. }, {
  98. key: 'addEventListener',
  99. value: function addEventListener(eventName, handler) {
  100. document.getElementById('jae_userscript_box').addEventListener(eventName, handler);
  101. }
  102. }, {
  103. key: 'bindEvent',
  104. value: function bindEvent() {
  105. var _this = this;
  106.  
  107. this.timeId = setTimeout(function () {
  108. $('#jae_userscript_box').remove();
  109. }, this.showTime * 1000);
  110.  
  111. this.addEventListener('max', function () {
  112. _this.setSize(860, 492);
  113. $('.jae-userscript').addClass('jae-userscript-shadow');
  114. clearTimeout(_this.timeId);
  115. });
  116.  
  117. this.addEventListener('min', function () {
  118. setTimeout(function () {
  119. $('.jae-userscript').removeClass('jae-userscript-shadow');
  120. _this.setSize(370, 56);
  121. }, 500);
  122. });
  123.  
  124. this.addEventListener('close', function () {
  125. sessionStorage.setItem(_this.quietKey, 1);
  126. $('#jae_userscript_box').remove();
  127. });
  128.  
  129. this.addEventListener('loading', function () {
  130. clearTimeout(_this.timeId);
  131. });
  132. }
  133. }, {
  134. key: 'execFrameJs',
  135. value: function execFrameJs(frameWindow) {
  136. var uiJs = GM_getResourceText('uiJs');
  137. return function (jsStr) {
  138. frameWindow.eval(jsStr);
  139. }.call(frameWindow, uiJs);
  140. }
  141. }, {
  142. key: 'render',
  143. value: function render() {
  144. if (!this.isQuiet) {
  145. var count = this.getCountData(this.host),
  146. adult = this.getAdultData(this.host);
  147. if (count || adult) {
  148. $('body').append(this.tplBox);
  149. var ui = GM_getResourceText('ui');
  150. var dom = document.getElementsByClassName('jae-userscript')[0];
  151. var tpl = '<iframe name="jaeFetchUserJSFrame" src="about:blank" style="width:100%;height:100%;border:0px;display: block!important;" allowTransparency="true"></iframe>';
  152. dom.innerHTML = tpl;
  153. var iframeDom = dom.children[0];
  154. iframe.write(iframeDom, ui);
  155.  
  156. this.execFrameJs(jaeFetchUserJSFrame.window);
  157.  
  158. this.bindEvent();
  159. }
  160. }
  161. }
  162. }, {
  163. key: 'isQuiet',
  164. get: function get() {
  165. var quiet = sessionStorage.getItem(this.quietKey);
  166. return quiet ? true : false;
  167. }
  168. }]);
  169.  
  170. return FetchUserjs;
  171. }();
  172.  
  173. ljs.exec(['jQuery', 'iframe', 'psl'], function () {
  174. var fu = new FetchUserjs();
  175. fu.render();
  176. });
  177.  
  178. })();