LiveWorkShit solver

Solves liveworksheets.com exercises

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला 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);
    }
  };
})();