kiv-lib

Helper functions

当前为 2023-10-17 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/477604/1266053/kiv-lib.js

  1. const waitFor = (target, selector) => {
  2. return new Promise(resolve => {
  3. if (target.querySelector(selector)) {
  4. return resolve(target.querySelector(selector));
  5. }
  6. const observer = new MutationObserver(mutations => {
  7. if (target.querySelector(selector)) {
  8. resolve(target.querySelector(selector));
  9. observer.disconnect();
  10. }
  11. });
  12. observer.observe(document.body, {
  13. childList: true,
  14. subtree: true
  15. });
  16. });
  17. };
  18.  
  19. const gmGet = async (url, cache_key) => {
  20.  
  21. if (cache_key) {
  22. const cachedData = localStorage.getItem(cache_key);
  23. const cachedTimestamp = parseInt(localStorage.getItem(cache_key + "_timestamp"));
  24. if (cachedData && cachedTimestamp && (Date.now() - cachedTimestamp) < 60 * 60 * 1000) {
  25. return JSON.parse(cachedData);
  26. }
  27. }
  28.  
  29. return new Promise((resolve, reject) => {
  30. GM.xmlHttpRequest({
  31. url,
  32. method: "GET",
  33. onload: (response) => {
  34. resolve(new Response(response.response, { statusText: response.statusText, status: response.status }));
  35. },
  36. onerror: (error) => {
  37. reject(error);
  38. }
  39. });
  40. })
  41. .catch((error) => {
  42. throw { message: "critical error", code: error.status };
  43. })
  44. .then((response) => {
  45. const result = response.json();
  46. return result.then((body) => {
  47. if (typeof body.error == 'undefined') {
  48. if (cache_key) {
  49. localStorage.setItem(cache_key, JSON.stringify(body));
  50. localStorage.setItem(cache_key + "_timestamp", Date.now());
  51. }
  52. return body;
  53. } else {
  54. throw { message: body.error.error, code: body.error.code };
  55. }
  56. });
  57. });
  58. };
  59.  
  60. function floatFormat(num, digits) {
  61. const lookup = [
  62. { value: 1, symbol: "" },
  63. { value: 1e3, symbol: "k" },
  64. { value: 1e6, symbol: "m" },
  65. { value: 1e9, symbol: "b" },
  66. { value: 1e12, symbol: "t" },
  67. { value: 1e15, symbol: "q" }
  68. ];
  69. const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
  70. var item = lookup.slice().reverse().find(function (item) {
  71. return num >= item.value;
  72. });
  73. return item ? (num / item.value).toPrecision(digits).replace(rx, "$1") + item.symbol : "0";
  74. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址