ManyAnswers PollMaker

Create Polls with many answers easier by just pasting a text with one answer per line

  1. // ==UserScript==
  2. // @name ManyAnswers PollMaker
  3. // @description Create Polls with many answers easier by just pasting a text with one answer per line
  4. // @namespace https://github.com/victornpb/many-answers-poll-maker
  5. // @version 1.0
  6. // @match https://www.poll-maker.com/
  7. // @homepageURL https://github.com/victornpb/many-answers-poll-maker
  8. // @supportURL https://github.com/victornpb/many-answers-poll-maker/issues
  9. // @contributionURL https://www.buymeacoffee.com/vitim
  10. // @grant none
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. function createUI(){
  15. var html = /**/`
  16. <div style="background: #3d5ba0;border-radius: 3px;padding: 5px;margin-bottom: 1em;">
  17. <h2>Anwsers</h2>
  18. <textarea placeholder="Type one answer per line" style="width: 100%; height: 25em; box-sizing: border-box; white-space: nowrap;" autofocus></textarea>
  19. <div style="display: flex; margin: 3px;">
  20. <a>ManyAnswers</a>
  21. <span style="flex-grow: 1;"></span>
  22. <button class="readFromPage">Refresh</button>
  23. <button class="writeToPage">Set answers</button>
  24. </div>
  25. </div>
  26. `;
  27. var d = document.createElement("div");
  28. d.innerHTML = html;
  29. var textarea = d.querySelector("textarea");
  30. const parent = document.querySelector('.tab-page.tab-1');
  31.  
  32. parent.insertBefore(d, document.querySelector('#qp-ans-b'));
  33. textarea.focus();
  34.  
  35. d.querySelector(".readFromPage").onclick = readFromPage;
  36. d.querySelector(".writeToPage").onclick = writeToPage;
  37. function readFromPage(obj) {
  38. var arr = read();
  39. textarea.value = arr.join("\n");
  40. textarea.select();
  41. }
  42.  
  43. function writeToPage() {
  44. var str = textarea.value;
  45. var arr;
  46. arr = str.split(/\n\r|\n/).map(line=>line.trim()).filter(Boolean);
  47. if (arr) write(arr);
  48. }
  49.  
  50. }
  51.  
  52. createUI();
  53.  
  54. function read() {
  55. return Array.from(document.querySelectorAll("#qp-ans-b input"))
  56. .map(el => el.value)
  57. .filter(Boolean);
  58. }
  59.  
  60. async function write(entries) {
  61. const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
  62. async function type(el, value) {
  63. const ev = (el, type) =>{
  64. var e = new Event(type);
  65. e.key = "Enter";
  66. e.keyCode = 13;
  67. e.which = e.keyCode;
  68. e.altKey = false;
  69. e.ctrlKey = false;
  70. e.shiftKey = false;
  71. e.metaKey = false;
  72. e.bubbles = true;
  73. el.dispatchEvent(e);
  74. };
  75.  
  76. el.focus();
  77. el.value = value;
  78. ev(el, 'keydown');
  79. ev(el, 'keyup');
  80. ev(el, 'keypress');
  81. ev(el, 'input');
  82. await delay(10);
  83. }
  84.  
  85. try {
  86. const container = document.querySelector("#qp-ans-b");
  87.  
  88. for (let i = 0; i < entries.length; i++) {
  89. const inputs = container.querySelectorAll("input");
  90. await type(inputs[i], entries[i]);
  91. }
  92.  
  93. const inputs = container.querySelectorAll("input");
  94. if (inputs.length> entries.length) {
  95. for (let i = entries.length; i < inputs.length; i++) {
  96. await type(inputs[i], "");
  97. }
  98. }
  99.  
  100. await delay(10);
  101.  
  102. } catch (err) {
  103. alert("Something went wrong! Please refresh to discard changes!\n" + err);
  104. console.error(err);
  105. debugger;
  106. }
  107. }

QingJ © 2025

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