commit cd7a2bd773249169d8382233095f62b6c08d8f2c Author: Lucca Pirovano Date: Mon Jun 15 14:20:38 2026 -0400 adding to gitea repo diff --git a/D2L Auto-Advance v7.3.user.js b/D2L Auto-Advance v7.3.user.js new file mode 100644 index 0000000..2b6b89a --- /dev/null +++ b/D2L Auto-Advance v7.3.user.js @@ -0,0 +1,191 @@ +// ==UserScript== +// @name D2L Auto-Advance v7.3 +// @namespace d2l-autoadvance-v7 +// @version 7.3 +// @description Auto-advances D2L Brightspace. F7=Toggle UI, F8=Start/Stop, F9=Next +// @match https://*.modernstates.org/* +// @grant none +// @run-at document-idle +// ==/UserScript== + +(function () { + 'use strict'; + + // ── Only run in the TOP frame, never in iframes ──────────────────── + if (window !== window.top) return; + + // ── Kill any previous instance + nuke all old UIs ───────────────── + document.querySelectorAll('#d2l-aa').forEach(e => e.remove()); + if (window.__d2lAA) { try { window.__d2lAA.kill(); } catch (_) {} delete window.__d2lAA; } + + const MIN_MS = 3000, MAX_MS = 4000; + const rand = () => MIN_MS + Math.floor(Math.random() * (MAX_MS - MIN_MS)); + + function getLinks() { + const results = []; + function walk(node) { + if (!node) return; + try { + node.querySelectorAll('d2l-activity-link[href]').forEach(el => results.push(el)); + node.querySelectorAll('*').forEach(el => { if (el.shadowRoot) walk(el.shadowRoot); }); + } catch (_) {} + } + walk(document); + return results; + } + + function getCurrentIndex(links) { + const i = links.findIndex(l => l.hasAttribute('is-current-activity')); + return i >= 0 ? i : 0; + } + + function clickLink(link) { + if (!link) return; + link.click(); + try { + const inner = link.shadowRoot?.querySelector('a, button, [role="link"]'); + if (inner) inner.click(); + } catch (_) {} + link.scrollIntoView({ behavior: 'smooth', block: 'center' }); + console.log('[D2L v7.3] →', link.getAttribute('href')?.split('/').pop()); + } + + let idx = -1, running = false, mainT = null, tickT = null, secs = 0, uiVisible = true; + + // ── Build UI ─────────────────────────────────────────────────────── + const ui = document.createElement('div'); + ui.id = 'd2l-aa'; + ui.style.cssText = ` + position:fixed;bottom:18px;right:18px;z-index:2147483647; + background:#0d1117;color:#cdd6e0; + font:13px/1.5 "Segoe UI",Arial,sans-serif; + padding:12px 15px;border-radius:11px; + box-shadow:0 4px 24px rgba(0,0,0,.85); + min-width:235px;border:1px solid #30363d; + transition:opacity 0.3s,transform 0.3s; + `; + ui.innerHTML = ` +
⚡ D2L Auto-Advance
+
Scanning...
+
0 / 0
+
+
+ + + +
+
F7=Hide · F8=Start/Stop · F9=Next
+ `; + document.body.appendChild(ui); + + const el = id => document.getElementById(id); + const setS = (t, c='#8b949e') => { const e=el('d2l-aa-s'); if(e){e.textContent=t;e.style.color=c;} }; + const setP = (i, n) => { const e=el('d2l-aa-p'); if(e) e.textContent=`${i} / ${n}`; }; + const setC = t => { const e=el('d2l-aa-c'); if(e) e.textContent=t||' '; }; + const setB = (t, bg) => { const e=el('d2l-aa-b0'); if(e){e.textContent=t;e.style.background=bg;} }; + + function clearTimers() { + clearTimeout(mainT); clearInterval(tickT); mainT = tickT = null; + } + + function advance() { + const links = getLinks(); + if (!links.length) { setS('⚠ No links found', '#e3b341'); return false; } + if (idx < 0) idx = getCurrentIndex(links); + else idx++; + if (idx >= links.length) { + setS('✅ All done!', '#3fb950'); setP(links.length, links.length); + setC('Complete!'); running = false; clearTimers(); setB('▶ F8', '#238636'); + return false; + } + clickLink(links[idx]); + setS('▶ Running', '#3fb950'); + setP(idx + 1, links.length); + setC(`Activity ${links[idx].getAttribute('href')?.split('/').pop().split('?')[0] || ''}`); + return true; + } + + function schedule() { + if (!running) return; + clearTimers(); + const ms = rand(); + secs = Math.ceil(ms / 1000); + setC(`Next in ${secs}s`); + tickT = setInterval(() => { + secs--; + setC(secs > 0 ? `Next in ${secs}s` : 'Advancing…'); + if (secs <= 0) clearInterval(tickT); + }, 1000); + mainT = setTimeout(() => { if (running && advance()) schedule(); }, ms); + } + + function toggleAuto() { + if (running) { + running = false; clearTimers(); + setS('⏸ Paused', '#e3b341'); setB('▶ F8', '#238636'); + } else { + const links = getLinks(); + if (!links.length) { setS('⚠ No links — reload page', '#e3b341'); return; } + if (idx < 0) idx = getCurrentIndex(links) - 1; + running = true; setB('⏸ F8', '#e3b341'); + if (advance()) schedule(); + } + } + + function manualNext() { + clearTimers(); + if (advance() && running) schedule(); + } + + function reset() { + running = false; idx = -1; clearTimers(); + const links = getLinks(); + setS('↺ Reset — press F8', '#8b949e'); + setP(0, links.length); setC(' '); setB('▶ F8', '#238636'); + } + + function toggleUI() { + uiVisible = !uiVisible; + ui.style.opacity = uiVisible ? '1' : '0'; + ui.style.pointerEvents = uiVisible ? 'auto' : 'none'; + ui.style.transform = uiVisible ? 'translateY(0)' : 'translateY(20px)'; + } + + el('d2l-aa-b0').onclick = toggleAuto; + el('d2l-aa-b1').onclick = manualNext; + el('d2l-aa-b2').onclick = reset; + + function onKey(e) { + if (e.key === 'F7') { e.preventDefault(); toggleUI(); } + if (e.key === 'F8') { e.preventDefault(); toggleAuto(); } + if (e.key === 'F9') { e.preventDefault(); manualNext(); } + } + document.addEventListener('keydown', onKey, true); + + function init(attempts = 0) { + const links = getLinks(); + if (links.length > 0) { + idx = getCurrentIndex(links) - 1; + setS(`✅ ${links.length} links — press F8`, '#3fb950'); + setP(0, links.length); + console.log(`[D2L v7.3] Ready. ${links.length} links found.`); + } else if (attempts < 10) { + setTimeout(() => init(attempts + 1), 1000); + } else { + setS('⚠ No links found', '#e3b341'); + } + } + + setTimeout(() => init(), 1500); + + window.__d2lAA = { + initialized: true, + kill() { + running = false; clearTimers(); + document.getElementById('d2l-aa')?.remove(); + document.removeEventListener('keydown', onKey, true); + delete window.__d2lAA; + } + }; + +})(); \ No newline at end of file diff --git a/Force Enable Right Click, Copy & Paste.user.js b/Force Enable Right Click, Copy & Paste.user.js new file mode 100644 index 0000000..23de93a --- /dev/null +++ b/Force Enable Right Click, Copy & Paste.user.js @@ -0,0 +1,49 @@ +// ==UserScript== +// @name Force Enable Right Click, Copy & Paste +// @version 3.0 +// @description Re-enables right click, text selection, and copying/pasting on all sites +// @author You +// @match https://www.netacad.com/* +// @match https://*ucertify.com/* +// @grant none +// @run-at document-start +// ==/UserScript== + +(function() { + 'use strict'; + + // Re-enable text selection and right-click + const styles = `* { user-select: auto !important; -webkit-user-select: auto !important; pointer-events: auto !important; }`; + const styleSheet = document.createElement('style'); + styleSheet.textContent = styles; + document.head.appendChild(styleSheet); + + // Prevent right-click blocking + document.addEventListener('contextmenu', e => e.stopPropagation(), true); + + // Prevent text selection blocking + document.addEventListener('selectstart', e => e.stopPropagation(), true); + + // Prevent dragstart blocking + document.addEventListener('dragstart', e => e.stopPropagation(), true); + + // Stop blocking copy and cut events + document.addEventListener('copy', e => e.stopPropagation(), true); + document.addEventListener('cut', e => e.stopPropagation(), true); + + // Prevent scripts from blocking pasting + document.addEventListener('paste', e => e.stopPropagation(), true); + + // Optional: Override any inline scripts that may be preventing user actions + const scriptOverride = setInterval(() => { + const blockers = document.querySelectorAll('script'); + blockers.forEach(script => { + if (script.innerHTML.includes('event.preventDefault()') || script.innerHTML.includes('return false;')) { + script.innerHTML = script.innerHTML.replace(/event.preventDefault\(\)/g, '').replace(/return false;/g, ''); + } + }); + }, 1000); + + // Stop the interval once all blockers are cleared + setTimeout(() => clearInterval(scriptOverride), 5000); +})(); diff --git a/KnowledgeHub - Remove no-copy class.user.js b/KnowledgeHub - Remove no-copy class.user.js new file mode 100644 index 0000000..c8b0a43 --- /dev/null +++ b/KnowledgeHub - Remove no-copy class.user.js @@ -0,0 +1,58 @@ +// ==UserScript== +// @name KnowledgeHub - Remove no-copy class +// @namespace https://github.com/yourname/ +// @version 1.0 +// @description Removes the "no-copy" class from body to allow text selection and copying +// @author You +// @match https://www.knowledgehub.com/* +// @grant none +// @run-at document-start +// ==/UserScript== + +document.addEventListener('contextmenu', e => e.stopPropagation(), true); +// Prevent text selection blocking +document.addEventListener('selectstart', e => e.stopPropagation(), true); + + // Prevent dragstart blocking +document.addEventListener('dragstart', e => e.stopPropagation(), true); + + // Stop blocking copy and cut events +document.addEventListener('copy', e => e.stopPropagation(), true); +document.addEventListener('cut', e => e.stopPropagation(), true); + + // Prevent scripts from blocking pasting +document.addEventListener('paste', e => e.stopPropagation(), true); +(function() { + 'use strict'; + + function removeNoCopyClass() { + if (document.body) { + document.body.classList.remove('no-copy'); + // Optional: completely clear the class attribute if it only had "no-copy" + // document.body.className = document.body.className.replace(/\bno-copy\b/g, '').trim(); + } + } + + // Run as early as possible + if (document.body) { + removeNoCopyClass(); + } else { + // Fallback: wait for body to be available + const observer = new MutationObserver(() => { + if (document.body) { + removeNoCopyClass(); + observer.disconnect(); + } + }); + + observer.observe(document.documentElement, { childList: true }); + } + + // Also run again after page is fully loaded (in case the site re-adds the class) + window.addEventListener('load', removeNoCopyClass); + + // Optional: re-run every time the class changes (very aggressive) + // const classObserver = new MutationObserver(removeNoCopyClass); + // if (document.body) classObserver.observe(document.body, { attributes: true, attributeFilter: ['class'] }); + +})(); \ No newline at end of file diff --git a/Rename Tab – Alt+F2.user.js b/Rename Tab – Alt+F2.user.js new file mode 100644 index 0000000..1e1cd13 --- /dev/null +++ b/Rename Tab – Alt+F2.user.js @@ -0,0 +1,13 @@ +// ==UserScript== +// @name Rename Tab – Alt+F2 +// @match *://*/* +// @run-at document-start +// ==/UserScript== + +addEventListener('keydown', e=>{ + if (e.altKey && e.key==='F2') { + e.preventDefault(); + let t = prompt('New title:', document.title); + document.title = t?.trim() || document.title; + } +}, true); \ No newline at end of file diff --git a/Submit Click (F12) + Copy CURRENT Visible Question (F10).user.js b/Submit Click (F12) + Copy CURRENT Visible Question (F10).user.js new file mode 100644 index 0000000..2b221e0 --- /dev/null +++ b/Submit Click (F12) + Copy CURRENT Visible Question (F10).user.js @@ -0,0 +1,213 @@ +// ==UserScript== +// @name Submit Click (F12) + Copy CURRENT Visible Question (F10) +// @namespace vm-submit-click-and-copy-visible-text +// @match https://*netacad.com/* +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// @grant none +// @version 2.0 +// @run-at document-end +// ==/UserScript== + +(function () { + 'use strict'; + + // ──────────────────────────────────────────────── + // Submit button click (F12) – unchanged + // ──────────────────────────────────────────────── + function findSubmitButton() { + let btns = document.querySelectorAll('button[aria-label="submit"].submit-button'); + for (const btn of btns) { + const innerDiv = btn.querySelector('div.submit'); + if (innerDiv && innerDiv.textContent.trim() === 'Submit') return btn; + } + + function searchShadows(root) { + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node; + while ((node = walker.nextNode())) { + if (node.shadowRoot) { + const shadowBtns = node.shadowRoot.querySelectorAll('button[aria-label="submit"].submit-button'); + for (const btn of shadowBtns) { + const innerDiv = btn.querySelector('div.submit'); + if (innerDiv && innerDiv.textContent.trim() === 'Submit') return btn; + } + const found = searchShadows(node.shadowRoot); + if (found) return found; + } + } + return null; + } + + return searchShadows(document.body); + } + + function triggerSubmitClick() { + const btn = findSubmitButton(); + if (!btn) return false; + try { btn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); } catch {} + if (btn.click) try { btn.click(); } catch {} + return true; + } + + // ──────────────────────────────────────────────── + // Copy CURRENT visible question text (F10) – improved + // ──────────────────────────────────────────────── + function isVisibleAndInView(el) { + if (!el) return false; + const style = window.getComputedStyle(el); + if (style.display === 'none' || style.visibility === 'hidden' || parseFloat(style.opacity) < 0.1) return false; + + let current = el; + let depth = 0; + while (current && depth < 15) { + const s = window.getComputedStyle(current); + if (s.display === 'none' || s.visibility === 'hidden' || parseFloat(s.opacity) < 0.1) return false; + current = current.parentElement; + depth++; + } + + const rect = el.getBoundingClientRect(); + if (rect.width < 50 || rect.height < 20) return false; // too tiny for question text + + // Roughly in viewport + return rect.top > -50 && rect.bottom < (window.innerHeight + 50) && + rect.left > -50 && rect.right < (window.innerWidth + 50); + } + + function findCurrentQuestionSpan() { + console.log('[TextCopy] Searching for CURRENT visible question (strict mode)...'); + + const containerSelectors = [ + '[class*="body-inner"]', + '.mcq__body-inner', + '.component__body-inner', + '[class*="mcq__body"]', + '[class*="component__body"]' + ]; + + const spanSelectors = ['p span', 'p > span', 'span']; + + let candidates = []; + + // Light DOM + containerSelectors.forEach(sel => { + document.querySelectorAll(sel).forEach(container => { + if (!isVisibleAndInView(container)) return; + spanSelectors.forEach(sSel => { + container.querySelectorAll(sSel).forEach(span => { + const txt = span.textContent?.trim(); + if (!txt || txt.length < 20) return; + if (!isVisibleAndInView(span)) return; + + const rect = span.getBoundingClientRect(); + const area = rect.width * rect.height; + const z = parseFloat(window.getComputedStyle(span).zIndex) || 0; + const hasQuestionMark = txt.includes('?'); + + candidates.push({ + span, + txt, + area, + zIndex: isNaN(z) ? 0 : z, + hasQuestionMark, + depth: span.compareDocumentPosition(document.body) // rough DOM order + }); + }); + }); + }); + }); + + // Shadow DOM + function walkShadows(root) { + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node; + while ((node = walker.nextNode())) { + if (node.shadowRoot) { + containerSelectors.forEach(sel => { + node.shadowRoot.querySelectorAll(sel).forEach(container => { + if (!isVisibleAndInView(container)) return; + spanSelectors.forEach(sSel => { + container.querySelectorAll(sSel).forEach(span => { + const txt = span.textContent?.trim(); + if (!txt || txt.length < 20) return; + if (!isVisibleAndInView(span)) return; + + const rect = span.getBoundingClientRect(); + const area = rect.width * rect.height; + const z = parseFloat(window.getComputedStyle(span).zIndex) || 0; + const hasQuestionMark = txt.includes('?'); + + candidates.push({ + span, + txt, + area, + zIndex: isNaN(z) ? 0 : z, + hasQuestionMark, + depth: span.compareDocumentPosition(document.body) + }); + }); + }); + }); + }); + walkShadows(node.shadowRoot); + } + } + } + walkShadows(document.body); + + if (candidates.length === 0) { + console.log('[TextCopy] No visible candidates found'); + return null; + } + + // Sort: prefer question mark → higher z-index → larger area → earlier in DOM + candidates.sort((a, b) => { + if (a.hasQuestionMark !== b.hasQuestionMark) return b.hasQuestionMark - a.hasQuestionMark; + if (a.zIndex !== b.zIndex) return b.zIndex - a.zIndex; + if (a.area !== b.area) return b.area - a.area; + return a.depth - b.depth; + }); + + const best = candidates[0]; + console.log('[TextCopy] Selected:', best.txt.substring(0, 120) + (best.txt.length > 120 ? '...' : '')); + console.log('[TextCopy] Stats → area:', best.area, '| z-index:', best.zIndex, '| has ?:', best.hasQuestionMark, '| candidates total:', candidates.length); + + return best.span; + } + + async function copyCurrentQuestion() { + const el = findCurrentQuestionSpan(); + if (!el) return; + + const text = el.textContent?.trim() || ''; + if (!text) return; + + console.log('[TextCopy] Copying:', text.substring(0, 120) + (text.length > 120 ? '...' : '')); + + try { + await navigator.clipboard.writeText(text); + console.log('[TextCopy] SUCCESS – current question copied'); + } catch (err) { + console.error('[TextCopy] Clipboard failed:', err); + const ta = document.createElement('textarea'); + ta.value = text; + ta.style.position = 'fixed'; ta.style.opacity = '0'; + document.body.appendChild(ta); + ta.select(); + document.execCommand('copy'); + document.body.removeChild(ta); + console.log('[TextCopy] Fallback copy done'); + } + } + + // ──────────────────────────────────────────────── + // Hotkeys + // ──────────────────────────────────────────────── + VM.shortcut.register('f12', () => { + setTimeout(() => { if (!triggerSubmitClick()) setTimeout(triggerSubmitClick, 400); }, 60); + }); + + VM.shortcut.register('f10', copyCurrentQuestion); + + console.log('[VM-Tools] Loaded v2.0 → F12 = Submit | F10 = Copy CURRENT visible question (strict visibility)'); +})(); \ No newline at end of file diff --git a/Ucertify Tests F12 to Next Question.user.js b/Ucertify Tests F12 to Next Question.user.js new file mode 100644 index 0000000..d0fe941 --- /dev/null +++ b/Ucertify Tests F12 to Next Question.user.js @@ -0,0 +1,16 @@ +// ==UserScript== +// @name Ucertify Tests F12 to Next Question +// @namespace Violentmonkey Scripts +// @match https://*ucertify.com/* +// @grant none +// @version 1.0 +// @author - +// @description 2/4/2026, 2:39:45 PM +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== +function clickNexT(){ + next.click() +} +VM.shortcut.register('F12', () => + clickNexT() +); \ No newline at end of file diff --git a/old bc scripts/Alt-F2-Rename-Tab.js b/old bc scripts/Alt-F2-Rename-Tab.js new file mode 100644 index 0000000..9f12f0c --- /dev/null +++ b/old bc scripts/Alt-F2-Rename-Tab.js @@ -0,0 +1,13 @@ +// ==UserScript== +// @name Rename Tab – Alt+F2 +// @match *://*/* +// @run-at document-start +// ==/UserScript== + +addEventListener('keydown', e=>{ + if (e.altKey && e.key==='F2') { + e.preventDefault(); + let t = prompt('New title:', document.title); + document.title = t?.trim() || document.title; + } +}, true); diff --git a/old bc scripts/Force Enable Right Click Copy and Paste.js b/old bc scripts/Force Enable Right Click Copy and Paste.js new file mode 100644 index 0000000..23de93a --- /dev/null +++ b/old bc scripts/Force Enable Right Click Copy and Paste.js @@ -0,0 +1,49 @@ +// ==UserScript== +// @name Force Enable Right Click, Copy & Paste +// @version 3.0 +// @description Re-enables right click, text selection, and copying/pasting on all sites +// @author You +// @match https://www.netacad.com/* +// @match https://*ucertify.com/* +// @grant none +// @run-at document-start +// ==/UserScript== + +(function() { + 'use strict'; + + // Re-enable text selection and right-click + const styles = `* { user-select: auto !important; -webkit-user-select: auto !important; pointer-events: auto !important; }`; + const styleSheet = document.createElement('style'); + styleSheet.textContent = styles; + document.head.appendChild(styleSheet); + + // Prevent right-click blocking + document.addEventListener('contextmenu', e => e.stopPropagation(), true); + + // Prevent text selection blocking + document.addEventListener('selectstart', e => e.stopPropagation(), true); + + // Prevent dragstart blocking + document.addEventListener('dragstart', e => e.stopPropagation(), true); + + // Stop blocking copy and cut events + document.addEventListener('copy', e => e.stopPropagation(), true); + document.addEventListener('cut', e => e.stopPropagation(), true); + + // Prevent scripts from blocking pasting + document.addEventListener('paste', e => e.stopPropagation(), true); + + // Optional: Override any inline scripts that may be preventing user actions + const scriptOverride = setInterval(() => { + const blockers = document.querySelectorAll('script'); + blockers.forEach(script => { + if (script.innerHTML.includes('event.preventDefault()') || script.innerHTML.includes('return false;')) { + script.innerHTML = script.innerHTML.replace(/event.preventDefault\(\)/g, '').replace(/return false;/g, ''); + } + }); + }, 1000); + + // Stop the interval once all blockers are cleared + setTimeout(() => clearInterval(scriptOverride), 5000); +})(); diff --git a/old bc scripts/NetAcad-Tests-F12-NextQuestion.js b/old bc scripts/NetAcad-Tests-F12-NextQuestion.js new file mode 100644 index 0000000..c9af15a --- /dev/null +++ b/old bc scripts/NetAcad-Tests-F12-NextQuestion.js @@ -0,0 +1,110 @@ +// ==UserScript== +// @name Click "Submit" arrow button on F12 +// @namespace vm-click-submit-arrow +// @match https://*netacad.com/* +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// @grant none +// @version 1.5 +// @run-at document-end +// ==/UserScript== + +(function () { + 'use strict'; + + function findSubmitButton() { + // Primary search: light DOM + exact attributes & content + let btns = document.querySelectorAll('button[aria-label="submit"].submit-button'); + + for (const btn of btns) { + const innerDiv = btn.querySelector('div.submit'); + if (innerDiv && innerDiv.textContent.trim() === 'Submit') { + console.log('[SubmitClick] Exact match found in light DOM'); + return btn; + } + } + + // Deep shadow DOM recursive search + function searchShadows(root) { + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node; + while ((node = walker.nextNode())) { + if (node.shadowRoot) { + const shadowBtns = node.shadowRoot.querySelectorAll('button[aria-label="submit"].submit-button'); + for (const btn of shadowBtns) { + const innerDiv = btn.querySelector('div.submit'); + if (innerDiv && innerDiv.textContent.trim() === 'Submit') { + console.log('[SubmitClick] Found in shadow root of:', node.tagName.toLowerCase()); + return btn; + } + } + // Recurse deeper + const found = searchShadows(node.shadowRoot); + if (found) return found; + } + } + return null; + } + + const shadowResult = searchShadows(document.body); + if (shadowResult) return shadowResult; + + console.log('[SubmitClick] No Submit button detected yet (aria-label + div.submit + text "Submit")'); + return null; + } + + function triggerClick() { + const btn = findSubmitButton(); + + if (!btn) { + console.log('[SubmitClick] → Submit button not found yet'); + return false; + } + + console.log('[SubmitClick] → Found Submit button, clicking it'); + + // Synthetic click event + try { + const clickEvent = new MouseEvent('click', { + bubbles: true, + cancelable: true, + view: window, + detail: 1 + }); + btn.dispatchEvent(clickEvent); + } catch (err) { + console.warn('[SubmitClick] dispatchEvent failed', err); + } + + // Direct .click() fallback + if (typeof btn.click === 'function') { + try { + btn.click(); + } catch (err) { + console.warn('[SubmitClick] .click() failed', err); + } + } + + return true; + } + + VM.shortcut.register('f12', () => { + setTimeout(() => { + if (!triggerClick()) { + // Extra retry for slow-rendering elements + setTimeout(triggerClick, 400); + } + }, 60); + }); + + console.log('[SubmitClick] Loaded – press F12 to click the Submit button'); + + // Optional: uncomment for auto-click every ~1.5 seconds until success + /* + const autoInterval = setInterval(() => { + if (triggerClick()) { + clearInterval(autoInterval); + console.log('[SubmitClick] Auto-click successful – stopping checks'); + } + }, 1500); + */ +})(); diff --git a/old bc scripts/UCertify-Tests-F12-NextQuestion.js b/old bc scripts/UCertify-Tests-F12-NextQuestion.js new file mode 100644 index 0000000..1b94cb0 --- /dev/null +++ b/old bc scripts/UCertify-Tests-F12-NextQuestion.js @@ -0,0 +1,16 @@ +// ==UserScript== +// @name Ucertify Tests F12 to Next Question +// @namespace Violentmonkey Scripts +// @match https://*ucertify.com/* +// @grant none +// @version 1.0 +// @author - +// @description 2/4/2026, 2:39:45 PM +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== +function clickNexT(){ + next.click() +} +VM.shortcut.register('F12', () => + clickNexT() +); diff --git a/old bc scripts/Workday-FastTimesheets.js b/old bc scripts/Workday-FastTimesheets.js new file mode 100644 index 0000000..a56f4a1 --- /dev/null +++ b/old bc scripts/Workday-FastTimesheets.js @@ -0,0 +1,31 @@ +// ==UserScript== +// @name Fast Timesheets +// @namespace Violentmonkey Scripts +// @grant none +// @version 1.0 +// @author - +// @match https://wd5.myworkday.com/* +// @description 2/3/2026, 1:18:01 PM +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== + +function clickThing(){ + document.querySelector("[data-automation-id='promptIcon']").click(); + //document.querySelector("[data-automation-id='promptSearchButton']").click(); +} +function clickThing2(){ + document.querySelector("[data-automation-label='Regular Hours Worked']").click(); +} +function clickThing3(){ + document.querySelectorAll("[data-automation-id='wd-CommandButton']")[4].click() +} + +VM.shortcut.register('F1', () => + clickThing() +); +VM.shortcut.register('F2', () => + clickThing2() +); +VM.shortcut.register('F3', () => + clickThing3() +); diff --git a/old wheelhouse scripts/CW Auto-Closer.user.js b/old wheelhouse scripts/CW Auto-Closer.user.js new file mode 100644 index 0000000..8f8c193 --- /dev/null +++ b/old wheelhouse scripts/CW Auto-Closer.user.js @@ -0,0 +1,22 @@ +// ==UserScript== +// @name CW Auto-Closer +// @namespace Violentmonkey Scripts +// @match https://sc.247mgmt.com/App_Extensions/* +// @grant none +// @version 1.0 +// @noframes +// @author - +// @description 8/21/2024, 4:41:25 PM +// ==/UserScript== + +//Connectwise doesn't auto-close tabs +//This is a workaround + +//Works most of the time, but VM userscripts are jank and sometimes break for no reason + +function wait(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +}; + + +wait(500).then(() => window.close()); \ No newline at end of file diff --git a/old wheelhouse scripts/ClipHTMLEdit.user.js b/old wheelhouse scripts/ClipHTMLEdit.user.js new file mode 100644 index 0000000..d6c7fdb --- /dev/null +++ b/old wheelhouse scripts/ClipHTMLEdit.user.js @@ -0,0 +1,41 @@ +// ==UserScript== +// @name ClipHTMLEdit +// @namespace Violentmonkey Scripts +// @version 1.0 +// @author - +// @grant GM.setClipboard +// @grant GM.getClipboard +// @description 6/18/2024, 12:25:28 PM +// @match https://wiki.gianluccapirovano.com/* +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== +var mariohtml +navigator.clipboard.read() + + +VM.shortcut.register('a-1', () => { + var htmltext = prompt("What do you want to copy as html?", mariohtml) + GM.setClipboard(htmltext, 'text/html') +}); + + +VM.shortcut.register('a-2', async () => { + const clipboardContents = await navigator.clipboard.read({ + unsanitized: ["text/html"], + }); + mariohtml = await getHTMLFromClipboardContents(clipboardContents); + window.alert(mariohtml) + }); + + +async function getHTMLFromClipboardContents(clipboardContents) { + for (const item of clipboardContents) { + if (item.types.includes("text/html")) { + const blob = await item.getType("text/html"); + const blobText = await blob.text(); + return blobText; + } + } + + return null; +} \ No newline at end of file diff --git a/old wheelhouse scripts/ConnectWiseManageEqualSignRebind.user.js b/old wheelhouse scripts/ConnectWiseManageEqualSignRebind.user.js new file mode 100644 index 0000000..c371fb5 --- /dev/null +++ b/old wheelhouse scripts/ConnectWiseManageEqualSignRebind.user.js @@ -0,0 +1,111 @@ +// ==UserScript== +// @name ConnectWiseManageEqualSignRebind +// @namespace Violentmonkey Scripts +// @match https://na.myconnectwise.net/* +// @match https://app.powerbi.com/* +// @grant GM.openInTab +// @grant GM.getValue +// @grant GM.setValue +// @grant GM.setClipboard +// @grant GM.getClipboard +// @version 1.0 +// @author - +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== +VM.shortcut.register('=', () => { + getTicketInfo(); + copyPodPost(contact+" @ "+company+"\n\n"+detailLabel+"\n\n"+initialDescription+""); +}); +VM.shortcut.register('a-=', () => { + getTicketInfo(); + getMoreTicketInfo(); + copyPodPost(contact+" @ "+company+"\n\n"+detailLabel+"\n\n"+initialDescription+"\n\n"+internalNote+"\n\n"); +}); +VM.shortcut.register('c-=', () => { + getTicketInfo(); + copyPodPost(contact+" @ "+company+"\n\n"+detailLabel+""); +}); +VM.shortcut.register('c-a-=', () => { + getTicketInfo(); + copyPodPost(contact+" @ "+company+"\n\n"+detailLabel+"\n\nClient is calling to get in touch with @"+assignedTech+" "); +}); + +//Functions below +function focusSlaMonitoring(){ + putTextIntoClass('cw_CwComboBox', 2, 'Response SLA Monitoring'); + clickClass('cw-ml-search-button', 0); +} +async function doTimeSheet(startTime, endTime, chargeTo){ + await putTextIntoClass("cw_ChargeToTextBox", 0, chargeTo); + await focusClass("cw_startTime", 0); + await putTextIntoClass("cw_startTime", 0, startTime); + await focusClass("cw_endTime", 0); + await putTextIntoClass("cw_endTime", 0, endTime); + await focusClass("cw_ChargeToTextBox", 0); + await new Promise(r => setTimeout(r, 800)); + await clickClass("cw_Refresh", 0); + await new Promise(r => setTimeout(r, 1200)); + await contains("span", chargeTo)[0].click(); + await new Promise(r => setTimeout(r, 500)); + await clickClass("cw_ToolbarButton_SaveAndClose", 0); +}; +async function doTimeSheetMini(chargeTo){ + await putTextIntoClass("cw_ChargeToTextBox", 0, chargeTo); + await focusClass("cw_ChargeToTextBox", 0); + await new Promise(r => setTimeout(r, 800)); + await clickClass("cw_Refresh", 0); + await new Promise(r => setTimeout(r, 1200)); + await contains("span", chargeTo)[0].click(); + //await new Promise(r => setTimeout(r, 500)); + //await clickClass("cw_ToolbarButton_SaveAndClose", 0); +}; +function contains(selector, text) { + var elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function(element){ + return RegExp(text).test(element.textContent); + }); +} +function getTicketInfo(){ + contactinput = null; + document.querySelector('[data-id="internal"]').click(); // click internal note so we can pull it later + contact = getByClass('cw_contact', 0); + contactinput = prompt("What is the caller's name?", contact); + contact = contactinput; + company = getByClass('cw_company', 0); + detailLabel = getInnerTextByClass('detailLabel', 0); + assignedTech = getByClass('cw_ticketOwner', 0); + initialDescription = getInnerTextByClass('TicketNote-rowNote', 0); +}; +function getMoreTicketInfo(){ + internalNote = getInnerTextByClass('TicketNote-noteLabel', 1); +}; +function copyPodPost(podPost){ + if (contactinput === null){ //terminate function if user hits cancel button or provides no input + return; + } + GM.setClipboard(podPost, 'text/plain') + window.alert(podPost); +}; +function clickClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); + var requiredElement = elements[elementIndex]; + requiredElement.click(); +}; +function focusClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); + var requiredElement = elements[elementIndex]; + requiredElement.focus(); +}; +function getByClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; return requiredElement.value; +}; +function getInnerTextByClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; return requiredElement.innerText; +}; +function putTextIntoClass(theClass, elementIndex, text){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; requiredElement.value = text; +}; +function setStatus(desiredStatus){ + focusClass("cw_status", 0); + putTextIntoClass("cw_status", 0, desiredStatus); +} \ No newline at end of file diff --git a/old wheelhouse scripts/Lazy Connectwise.user.js b/old wheelhouse scripts/Lazy Connectwise.user.js new file mode 100644 index 0000000..0f8552a --- /dev/null +++ b/old wheelhouse scripts/Lazy Connectwise.user.js @@ -0,0 +1,392 @@ +// ==UserScript== +// @name New script - myconnectwise.net +// @namespace Violentmonkey Scripts +// @match https://na.myconnectwise.net/* +// @match https://app.powerbi.com/* +// @grant GM.openInTab +// @grant GM.getValue +// @grant GM.setValue +// @grant GM.setClipboard +// @version 1.0 +// @author - +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== + +//Declare global variables +var contact = "" +var contactinput = "" +var company = "" +var detailLabel = "" +var initialDescription = "" +var internalNote = "" +var assignedTech = "" +var assignedPod = "" +var ticketlink = "" +var ticketnumber = "" +var detailLabelSplit = "" +var oldTime = "" +var newTime = "" + +//Hotkeys + + + +VM.shortcut.register('c-a-s', () => { + company = getByClass('cw_company', 0); + GM.setClipboard("https://hudu.247mgmt.com/c?tab=&page=&sort_direction=&sort_column=&tag=&folder=&query="+company); +}); +VM.shortcut.register('a-i', () => { + document.querySelector('[data-id="internal"]').click(); +}); +VM.shortcut.register('a-s-i', () => { + document.querySelector('[data-id="discussion"]').click(); +}); +VM.shortcut.register('a-r', () => { + document.querySelector('[data-id="resolution"]').click(); +}); +VM.shortcut.register('a-1', () => { + setStatus("In Progress") +}); +VM.shortcut.register('a-s-!', () => { + setStatus("In Queue") +}); +VM.shortcut.register('c-s-!', () => { + setStatus("In Chat") +}); +VM.shortcut.register('a-2', () => { + setStatus("New Via Phone") +}); +VM.shortcut.register('a-s-@', () => { + setStatus("New Transfer From Triage") +}); +VM.shortcut.register('a-3', () => { + setStatus("Pending Tech Assignment") +}); +VM.shortcut.register('a-s-#', () => { + setStatus("Agent Responded") +}); +VM.shortcut.register('a-4', () => { + setStatus("Completed (Closed)") +}); +VM.shortcut.register('a-s-$', () => { + setStatus("Enter Time") +}); +VM.shortcut.register('a-5', () => { + setStatus("Waiting on client") +}); +VM.shortcut.register('a-s-%', () => { + setStatus("Canceled") +}); +VM.shortcut.register('a-6', () => { + setStatus("Scheduled for Remote") +}); +VM.shortcut.register('a-s-^', () => { + putTextIntoClass("cw_workType", 0, "Voicemail/Email") + focusClass("cw_workType", 0) + focusClass("public-DraftEditor-content", 0) +}); +VM.shortcut.register('c-a-1', () => { + document.title="Contact" +}); +VM.shortcut.register('c-a-2', () => { + document.title="Companies" +}); +VM.shortcut.register('c-a-3', () => { + document.title="In Queue" +}); +VM.shortcut.register('c-a-4', () => { + document.title="SLA" + focusSlaMonitoring(); +}); +VM.shortcut.register('c-a-5', () => { + document.title="Triage" +}); +VM.shortcut.register('c-a-6', () => { + document.title="Ticket Search" +}); +VM.shortcut.register('c-a-s-W', () => { + company = getByClass('cw_company', 0); + GM.setValue('company', company); + GM.setValue('pod', ""); +}); +VM.shortcut.register('c-a-s-R', () => { + clickClass("multilineClickable", 1) +}); +VM.shortcut.register('c-a-s', () => { + assignedPod = "" + async function setPod(){ + assignedPod = await GM.getValue("pod", 0); + await focusClass("cw_serviceBoard", 0); + await putTextIntoClass("cw_serviceBoard", 0, assignedPod + " - *Support"); + }setPod(); +}); +VM.shortcut.register('a-s-s', () => { + clickClass("cw_ToolbarButton_Save", 0); +}); +VM.shortcut.register('m--', () => { + clickClass("cw-gxt-wnd-cls", 0); +}); +VM.shortcut.register('a-Delete', () => { + clickClass("cw-gxt-wnd-cls", 0); +}); +VM.shortcut.register('a-s-Delete', () => { + clickClass("cw_CwNegativeActionButton", 0); +}); + + +//TICKET NOTE SHORTCUTS START +VM.shortcut.register('a-contextmenu', () => { + clickClass('TicketNote-newNoteButton', 0); +}); +VM.shortcut.register('f3', () => { + clickClass('TicketNote-newNoteButton', 0); +}); +VM.shortcut.register('s-f3', () => { + clickClass('cw_isEnteringTime', 0); + clickClass('DraftEditor-editorContainer', 0); +}); +VM.shortcut.register('c-f3', () => { + clickClass('cw_isDiscussion', 0); +}); +VM.shortcut.register('a-f3', () => { + clickClass('cw_isInternal', 0); +}); +VM.shortcut.register('c-a-f3', () => { + clickClass('cw_isResolution', 0); +}); +VM.shortcut.register('m-s-f4', () => { + clickClass('cw_isToContact', 0); +}); +VM.shortcut.register('c-s-f4', () => { + clickClass('cw_isToResources', 0); +}); +VM.shortcut.register('m-f4', () => { + clickClass('cw_isToCcs', 0); +}); +VM.shortcut.register('m-[', () => { + getElementByClass("cw_btnStartTime", 0).children[0].click() +}); +VM.shortcut.register('m-s-{', () => { + document.querySelector('[title="Start Time"]').click() +}); +VM.shortcut.register('m-]', () => { + getElementByClass("cw_btnEndTime", 0).children[0].click() +}); +VM.shortcut.register('m-s-}', () => { + //window.alert(getElementByClass("cw_endTime", 0).value) + getElementByClass("cw_btnEndTime", 0).children[0].click() + oldTime = getElementByClass("cw_endTime", 0).value + let newTime = addMinute(oldTime); + focusClass("cw_endTime", 0); + putTextIntoClass("cw_endTime", 0, newTime); + focusClass("public-DraftEditor-content", 0) +}); +//TICKET NOTE SHORTCUTS END + + + +VM.shortcut.register('f10', () => { + getTicketInfo(); + copyPodPost(contact+" @ "+company+"

"+detailLabel+"

"+initialDescription+"

"); +}); +VM.shortcut.register('a-f10', () => { + getTicketInfo(); + getMoreTicketInfo(); + copyPodPost(contact+" @ "+company+"

"+detailLabel+"

"+initialDescription+"

"+internalNote+"

"); +}); +VM.shortcut.register('c-f10', () => { + getTicketInfo(); + copyPodPost(contact+" @ "+company+"

"+detailLabel+"

"); +}); +VM.shortcut.register('c-a-f10', () => { + getTicketInfo(); + copyPodPost(contact+" @ "+company+"

"+detailLabel+"

Client is calling to get in touch with @"+assignedTech+" "); +}); +VM.shortcut.register('m-f10', () => { + getTicketInfo(); + copyPodPost(detailLabel); +}); +VM.shortcut.register('m-s-f10', () => { + ticketLabel = getInnerTextByClass('detailLabel', 0); + GM.setClipboard(ticketLabel); + window.alert("Copied to clipboard: "+ticketLabel); +}); +VM.shortcut.register('f6', () => { + clickClass('cw-toolbar-clear', 0); + clickClass('cw-ml-search-button', 0); +}); +VM.shortcut.register('s-f6', () => { + clickClass('cw_ToolbarButton_Refresh', 0); +}); +VM.shortcut.register('f7', () => { + clickClass('cw_ToolbarButton_Refresh', 0); +}); +VM.shortcut.register('c-a-BackSpace', () => { + clickClass('cw_ToolbarButton_Back', 0); + clickClass('cw-gxt-wnd-cls', 0); +}); +VM.shortcut.register('a--', () => { + clickClass('cw_ToolbarButton_Back', 0); + clickClass('cw-gxt-wnd-cls', 0); +}); +VM.shortcut.register('f12', () => { + doTimeSheet("9:00 AM", "2:30 PM", "Mentoring"); +}); +VM.shortcut.register('a-f12', () => { + doTimeSheet("3:30 PM", "4:30 PM", "Lunch Break"); +}); +VM.shortcut.register('s-f12', () => { + doTimeSheet("4:30 PM", "6:00 PM", "Mentoring"); +}); +VM.shortcut.register('c-a-f12', () => { + doTimeSheetMini("Call Queue"); +}); + + +//PowerBI Script Start +var pod +VM.shortcut.register('f2', () => { + document.querySelector('[aria-label="Navigating to visual"]').focus(); + document.querySelector('[aria-label="enter your search"]').focus(); +}); +VM.shortcut.register('s-f2', () => { + async function pasteCompany(){ + company = await GM.getValue('company', 0); + document.querySelector('[aria-label="Enter your search"]').value = company; + }pasteCompany(); +}); +VM.shortcut.register('c-f2', () => { + //pod = document.querySelector("#pvExplorationHost > div > div > exploration > div > explore-canvas > div > div.canvasFlexBox > div > div.displayArea.disableAnimations.fitToPage > div.visualContainerHost.visualContainerOutOfFocus > visual-container-repeat > visual-container:nth-child(2) > transform > div > div.visualContent > div > div > visual-modern > div > div > div.pivotTable > div.interactive-grid.innerContainer > div.mid-viewport > div > div:nth-child(1) > div.scrollable-cells-viewport > div > div:nth-child(2)").innerText + pod = document.querySelector("#pvExplorationHost > div > div > exploration > div > explore-canvas > div > div.canvasFlexBox > div > div.displayArea.disableAnimations.fitToPage > div.visualContainerHost.visualContainerOutOfFocus > visual-container-repeat > visual-container:nth-child(3) > transform > div > div.visualContent > div > div > visual-modern > div > div > div.pivotTable > div.interactive-grid.innerContainer > div.mid-viewport > div > div > div.scrollable-cells-viewport > div > div:nth-child(2)").innerText + pod = pod.replace(/\u00a0/g, " "); + podFirst = pod.split(" ")[0]; + podFirstUp = podFirst.toUpperCase(); + GM.setValue('pod', podFirstUp) +}); +//PowerBI Script END + + + + + + + +//Functions +function addMinute(timeStr) { + // Parse the time string + let [time, modifier] = timeStr.split(' '); + let [hours, minutes] = time.split(':').map(Number); + + // Add one minute + minutes += 1; + + // Handle minute overflow + if (minutes === 60) { + minutes = 0; + hours += 1; + } + + // Handle hour overflow and AM/PM switch + if (hours === 12) { + modifier = modifier === 'AM' ? 'PM' : 'AM'; + } else if (hours === 13) { + hours = 1; + } + + // Format the new time string + let newTimeStr = `${hours}:${minutes.toString().padStart(2, '0')} ${modifier}`; + return newTimeStr; +} +function focusSlaMonitoring(){ + putTextIntoClass('cw_CwComboBox', 2, 'Response SLA Monitoring'); + clickClass('cw-ml-search-button', 0); +} +async function doTimeSheet(startTime, endTime, chargeTo){ + await putTextIntoClass("cw_ChargeToTextBox", 0, chargeTo); + await focusClass("cw_startTime", 0); + await putTextIntoClass("cw_startTime", 0, startTime); + await focusClass("cw_endTime", 0); + await putTextIntoClass("cw_endTime", 0, endTime); + await focusClass("cw_ChargeToTextBox", 0); + await new Promise(r => setTimeout(r, 800)); + await clickClass("cw_Refresh", 0); + await new Promise(r => setTimeout(r, 1200)); + await contains("span", chargeTo)[0].click(); + await new Promise(r => setTimeout(r, 500)); +// await clickClass("cw_ToolbarButton_SaveAndClose", 0); +}; +async function doTimeSheetMini(chargeTo){ + await putTextIntoClass("cw_ChargeToTextBox", 0, chargeTo); + await focusClass("cw_ChargeToTextBox", 0); + await new Promise(r => setTimeout(r, 800)); + await clickClass("cw_Refresh", 0); + await new Promise(r => setTimeout(r, 1200)); + await contains("span", chargeTo)[0].click(); + //await new Promise(r => setTimeout(r, 500)); + //await clickClass("cw_ToolbarButton_SaveAndClose", 0); +}; +function contains(selector, text) { + var elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function(element){ + return RegExp(text).test(element.textContent); + }); +} +function getTicketInfo(){ + contactinput = null; + document.querySelector('[data-id="internal"]').click(); // click internal note so we can pull it later + contact = getByClass('cw_contact', 0); + company = getByClass('cw_company', 0); + detailLabel = getInnerTextByClass('detailLabel', 0); + detailLabelSplit = detailLabel.split(" "); + ticketnumber = detailLabelSplit[2].replace("#", ""); + ticketlink = "TICKETLINKNUMBER".replace(/TICKETLINKNUMBER/g, ticketnumber); + detailLabel = detailLabel.replace(ticketnumber,ticketlink); + assignedTech = getByClass('cw_ticketOwner', 0); + initialDescription = getInnerTextByClass('TicketNote-rowNote', 0); + contactinput = prompt("What is the caller's name?", contact); + contact = contactinput; +}; +function getMoreTicketInfo(){ + internalNote = getInnerTextByClass('TicketNote-noteLabel', 1); +}; +function copyPodPost(podPost){ + if (contactinput === null){ //terminate function if user hits cancel button or provides no input + return; + } + GM.setClipboard(podPost, 'text/html') + window.alert(podPost); +}; +function clickClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); + var requiredElement = elements[elementIndex]; + requiredElement.click(); +}; +function focusClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); + var requiredElement = elements[elementIndex]; + requiredElement.focus(); +}; +function getElementByClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; return requiredElement; +}; +function getByClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; return requiredElement.value; +}; +function getInnerTextByClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; return requiredElement.innerText; +}; +function putTextIntoClass(theClass, elementIndex, text){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; requiredElement.value = text; +}; +function setStatus(desiredStatus){ + if (window.location.href.indexOf("timeexpensemodule.html") > -1) { + putTextIntoClass("cw_ticketStatus", 0, desiredStatus); + focusClass("cw_ticketStatus", 0); + }else{ + putTextIntoClass("cw_status", 0, desiredStatus); + focusClass("cw_status", 0); + } +} + + + diff --git a/old wheelhouse scripts/Lazy Teams.user.js b/old wheelhouse scripts/Lazy Teams.user.js new file mode 100644 index 0000000..f285161 --- /dev/null +++ b/old wheelhouse scripts/Lazy Teams.user.js @@ -0,0 +1,91 @@ +// ==UserScript== +// @name New post +// @namespace Violentmonkey Scripts +// @match https://teams.microsoft.com/* +// @grant none +// @version 1.0 +// @author - +// @description 12/22/2023, 9:45:49 AM +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== + +//disable teams overriding right click menus +document.addEventListener("contextmenu", (e)=>e.stopPropagation(), true); + + +VM.shortcut.register('a-i', () => { + document.querySelector("[id='new-post-button']").click(); +}); +VM.shortcut.register('c-i', () => { + //window.alert("mario") + document.querySelector("[data-tid='compose-start-post']").click(); + focusElement('[data-tid="ckeditor"]'); +}); +VM.shortcut.register('c-r', () => { + document.querySelector("[data-tid='ckeditor']").focus(); +}); +VM.shortcut.register('a-c-`', () => { // Click "teams" button + document.title = "Switching to Teams..."; + document.querySelector("[data-tid='2a84919f-59d8-4441-a975-2a8c2643b741']").click(); +}); +VM.shortcut.register('a-s-~', () => { // Click "teams" button + document.title = "Switching to Chat..."; + document.querySelector("[data-tid='86fcd49b-61a2-4701-b771-54728cd291fb']").click(); +}); +VM.shortcut.register('a-s-(', () => { + chatSwitch("Corey Luckett", "[aria-label='Corey Luckett']", "SD General", "[data-tid='channel-list-item-text-19:17d0f18bbe38444585becef3f654c859@thread.skype']"); +}); +VM.shortcut.register('a-9', () => { + chatSwitch("Support Agents and Alumni", "[aria-label='Support Agents and Alumni']", "Alpha Pod", "[data-tid='channel-list-item-text-19:7a5705aa5f5e4189998a90a6f89c136f@thread.skype']"); +}); +VM.shortcut.register('a-0', () => { + chatSwitch("Sierra Alpha Only", "[aria-label='Sierra Alpha Only']", "Charlie Pod", "[data-tid='channel-list-item-text-19:95c6eb80937a44d4a6540b9e6fdfc6c5@thread.skype']"); +}); +VM.shortcut.register('a--', () => { + chatSwitch("Sigma Pod", "[aria-label='Sigma Pod']", "Gamma Pod", "[data-tid='channel-list-item-text-19:83b2a5bf12d94019840d1d5687c49107@thread.skype']"); +}); +VM.shortcut.register('a-=', () => { + toggleTeams() +}); +function toggleTeams(){ + var chatButton = document.querySelector("[data-tid='86fcd49b-61a2-4701-b771-54728cd291fb']") + if(chatButton.getAttribute('aria-pressed') == "true"){ + //chat is pressed! :D + document.title = "Switching to Teams..."; + document.querySelector("[data-tid='2a84919f-59d8-4441-a975-2a8c2643b741']").click(); + } + else{ + //window.alert("chat is not pressed! D:"); + document.title = "Switching to Chat..."; + document.querySelector("[data-tid='86fcd49b-61a2-4701-b771-54728cd291fb']").click(); + } +} +function chatSwitch(chatChatName, chatChatAttribute, teamsChatName, teamsChatAttribute){ + var chatButton = document.querySelector("[data-tid='86fcd49b-61a2-4701-b771-54728cd291fb']") + //if(document.querySelector("[data-tid='86fcd49b-61a2-4701-b771-54728cd291fb']").getAttribute('aria-pressed') == "true"){ + if(chatButton.getAttribute('aria-pressed') == "true"){ + //chat is pressed! :D + document.title = "Switching to "+chatChatName+"..."; + document.querySelector(chatChatAttribute).click(); + } + else{ + //window.alert("chat is not pressed! D:"); + document.title = "Switching to "+teamsChatName+"..."; + document.querySelector(teamsChatAttribute).click(); + } +} +function focusElement(query){ + var intv = setInterval(function() { + var elems = document.querySelectorAll(query); + if(elems.length < 1){ + return false; + } + //when element is found, clear the interval. + clearInterval(intv); + for (var i = 0, len = elems.length; i < len; i++){ + elems[i].value = ""; + console.log("loop!") + } + document.querySelector(query).focus(); + }, 100); +}; \ No newline at end of file diff --git a/old wheelhouse scripts/Microsoft Admin Portal.user.js b/old wheelhouse scripts/Microsoft Admin Portal.user.js new file mode 100644 index 0000000..556bef2 --- /dev/null +++ b/old wheelhouse scripts/Microsoft Admin Portal.user.js @@ -0,0 +1,11 @@ +// ==UserScript== +// @name Microsoft Admin Portal +// @namespace Violentmonkey Scripts +// @match https://admin.exchange.microsoft.com/* +// @match https://admin.microsoft.com/* +// @grant none +// @version 1.0 +// @author - +// @description 6/11/2024, 12:49:02 PM +// ==/UserScript== + diff --git a/old wheelhouse scripts/changeZoom.user.js b/old wheelhouse scripts/changeZoom.user.js new file mode 100644 index 0000000..9caaa7c --- /dev/null +++ b/old wheelhouse scripts/changeZoom.user.js @@ -0,0 +1,23 @@ +// ==UserScript== +// @name changeZoom +// @namespace Violentmonkey Scripts +// @grant GM.openInTab +// @version 1.0 +// @author - +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== +VM.shortcut.register('a-7', () => { + document.body.style.zoom = "70%"; +}); + +VM.shortcut.register('a-8', () => { + document.body.style.zoom = "80%"; +}); + +VM.shortcut.register('a-9', () => { + document.body.style.zoom = "90%"; +}); + +VM.shortcut.register('a-0', () => { + document.body.style.zoom = "100%"; +}); \ No newline at end of file diff --git a/old wheelhouse scripts/openUrl.user.js b/old wheelhouse scripts/openUrl.user.js new file mode 100644 index 0000000..5ac988c --- /dev/null +++ b/old wheelhouse scripts/openUrl.user.js @@ -0,0 +1,116 @@ +// ==UserScript== +// @name openUrl +// @namespace Violentmonkey Scripts +// @grant GM.openInTab +// @grant GM.setValue +// @grant GM.getValue +// @grant GM.notification +// @version 1.0 +// @author - +// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1 +// ==/UserScript== +VM.shortcut.register('a-F2', () => { +document.title = prompt("What would you like to name this tab?") +}); +VM.shortcut.register('a-t', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/connectwise.aspx?fullscreen=false&locale=en_US#XQAACAD0AAAAAAAAAAA9iIoG07$U9XgivLgsNhRsAzclmBsEVPOUvf12ZCOSL1cKld_sNK5vxzDxKqEIQN1BvG7dqFASg8$hPG4Tn9O9idccWjDsAW7JjklbemtIH39ZGIrt3xvMiJgp$sTd4Q1ZXCVHDvWAoouZMsezMi3KbX83f6zqULZmLL$d3PirBCuIv_6gscA=??ServiceTicketNew"); +}); +VM.shortcut.register('a-s-c', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/ConnectWise.aspx?locale=en_US#XQAACABxAQAAAAAAAAA9iIoG07$U9Xgsgy4H5d1QIn66fpE_52stocC7hTyEheVB0jdOBWGpoyiuAdMBDAJL8bBV7A_wzv_ohFRtPN3CHR1tdahbjINpBe7c_SX3X2tQyTs8xWay2oXAWd2AOzUd0i4MpVKQIG4tx0$Jc1NwtE_4m1ZGBwXHX$JKREIOW2ONr3tvx9FJiyiuMBd7mZNbcj1fKHdzjNyqRR8SnfCwT8gxbamKCXWk6BjfYcJi2a5pqCsMcG8QoRZgLm_wXKz_bkP8AA==??ConfigurationList"); +}); +VM.shortcut.register('a-s-t', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/ConnectWise.aspx?locale=en_US#XQAACACSAQAAAAAAAAA9iIoG07$U9XZqpLgsNhRsI0O_rb8$BDZMLPpOoVsVotL7i6hH34LCO7ZoHJJZg4IeLpcY_gC96MlY$eDRat8hb184i5FbR7ZauFFNtcBLwLDvQHQ8Btgk1ClWQ3TqWzdUcjeXaiNqnMAXVfeq$8t0$iljtbQgTTGhgTz5o1IUwjimoAsIClb$piHlxoB1$9FXLSYgvymFS$FYshezK7okMhpvdv0y3dNmdx3vrMohMaWUtppT90v9DFrq??ServiceSearchList"); +}); +VM.shortcut.register('a-c', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/ConnectWise.aspx?locale=en_US#XQAACAA1AQAAAAAAAAA9iIoG07$U9XZqpLgsNhRrwys7G93Ec4KnGEAS_6zaRrXLbk1hmJYSHi86Vq6x6D8WzI68Gr6edch4HT$7FhMIlhm_MU4cUr32joWu0bf5wnjaND2nOyFbfXoOhBaJ1CFTlGk1y_zjyjucJKiLmRCDu5qWD4D8v9hCHZfrKN1ePhQsq5WiDEdDnD9McUEJno94Iwp8OtKQ3R9eq8CfWr8sNMKm1GHhvtM7_BFKIA==??ContactsList"); +}); +VM.shortcut.register('c-s-c', () => { +GM.openInTab("https://hudu.247mgmt.com/c"); +}); +VM.shortcut.register('a-s-b', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/connectwise.aspx?fullscreen=false&locale=en_US#XQAACAC0AwAAAAAAAAA9iIoG07$U9XS7KAi9Xl65u3Vs$bByAbA9mswuxDEGw2svj8VhHiB_5tzaJbwShweI$9Ze5iho8Qt2l2IOvtfxAnG9UFX_Qov9TIoJPx_LLTqLVfvQZphPevid_uhiNP$ovM4UPb9wbjcNLyaC6gOGzhmBmTmfVJ99M4f$cnRZi7JV2MmmdVAIcA3HlNQEddO_zv7VbPxNhfe1HDvKw9a8SGmBTAt0rtk07ocgpKpfvVO4qRky$WrRumP69ancUOLW0VR8NedqZOmR754q2j85Fc_3wZ2RTqJu7tWK20H9Mj7cSfv9r54OVr_U$8Kst_4ph4YmZ_sAGSEyCPakUV0GRV9tfM9BbGOqv7k8oHb4wdPgsUKWruHLGBWUdDRpx_$0bt8Sk5GGjRy0dlg3WDcl$fQVBpKbd78pTAVFrSqQuXdTJdsmkBc3VxWv8AQLLRSw1oRSbEq477dE_9uZfeY=??ServiceBoard"); +}); +VM.shortcut.register('a-b', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/connectwise.aspx?fullscreen=false&locale=en_US#XQAACAC3AwAAAAAAAAA9iIoG07$U9XgivLgsNhRsI0O_rEHSzQCIbZUnpNMnJHh0NEgqfX4ZS9QZp_DnE3XebvTj3FYGLlQ$a1FH0nj9Raf$98EK4uLBiRRTVx9dUgYH_sfxCwkQ$yRUCodKDz5JrcyFY4g7LgWIF8b8zdrq93Dzq9Qsy9kqokMkKbbgQBvaiRAwU4dXmxCyNwz6qHk4U9HuD3qg2CCNTdT5Y4M87aTuCQE2HGwPSDzKbu$EF04Eb7SgJbsvfH$Bwrc9R65tlTJPaFOwzqcfwTSU_wlO_xqMi9rbhAkZQ8$6rKgscwxQcuGtp6K7rimQ$RUGLBwMOQcjxW4iKoYtkCwJ4VOQiclhwlXsZWzNHJaViUNiz4_fKJIcQGGu3LlDqRGkJTAfdBpyfFLuglBz$lJu2_JNLqHY7kwlFYqOTd6PFp2jW_CBwN5o_b$2XgiKTpDe5flQzIAOcDp8b80jrtf_8T8ulg==??ServiceBoard"); +}); +VM.shortcut.register('a-a', () => { +GM.openInTab("https://manage.247mgmt.com/automate/browse/companies/computers"); +}); +VM.shortcut.register('a-q', () => { +GM.openInTab("https://admin.getquickpass.com/customers"); +}); +VM.shortcut.register('a-s-q', () => { +GM.openInTab("https://hudu.247mgmt.com/kba/cyberqp-active-clients-db85c0c1ff78"); +}); +VM.shortcut.register('c-s-h', () => { +GM.openInTab("https://hudu.247mgmt.com"); +}); +VM.shortcut.register('c-s-d', () => { +GM.openInTab("https://admin-4124d980.duosecurity.com/login?email=gianlucca.pirovano%40wheelhouseit.com&next=%2F"); +}); +VM.shortcut.register('c-m', () => { +GM.openInTab("https://na.myconnectwise.net/v2025_1/connectwise.aspx?fullscreen=false&locale=en_US#XQAACAC1AgAAAAAAAAA9iIoG07$U9XS2qbz2sCgCrNjO$vAWHdHdFD2hRcTwBuofF$U3XDsWCqOMg4ZfErfxufo2MkT9yzKJTzo4MlvDs$bGTcaZfpl6DkiG2XfIXtzyDDnuZTSn7RROTTES7vsyXtChnCO3HqJSVm$_1N7a1cFCBfLm4dMx1SCk2mU$eod59rcf67BW$WT3CLeGsPEEOaKOyU03aa2lGOM1PdR3ynFB_c4Nb4sJX8QPKtg7d8A96J_2PCL6QSRUm8Xvn9esOaNIKUGKgKAEkf0dJ3JcaFCq50451o4K8OZ74qYg3EjouZXx1RMGHvJIXIf3$u1Fj64kio5MWlcLzQcOsb6oqNwnoRAfe_vBp17gZG1MUu3hfI4b0xVfeYLKoNUmt4O4u4lP5Kv9Y8mY"); +}); +VM.shortcut.register('c-a-m', () => { +GM.openInTab("https://mxtoolbox.com/EmailHeaders.aspx"); +}); +VM.shortcut.register('c-s-m', () => { +GM.openInTab("https://security.microsoft.com/tenantAllowBlockList"); +}); +VM.shortcut.register('a-y', () => { + var detailLabel = getInnerTextByClass('detailLabel', 0); + var detailLabelSplit = detailLabel.split(" "); + var ticketnumber = detailLabelSplit[2].replace("#", ""); + var tickettitle = detailLabel.replace("Service Ticket ", ""); + GM.setValue('ticketnumber', ticketnumber); + GM.setValue('tickettitle', tickettitle); + document.title = tickettitle; + //GM.notification(ticketnumber+" saved to variable!\nPaste with Alt+Shift+P"); +}); +VM.shortcut.register('a-s-y', () => { + var detailLabel = getInnerTextByClass('detailLabel', 0); + var detailLabelSplit = detailLabel.split(" "); + var ticketnumber = detailLabelSplit[2].replace("#", ""); + var tickettitle = detailLabel.replace("Service Ticket ", ""); + GM.setValue('ticketnumber', ticketnumber); + GM.setValue('tickettitle', tickettitle); +}); +VM.shortcut.register('a-s-p', () => { +async function openTicketNumber(){ + ticketnumber = await GM.getValue('ticketnumber', 0); + var input = await prompt("What is the ticket number you wish to open?", ticketnumber); + if (input === null){ //terminate function if user hits cancel button or provides no input + return; + } + ticketnumber = input + GM.setValue('ticketnumber', ticketnumber); + await GM.openInTab("https://na.myconnectwise.net/v4_6_release/services/system_io/router/openrecord.rails?companyName=wheelhouseit&recordType=ServiceFv&recid="+ticketnumber); +}openTicketNumber(); +}); + +VM.shortcut.register('c-a-s-p', () => { +async function openTicketNumber(){ + ticketnumber = await GM.getValue('ticketnumber', 0); + var input = await prompt("What is the ticket number you wish to open a report for?", ticketnumber); + if (input === null){ //terminate function if user hits cancel button or provides no input + return; + } + ticketnumber = input + GM.setValue('ticketnumber', ticketnumber); + await GM.openInTab("https://na.myconnectwise.net/v2025_1/services/system_io/reports/reportingservices/PdfViewer.rails?reportLink=ServiceTicket_Button¶meters=SR_Service_RecID%3D"+ticketnumber+"%26My_Member_ID%3D373%26TimeZoneName%3DEastern%2BStandard%2BTime%26Language%3Den-US"); +}openTicketNumber(); +}); + + + + + + + +//Functions Below +function getInnerTextByClass(theClass, elementIndex){ + var elements = document.getElementsByClassName(theClass); var requiredElement = elements[elementIndex]; return requiredElement.innerText; +}; + + + diff --git a/old wheelhouse scripts/violentmonkey b/old wheelhouse scripts/violentmonkey new file mode 100644 index 0000000..3c77cdd --- /dev/null +++ b/old wheelhouse scripts/violentmonkey @@ -0,0 +1,235 @@ +{ + "scripts": { + "Lazy Teams": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "injectInto": "auto", + "name": "Lazy Teams", + "noframes": 0, + "pathMap": {}, + "runAt": "document-start" + }, + "config": { + "enabled": true, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 1, + "lastModified": 1736183756169, + "lastUpdated": 1715892082262 + }, + "Lazy Connectwise": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "injectInto": "auto", + "name": "Lazy Connectwise", + "noframes": 0, + "pathMap": {}, + "runAt": "document-start" + }, + "config": { + "enabled": 1, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 2, + "lastModified": 1739208739806, + "lastUpdated": 1739208739806 + }, + "openUrl": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "pathMap": {} + }, + "config": { + "enabled": 1, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 3, + "lastModified": 1740578953770, + "lastUpdated": 1740578953770 + }, + "changeZoom": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "pathMap": {} + }, + "config": { + "enabled": 0, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 4, + "lastModified": 1715783135740, + "lastUpdated": 1715783135740 + }, + "ConnectWiseManageEqualSignRebind": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "pathMap": {} + }, + "config": { + "enabled": 0, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 5, + "lastModified": 1715895001143, + "lastUpdated": 1715895001143 + }, + "Microsoft Admin Portal": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "pathMap": {} + }, + "config": { + "enabled": 1, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 6, + "lastModified": 1718124605141, + "lastUpdated": 1718124605141 + }, + "ClipHTMLEdit": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "pathMap": {}, + "match": [ + "https://wiki.gianluccapirovano.com/*" + ] + }, + "config": { + "enabled": 1, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 7, + "lastModified": 1740579178008, + "lastUpdated": 1740579178008 + }, + "CW Auto-Closer": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "pathMap": {} + }, + "config": { + "enabled": 0, + "removed": 0, + "shouldUpdate": 1 + }, + "position": 8, + "lastModified": 1736884973399, + "lastUpdated": 1728927612984 + } + }, + "settings": { + "isApplied": true, + "blacklist": "file://*/*", + "blacklistNet": "file://*/*", + "popupWidth": 320, + "updateEnabledScriptsOnly": true, + "autoUpdate": 1, + "lastUpdate": 1740577957782, + "lastModified": 1707747155098, + "showBadge": "unique", + "badgeColor": "#880088", + "badgeColorBlocked": "#888888", + "exportValues": true, + "exportNameTemplate": "[violentmonkey]_YYYY-MM-DD_HH.mm.ss", + "expose": { + "greasyfork%2Eorg": true, + "sleazyfork%2Eorg": false + }, + "closeAfterInstall": false, + "editAfterInstall": false, + "helpForLocalFile": true, + "trackLocalFile": false, + "autoReload": false, + "features": null, + "syncScriptStatus": true, + "customCSS": "", + "importScriptData": true, + "importSettings": true, + "notifyUpdates": false, + "notifyUpdatesGlobal": false, + "version": 1, + "defaultInjectInto": "auto", + "ffInject": false, + "xhrInject": false, + "filters": { + "searchScope": "name", + "showOrder": false, + "sort": "exec", + "viewSingleColumn": false, + "viewTable": true + }, + "filtersPopup": { + "sort": "exec", + "enabledFirst": false, + "groupRunAt": true, + "hideDisabled": "" + }, + "editor": { + "killTrailingSpaceOnSave": true, + "showTrailingSpace": true, + "autocompleteOnTyping": 100, + "lineWrapping": false, + "indentWithTabs": false, + "indentUnit": 2, + "tabSize": 2, + "undoDepth": 500 + }, + "editorTheme": "", + "editorThemeName": null, + "editorWindow": false, + "editorWindowPos": {}, + "editorWindowSimple": true, + "scriptTemplate": "// ==UserScript==\n// @name New script {{name}}\n// @namespace Violentmonkey Scripts\n// @match {{url}}\n// @grant none\n// @version 1.0\n// @author -\n// @description {{date}}\n// ==/UserScript==\n", + "showAdvanced": true, + "valueEditor": { + "autocompleteOnTyping": 100, + "lineWrapping": false, + "indentWithTabs": false, + "indentUnit": 2, + "tabSize": 2, + "undoDepth": 500 + }, + "uiTheme": "" + }, + "values": { + "Violentmonkey-20Scripts-0aNew-20script-20-2d-20myconnectwise.net-0a": { + "company": "sAccuity Delivery Systems, LLC", + "pod": "sINDIE" + }, + "Violentmonkey-20Scripts-0aopenUrl-0a": { + "ticketnumber": "s9827510", + "tickettitle": "s#9891179 - Assistance Needed for New Laptop Setup and ConnectWise Agent Installation" + } + } +} \ No newline at end of file diff --git a/violentmonkey b/violentmonkey new file mode 100644 index 0000000..ea3f254 --- /dev/null +++ b/violentmonkey @@ -0,0 +1,193 @@ +{ + "scripts": { + "Force Enable Right Click, Copy & Paste": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "origTag": true, + "pathMap": {} + }, + "config": { + "enabled": 1, + "shouldUpdate": 1, + "removed": 0 + }, + "position": 1, + "lastModified": 1776204395857, + "lastUpdated": 1776204395857 + }, + "Rename Tab – Alt+F2": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "origTag": true, + "pathMap": {} + }, + "config": { + "enabled": 1, + "shouldUpdate": 1, + "removed": 0 + }, + "position": 2, + "lastModified": 1770065672157, + "lastUpdated": 1770065672157 + }, + "Ucertify Tests F12 to Next Question": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "origTag": true, + "pathMap": {} + }, + "config": { + "enabled": 1, + "shouldUpdate": 1, + "removed": 0 + }, + "position": 3, + "lastModified": 1770234176498, + "lastUpdated": 1770234176498 + }, + "Submit Click (F12) + Copy CURRENT Visible Question (F10)": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "origTag": true, + "pathMap": {} + }, + "config": { + "enabled": 1, + "shouldUpdate": 1, + "removed": 0, + "httpOnly": 0 + }, + "position": 4, + "lastModified": 1777411739604, + "lastUpdated": 1777411739604 + }, + "KnowledgeHub - Remove no-copy class": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "origTag": true, + "pathMap": {} + }, + "config": { + "enabled": false, + "shouldUpdate": 1, + "removed": 0 + }, + "position": 5, + "lastModified": 1776793698669, + "lastUpdated": 1776204380800 + }, + "D2L Auto-Advance v7.3": { + "custom": { + "origInclude": true, + "origExclude": true, + "origMatch": true, + "origExcludeMatch": true, + "origTag": true, + "pathMap": {} + }, + "config": { + "enabled": false, + "shouldUpdate": 1, + "httpOnly": 0, + "removed": 0 + }, + "position": 6, + "lastModified": 1779125333652, + "lastUpdated": 1777409870714 + } + }, + "settings": { + "isApplied": true, + "blacklist": "file://*/*", + "blacklistNet": "file://*/*", + "popupWidth": 320, + "updateEnabledScriptsOnly": true, + "gmCookieHttpOnly": false, + "pageMenuCommands": false, + "autoUpdate": 1, + "lastUpdate": 1781116314217, + "lastModified": 1771437550250, + "showBadge": "unique", + "badgeColor": "#880088", + "badgeColorBlocked": "#888888", + "exportValues": true, + "exportNameTemplate": "[violentmonkey]_YYYY-MM-DD_HH.mm.ss", + "expose": { + "greasyfork%2Eorg": true, + "sleazyfork%2Eorg": false + }, + "closeAfterInstall": false, + "editAfterInstall": false, + "helpForLocalFile": true, + "trackLocalFile": false, + "autoReload": false, + "features": null, + "syncScriptStatus": true, + "syncAutomatically": true, + "customCSS": "", + "importScriptData": true, + "importSettings": true, + "notifyUpdates": false, + "notifyUpdatesGlobal": false, + "version": 1, + "defaultInjectInto": "auto", + "ffInject": true, + "xhrInject": false, + "filters": { + "showOrder": false, + "showVisit": false, + "sort": "exec", + "viewSingleColumn": false, + "viewTable": false + }, + "filtersPopup": { + "sort": "exec", + "enabledFirst": false, + "groupRunAt": true, + "hideDisabled": "" + }, + "editor": { + "killTrailingSpaceOnSave": true, + "showTrailingSpace": true, + "autocompleteOnTyping": 100, + "lineWrapping": false, + "indentWithTabs": false, + "indentUnit": 2, + "tabSize": 2, + "undoDepth": 500 + }, + "editorTheme": "", + "editorThemeName": null, + "editorWindow": false, + "editorWindowPos": {}, + "editorWindowSimple": true, + "scriptTemplate": "// ==UserScript==\n// @name New script {{name}}\n// @namespace Violentmonkey Scripts\n// @icon {{icon}}\n// @version 1.0.0\n//\n// @match {{url}}\n// @grant none\n//\n// @author -\n// @description\n// ==/UserScript==\n", + "showAdvanced": true, + "valueEditor": { + "autocompleteOnTyping": 100, + "lineWrapping": false, + "indentWithTabs": false, + "indentUnit": 2, + "tabSize": 2, + "undoDepth": 500, + "editAsString": true + }, + "uiTheme": "" + }, + "values": {} +} \ No newline at end of file