LiveWorkShit solver

Solves liveworksheets.com exercises

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         LiveWorkShit solver
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Solves liveworksheets.com exercises
// @author       SOMEBODY
// @grant        none
// @match        https://www.liveworksheets.com/*
// @require http://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==
/*jshint esversion: 8 */

(function () {
  "use strict";
  var selectableDiv,
    megoldasArray,
    joindiv,
    selectboxok,
    editablediv,
    howManyManual = 0,
    howManyManualCounted = false;

  function GM_addStyle(css) {
    var head, style;
    head = document.getElementsByTagName("head")[0];
    if (!head) {
      return;
    }
    style = document.createElement("style");
    style.type = "text/css";
    style.innerHTML = css;
    head.appendChild(style);
  }

  window.addEventListener(
    "load",
    function () {
      GM_addStyle(`
      .modal {
        z-index: -1;
        opacity: 0;
        position: fixed;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        overflow: auto;
        background-color: rgb(0,0,0);
        background-color: rgba(0,0,0,0.4);
      }`);

      GM_addStyle(`.modal-content {
        background-color: #fefefe;
        margin: 15% auto;
        padding: 20px;
        border: 1px solid #888;
        width: 80%;
      }`);

      GM_addStyle(`.close {
        color: #aaa;
        float: right;
        font-size: 28px;
        font-weight: bold;
      }`);

      GM_addStyle(`.close:hover,
      .close:focus {
        color: black;
        text-decoration: none;
        cursor: pointer;
      }`);

      GM_addStyle(`.hideModal{
        z-index:-1;
        opacity:0 !important;
        animation: hide .25s;
        transform: scale(0);
        }@keyframes hide {
        from{
          z-index:2;
        transform: scale(1);
            opacity:1;
        } to{
          z-index:-1;
            transform: scale(0);
            opacity: 0;
        }
    }`);
      GM_addStyle(`.showModal{
        opacity:1 !important;
        z-index:2;
        animation: show .2s;
        transform: scale(1);
    }
    @keyframes show {
      from{
        transform: scale(0);
        opacity:0 !important;
        z-index:-1;
      } to{
        transform: scale(1);
        opacity: 1 !important;
        z-index:2;
      }
    }`);

      if (
        $(
          "#capainfo > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody > tr > td:nth-child(3)"
        )[0] != null &&
        $(
          "#capainfo > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody > tr > td:nth-child(3)"
        )[0] != undefined
      ) {
        $(
          "#capainfo > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody > tr > td:nth-child(3)"
        )[0].innerHTML =
          "<span onClick='toggleSolveModal()'><center><img src='https://www.liveworksheets.com/images/comprobarrespuestas.jpg' style='cursor:pointer'></center><a href='javascript:void(1)'><h3>Feladatlap automatikus kitöltése</h3></a></span>";
      } else {
        var tempHtml = $("#capaeditar")[0].innerHTML;
        $("#capaeditar")[0].innerHTML =
          "<span onClick='toggleSolveModal()'><center><img src='https://www.liveworksheets.com/images/comprobarrespuestas.jpg' style='cursor:pointer'></center><a href='javascript:void(1)'><h3>Feladatlap automatikus kitöltése</h3></a></span><br>" +
          tempHtml;
      }

      $("body")[0].innerHTML += `
      <!-- The Modal -->
<div id="modal" class="modal hideModal" style="display: none;">
  <!-- Modal content -->
  <div class="modal-content">
    <span class="close">&times;</span>
    <center><h2 id="howManyManual" style="color: red;"></h2></center>
    <table style="width: 100%;">
      <tbody>
        <tr>
          <td style="width: 50%;">
            <span onClick="solveWorkShit();toggleSolveModal()">
              <img
                src="https://www.liveworksheets.com/images/comprobarrespuestas.jpg"
                style="cursor: pointer;"
              />
              <a href="javascript:void(1)"
                ><h3>Teljes feladatlap kitöltése<br>Solve worksheet automatically</h3></a
              ></span
            >
          </td>
          <td style="width: 50%;">
            <h2>Csak bizonyos feladatok megoldása</h2>
            <input type="checkbox" id="btn1" name="btn1" value="btn1" />
            <label for="btn1">Legördülő menü</label><br />
            <input type="checkbox" id="btn2" name="btn2" value="btn2" />
            <label for="btn2">Választható gombok</label><br />
            <input type="checkbox" id="btn3" name="btn3" value="btn3" />
            <label for="btn3">Pipálós</label><br />
            <input type="checkbox" id="btn4" name="btn4" value="btn4" />
            <label for="btn4">Begépelős</label><br />
            <input type="checkbox" id="btn5" name="btn5" value="btn5" />
            <label for="btn5">Összekötős</label><br />
            <input type="checkbox" id="btn6" name="btn6" value="btn6" />
            <label for="btn6">Fogd és húzd</label><br />
            <br>
            <button type="button" onClick="solveSpecific()">Kitöltés!</button>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</div>`;
      $(".close")[0].onclick = function () {
        window.toggleSolveModal();
      };
    },
    false
  );

  window.saveVariables = function saveVariables() {
    selectableDiv =
      $("#selectablediv")[0] != null && $("#selectablediv")[0] != undefined
        ? $("#selectablediv")[0]
        : [];
    megoldasArray = JSON.parse(window.contenidojson);
    joindiv =
      $(".joindiv")[0] != null && $(".joindiv")[0] != undefined
        ? $(".joindiv")
        : [];
    selectboxok =
      $(".selectbox")[0] != null && $(".selectbox")[0] != undefined
        ? $(".selectbox")
        : [];
    editablediv =
      $(".editablediv")[0] != null && $(".editablediv")[0] != undefined
        ? $(".editablediv")
        : [];
  };

  window.toggleSolveModal = function toggleSolveModal() {
    saveVariables();
    if ($(".modal")[0].style.display == "none") {
      $(".modal")[0].style.display = "block";
    }
    if (howManyManual == 0 && howManyManualCounted == false) {
      howManyManualCounted = true;
      for (const n of megoldasArray) {
        if (n[0] == "") {
          howManyManual++;
        }
      }
      if (howManyManual != 0) {
        $("#howManyManual")[0].innerHTML =
          "Figyelem!<br>Van " +
          String(howManyManual) +
          "db, amit manuálisan kell megoldanod!";
      }
    }
    for (var i = 1; i <= 6; i++) {
      $("#btn" + String(i))[0].checked = false;
    }
    $(".modal").toggleClass("showModal");
    $(".modal").toggleClass("hideModal");
    /*if ($(".modal")[0].style.display == "none") {
      $(".modal")[0].style.display = "block";
    } else {
      $(".modal")[0].style.display = "none";
    }*/
  };

  window.solveSpecific = function solveSpecific() {
    //Legördülő
    if ($("#btn1")[0].checked) {
      solveSelectBox();
    }
    //Választható
    if ($("#btn2")[0].checked) {
      solveGreenButton();
    }
    //Pipa
    if ($("#btn3")[0].checked) {
      solveCheckMark();
    }
    //Begépelő
    if ($("#btn4")[0].checked) {
      solveInputField();
    }
    //Öszekötős
    if ($("#btn5")[0].checked) {
      solveJoins();
    }
    //Fogd es huzd
    if ($("#btn6")[0].checked) {
      solveDragAndDrop();
    }
    toggleSolveModal();
  };

  //Solves worksheet, returns false if an error happened
  window.solveWorkShit = function solveWorkShit() {
    try {
      saveVariables();
      //Solve selectBoxes (dropdowns)
      solveSelectBox();
      //Solve green pressable buttons
      solveGreenButton();
      //Solve input fields
      solveInputField();
      //Solve checkMarks
      solveCheckMark();
      //solve joins
      solveJoins();
      //Solve drag&drops
      solveDragAndDrop();
    } catch (e) {
      return false;
    }
    return true;
  };

  //Solve dropdowns
  window.solveSelectBox = async function solveSelectBox() {
    saveVariables();
    try {
      //Selectboxok
      for (let i = 0; i < selectboxok.length; i++) {
        for (let j = 0; j < selectboxok[i].length; j++) {
          if (selectboxok[i][j].value == "right") {
            selectboxok[i][j].selected = "selected";
          }
        }
      }
    } catch (err) {
      console.error(err);
    }
  };

  window.solveGreenButton = async function solveGreenButton() {
    saveVariables();
    try {
      //Zold gombok
      for (let i = 0; i < megoldasArray.length; i++) {
        if (String(megoldasArray[i][0]).includes("select")) {
          if (
            String(megoldasArray[i][0]).includes("yes") &&
            clickedanswer[i] != "yes"
          ) {
            selectanswer(i);
          }
        }
      }
    } catch (err) {
      console.error(err);
    }
  };

  window.solveInputField = async function solveInputField() {
    saveVariables();
    try {
      //Beirhato szoveg
      for (let i = 0; i < editablediv.length; i++) {
        var str = editablediv[i].id;
        var string = megoldasArray[str.substring(7, str.length)][0];
        if (string.includes("/")) {
          editablediv[i].innerHTML = string.replace("$", "'").split("/")[0];
        } else {
          editablediv[i].innerHTML = string.replace("$", "'");
        }
      }
    } catch (err) {
      console.error(err);
    }
  };

  window.solveCheckMark = async function solveCheckMark() {
    saveVariables();
    try {
      //Pipa dobozok
      for (let i = 0; i < megoldasArray.length; i++) {
        if (
          String(megoldasArray[i][0]).includes("tick") &&
          String(megoldasArray[i][0]).includes("yes")
        ) {
          if (clickedanswer[i] != "yes") {
            tickanswer(i);
          }
        }
      }
    } catch (err) {
      console.error(err);
    }
  };

  window.solveJoins = async function solveJoins() {
    saveVariables();
    function indi(inputTomb, keresendo) {
      var returnArray = [];

      for (let i = 0; i < inputTomb.length; i++) {
        if (String(inputTomb[i][0]) == keresendo) {
          returnArray.push(i);
        }
      }
      return returnArray;
    }

    try {
      //Az osszekotos
      for (let i = 0; i < joindiv.length; i++) {
        joindiv[i].onmousedown = "";
        joindiv[i].ontouchstart = "";
      }
      for (let i = 0; i < window.contenidorellenado.length; i++) {
        window.contenidorellenado[i][5] = window.contenidorellenado[i][0];
      }

      for (let i = 0; i < megoldasArray.length; i++) {
        if (megoldasArray[i][0].includes("join")) {
          var arr = indi(megoldasArray, megoldasArray[i][0]);
          var y1 =
            Number(
              String($("#joindiv" + String(arr[0]))[0].style.top).split("px")[0]
            ) +
            Number(
              String($("#joindiv" + String(arr[0]))[0].style.height).split(
                "px"
              )[0]
            ) /
              2;
          var x1 =
            Number(
              String($("#joindiv" + String(arr[0]))[0].style.left).split(
                "px"
              )[0]
            ) +
            Number(
              String($("#joindiv" + String(arr[0]))[0].style.width).split(
                "px"
              )[0]
            ) /
              2;
          var x2 =
            Number(
              String($("#joindiv" + String(arr[1]))[0].style.left).split(
                "px"
              )[0]
            ) +
            Number(
              String($("#joindiv" + String(arr[1]))[0].style.width).split(
                "px"
              )[0]
            ) /
              2;
          var y2 =
            Number(
              String($("#joindiv" + String(arr[1]))[0].style.top).split("px")[0]
            ) +
            Number(
              String($("#joindiv" + String(arr[1]))[0].style.height).split(
                "px"
              )[0]
            ) /
              2;
          $("#elsvgdefinitivo")[0].innerHTML +=
            '<line x1="' +
            String(x1) +
            '" y1="' +
            String(y1) +
            '" x2="' +
            String(x2) +
            '" y2="' +
            String(y2) +
            '" stroke="darkblue" stroke-width="5"/>';

          arr = [];
        }
      }
    } catch (err) {
      console.error(err);
    }
  };

  window.solveDragAndDrop = async function solveDragAndDrop() {
    saveVariables();
    try {
      //Drag&Drop
      for (let i = 0; i < megoldasArray.length; i++) {
        var tempArray = [];
        if (String(megoldasArray[i][0]).includes("drag")) {
          tempArray.push(i);
          for (let j = 0; j < megoldasArray.length; j++) {
            try {
              if (
                megoldasArray[j][0] ==
                "drop" +
                  String(megoldasArray[i][0]).slice(
                    4,
                    String(megoldasArray[i][0]).length
                  )
              ) {
                tempArray.push(j);
                $("#dragablediv" + String(tempArray[0]))[0].style.top = $(
                  "#dropdiv" + String(tempArray[1])
                )[0].style.top;
                $("#dragablediv" + String(tempArray[0]))[0].style.left = $(
                  "#dropdiv" + String(tempArray[1])
                )[0].style.left;
                tempArray = [];
              }
            } catch (err) {
              console.error(err);
            }
          }
        }
      }
    } catch (err) {
      console.error(err);
    }
  };
})();