您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
当前为
// ==UserScript== // @name Immodem 0.7 // @namespace http://tampermonkey.net/ // @version 0.7 // @description try to take over the world! // @author coz3n // @match https://immodem.poste-immo.intra.laposte.fr/* // @grant none // ==/UserScript== let obsconf = {childList: true}, url = [], css = document.createTextNode("@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto Regular'),local('Roboto-Regular'),url(https://themes.googleusercontent.com/static/fonts/roboto/v11/2UX7WLTfW3W8TclTUvlFyQ.woff) format('woff')}html{box-sizing:border-box;overflow:hidden}*{font-family:roboto}*,:after,:before{box-sizing:inherit}body{padding:0;height:100vh}h4{font-size:16px}#page-content-wrapper,#wrapper,body{height:100vh}#wrapper{overflow-y:auto;overflow-x:hidden}#sidebar-wrapper{overflow:hidden}.container-fluid{height:100%}div vertilize-container{justify-content:space-between}#wrap{display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:-o-flex;display:flex;flex-flow:row nowrap;justify-content:space-around}.entete{width:100%;height:48px;text-align:center;font-size:1.5em;color:#fff;text-shadow:0 1px 0 #aaa;margin:0;padding:0}.bucket{padding:24px 8px 8px;margin:0 10px;display:flex;background:#ddd;height:80vh;overflow-y:scroll;flex-flow:row wrap;flex:1 1 100%;justify-content:space-between;align-items:flex-start;align-content:flex-start;max-width:20vw}.bucket>div{width:100%!important}.taskCard{border-radius:2px!important;border:none;box-shadow:0 1px 2px 0 rgba(0,0,0,.5);transition:box-shadow .25s linear;height:auto!important}.taskCard:hover{box-shadow:0 2px 4px 1px rgba(0,0,0,.5)}.taskInfos{font-size:12px}p{margin-bottom:6px}[id=\"Validation CP\"]{order:0}#Réalisation{order:1}[id=\"Validation technique\"]{order:2}[id=\"Réception de la demande\"]{order:3}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-thumb{background:#666;border-radius:16px}::-webkit-scrollbar-track{background:#ddd;width:12px}"), initLaunch, buckets = ["Validation CP","Réalisation","Validation technique","Réception de la demande"], sessionVal = localStorage.getItem("user_session"); console.log(JSON.parse(sessionVal)); /*--- waitForKeyElements(): A utility function, for Greasemonkey scripts, that detects and handles AJAXed content. Forked for use without JQuery. Usage example: waitForKeyElements ( "div.comments" , commentCallbackFunction ); //--- Page-specific function to do what we want when the node is found. function commentCallbackFunction (element) { element.text ("This comment changed by waitForKeyElements()."); } IMPORTANT: Without JQuery, this fork does not look into the content of iframes. */ function waitForKeyElements( selectorTxt, /* Required: The selector string that specifies the desired element(s). */ actionFunction, /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */ bWaitOnce /* Optional: If false, will continue to scan for new elements even after the first match is found. */ ) { var targetNodes, btargetsFound; targetNodes = document.querySelectorAll(selectorTxt); if (targetNodes && targetNodes.length > 0) { btargetsFound = true; /*--- Found target node(s). Go through each and act if they are new.*/ targetNodes.forEach(function (element) { var alreadyFound = element.dataset.found == 'alreadyFound' ? 'alreadyFound' : false; if (!alreadyFound) { //--- Call the payload function. var cancelFound = actionFunction(element); if (cancelFound) btargetsFound = false; else element.dataset.found = 'alreadyFound'; } }); } else { btargetsFound = false; } //--- Get the timer-control variable for this selector. var controlObj = waitForKeyElements.controlObj || {}; var controlKey = selectorTxt.replace(/[^\w]/g, "_"); var timeControl = controlObj[controlKey]; //--- Now set or clear the timer as appropriate. if (btargetsFound && bWaitOnce && timeControl) { //--- The only condition where we need to clear the timer. clearInterval(timeControl); delete controlObj[controlKey]; } else { //--- Set a timer, if needed. if (!timeControl) { timeControl = setInterval(function () { waitForKeyElements(selectorTxt, actionFunction, bWaitOnce ); }, 300 ); controlObj[controlKey] = timeControl; } } waitForKeyElements.controlObj = controlObj; } waitForKeyElements(".taskCard", card => ux(card)); function formatInfos(infos) { infos.forEach(info => { let infoSplit = info.innerHTML.split(" : ") // info.innerHTML = "<div class=\"infoLabel\">" + infoSplit[0] + "</div><div class=\"infoValue\">" + infoSplit[1] + "</div>"; info.innerHTML = `<div class="infoLabel"> ${infoSplit[0]}</div><div class="infoValue">${infoSplit[1]}</div>` }); } function ux() { let container = document.querySelector('[vertilize-container]'), card = arguments[0].parentElement, taskInfos = arguments[0].querySelectorAll('.taskInfos'), step = card.querySelector(".itemStep").innerText; let infosFormated = formatInfos(taskInfos); card.classList.add("card"); step = step.replace(/\n|\r|(\n\r)|\s/g,''); buckets.forEach(bucketId => { let newBucketId = bucketId.replace(/\n|\r|(\n\r)|\s/g,''); let bucket = document.getElementById(newBucketId); if (!bucket) { let divBucket = document.createElement('div'), headBucket = document.createElement('h4'), tasksContainer = document.createElement('div'); headBucket.innerText = bucketId; tasksContainer.classList.add("tasksContainer"); divBucket.id = newBucketId; divBucket.dataset.step = newBucketId; divBucket.classList.add("stepBucket"); divBucket.appendChild(headBucket); divBucket.appendChild(tasksContainer); container.appendChild(divBucket); if (step === newBucketId) { tasksContainer.appendChild(card); } } else { if (bucket.id === step) { let tasksContainer = bucket.querySelector(".tasksContainer"); tasksContainer.appendChild(card); } } }) }