From ec8e262c545ea6363fc742ba778a804381824909 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Nov 2023 21:10:44 -0800 Subject: [PATCH] Added code to modify the "add x" buttons on load --- HandleAddButtons.js | 170 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 5 ++ 2 files changed, 175 insertions(+) create mode 100644 HandleAddButtons.js create mode 100644 README.md diff --git a/HandleAddButtons.js b/HandleAddButtons.js new file mode 100644 index 0000000..e75a830 --- /dev/null +++ b/HandleAddButtons.js @@ -0,0 +1,170 @@ +// ==UserScript== +// @name PodioTweaker-HideAddButtons +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description Make tweaks to podio to help ensure a pit of success +// @author Steven Allen +// @match https://podio.com/qhreicom/qlty-crm/apps/* +// @icon https://www.google.com/s2/favicons?sz=64&domain=podio.com +// @grant none +// ==/UserScript== + +// @dont_require https://code.jquery.com/jquery-3.7.1.min.js + +'use strict'; + +//////// +////////////// BEGIN COPIED CODE FROM @require https://cdn.jsdelivr.net/gh/CoeJoder/waitForKeyElements.js@v1.2/waitForKeyElements.js +//https://github.com/CoeJoder/waitForKeyElements.js +/** + * A utility function for userscripts that detects and handles AJAXed content. + * + * Usage example: + * + * function callback(domElement) { + * domElement.innerHTML = "This text inserted by waitForKeyElements()."; + * } + * + * waitForKeyElements("div.comments", callback); + * // or + * waitForKeyElements(selectorFunction, callback); + * + * @param {(string|function)} selectorOrFunction - The selector string or function. + * @param {function} callback - The callback function; takes a single DOM element as parameter. + * If returns true, element will be processed again on subsequent iterations. + * @param {boolean} [waitOnce=true] - Whether to stop after the first elements are found. + * @param {number} [interval=300] - The time (ms) to wait between iterations. + * @param {number} [maxIntervals=-1] - The max number of intervals to run (negative number for unlimited). + */ +function waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals) { + if (typeof waitOnce === "undefined") { + waitOnce = true; + } + if (typeof interval === "undefined") { + interval = 300; + } + if (typeof maxIntervals === "undefined") { + maxIntervals = -1; + } + var targetNodes = (typeof selectorOrFunction === "function") + ? selectorOrFunction() + : document.querySelectorAll(selectorOrFunction); + + var targetsFound = targetNodes && targetNodes.length > 0; + if (targetsFound) { + targetNodes.forEach(function(targetNode) { + var attrAlreadyFound = "data-userscript-alreadyFound"; + var alreadyFound = targetNode.getAttribute(attrAlreadyFound) || false; + if (!alreadyFound) { + var cancelFound = callback(targetNode); + if (cancelFound) { + targetsFound = false; + } + else { + targetNode.setAttribute(attrAlreadyFound, true); + } + } + }); + } + + if (maxIntervals !== 0 && !(targetsFound && waitOnce)) { + maxIntervals -= 1; + setTimeout(function() { + waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals); + }, interval); + } +} +////////////// END OF COPIED CODE +function getNewDestination(pathName) { + console.log("pathname: "+ pathName); + switch (pathName) { + //💫 Use a differnt form + case "/qhreicom/qlty-crm/apps/external-leads": + case "/qhreicom/qlty-crm/apps/seller-leads": + return "https://podio.com/webforms/29098562/2368311"; + case "/qhreicom/qlty-crm/apps/sales-offers": + return "https://podio.com/webforms/29098535/2368294"; + case "/qhreicom/qlty-crm/apps/cash-buyers": + return "https://podio.com/webforms/29098542/2368298"; + case "/qhreicom/qlty-crm/apps/wholesalers": + return "https://podio.com/webforms/29098543/2368299"; + + //✨Allow people to use + case "/qhreicom/qlty-crm/apps/marketing-numbers": + case "/qhreicom/qlty-crm/apps/team-members": + case "/qhreicom/qlty-crm/apps/major-markets": //Used as list option for Cash Buyers app + case "/qhreicom/qlty-crm/apps/sops": + case "/qhreicom/qlty-crm/apps/lead-sources": + return ""; + + //⛔Dont let people add + case "/qlty-crm/apps/need-to-sell-fast": + case "/qhreicom/qlty-crm/apps/sales": + case "/qhreicom/qlty-crm/apps/smrtphone-logs": + case "/qhreicom/qlty-crm/apps/lists": + case "/qhreicom/qlty-crm/apps/member-s": + case "/qhreicom/qlty-crm/apps/comm-queue": //? + case "/qhreicom/qlty-crm/apps/kpis-track"://? + case "/qlty-crm/apps/drip-numbers"://? + case "/qhreicom/qlty-crm/apps/sales-log"://? + return "#"; + + //⚠Unsure if we should be using this yet + case "/qhreicom/qlty-crm/apps/campaigns": //? + case "/qhreicom/qlty-crm/apps/marketing-kpis": //? + case "/qhreicom/qlty-crm/apps/settings": //Editing the one extent is ok but not sure if add is allowed + case "/qhreicom/qlty-crm/apps/feed": //? + case "/qhreicom/qlty-crm/apps/drip-msgs": //Editing is ok not sure if add should be allowed + case "/qhreicom/qlty-crm/apps/title-companies": //Does a form exist or should we use this? + case "/qhreicom/qlty-crm/apps/lead-followups": //? + return null; + + default: //Un-reviewed Url's + return null; + } + return null; +} + +function fixButton(targetButton){ + console.log("found targetButton: "+ targetButton); + //var targetButton = document.getElementById("featureTourOnboarding"); + + var originalText = targetButton.innerText; + //replace targets url with the correct url to use + var newDestination =getNewDestination(window.location.pathname); + if(newDestination === null) { + console.log("Has not been reviewed yet"); + targetButton.innerHTML = "⚠"+originalText +"⚠"; + return; + } else if(newDestination === "") { + console.log("Ok to use this button"); + targetButton.innerHTML = "✨"+originalText +"✨"; + return; + } else if(newDestination === "#") { + console.log("Changed Button Functionality"); + console.log("Dont use this button"); + targetButton.innerHTML = "⛔"+originalText +"⛔"; + } else { + console.log("Changed Button Functionality"); + targetButton.innerHTML = "💫"+originalText +"💫"; + } + targetButton.href = getNewDestination(window.location.pathname); + targetButton.removeAttribute('onclick'); + targetButton.addEventListener('click', () => { + window.location.assign(targetButton.href); + }); +} + +/* +(new MutationObserver(check)).observe(document, {childList: true, subtree: true}); + +function check(changes, observer) { + if(document.querySelector('#mySelector')) { + observer.disconnect(); + // actions to perform after #mySelector is found + } +} +*/ + +waitForKeyElements('.button-new.add-item.primary.baby-button', fixButton,false,300,-1); + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e5e6655 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# PodioTweaker + +This app is to be used inside tampermonkey + +The script exists to help ensure a pit of success so people dont click things they should not inside our podio app.