IdlePixelPlus Config Backup

Creates a panel for backing up IP+ Configs

目前為 2023-05-15 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name IdlePixelPlus Config Backup
  3. // @namespace lbtechnology.info
  4. // @version 1.0.0
  5. // @description Creates a panel for backing up IP+ Configs
  6. // @author Lux-Ferre
  7. // @license MIT
  8. // @match *://idle-pixel.com/login/play*
  9. // @grant none
  10. // @require https://greasyfork.org/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. class IPPBackupPlugin extends IdlePixelPlusPlugin {
  17. constructor() {
  18. super("IPPBackup", {
  19. about: {
  20. name: GM_info.script.name,
  21. version: GM_info.script.version,
  22. author: GM_info.script.author,
  23. description: GM_info.script.description
  24. }
  25. });
  26. this.previous = "";
  27. }
  28.  
  29. createPanel(){
  30. IdlePixelPlus.addPanel("ippbackup", "Backup/Restore Panel", function() {
  31. let content = `<div>`
  32. content += `<br/>`
  33. IdlePixelPlus.forEachPlugin(plugin=>{
  34. const id = plugin.id
  35. content += `<div>`
  36. content += `<label for='${id}_text'><p style="-webkit-text-stroke:1px cadetblue;">${id}:&nbsp&nbsp</p></label>`
  37. content += `<input id="${id}_text" type="text" style="width: 90%; float:right" readonly>`
  38. content += `</div>`
  39. })
  40.  
  41. content += `<input type="button" value="Load All" onClick="IdlePixelPlus.plugins.IPPBackup.loadAll()" id="load_all_button">`
  42. content += `<input type="button" value="Backup All" onClick="IdlePixelPlus.plugins.IPPBackup.backupAll()" id="backup_all_button">`
  43. content += `<input type="button" value="Restore All" onClick="IdlePixelPlus.plugins.IPPBackup.restoreAll()" id="restore_all_button">`
  44. content += `</div>`
  45. return content
  46. });
  47. }
  48.  
  49. loadAll(){
  50. IdlePixelPlus.forEachPlugin(plugin=>{
  51. const id = plugin.id
  52. let stored = localStorage.getItem(`idlepixelplus.${id}.config`);
  53. if (stored == null){
  54. stored = "";
  55. }
  56. const plugin_textbox = `#${id}_text`
  57. $(plugin_textbox).val(stored)
  58. })
  59. }
  60.  
  61. backupAll(){
  62. var data = {}
  63. IdlePixelPlus.forEachPlugin(plugin=>{
  64. const id = plugin.id
  65. let stored = localStorage.getItem(`idlepixelplus.${id}.config`);
  66. if (stored != null){
  67. data[id] = stored;
  68. }
  69. })
  70.  
  71. prompt("Config Backup:", JSON.stringify(data))
  72. }
  73.  
  74. restoreAll(){
  75. var data = {}
  76. const raw_input = prompt("Paste backup here:")
  77.  
  78. const config_obj = JSON.parse(raw_input)
  79.  
  80. for (const [key, value] of Object.entries(config_obj)) {
  81. localStorage.setItem(`idlepixelplus.${key}.config`, value);
  82. }
  83. }
  84.  
  85. onLogin(){
  86. this.createPanel()
  87. const lastMenuItem = $("#menu-bar-buttons > .hover-menu-bar-item").last();
  88. lastMenuItem.after(`
  89. <div onclick="IdlePixelPlus.setPanel('ippbackup')" class="hover hover-menu-bar-item">
  90. <p>💾 PLUGIN BACKUP</p>
  91. </div>
  92. `)
  93. }
  94. }
  95.  
  96. const plugin = new IPPBackupPlugin();
  97. IdlePixelPlus.registerPlugin(plugin);
  98.  
  99. })();