rahulkapoor90/VITacademics-Enhancement-Suite

View on GitHub
Extension for chrome/scripts/coursePage/content.js

Summary

Maintainability
F
5 days
Test Coverage
s = document.getElementsByTagName("a");

for (i=0; i<s.length; i++)
{
    var box = document.createElement("input");

    var att = document.createAttribute("type");
    att.value = "checkbox";
    box.setAttributeNode(att);

    var att1 = document.createAttribute("name");
    att1.value = "downloadSelect";
    box.setAttributeNode(att1);

    var att2 = document.createAttribute("value");
    att2.value = s[i].href;
    box.setAttributeNode(att2);

    var att3 = document.createAttribute("class");
    att3.value = "sexy-input";
    box.setAttributeNode(att3);

    var att4 = document.createAttribute("data-filename");
    att4.value = s[i].innerText;
    box.setAttributeNode(att4);

    s[i].parentNode.insertBefore(box, s[i]);
}

var script = document.createElement("script");

var script_content = `
//document.getElementById("madeby").style.visibility = "visible";
var checkedBoxes = document.querySelectorAll('input[name=downloadSelect]:checked');
var links = [];
for (i = 0; i<checkedBoxes.length; i++)
{
    links.push(checkedBoxes[i].value);
    // links[checkedBoxes[i].getAttribute("data-filename")] = checkedBoxes[i].value;
}
subject_name = document.getElementsByTagName("table")[1].getElementsByTagName("td")[8].innerText;
teacher_name = document.getElementsByTagName("table")[1].getElementsByTagName("td")[12].innerText;
window.postMessage({links: links, subject: subject_name, teacher: teacher_name}, '*');
`

script.textContent = "function download(){\n" + script_content + "}";

(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);


var button = document.createElement("input");

var att = document.createAttribute("type");
att.value = "button";
button.setAttributeNode(att);

var att = document.createAttribute("class");
att.value = "submit2";
button.setAttributeNode(att);

var att = document.createAttribute("name");
att.value = "Download Files";
button.setAttributeNode(att);

var att = document.createAttribute("value");
att.value = "Download Files";
button.setAttributeNode(att);

var att = document.createAttribute("onclick");
att.value = "download()";
button.setAttributeNode(att);

document.getElementsByName("courseplan")[0].appendChild(button)



// getting checked urls from injected code to the contect script
window.addEventListener('message', function(event) {
  // Only accept messages from same frame
  if (event.source !== window) {
    return;
  }

  var message = event.data;

  // Only accept messages that we know are ours
  if (typeof message !== 'object' || message === null || !message.links) {
    return;
  }
  //    request type
  message.type = "rename";
  chrome.runtime.sendMessage(message);
  // console.log(message.links);
});

//**    for the download all button.

var init = function(){
    var links = [];
    var dZip = function(){

        var Promise = window.Promise;
        if (!Promise) {        Promise = JSZip.external.Promise;    }

        function urlToPromise(url) {
            return new Promise(function(resolve, reject) {
                JSZipUtils.getBinaryContent(url, function (err, data) {
                    if(err) {
                        reject(err);
                    } else {
                        resolve(data);
                    }
                });
            });
        }

        var zip = new JSZip();
        links.forEach(function(e, i){
            zip.file("filename"+i+".pdf", urlToPromise(e), {binary:true});
        })

        // when everything has been downloaded, we can trigger the dl
        zip.generateAsync({type:"blob"})
        .then(function callback(blob) {

            // see FileSaver.js
            saveAs(blob, "Material.zip");

            console.log("done !");
        }, function (e) {
            console.error(e);
        });

    }
    var dA = function(){
        var subject_name = document.getElementsByTagName("table")[1].getElementsByTagName("td")[8].innerText;
        var teacher_name = document.getElementsByTagName("table")[1].getElementsByTagName("td")[12].innerText;
        chrome.runtime.sendMessage({
            "type":"rename", "links": links, "subject": subject_name, "teacher": teacher_name
        })
    }

    var a=`<tr>
    <td bgcolor="#5A768D" width="22%" height="30"><font color="#FFFFFF">Download All Contents</font></td>
              <td width="75" bgcolor="#EDEADE">  <input class="submit" type="submit" value="Download All"> </td>
    </tr>`
    a=$(a);
    $('table:nth-of-type(2)').find('tbody').prepend(a);

    var b=`<tr>
    <td bgcolor="#5A768D" width="22%" height="30"><font color="#FFFFFF">Download All Zip</font></td>
              <td width="75" bgcolor="#EDEADE">  <input class="submit" type="submit" value="Download All Zip"> </td>
    </tr>`
/*    b=$(b);
    $(b).find('input:submit').click(dZip);
    $('table:nth-of-type(2)').find('tbody').prepend(b);
*/    $('input[name="downloadSelect"]').each(function(i, val){links.push($(val).attr('value'))});
    $(a).find('input:submit').click(dA);
}
onload = init();