libloader

none

目前为 2025-03-07 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name libloader
  3. // @version 6
  4. // @description none
  5. // @license GPLv3
  6. // @run-at document-start
  7. // @author rssaromeo
  8. // @tag lib loader
  9. // @match *://*/*
  10. // @include *
  11. // @exclude /^https?:\/\/[^\/]*livereload.net\/files\/ffopen\/index\.html$/
  12. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAHJQTFRFAAAAEIijAo2yAI60BYyuF4WaFIifAY6zBI2wB4usGIaZEYigIoiZCIyrE4igG4iYD4mjEomhFoedCoqpDIqnDomlBYyvE4efEYmiDYqlA42xBoytD4mkCYqqGYSUFYidC4qoC4upAo6yCoupDYqmCYur4zowOQAAACZ0Uk5TAO////9vr////1+/D/+/L+/Pf/////+f3///////H4////////+5G91rAAACgUlEQVR4nM2Y22KjIBCGidg1264liZqDadK03X3/V2wNKHMC7MpF/xthHD5mgERAqZhWhfYqH6K+Qf2qNNf625hCoFj9/gblMUi5q5jLkXLCKudgyiRm0FMK82cWJp1fLbV5VmvJbCIc0GCYaFqqlDJgADdBjncqAXYobm1xh72aFMflbysteFfdy2Yi1XGOm5HGBzQ1dq7TzEoxjeNTjQZb7VA3e1c7+ImgasAgQ9+xusNVNZIo5xmOMgihIS2PbCQIiHEUdTvhxCcS/kPomfFI2zHy2PkWmA6aNatIJpKFJyekyy02xh5Y3DI9T4aOT6VhIUrsNTFp1pf79Z4SIIVDegl6IJO6cHiL/GimIZDhgTu/BlYWCQzHMl0zBWT/T3KAhtxOuUB9FtBrpsz0RV4xsjHmW+UCaffcSy/5viMGer0/6HdFNMZBq/vjJL38H9Dqx4Fuy0Em12DbZy+9pGtiDijbglwAehyj11n0tRD3WUBm+lwulE/8h4BuA+iWAQQnteg2Xm63WQLTpnMnpjdge0Mgu/GRPsV4xdjQ94Lfi624fabhDkfUqIKNrM64Q837v8yL0prasepCgrtvw1sJpoqanGEX7b5mQboNW8eawXaWXTMfMGxub472hzWzHSn6Sg2G9+6TAyRruE71s+zAzjWaknoyJCQzwxrghH2k5FDT4eqWunuNxyN9QCGcxVod5oADbYnIUkDTGZEf1xDJnSFteQ3KdsT8zYDMQXcHxsevcLH1TrsABzkNPyA/L7b0jg704viMMlpQI96WsHknCt/3YH0kOEo9zcGkwrFK39ck72rmoehmKqo2RKlilzSy/nJKEV45CT38myJp456fezktHjN5aeMAAAAASUVORK5CYII=
  13. // @namespace https://greasyfork.org/users/1184528
  14. // @require https://update.greasyfork.org/scripts/491829/1356221/tampermonkey%20storage%20proxy.js
  15. // @grant GM_getValue
  16. // @grant GM_setValue
  17. // @grant GM_registerMenuCommand
  18. // @grant unsafeWindow
  19. // ==/UserScript==
  20. JSON.tryparse ??= function (...args) {
  21. try {
  22. return JSON.parse(...args)
  23. } catch (e) {
  24. console.warn("JSON.tryparse error", e)
  25. return undefined
  26. }
  27. }
  28. ;(async () => {
  29. var err
  30. var sp
  31. const loadedscripts = {
  32. libloader: {
  33. savelib,
  34. loadlib,
  35. waitforlib,
  36. // requirescript, //for saying that a certan script should've been loaded by the time this function was called
  37. },
  38. }
  39. var menus = []
  40. async function waitforlib(name) {
  41. return new Promise((done) => {
  42. if (loadedscripts[name]) return done()
  43. var int = setInterval(() => {
  44. if (loadedscripts[name]) return done(clearInterval(int))
  45. })
  46. })
  47. }
  48. function loadlib(name, filename = "unset") {
  49. // if (err) throw new Error(err)
  50. name = name.replace(/\.js$/, "")
  51. if (!loadedscripts[name]) {
  52. err ??= `{${filename}} script "${name}" hasn't been loaded`
  53. log({ ...loadedscripts }, loadedscripts)
  54. throw new Error(err)
  55. }
  56. return loadedscripts[name]
  57. }
  58. // function getfilename() {
  59. // var scripts = document.getElementsByTagName("script")
  60. // var src = scripts[scripts.length - 1].src
  61. // src = src.replaceAll(/%\d\d/g, "")
  62. // if (src.startsWith("blob:")) return src.match(/[\w\d._]+\.js(?!\w)/)[0]
  63. // return src.match(/\/[^\/]\.js$/)[0]
  64. // }
  65.  
  66. function savelib(name, obj, liboptions, filename) {
  67. filename ??= name
  68. name = name.replace(/\.js$/, "")
  69. if (Object.prototype.toString.call(obj) === "[object Object]") {
  70. if (!loadedscripts[name]) loadedscripts[name] = {}
  71. Object.assign(loadedscripts[name], obj)
  72. } else {
  73. if (loadedscripts[name]) {
  74. if (
  75. Object.prototype.toString.call(loadedscripts[name]) ===
  76. "[object Object]"
  77. ) {
  78. err ??= `{${filename}} script with name "${name}" was allready loaded as an object`
  79. throw new Error(err)
  80. } else {
  81. err ??= `{${filename}} script with name "${name}" was allready loaded`
  82. throw new Error(err)
  83. }
  84. }
  85. loadedscripts[name] = obj
  86. }
  87. }
  88. Object.assign(unsafeWindow, {
  89. loadlib,
  90. })
  91. })()