您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show what isn't done and display uploaded files.
当前为
- // ==UserScript==
- // @name Almascript - Alma Start Process List Helper
- // @namespace https://greasyfork.org/en/users/8332-sreyemnayr
- // @version 2019.08.02
- // @description Show what isn't done and display uploaded files.
- // @author Ryan Meyers
- // @match https://sges.getalma.com/workflows/processes/*/review
- // @grant unsafeWindow
- // ==/UserScript==
- // Loaded via <script> tag, create shortcut to access PDF.js exports.
- var pdfjsLib = window['pdfjs-dist/build/pdf'];
- // The workerSrc property shall be specified.
- pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
- function fetchAndUpdate(node) {
- const updateNode = node;
- fetch(node.href).then(function(response) { return response.text(); }).then(function(body) {
- //console.log(body);
- var parser = new DOMParser();
- var doc = parser.parseFromString(body, "text/html");
- var xpath = "//li[contains(@class,'task')][not(contains(@class,'task-complete'))]";
- var result = document.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
- //console.log(result);
- var node, nodes = [];
- while (node = result.iterateNext()) {
- //console.log(node.textContent.trim());
- var newNode = document.createElement('div');
- newNode.classList.add("pill");
- newNode.innerHTML = "<i class=\"far fa-times-circle\" style=\"color:#eb6841;\"></i>"+node.textContent.trim();
- updateNode.append(newNode);
- }
- });
- }
- function fetchHealthForm(node) {
- const updateNode = node;
- fetch(node.href).then(function(response) { return response.text(); }).then(function(body) {
- //console.log(body);
- var parser = new DOMParser();
- var doc = parser.parseFromString(body, "text/html");
- var xpath = "//li[contains(@class,'task')]";
- var result = document.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
- //console.log(result);
- var node, nodes = [];
- while (node = result.iterateNext()) {
- var taskUri = node.dataset.href;
- var formUri = taskUri.replace("task-details","form");
- let headers = new Headers({
- "Accept" : "application/json",
- "Content-Type" : "application/json",
- "X-Requested-With": "XMLHttpRequest"
- });
- fetch(formUri, {method: "GET", headers: headers})
- .then(function(response) {
- return response.json();
- }).then(function(myJson) {
- //console.log(myJson);
- var jsonHTML = myJson.Message.html;
- jsonHTML = jsonHTML.replace(/form-section/g,"form-section-off");
- jsonHTML = jsonHTML.replace(/<ul class/g,"<ul style=\"display:none;\" class");
- //console.log(jsonHTML);
- //var files = jsonHTML.match(/<a href="(\/workflows\/processes\/.*\/get-file\?id=[a-zA-z0-9]*)">/g);
- var files = jsonHTML.match(/\/workflows\/processes\/.*\/get-file\?id=[a-zA-z0-9]*/g);
- if (files) {
- for (var file of files) {
- fetch(file).then(function(response) {
- return response.blob(); }
- ).then(async function(blob) {
- console.log(blob.type);
- let reader = new FileReader();
- reader.readAsArrayBuffer(blob);
- reader.onload = async function() {
- var newImg;
- //blob.arrayBuffer().then(async function(myBuffer){
- if (blob.type === "application/pdf") {
- newImg = document.createElement('canvas');
- var loadingTask = pdfjsLib.getDocument(file);
- loadingTask.promise.then(function(pdf) {
- console.log('PDF loaded');
- // Fetch the first page
- var pageNumber = 1;
- pdf.getPage(pageNumber).then(function(page) {
- console.log('Page loaded');
- var scale = 0.25;
- var viewport = page.getViewport(scale);
- // Prepare canvas using PDF page dimensions
- var canvas = newImg;
- var context = canvas.getContext('2d');
- canvas.height = 115;
- canvas.width = 80;
- // Render PDF page into canvas context
- var renderContext = {
- canvasContext: context,
- viewport: viewport
- };
- var renderTask = page.render(renderContext);
- renderTask.promise.then(function () {
- console.log('Page rendered');
- });
- });
- }, function (reason) {
- // PDF loading error
- console.error(reason);
- });
- //newImg = document.createElement('a');
- //newImg.href = file;
- //newImg.innerHTML = "Download";
- updateNode.append(newImg);
- }
- else {
- newImg = document.createElement('img');
- newImg.src = file;
- newImg.width = 200;
- updateNode.append(newImg);
- }
- };
- });
- }
- }
- });
- }
- });
- }
- function doIncomplete() {
- var xpath = "//tr[td[text()='Active (in progress)']]/td[2]/a";
- var result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
- var node, nodes = [];
- while (node = result.iterateNext()) {
- nodes.push(node);
- //console.log(node.href);
- fetchAndUpdate(node);
- }
- }
- function doComplete() {
- var xpath = "//tr[td[text()='Active (complete)']]/td[2]/a";
- var result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
- var node, nodes = [];
- while (node = result.iterateNext()) {
- nodes.push(node);
- //console.log(node.href);
- fetchHealthForm(node);
- }
- }
- (function() {
- 'use strict';
- var newStyle = document.createElement('style');
- newStyle.innerHTML = `
- .pill {
- background-color: #fff;
- padding: .5em;
- border-radius: 5px;
- display: inline-block;
- cursor: default;
- margin-top: 1em;
- font-size: 8pt;
- }
- `;
- document.getElementsByTagName('head')[0].append(newStyle);
- var showFormsButton = document.createElement('button');
- showFormsButton.onclick = doComplete;
- showFormsButton.innerHTML = "Show Uploads";
- document.getElementById('page-header').append(showFormsButton);
- doIncomplete();
- })();