PupilPath Plus

This script calculates and converts your average, it also has visual grade changer

当前为 2018-11-04 提交的版本,查看 最新版本

// ==UserScript==
// @name          PupilPath Plus
// @namespace     https://github.com/DeathHackz
// @homepageURL   https://github.com/DeathHackz/PupilPathPlus
// @supportURL    https://github.com/DeathHackz/PupilPathPlus/issues
// @require       https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/fancybox/1.3.4/jquery.fancybox-1.3.4.pack.min.js
// @icon          https://github.com/DeathHackz/PupilPathPlus/raw/master/icon.png
// @icon64        https://github.com/DeathHackz/PupilPathPlus/raw/master/icon.png
// @version       3.2
// @description   This script calculates and converts your average, it also has visual grade changer
// @author        DeathHackz
// @match         https://*.pupilpath.skedula.com/*
// @grant         GM_xmlhttpRequest
// @run-at        document-body
// ==/UserScript==

"use strict";
var version = "3.2";

$("head").append(
  '<link ' +
  'href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" ' +
  'rel="stylesheet" type="text/css">'
);

$("head").append(
  '<link ' +
  'href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/1.3.4/jquery.fancybox-1.3.4.css" ' +
  'rel="stylesheet" type="text/css">'
);

var url = "https://raw.githubusercontent.com/DeathHackz/PupilPathPlus/master/src/PupilPathPlus.meta.js";
$.get(url, function (data) {
  if (data.indexOf("// @version       " + version) != -1) {} else {
    var pk = data.split("\n");
    var results = pk.filter(function (value) {
      return value.indexOf("// @version") >= 0;
    });
    var ok = results[0].split(" ");
    var hh = ok.length - 1;
    var newversion = ok[hh];
    if (newversion > version) {
      toastr.options = {
        closeButton: true,
        debug: false,
        newestOnTop: false,
        progressBar: true,
        positionClass: "toast-top-right",
        preventDuplicates: true,
        onclick: function () {
          window.open(
            "https://raw.githubusercontent.com/DeathHackz/PupilPathPlus/master/src/PupilPathPlus.user.js"
          );
        },
        showDuration: "300",
        hideDuration: "1000",
        timeOut: 0,
        extendedTimeOut: 0,
        showEasing: "swing",
        hideEasing: "linear",
        showMethod: "fadeIn",
        hideMethod: "fadeOut",
        tapToDismiss: false
      };
      toastr.info("Click Here to Update Now!", "PupilPath Plus v" + newversion + " has been released!");
    }
  }
}, "text");

if (localStorage.length === 0) {
  localStorage.setItem('PupilPath Plus Version', "v" + version);
}

if (localStorage.getItem("PupilPath Plus Version") !== "v" + version) {
  toastr.options = {
    closeButton: true,
    debug: false,
    newestOnTop: false,
    progressBar: true,
    positionClass: "toast-top-right",
    preventDuplicates: true,
    onclick: function () {
      window.open(
        "https://github.com/DeathHackz/PupilPathPlus/blob/master/CHANGELOG.md"
      );
    },
    showDuration: "300",
    hideDuration: "1000",
    timeOut: 0,
    extendedTimeOut: 0,
    showEasing: "swing",
    hideEasing: "linear",
    showMethod: "fadeIn",
    hideMethod: "fadeOut",
    tapToDismiss: false
  };
  toastr.info("View Changelog", "PupilPath Plus Updated to v" + version);
  localStorage.setItem('PupilPath Plus Version', "v" + version);
}

