Sorryops

Skip the half of the fun!

当前为 2024-04-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Sorryops
  3. // @namespace sorryops
  4. // @version 20240410.3
  5. // @description Skip the half of the fun!
  6. // @icon https://orioks.miet.ru/favicon.ico
  7. // @author electromagneticcyclone & angelbeautifull
  8. // @license Unlicense
  9. // @supportURL https://git.disroot.org/electromagneticcyclone/sorryops
  10. // @match https://orioks.miet.ru/student/student/test*
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @grant GM_addStyle
  14. // @grant GM_registerMenuCommand
  15. // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
  16. // @run-at document-start
  17. // ==/UserScript==
  18.  
  19. var config = new GM_config({
  20. id: 'config',
  21. title: 'Script Settings',
  22. fields: {
  23. auto_answer: {
  24. label: "Auto answer",
  25. type: 'select',
  26. options: [ 'No', 'Click', 'Click + Display' ],
  27. default: 'No',
  28. },
  29. },
  30. });
  31.  
  32. GM_registerMenuCommand('Script Settings', () => {
  33. config.open();
  34. })
  35.  
  36. window.addEventListener('load', actionFunction);
  37.  
  38. // https://stackoverflow.com/a/15710692
  39. function hashCode(s) {
  40. return s.split("").reduce(function(a, b) {
  41. a = ((a << 5) - a) + b.charCodeAt(0);
  42. return a & a;
  43. }, 0);
  44. }
  45.  
  46. function actionFunction() {
  47. var i;
  48. var objects = new Object();
  49. var boxes = document.getElementsByTagName('input');
  50. var answers = [];
  51. var form = document.getElementById('testform-answer');
  52. for (i = 0; i < boxes.length; i++) {
  53. if (boxes[i].type === 'checkbox' | boxes[i].type === 'radio') {
  54. answers.push(boxes[i]);
  55. var span = document.createElement('span');
  56. span.innerHTML =
  57. boxes[i].type === 'radio' && boxes[i].value == "1"
  58. ? "<b>" + boxes[i].value + ")</b> "
  59. : boxes[i].value + ") ";
  60. boxes[i].parentNode.insertBefore(span, boxes[i]);
  61. objects[boxes[i].value] = boxes[i].parentNode;
  62. }
  63. }
  64. const sorted_objects = Object.keys(objects).sort().reduce(
  65. (obj, key) => {
  66. obj[key] = objects[key];
  67. return obj;
  68. }, {}
  69. );
  70. for (var key in sorted_objects) {
  71. sorted_objects[key].remove();
  72. form.appendChild(sorted_objects[key]);
  73. }
  74. const auto_answer = config.get('auto_answer');
  75. var randansw;
  76. if (auto_answer != 'No') {
  77. randansw = Math.floor(Math.random() * answers.length);
  78. answers[randansw].click();
  79. }
  80. var variant = document.getElementById('w0').parentNode.textContent;
  81. variant = variant.slice(variant.indexOf("Вопрос:"));
  82. var pboxes = document.getElementsByTagName('p');
  83. for (i = 0; i < pboxes.length; i++) {
  84. var pbox = pboxes[i];
  85. if (pbox.textContent == "Вопрос:") {
  86. pbox.innerHTML = "<i>(Вариант <input onfocus='this.select();' id='variant' value='" + hashCode(variant) + (auto_answer == 'Click + Display' ? (" " + answers[randansw].value) : "") + "' readonly>)</i><br>" + pbox.textContent;
  87. break;
  88. }
  89. }
  90. }