Add links to preview PDFs in Google Docs viewer on the current page
// ==UserScript==
// @name PDF Preview Links
// @namespace http://cl.thapar.edu/
// @version 0.7
// @description Add links to preview PDFs in Google Docs viewer on the current page
// @author You
// @match https://cl.thapar.edu/*.php
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
var customStyles = `
.accordion {
background-color: #eee;
color: #444;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
transition: 0.4s;
}
.active, .accordion:hover {
background-color: #ccc;
}
`;
var styleElement = document.createElement('style');
styleElement.textContent = customStyles;
document.head.appendChild(styleElement);
var scriptElement = document.createElement('script');
scriptElement.type = "module";
scriptElement.src = '//mozilla.github.io/pdf.js/build/pdf.mjs';
document.head.appendChild(scriptElement);
var targetElements = document.querySelectorAll('td a[href^="download.php?id="]');
var x;
targetElements.forEach(function (element) {
x++;
var tr = element.parentElement.parentElement;
var googleDocsPreviewLink = 'https://docs.google.com/viewer?url=' + encodeURIComponent("https://cl.thapar.edu/" + element.getAttribute('href')) + '&embedded=true';
tr.insertCell().innerHTML = `🔽 <a href="${googleDocsPreviewLink}" target="_blank">Preview</a>`;
var table = tr.parentElement.parentElement;
tr.classList.add('accordion');
var newRow = table.insertRow(tr.rowIndex + 1);
// table.setAttribute('layout', 'fixed');
newRow.innerHTML = `
<td colspan="7" style="display:none" align="center">
<img src="https://blog.motionisland.com/wp-content/uploads/2022/03/Loading_1.gif" width="30%">
</td>
`;
tr.addEventListener('click', function () {
var panel = tr.nextElementSibling.children[0];
if (panel.style.display === "") {
panel.style.display = "none";
} else {
panel.style.display = "";
}
if(tr.nextElementSibling.children[0].children.length > 0 && tr.nextElementSibling.children[0].children[0].tagName === 'CANVAS'){
return;
}
var { pdfjsLib } = globalThis;
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.mjs';
pdfjsLib.getDocument(element.getAttribute('href')).promise.then(doc => {
for(var i=0; i<doc._pdfInfo.numPages; i++){
doc.getPage(i+1).then(page => {
var scale = 1.6;
var viewport = page.getViewport({ scale: scale });
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext).promise.then(() => {
tr.nextElementSibling.children[0].appendChild(canvas);
});
});
}
//delete the loading gif
tr.nextElementSibling.children[0].children[0].remove();
console.log(`This document has ${doc._pdfInfo.numPages} pages.`);
});
});
});
})();