function getAverage() {
  if ($('#progress-card').length === 1) {

    if ($('#totalaverage').length === 0) {
      $('.information').prepend("<a href='#ginfo' id='averagep' style='color: #585b66;position: static;float: right;padding-top: 10px;padding-right: 10px;'>Total Average: <img id='avgimg' src='' /><span id='totalaverage'></span></a>");
    }
    $("a#averagep").fancybox({
      'type': 'inline',
      'autoScale': true,
      'autoDimensions': true,
      'overlayOpacity': 0,
      'transitionIn': 'elastic',
      'transitionOut': 'elastic',
      'padding': 20,
      'centerOnScroll': true
    });
    var links = document.querySelectorAll('tr[style="cursor: pointer"]');
    var One = "";
    var Two = "";
    var Three = "";
    var Four = "";
    var Five = "";
    var Six = "";
    var Seven = "";
    var Eight = "";
    var Nine = "";
    var num = 0;
    var count = 0;
    for (var i = 0; i < links.length; i++) {
      var str = links[i].innerText;
      One = str.split('MP1: ')[1];
      One = parseFloat(One);
      One = One || 0;
      if (One === 0) {} else {
        num += parseFloat(One);
        count++;
      }
      Two = str.split('MP2: ')[1];
      Two = parseFloat(Two);
      Two = Two || 0;
      if (Two === 0) {} else {
        num += parseFloat(Two);
        count++;
      }
      Three = str.split('MP3: ')[1];
      Three = parseFloat(Three);
      Three = Three || 0;
      if (Three === 0) {} else {
        num += parseFloat(Three);
        count++;
      }
      Four = str.split('MP4: ')[1];
      Four = parseFloat(Four);
      Four = Four || 0;
      if (Four === 0) {} else {
        num += parseFloat(Four);
        count++;
      }
      Five = str.split('MP5: ')[1];
      Five = parseFloat(Five);
      Five = Five || 0;
      if (Five === 0) {} else {
        num += parseFloat(Five);
        count++;
      }
      Six = str.split('MP6: ')[1];
      Six = parseFloat(Six);
      Six = Six || 0;
      if (Six === 0) {} else {
        num += parseFloat(Six);
        count++;
      }
      Seven = str.split('MP7: ')[1];
      Seven = parseFloat(Seven);
      Seven = Seven || 0;
      if (Seven === 0) {} else {
        num += parseFloat(Seven);
        count++;
      }
      Eight = str.split('MP8: ')[1];
      Eight = parseFloat(Eight);
      Eight = Eight || 0;
      if (Eight === 0) {} else {
        num += parseFloat(Eight);
        count++;
      }
      Nine = str.split('MP9: ')[1];
      Nine = parseFloat(Nine);
      Nine = Nine || 0;
      if (Nine === 0) {} else {
        num += parseFloat(Nine);
        count++;
      }
    }
    var avg = num / count;
    var finalavg = Math.ceil(avg * 100) / 100;
    var avgimg;
    var fcolor;
    var avgfix = Number(finalavg);

    if (avgfix >= 90) {
      avgimg = "/img/ico/star.png";
      fcolor = "#0087FF";
    } else {
      if (avgfix >= 80) {
        avgimg = "/img/ico/tick.png";
        fcolor = "#1FBA24";
      } else {
        if (avgfix >= 65) {
          avgimg = "/img/ico/error.png";
          fcolor = "#AA9901";
        } else {
          if (avgfix <= 64) {
            avgimg = "/img/ico/exclamation.png";
            fcolor = "#CF1920";
          }
        }
      }
    }
    var lettergrade;
    var collegegrade;
    if (avgfix >= 97) {
      lettergrade = "A+";
      collegegrade = "4.0";
    } else {
      if (avgfix >= 93) {
        lettergrade = "A";
        collegegrade = "4.0";
      } else {
        if (avgfix >= 90) {
          lettergrade = "A-";
          collegegrade = "3.7";
        } else {
          if (avgfix >= 87) {
            lettergrade = "B+";
            collegegrade = "3.3";
          } else {
            if (avgfix >= 83) {
              lettergrade = "B";
              collegegrade = "3.0";
            } else {
              if (avgfix >= 80) {
                lettergrade = "B-";
                collegegrade = "2.7";
              } else {
                if (avgfix >= 77) {
                  lettergrade = "C+";
                  collegegrade = "2.3";
                } else {
                  if (avgfix >= 73) {
                    lettergrade = "C";
                    collegegrade = "2.0";
                  } else {
                    if (avgfix >= 70) {
                      lettergrade = "C-";
                      collegegrade = "1.7";
                    } else {
                      if (avgfix >= 67) {
                        lettergrade = "D+";
                        collegegrade = "1.3";
                      } else {
                        if (avgfix >= 65) {
                          lettergrade = "D";
                          collegegrade = "1.0";
                        } else {
                          if (avgfix < 65) {
                            lettergrade = "E/F";
                            collegegrade = "0.0";
                          } else {}
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

    if ($('#avgi').length === 0) {
      $('body').append("<div id='avgi' style='display:none'><div id='ginfo'><h2>Average Conversion</h2><h4>Percent Grade: " + avgfix + "%</h4><h4>Letter Grade: " + lettergrade + "</h4><h4>4.0 Scale: " + collegegrade + "</h4><a target='_blank' href='https://pages.collegeboard.org/how-to-convert-gpa-4.0-scale'><p>More Info on College Board</p><a></div></div>");
    } else {
      $('#avgi').remove();
      $('body').append("<div id='avgi' style='display:none'><div id='ginfo'><h2>Average Conversion</h2><h4>Percent Grade: " + avgfix + "%</h4><h4>Letter Grade: " + lettergrade + "</h4><h4>4.0 Scale: " + collegegrade + "</h4><a target='_blank' href='https://pages.collegeboard.org/how-to-convert-gpa-4.0-scale'><p>More Info on College Board</p><a></div></div>");
    }
    if ($('#totalaverage').length === 1) {
      $('#totalaverage').text(" " + finalavg);
      $('#avgimg').attr("src", avgimg);
      document.getElementById('totalaverage').style.color = fcolor;
    }
  }
}
window.onload = getAverage();

if ($('#sidebar').length === 1) {
  $("<a style='position:absolute;top:20px;left:30px;' id='cred' href='#credit'>PupilPath Plus</a>").insertAfter('#CloseMenu');
  $('body').append("<div style='display:none'><div id='credit'><h2>Info</h2><p>Thanks for using PupilPath Plus!</p><p>Please leave a review on <a target='_blank' href='https://greasyfork.org/en/scripts/368390/feedback'>Greasy Fork</a></p><a target='_blank' href='https://github.com/DeathHackz/PupilPathPlus/issues'><p>Found a bug?<p></a>Made by <a target='_blank' href='https://github.com/DeathHackz'>DeathHackz</a></p><p>View on <a target='_blank' href='https://github.com/DeathHackz/PupilPathPlus'>GitHub</a></p></div></div>");
  $("a#cred").fancybox({
    'type': 'inline',
    'autoScale': true,
    'autoDimensions': true,
    'overlayOpacity': 0,
    'transitionIn': 'elastic',
    'transitionOut': 'elastic',
    'padding': 20,
    'centerOnScroll': true
  });
}

if ($('#progress-card').length === 1) {
  $('body').append("<div style='display:none'><div id='editgfloat'></div></div>");
  $('#profile-links').append("<br /><a href='#editgfloat' id='editg' style='margin-right:3px;'>Edit Grades</a>");
  $('#editgfloat').append("<form style='padding-bottom:10px;' id='modifygrades'></form>");

  $("a#editg").fancybox({
    'type': 'inline',
    'autoScale': true,
    'autoDimensions': true,
    'overlayOpacity': 0,
    'transitionIn': 'elastic',
    'transitionOut': 'elastic',
    'padding': 20,
    'centerOnScroll': true
  });

  var number = 0;
  var links = document.querySelectorAll('tr[style="cursor: pointer"]');

  for (var i = 0; i < links.length; i++) {
    var ck = $("#progress-card tr td:nth-child(5)")[i].innerHTML;
    if (ck == "-") {} else {
      number = number + 1;
      var newid = number + "active";
      var kk = links[i];
      kk.setAttribute("id", newid);
    }
  }
  var dop = 0;
  var aclass = [];
  for (var t = 0; t < number; t++) {
    dop = dop + 1;
    var dopid = dop + "active";
    var ioid = dop + "val";
    var jid = dop + "grade";
    var popo = document.getElementById(dopid).cells[1].innerText;
    var mopo = document.getElementById(dopid).cells[4].children[0];
    mopo.setAttribute("id", jid);
    var cholo = document.getElementById(dopid).cells[4].children[0].innerText.substring(1);
    $('#modifygrades').append(popo + "<input style='margin:5px;' id=" + ioid + " type='number' step='.01' value=" + cholo + " min='0' max='110'></input><br />");
    aclass.push(dop);

  }

  $('#modifygrades').append("<a class='btn btn-danger' id='rstbtn' style='margin-right:5px;'>Reset</a><a class='btn btn-warning' id='clearbtn' style='margin-right:5px;'>Clear</a><a style='margin-right:5px;' id='setbtn' class='btn btn-success'>Set</a><a style='float:right;margin-left:50px;' id='savebtn' class='btn btn-danger'>Save</a>");
}

function setsavedgrades() {
  if (sessionStorage.length === 1) {
    var check = JSON.parse(sessionStorage.getItem('SavedGrades'));
    if (check.length > 0) {
      $('#modifygrades').prepend("<p id='warningsave' style='background-color: #ffffa7;text-align: center;border-radius: 10px;'>These are not your real grades, click reset to see your actual grades</p>");
      for (var p = 0; p < aclass.length; p++) {
        var iop = aclass[p];
        var jj = check[p];
        var catag;
        var gimg;
        var ncolor;
        var ooid = iop + "active";
        var gid = iop + "grade";
        var nio = iop + "newgrades";
        var dopo = document.getElementById(ooid).cells[4].children[0];
        if (jj === "") {
          dopo.style.display = "initial";
        } else {
          if (jj >= 90) {
            gimg = "/img/ico/star.png";
            catag = "Honors";
            ncolor = "#0087FF";
          } else {
            if (jj >= 80) {
              gimg = "/img/ico/tick.png";
              catag = "Passing";
              ncolor = "#1FBA24";
            } else {
              if (jj >= 65) {
                gimg = "/img/ico/error.png";
                catag = "Borderline";
                ncolor = "#AA9901";
              } else {
                if (jj <= 64) {
                  gimg = "/img/ico/exclamation.png";
                  catag = "Failing";
                  ncolor = "#CF1920";
                }
              }
            }
          }
          dopo.style.display = "none";
          $("#" + nio).remove();
          $("<span id=" + nio + " style=color:" + ncolor + " data-gtype=" + catag + "><img src=" + gimg + "> " + jj + "</span>").insertBefore("#" + gid);
        }
      }
      getAverage();
    }
  }
}
window.onload = setsavedgrades();

if (sessionStorage.length === 1) {
  $("#savebtn").attr("disabled", true);
}

$("#savebtn").click(function () {
  if ($("#savebtn")[0].attributes.length === 3) {
    var SavedGrades = [];
    for (var o = 1; o < number + 1; o++) {
      var opop = o + "val";
      var oj = $("#" + opop).val();
      SavedGrades.push(oj);
    }
    sessionStorage.setItem('SavedGrades', JSON.stringify(SavedGrades));
    $("#savebtn").attr("disabled", true);
    setsavedgrades();
  }
});

$("#clearbtn").click(function () {
  $(':input', '#modifygrades').val('');
});

$("#rstbtn").click(function () {
  for (var q = 0; q < number; q++) {
    $("#" + noo).remove();
    $("#" + number + "newgrades").remove();
    var ioq = aclass[q];
    var noo = ioq + "newgrades";
    var kid = ioq + "grade";
    document.getElementById(kid).style.display = "initial";
    $("#modifygrades")[0].reset();
  }
  $('#warningsave').remove();
  $("#savebtn").removeAttr("disabled");
  sessionStorage.clear();
  getAverage();
});

$("#setbtn").click(function () {
  for (var p = 0; p < aclass.length; p++) {
    var iop = aclass[p];
    var mmm = iop + "val";
    var jj = $("#" + mmm).val();
    var catag;
    var gimg;
    var ncolor;
    var ooid = iop + "active";
    var gid = iop + "grade";
    var nio = iop + "newgrades";
    var dopo = document.getElementById(ooid).cells[4].children[0];
    if (jj === "") {
      dopo.style.display = "initial";
    } else {
      if (jj >= 90) {
        gimg = "/img/ico/star.png";
        catag = "Honors";
        ncolor = "#0087FF";
      } else {
        if (jj >= 80) {
          gimg = "/img/ico/tick.png";
          catag = "Passing";
          ncolor = "#1FBA24";
        } else {
          if (jj >= 65) {
            gimg = "/img/ico/error.png";
            catag = "Borderline";
            ncolor = "#AA9901";
          } else {
            if (jj <= 64) {
              gimg = "/img/ico/exclamation.png";
              catag = "Failing";
              ncolor = "#CF1920";
            }
          }
        }
      }
      dopo.style.display = "none";
      $("#" + nio).remove();
      $("<span id=" + nio + " style=color:" + ncolor + " data-gtype=" + catag + "><img src=" + gimg + "> " + jj + "</span>").insertBefore("#" + gid);
    }
  }
  getAverage();
});