您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A script to enhance everyday's life being at PULV
// ==UserScript== // @name Better-Devinci // @namespace Better-Devinci Scripts // @description A script to enhance everyday's life being at PULV // @match https://my.devinci.fr/* // @match https://learning.devinci.fr/* // @match https://adfs.devinci.fr/* // @exclude https://learning.devinci.fr/pluginfile.php/*/mod_resource/content/*/*.pdf // @version 4.5.0 // @author Better-Devinci // @license GNU GPLv3 // @run-at document-start // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @grant GM_xmlhttpRequest // ==/UserScript== //beginning IIFE (function () { 'use strict'; const xhr = new XMLHttpRequest(); xhr.open('GET', window.location.href, false); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { CheckPage() // lock page until full exec } }; xhr.send(null); function CheckPage(){ setup(); if(location.href.includes("my.devinci.fr/")){ Portal_Setup() if(location.href === "https://my.devinci.fr/"){ Portail_MainPage() } else if(location.href === "https://my.devinci.fr/?my=msg&Better-Devinci"){ BetterDevinci_Page() } else if(location.href === "https://my.devinci.fr/?my=marks"){ Marks() } else if(location.href === "https://my.devinci.fr/student/presences/"){ Presence() } else if(location.href.includes("https://my.devinci.fr/student/cours/evaluations/")){ Evaluations() } else if(location.href === 'https://my.devinci.fr/?my=edt'){ EDT_Page() } } else if(location.href.includes("https://learning.devinci.fr")){ Page_learning_devinci() if(location.href.includes("https://learning.devinci.fr/course/view.php?id=")||location.href.includes("https://learning.devinci.fr/mod") && !location.href.includes("https://learning.devinci.fr/mod/forum")){ Courses() } else if(location.href.includes("https://learning.devinci.fr/my/")){ Learning_Main_Page() } } else if(location.href.includes("https://adfs.devinci.fr/adfs/ls/") && GM_getValue("ADFS_autologin")){ ADFS() } } function setup(){ const betterdevinciactualversion = "4.4.2"; if(betterdevinciactualversion!=GM_getValue("Version_Better_Devinci")){ GM_setValue("Version_Better_Devinci",betterdevinciactualversion) GM.deleteValue("Move_Exams") GM.deleteValue("Number_Message_read") GM.deleteValue("Notification") const CheckGM= function(Item,Base_value){ if(GM_getValue(Item)===undefined){ GM_setValue(Item,Base_value) } } CheckGM("isFrench",true) CheckGM("ADFS_autologin",true) CheckGM("Hide_news",true) CheckGM("Hide_Slider",false) // Button for hide news CheckGM("Footer&Scrollbar",true) CheckGM("SideBar_Diminish",false) CheckGM("Better_Marks",true) CheckGM("Hide_sunday_calendar",false) CheckGM("Hide_inscription",false) CheckGM("Remove_guide",false) CheckGM("Scam_Warning",false) CheckGM("Dark_Mode",false) //for LMP still not fully implemented CheckGM("Better_Courses",true) CheckGM("Better_Courses_type",true) CheckGM("Better_Courses_completion",true) CheckGM("Better_Courses_name",true) CheckGM("LMP_News",true) CheckGM("LMP_Page_Header",true) CheckGM("LMP_Annonces",true) CheckGM("No_AutoDL",true) CheckGM("View_Images",true) CheckGM("Open_PDF",true) CheckGM("Hide_Locked",true) } const BasicStyle=` :root{ --main-bg-color: #161617; --main-color : white; } .p-3{ padding-top: 0px!important; } #page:not(.drawers.show-drawer-left) #topofscroll, #page:not(.drawers.show-drawer-right) #topofscroll{ max-width: 100%!important; } #main { padding-bottom: 0px!important; } #Slider_Button:active { background-color: #a0c7e4; box-shadow: none; color: #2c5777; } #Slider_Button { background-color: #e1ecf4; border-radius: 3px; border: 1px solid #7aa7c7; box-shadow: rgba(255, 255, 255, .7) 0 1px 0 0 inset; box-sizing: border-box; color: #39739d; cursor: pointer; display: inline-block; font-family: -apple-system,system-ui,"Segoe UI","Liberation Sans",sans-serif; font-size: 13px; font-weight: 400; line-height: 1.15385; margin: 0; outline: none; position: relative; text-align: center; text-decoration: none; user-select: none; -webkit-user-select: none; touch-action: manipulation; vertical-align: baseline; white-space: nowrap; } #Slider_Button:hover{ background-color: #b3d3ea; color: #2c5777; } `; GM_addStyle(BasicStyle) } function Portal_Setup(){ if(GM_getValue("Dark_Mode")){ const DarkMode = ` .table tbody tr.warning>td { background-color: rgb(56, 48, 0); } .table tbody tr.success > td { background-color: rgb(41, 60, 23); } .table th, .table td { border-top: 0px!important; } .panel .panel-heading { border-bottom: 0px!important; } .dd-module > .dd-handle{ color:white!important; } .dd-unite-student { background-color: #54545566; } .dd-handle { color:var(--main-color)!important; background: var(--main-bg-color)!important; } .b-dayview-day-container .b-calendar-cell.b-nonworking-day { background-color: #54545566!important; } .dropdown-menu>li>a { color:var(--main-color)!important } .nav-indicators .nav-messages .dropdown-menu li { border-top: 0px!important; } .nav-indicators .nav-messages .dropdown-menu .nav-messages-footer { background-color: var(--main-bg-color)!important; } .nav-indicators .nav-messages .dropdown-menu .nav-messages-header>a, .nav-indicators .nav-messages .dropdown-menu .nav-messages-header>a:hover, .nav-indicators .nav-messages .dropdown-menu .nav-messages-header>a:focus { color: var(--main-color)!important; } .nav-indicators .nav-messages .dropdown-menu .nav-messages-header {background-color: var(--main-bg-color)!important;} .panel { background-color: var(--main-bg-color)!important; } .site-menu-title{ color:var(--main-color)!important; } .site-menu{ background-color:var(--main-bg-color)!important; } .dropdown-menu{ background-color:var(--main-bg-color)!important; } .breadcrumb{ color:var(--main-color)!important; background-color:var(--main-bg-color)!important; } .breadcrumb.no_margin{ border:0px; } .site-menu-icon{ color:var(--main-color)!important; } .navbar-fixed-top{ margin:0px; } .b-toolbar { background-color:var(--main-bg-color)!important; } .b-daycellcollecter .b-dayview-content { background-color:var(--main-bg-color)!important; } .b-dayview-day-container .b-calendar-cell:not(.b-last-cell) { border-right: 0px!important; } .b-dayview-day-container { border-left: 0px!important; background-image:none!important; } .b-calendarrow .b-cal-cell-header { background-color: var(--main-bg-color)!important; } .social-box { background-color: var(--main-bg-color)!important; } body{ background-color:var(--main-bg-color)!important; color:var(--main-color)!important; } .b-panel>.b-panel-body-wrap{ background-color:var(--main-bg-color)!important; } .b-dayview-day-content{ border-top: 0px!important; } .b-calendar > * > .b-top-toolbar { border-bottom: 0px!important; } .b-dayview-schedule-container { border-left: 0px!important; } .table-striped tbody > tr:nth-child(odd) > td, .table-striped tbody > tr:nth-child(odd) > th { background-color: #f9f9f91a; } .accordion-heading { background-color: #f9f9f91a; } .b-dayview-day-container .b-calendar-cell .b-cal-event-body { background-color: rgb(27 27 41 / 90%) !important } .b-dayview-day-container .b-calendar-cell .b-cal-event { color: #aaa6a6!important; } #main > div.row-fluid > div > ul > div > a { background-color: #460404!important; border: 0px!important; } .table tbody tr.success > td { background-color: rgb(41, 60, 23)!important; } .table tbody tr.warning>td { background-color: #a3380063 !important; } .alert-success { background-color: rgb(41, 60, 23) !important; border-color : rgb(41, 60, 23) !important; } .alert-danger, .alert-error { background-color: #a3380063 !important; border-color: #a3380063 !important; } `; if(location.href === "https://my.devinci.fr/student/cours/"){ DarkMode +=` .tab-content div > ol > li > div { background: #4086cf !important; border: 0px!important; } .tab-content div > ol > li > ol > li > div { background: #4086cf75!important; border: 0px!important; } .tab-content div > ol > li > ol > li > div { background: #34994cab!important; border: 0px!important; } .tab-content div > ol > li > ol > li > ol > li > div { background: rgb(61, 46, 0)!important; border: 0px!important; } `} GM_addStyle(DarkMode); } //test const test = ` #b-calendar-1 { height : 50rem!important } ` GM_addStyle(test); if(GM_getValue("SideBar_Diminish")){ if(document.querySelector(".social-sidebar"+".sidebar-full")){ document.querySelector(".wraper"+".page-content"+".sidebar-full").className="wraper page-content" document.querySelector("body").style.overflowX='auto' document.querySelector("body").querySelector(".wraper"+".page-content").className = 'wraper page-content' document.querySelector(".social-sidebar").className = 'social-sidebar' } } if(GM_getValue("Footer&Scrollbar")){ document.querySelector('html').style.height="0px" //remove the scrollbar when not necessary if(document.querySelector('#footer')){ document.querySelector('#footer').remove() } } const BetterDevinci_link = document.createElement("button"); BetterDevinci_link.id = "BetterDevinci_link" BetterDevinci_link.style.backgroundColor = 'rgba(0, 0, 0, 0)' BetterDevinci_link.textContent = "+"; BetterDevinci_link.style.color = 'red' BetterDevinci_link.style.fontWeight='bold' BetterDevinci_link.style.fontSize='20px' BetterDevinci_link.addEventListener('click', BetterDevinci_Page) if(document.querySelector(".navbar-inner-title")){ document.querySelector(".navbar-inner-title").append(BetterDevinci_link) } if(document.querySelector(".social-sidebar"+".sidebar-full")!=null && GM_getValue("SideBar_Diminish")){ document.querySelector(".switch-sidebar-icon"+".icon-align-justify").click() } //'isFrench' let observer_Page = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { for (var node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE ) { if(node.matches("img") && node.src.includes("/images/flags") && node.parentElement.matches(".dropdown-toggle")){ node.src.includes("/fr") ? GM_setValue('isFrench',true) : GM_setValue('isFrench',false) } if(node.matches('#footer') && GM_getValue("Footer&Scrollbar")){ node.remove() } else if(node.matches(".navbar-inner-title")){ node.append(BetterDevinci_link) } else if(node.innerText && node.innerText.includes("let posting = $.ajax({\n")){ node.innerHTML=node.innerHTML.replace('let posting = $.ajax({\n ',"var posting = $.ajax({\n ") } else if(GM_getValue("SideBar_Diminish")){ if(node.matches(".wraper"+".page-content"+".sidebar-full")){ node.classname='wraper page-content' document.querySelector("body").querySelector(".wraper"+".page-content").className = 'wraper page-content' } else if(node.matches(".social-sidebar"+".sidebar-full")){ node.className = 'social-sidebar' document.querySelector("body").querySelector(".wraper"+".page-content").className = 'wraper page-content' } else if(node.matches("body") && node.parentElement!=document.querySelector("html")){ node.style.overflowX='auto' document.querySelector("body").querySelector(".wraper"+".page-content").className = 'wraper page-content' } } } } } } }); observer_Page.observe(document, { childList: true, subtree: true }); } function BetterDevinci_Page(){ if(document.querySelector("#Rewrite_Container")){ return; } let Rewrite_Container = document.createElement("div"); Rewrite_Container.id = "Rewrite_Container"; Rewrite_Container.style.margin='10px' Rewrite_Container.style.paddingLeft='10px' const TextPresentation=document.createElement("div"); TextPresentation.textContent = "This page lists everything Better-Devinci does on the portal and you can activate or deactivate these options"; TextPresentation.style.color= 'red' TextPresentation.style.marginBottom='20px' Rewrite_Container.append(TextPresentation) const data = [ { name : "ADFS_autologin",description : {en:"Adds the ability to autologin (email and password can only be accessed by the extension and nothing else)",fr:"Ajoute la possibilité de s'autologin (Email et mdp sont accessible que par l'extension), visible en bas de la page de login"}}, { name: 'Footer&Scrollbar', description: {en:'Removes the footer. The scrollbar when useful',fr:'Enlève le footer en bas de la page. Et la barre de scroll si possible'} }, { name: 'Hide_news', description: {en:'Adds the ability to hide & unhide the news panel with a button' ,fr:'Permet de cliquer sur un bouton pour toggle le panneau des news'}}, { name: 'Better_Marks', description: {en:'Adds the ability to diminish by semester and module the marks',fr:"Permet de cliquer sur les semestre et module dans l'onglet note"} }, { name: 'SideBar_Diminish', description: {en:'Diminish the sidebar when useful to have more place on the page',fr:'Réduit la barre sur le côté toujours, utile pour avoir plus de place' }}, { name : "Hide_sunday_calendar", description:{en:"Remove the sunday on the calendar",fr:'Enlève le Dimanche du calendrier'}}, {name : 'Hide_inscription',description : {en:'Removes the reinscription done message from the main page',fr:"Enlève le message de réinscription"}}, { name : "Remove_guide", description : {en:'Removes the Documents student guide',fr:'Enlève le document Guide étudiant de la page principale'}}, { name : "Scam_Warning", description : {en:'Removes the be careful of scam message',fr:"Enlève le message d'alerte au scam"}}, { name: "Dark_Mode",description: {en:'(FEATURE IS BACK!) Enables the dark mode for the portal (refresh to apply changes)',fr:'Mode sombre pour le portail (rafraichir pour appliquer)'}}, ] const table = document.createElement('table'); const headerRow = document.createElement('tr'); const nameHeaderCell = document.createElement('th'); nameHeaderCell.textContent = 'Name'; nameHeaderCell.style.height='50px' nameHeaderCell.style.width='200px' //headerRow.appendChild(nameHeaderCell); const descriptionHeaderCell = document.createElement('th'); descriptionHeaderCell.textContent = 'Description'; headerRow.appendChild(descriptionHeaderCell); const checkboxHeaderCell = document.createElement('th'); checkboxHeaderCell.textContent = 'Checkbox'; headerRow.appendChild(checkboxHeaderCell); table.appendChild(headerRow); data.forEach(item => { const row = document.createElement('tr'); const descriptionCell = document.createElement('td'); descriptionCell.textContent = item.description[GM_getValue("isFrench") ? 'fr' : 'en']; descriptionCell.style.textAlign = 'center'; row.appendChild(descriptionCell); const checkboxCell = document.createElement('td'); checkboxCell.style.display = 'flex' checkboxCell.style.justifyContent = 'center'; const checkbox = document.createElement('input'); checkbox.className='better-devinci-checkbox' checkbox.type = 'checkbox'; checkboxCell.appendChild(checkbox); row.appendChild(checkboxCell); if(GM_getValue(item.name)) { checkbox.checked = true; } checkbox.addEventListener('change', function() { if (GM_getValue(item.name)) { GM_setValue(item.name,false) } else{ GM_setValue(item.name,true) } }); table.appendChild(row); }); Rewrite_Container.append(table); if(document.querySelector("#main") && document.querySelector("#main").querySelectorAll(".container-fluid")){ if(document.querySelector("#main").querySelectorAll(".container-fluid")[1]){ document.querySelector("#main").querySelectorAll(".container-fluid")[1].remove() } else{ document.querySelector("#main").querySelectorAll(".container-fluid")[0].remove() } } if(document.querySelector("#main")){ document.querySelector("#main").append(Rewrite_Container) } let observer_Page = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { for (var node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE ) { if(node.matches(".container-fluid") && node.parentElement.matches("#main")){ if(node.parentElement.childElementCount==2){ document.querySelector("#main").append(Rewrite_Container) } node.remove() } } } } } }); observer_Page.observe(document, { childList: true, subtree: true }); } function Marks(){ var toggleClass = (el, name) => { if (el.classList.contains(name)) { el.classList.remove(name) } else el.className+= " "+name } [...document.querySelectorAll(".dd-handle")].filter((obj) => !obj.parentElement.classList.toString().includes("dd-module")) .forEach((item) => { //make selesters togglable if (item.parentElement.className == "dd-item" || true) { item.onclick = () => { [...item.parentElement.children].forEach((child) => { toggleClass(child, "hide") }) item.classList.remove("hide")} } }) let observer_Page = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { for (var node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE) { if (node.classList.toString().includes("dd-handle") && !node.parentElement.classList.toString().includes("dd-module") && !node.parentElement.classList.toString().includes("entry_elements")) { node.onclick = (e) => { let target = e.target; while (target.classList != "dd-handle") { target = target.parentElement } [...target.parentElement.children].forEach((child) => { if (child.classList.toString().includes("dd-list")) { if (!child.classList.toString().includes("hide")) { child.classList.add("hide") } else child.classList.remove("hide") } }) } } } } } } }); observer_Page.observe(document, { childList: true, subtree: true }); } function Portail_MainPage(){ //Need to check if it's the login page if(document.querySelector("#login") && document.querySelector("#login").value==''){ if(GM_getValue("Autologin email")){ document.querySelector("#login").value=GM_getValue("Autologin email") if(document.querySelector("#login").value.toLowerCase().includes("edu.devinci.fr")){ setTimeout( ()=> document.querySelector("#btn_next").click(),300) } } return; } if(document.querySelector(".alert"+".alert-success")){ const Inscription = document.querySelector(".alert"+".alert-success") if(GM_getValue("Hide_inscription")){ if(GM_getValue('Inscription_interval') == Inscription.innerText.match(/\d\d\d\d-\d\d\d\d/g)[0] && Inscription.innerText.includes("Vous êtes maintenant réinscrit(e) en ")){ Inscription.parentElement.parentElement.parentElement.parentElement.remove() } } if(Inscription.innerText.match(/\d\d\d\d-\d\d\d\d/g)){ if(Inscription.innerText.includes("Vous êtes maintenant réinscrit(e) en ")){ if(GM_getValue('Inscription_interval')!=Inscription.innerText.match(/\d\d\d\d-\d\d\d\d/g)[0]){ GM_setValue('Inscription_interval',Inscription.innerText.match(/\d\d\d\d-\d\d\d\d/g)[0]) GM_setValue("Hide_inscription",false) } } } } const Documents_guid_etudiant = document.querySelector(".social-box.social-blue") if(Documents_guid_etudiant){ if(Documents_guid_etudiant.innerText.includes("Guide de l'étudiant")){ Documents_guid_etudiant.remove() } } let SliderButton = document.createElement("button"); SliderButton.id = "Slider_Button"; SliderButton.textContent = "Hide News"; SliderButton.addEventListener("click", function() { if(GM_getValue("Hide_Slider")==false){ SliderButton.innerHTML="Show News" let Sibling = document.querySelector("#Slider_Button").parentElement.querySelector(".social-box") Sibling.className+=' hide' GM_setValue("Hide_Slider",true) } else{ SliderButton.innerHTML="Hide News" let Sibling = document.querySelector("#Slider_Button").parentElement.querySelector(".social-box") Sibling.className=Sibling.className.replace(" hide","") GM_setValue("Hide_Slider",false) } }) if(GM_getValue("Hide_news")){ const Body = document.querySelector(".body") if(Body && Body.parentElement && Body.parentElement.parentElement){ if(GM_getValue("Hide_Slider")){ SliderButton.innerHTML="Show News" Body.parentElement.className+=' hide' } Body.parentElement.parentElement.prepend(SliderButton); } } if(GM_getValue("Scam_Warning") && document.querySelector(".alert.alert-warning")){ const node = document.querySelector(".alert.alert-warning") if(node.innerText.includes(".devinci.fr") && node.innerText.includes(".leonard-de-vinci.net") && node.innerText.includes("✅")){ node.remove() } } let observer_Page = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { for (var node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE ) { if(node.matches("#login")){ if(GM_getValue("Autologin email")){ document.querySelector("#login").value=GM_getValue("Autologin email") let interval_login=setInterval(function(){ if(document.querySelector("#login").value.toLowerCase().includes("edu.devinci.fr") && document.querySelector("#btn_next")){ setTimeout( ()=> document.querySelector("#btn_next").click(),300) clearInterval(interval_login) } }, 20) } } else if(node.matches(".alert"+".alert-success")){ if(GM_getValue("Hide_inscription")){ if(GM_getValue('Inscription_interval') == node.innerText.match(/\d\d\d\d-\d\d\d\d/g)[0] && node.innerText.includes("Vous êtes maintenant réinscrit(e) en ")){ node.parentElement.parentElement.parentElement.parentElement.remove() } } if(node.innerText.match(/\d\d\d\d-\d\d\d\d/g)){ if(node.innerText.includes("Vous êtes maintenant réinscrit(e) en ")){ if(GM_getValue('Inscription_interval')!=node.innerText.match(/\d\d\d\d-\d\d\d\d/g)[0]){ GM_setValue('Inscription_interval',node.innerText.match(/\d\d\d\d-\d\d\d\d/g)[0]) GM_setValue("Hide_inscription",false) } } } } else if(GM_getValue("Hide_news") && node.matches('.social-box') && node.className==='social-box'){ if(GM_getValue("Hide_Slider")){ SliderButton.innerHTML="Show News" node.className+=' hide' } if(GM_getValue("Hide_news")){ node.parentElement.prepend(SliderButton); } } else if(GM_getValue("Hide_sunday_calendar") && node.matches(".b-last-cell") ){ node.remove() } else if(GM_getValue("Hide_sunday_calendar") && node.matches(".b-day-name-day") && node.innerText=="dim."){ node.parentElement.remove() } else if(GM_getValue("Remove_guide") &&node.matches("a") && node.textContent.includes("Guide de l'étudiant")){ node.parentElement.parentElement.remove() } else if(GM_getValue("Scam_Warning") && node.matches(".alert.alert-warning")){ if(node.innerText.includes(".devinci.fr") && node.innerText.includes(".leonard-de-vinci.net") && node.innerText.includes("✅")){ node.remove() } } } } } } }); observer_Page.observe(document, { childList: true, subtree: true }); } function Presence(){ if(document.querySelector(".icon-question-sign") && document.querySelector(".icon-question-sign")){ document.querySelector(".icon-question-sign").parentElement.remove() } let observer_Page = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { for (var node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE ) { if(node.matches('.alert'+'.alert-info') && node.innerText===' Pour accéder aux détails de la séance et à la validation de présence, cliquez sur le bouton "Relevé de présence".'){ node.remove() } } } } } }); observer_Page.observe(document, { childList: true, subtree: true }); } function Evaluations(){ let interval_login=setInterval(function(){ if(document.querySelectorAll("[id*='Tout à fait']")){ document.querySelectorAll("[id*='Tout à fait']").forEach(function(UwU){UwU.click()}) clearInterval(interval_login) } }, 20) } function EDT_Page(){ if(GM_getValue("Hide_sunday_calendar")){ let observer_EDT = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { for (var node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE ) { if(GM_getValue("Hide_sunday_calendar")){ if(node.matches(".b-last-cell") ){ node.remove() } else if(node.matches(".b-day-name-day") && node.innerText=="dim."){ node.parentElement.remove() } } } } } } }); observer_EDT.observe(document, { childList: true, subtree: true }); } } function ADFS(){ let username = document.createElement("input") username.id = "Better-devinci-username" username.className = "text fullWidth" username.placeholder = "B-D Autologin email" username.spellcheck = false let password = document.createElement("input") password.id = "Better-devinci-password" password.className = "text fullWidth" password.placeholder = "B-D Autologin password" password.spellcheck = false password.type= "password" let Save_ID = document.createElement("button") Save_ID.id = "Better-devinci-Save_ID-button" Save_ID.innerText = "Autologin save" Save_ID.addEventListener("click", function() { GM_setValue("Autologin email",username.value) GM_setValue("Autologin password",password.value) if(GM_getValue("Autologin email") && GM_getValue("Autologin password")){ document.querySelector("#userNameInput").value = GM_getValue("Autologin email") document.querySelector("#passwordInput").value = GM_getValue("Autologin password") if(document.querySelector("#submitButton") && GM_getValue("Autologin email") && GM_getValue("Autologin password") && document.querySelector("#userNameInput").value!='' && document.querySelector("#passwordInput").value!=''){ document.querySelector("#submitButton").click() } } }) if(document.querySelector("#footerPlaceholder")){ document.querySelector("#footerPlaceholder").append(username) document.querySelector("#footerPlaceholder").append(password) document.querySelector("#footerPlaceholder").append(Save_ID) document.querySelector("#copyright").remove() if(GM_getValue("Autologin email") && GM_getValue("Autologin password")){ document.querySelector("#userNameInput").value = GM_getValue("Autologin email") document.querySelector("#passwordInput").value = GM_getValue("Autologin password") } } if(document.querySelector("#submitButton") && GM_getValue("Autologin email") && GM_getValue("Autologin password") && document.querySelector("#errorText").innerText=='' && document.querySelector("#userNameInput").value!='' && document.querySelector("#passwordInput").value!=''){ document.querySelector("#submitButton").click() } let observer_ADFS = new MutationObserver(function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === 'childList' ) { for (let node of mutation.addedNodes) { if(node.nodeType === Node.ELEMENT_NODE){ if(node.matches('#copyright')){ node.remove() } if(node.matches("#footerPlaceholder")){ document.querySelector("#footerPlaceholder").append(username) document.querySelector("#footerPlaceholder").append(password) document.querySelector("#footerPlaceholder").append(Save_ID) if(GM_getValue("Autologin email") && GM_getValue("Autologin password") && document.querySelector("#userNameInput") && document.querySelector("#passwordInput")){ username.value = GM_getValue("Autologin email") password.value = GM_getValue("Autologin password") } if(GM_getValue("Autologin email") && GM_getValue("Autologin password")){ let interval_login=setInterval(function(){ if(document.querySelector("#submitButton") && document.querySelector("#errorText").innerText==''){ document.querySelector("#userNameInput").value = GM_getValue("Autologin email") document.querySelector("#passwordInput").value = GM_getValue("Autologin password") if(document.querySelector("#submitButton") && GM_getValue("Autologin email") && GM_getValue("Autologin password") && document.querySelector("#userNameInput").value!='' && document.querySelector("#passwordInput").value!=''){ setTimeout(() => { document.querySelector("#submitButton").click(); }, 500); clearInterval(interval_login) } } }, 20) } } } } } } }); observer_ADFS.observe(document, { childList: true, subtree: true }); } function Learning_Main_Page(){ const BasicStyle=` /*remove padding on every side of courses container*/ .block-myoverviewdevinci .paged-content-page-container { padding: 0rem 0rem;/*1rem 2rem*/ } /*more condensed courses*/ .block-myoverviewdevinci .card-deck.dashboard-card-deck { row-gap: 0.5rem;/*1.5rem*/ column-gap: 10px;/*12px*/ } /*cards/courses display*/ .card.dashboard-card[data-region=course-content] { padding: 6px!important;/*1rem .75rem;*/ gap: 1rem;/*1.375rem*/ } /*remove padding from top of page*/ .block.block_myoverviewdevinci.card { padding-block: 0rem;/* 1.5rem*/ } #topofscroll { margin-top: 0rem !important; } `; GM_addStyle(BasicStyle) let observer_LMP = new MutationObserver(function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === 'childList' ) { for (let node of mutation.addedNodes) { if(node.nodeType === Node.ELEMENT_NODE){ if(node.matches(".dropdown") && node.parentElement.matches(".justify-content-end"+".w-100")){//option d'affichage, carte etc if(document.querySelector('[for="favourites_only"]')?.parentElement?.parentElement){ node.parentElement.remove() const newSpan = document.createElement("span"); newSpan.classList.add("align-content-center"); newSpan.textContent = "Afficher par :"; document.querySelector('[for="favourites_only"]')?.parentElement?.parentElement.append(newSpan) document.querySelector('[for="favourites_only"]')?.parentElement?.parentElement.append(node) } } if(node.matches(".devinci-subsection-title")){// suprime le Vos cours node.parentElement.remove() } if(node.matches(".devinci-plugin-title")){ node.remove() } if(node.matches(".devinci-subsection-title")){ if(node.innerText=='Résultats de la recherche'){ node.parentElement.remove() node.remove() } else if(node.innerText=='Affiner la recherche'){ node.parentElement.remove() node.remove() } } if(node.matches('[data-region="paged-content-page"]') && GM_getValue("Better_Courses")){ if(GM_getValue("Better_Courses_name")){ document.querySelectorAll(".multiline").forEach(function(UwU){ if(UwU.innerText.match(/\s\([a-zA-Z0-9-]+\)/g)){ UwU.innerText=UwU.innerText.replace(UwU.innerText.match(/\s\([a-zA-Z0-9-]+\)/g)[0],"").trim() } }) const left_style = `.dashboard-card-deck .dashboard-card a {justify-content: left;}` GM_addStyle(left_style) } } /* old system if(node.matches('[data-region="paged-content-page"]') && document.querySelectorAll(".dashboard-card-footer").length!=0 && GM_getValue("Better_Courses")) { if(GM_getValue("Better_Courses_completion")){ document.querySelectorAll(".dashboard-card-footer").forEach(function(UwU){UwU.remove()}) } if(GM_getValue("Better_Courses_type")){ document.querySelectorAll(".muted").forEach(function(UwU){UwU.remove()}) } document.querySelectorAll('[data-region="course-content"]').forEach(function(UwU){ UwU.style.margin='0px' UwU.style.paddingBottom='0px' }) if(GM_getValue("Better_Courses_name")){ document.querySelectorAll(".multiline").forEach(function(UwU){ if(UwU.innerText.match(/\s\([a-zA-Z0-9-]+\)/g)){ UwU.innerText=UwU.innerText.replace(UwU.innerText.match(/\s\([a-zA-Z0-9-]+\)/g)[0],"") } }) } if(document.getElementsByClassName(" block_courses_discover block card mb-3") && document.getElementsByClassName(" block_courses_discover block card mb-3")[0]){ document.getElementsByClassName(" block_courses_discover block card mb-3")[0].remove() } } */ else if( (node.matches("#page-header") && GM_getValue("LMP_Page_Header")) || (node.matches("#inst174") && GM_getValue("LMP_News")) || (GM_getValue("Better_Courses") && (node.matches("#instance-2524-header")|| node.matches(".mt-0"))) ){ node.remove() } else if(node.matches("#inst3124") && GM_getValue("LMP_Annonces")){ node.remove() //node.parentElement.appendChild(node) } else if(false){// if(node.matches('[id^="courses-view"]')){ node.attributes["data-paging"].value = 99 } else if(node.matches('.additional-data.d-none')){ node.setAttribute('data-pagingoptions', '[99,4,8,16]'); } } } } } } }); observer_LMP.observe(document, { childList: true, subtree: true }); } function Courses(){ if(document.querySelector('#resourceobject'+'[src*="pdf"]') && GM_getValue("Open_PDF")){ let OpenPdf = document.createElement("a"); OpenPdf.id = "OpenPdf" OpenPdf.href= document.querySelector('#resourceobject'+'[src*="pdf"]').src OpenPdf.target = "_blank" OpenPdf.textContent = "Open Pdf"; OpenPdf.className="btn mb-3"//mb-3 for padding bottom OpenPdf.style.color='red' let interval_Pdf=setInterval(function(){ if(document.querySelector('[role="main"]')){ document.querySelector('[role="main"]').insertBefore(OpenPdf, document.querySelector('[role="main"]').children[2]); clearInterval(interval_Pdf) } }, 20) } let HideLockedButton = document.createElement("button"); HideLockedButton.id = "HideLockedButton"; HideLockedButton.textContent = "Hide Locked"; let observer_Courses = new MutationObserver(function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === 'childList' ) { for (let node of mutation.addedNodes) { if(node.nodeType === Node.ELEMENT_NODE){ if(node.matches('#resourceobject'+'[src*="pdf"]') && GM_getValue("Open_PDF")){ let OpenPdf = document.createElement("a"); OpenPdf.id = "OpenPdf" OpenPdf.href= document.querySelector('#resourceobject'+'[src*="pdf"]').src OpenPdf.target = "_blank" OpenPdf.textContent = "Open Pdf"; OpenPdf.className="btn mb-3"//mb-3 for padding bottom OpenPdf.style.color='red' let interval_Pdf=setInterval(function(){ if(document.querySelector('[role="main"]')){ document.querySelector('[role="main"]').insertBefore(OpenPdf, document.querySelector('[role="main"]').children[2]); clearInterval(interval_Pdf) } }, 20) } else if(node.matches(".no-announces")){ if(node.innerText==="Vous n'avez pas d'annonce disponible"){ node.parentElement.previousElementSibling.remove() node.remove() } } else if(node.matches(".container"+ ".focus-completion") && GM_getValue("Better_Courses_completion")){ node.remove() } else if(node.innerHTML.includes("restrictions") && GM_getValue("Hide_Locked")){ document.querySelector("#theme_boost-drawers-courseindex").childNodes[1].append(HideLockedButton); HideLockedButton.addEventListener("click", function() { let all_Locked = document.querySelector("#theme_boost-drawers-courseindex").querySelectorAll(".restrictions") all_Locked.forEach((Locked_Module)=>{ Locked_Module.style.setProperty("display", "none", "important"); }) HideLockedButton.textContent = "Locked are hidden"; HideLockedButton.disabled = true; }) } else if(node.href && node.href.includes('.pdf?forcedownload=1') && GM_getValue("No_AutoDL")){ node.href=node.href.replace('?forcedownload=1',"") node.target='_blank' } else if(node.href && node.href.includes(".PNG?forcedownload=1") && GM_getValue("View_Images")){ let img = document.createElement("img") img.classList+="resourceimage" img.loading="lazy" img.src = node.href img.style.display = "none"; let Hide_IMG = document.createElement("button"); Hide_IMG.setAttribute("onclick",` var img = this.nextElementSibling; if (img.style.display != "none") { img.style.display = "none"; this.textContent = "Show Img"; } else { img.style.display = "block"; this.textContent = "Hide Img"; } `) Hide_IMG.style.border = "none" Hide_IMG.style.borderRadius = "5px" if(img.style.display != "none"){ Hide_IMG.textContent = "Hide Img"; } else{ Hide_IMG.textContent = "Show Img"; } node.parentElement.appendChild(Hide_IMG) node.parentElement.appendChild(img) } else if(node.matches("iframe") && node.src.includes(".pptx") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".pptx" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.matches("iframe") && node.src.includes(".csv") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".csv" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.matches("iframe") && node.src.includes(".zip") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".zip" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.matches("iframe") && node.src.includes(".docx") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".docx" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.matches("iframe") && node.src.includes(".xlsx") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".xlsx" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.matches("iframe") && node.src.includes(".data") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".data" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.matches("iframe") && node.src.includes(".py") && GM_getValue("No_AutoDL")){ let noforcedllink = document.createElement("a") noforcedllink.href = node.src noforcedllink.innerText=node.title +".py" node.parentElement.append(noforcedllink) node.remove() GM_addStyle(".btn-fullscreen{scale:0!important}") } else if(node.href && node.href.includes("https://learning.devinci.fr/course/view.php?id=") && node.parentElement.matches(".breadcrumb-item") && node.title.match(/\s\([a-zA-Z0-9-]+\)/g)!=null){ node.innerText=node.title.replace(node.title.match(/\s\([a-zA-Z0-9-]+\)/g)[0],'') } } } } } }); observer_Courses.observe(document, { childList: true, subtree: true }); } function Page_learning_devinci(){ let observer_Learning = new MutationObserver(function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === 'childList' ) { for (let node of mutation.addedNodes) { if(node.nodeType === Node.ELEMENT_NODE){ if(node.href && node.href=="https://learning.devinci.fr/my/" && node.role=="menuitem"){ node.parentElement.parentElement//cible let handler = document.createElement("li") handler.className="nav-item" handler.role="none" node.parentElement.parentElement.append(handler) let link = document.createElement("a") link.role='menuitem' link.classList='nav-link' link.href="https://learning.devinci.fr/mod/forum/view.php?id=2018" link.innerText='Annonces Learning' link.previewlistener="true" handler.append(link) } } } } } }); observer_Learning.observe(document, { childList: true, subtree: true }); } //end IIFE })();