// ==UserScript== // @name LinkedIn Assessement Hyperlinker // @namespace LinkedIn Assessement Hyperlinker // @version 2.0 // @description A light weight script to convert LinkedIn assessment questions into a clickable hyperlink to help you pass. // @author JustSomeGuy // @include *linkedin.com/skill-assessments/* // @include *linkedin.com/in/*/detail/assessments/* // @grant none // @downloadURL none // ==/UserScript==aaa // allow mouse events (function reStyle(){ var style = ``; document.head.insertAdjacentHTML("beforeend", style); })(); // loop check() setInterval(function(){ check(); }, 100); function convertQuestionToHyperLink() { // get elements var questionElement = document.querySelectorAll(".sa-assessment-quiz__title-question")[0]; var questionTextElement = document.querySelectorAll(".sa-assessment-quiz__multi-line")[0]; var question = document.querySelectorAll(".sa-assessment-quiz__multi-line span")[0]; var question2 = document.querySelectorAll(".sa-code-block")[0]; var title = document.getElementsByClassName("mt1")[0]; // check if question exists if (typeof(question) != 'undefined' && question !== null) { // get question question = question.innerHTML; // if it exists, get second part of question if (typeof(question2) != 'undefined' && question2 !== null) { question2 = question2.innerHTML; } else { question2 = ""; } //get name of assessment title = title.innerHTML; // remove "assessment" from string title = title.replace("Assessment", ""); // remove leading/trailing spaces title = title.trim(); var i; // remove formatting - loop in case of multiple occurrences for (i = 0; i < 10; i++) { question = question.replace('',''); question = question.replace('',''); } // set url question var urlquestion = htmlDecode(question + question2); // set search URL var url = "https://google.com/search?q="+title+' '+urlquestion.split(' ').join('+'); // direct changes to the question breaks the process // create container for hyperlinked question var newquestionElement = document.createElement("span"); // create hyperlink var a = document.createElement("a"); // attach question to new container var newquestionText = document.createTextNode(question); // check to see if questionSpan id exists var questionSpan = document.getElementById("questionSpan"); // set href a.href = url; // set target a.target = '_blank'; // hide existing question container questionTextElement.style.display = 'none'; // attach new container with clickable hyperlink newquestionElement.appendChild(a).appendChild(newquestionText); // set id of new container newquestionElement.id = "questionSpan"; // remove questionSpan element if it exists if (typeof(questionSpan) != 'undefined' && questionSpan !== null) { questionSpan.remove(); } // add questionSpan element before answers element questionElement.insertBefore(newquestionElement, questionElement.childNodes[0]); } } function htmlDecode(input){ var e = document.createElement('div'); e.innerHTML = input; return e.childNodes[0].nodeValue; } function check(){ var cnt = document.querySelectorAll("[id^='ember'] [class*='artdeco-button__text']"); var qcnt = document.querySelectorAll("button.pv-assessment-item__action"); var dismissbtn = document.querySelectorAll("button.artdeco-modal__dismiss")[0]; var backbtn = document.querySelectorAll("button.mr2")[0]; if (typeof(backbtn) != 'undefined' && backbtn !== null) { backbtn.addEventListener('click', function(){ setTimeout(function() { check(); }, 1500); }, false); } if (typeof(dismissbtn) != 'undefined' && dismissbtn !== null) { dismissbtn.addEventListener('click', function(){ setTimeout(function() { check(); }, 1500); }, false); } var i; for (i = 0; i < cnt.length; i++) { if (cnt[i].innerHTML.includes("Next") || cnt[i].innerHTML.includes("Start")) { cnt[i].addEventListener('click', function(){ setTimeout(function() { convertQuestionToHyperLink(); }, 600); }, false); } else { cnt[i].addEventListener('click', function(){ setTimeout(function() { check(); }, 1500); }, false); } } for (i = 0; i < qcnt.length; i++) { qcnt[i].addEventListener('click', function(){ setTimeout(function() { check(); }, 1500); }, false); } }