Greasy Fork is available in English.

Case Assignment Automator

Case Assignment Remember Configuration & Automated

// ==UserScript==
// @name         Case Assignment Automator
// @namespace    http://tampermonkey.net/
// @version      1.19
// @description  Case Assignment Remember Configuration & Automated
// @author       Shawn Q
// @match        https://caseassignment.channelservices.microsoft.com/*
// @grant        none
// @require      https://code.jquery.com/jquery-3.3.1.min.js
// @require      https://cdn.bootcss.com/canvg/1.4/rgbcolor.min.js
// ==/UserScript==

(function() {
    'use strict';
    // Your code here...

    // Variables
    var mine = [];
    var auto_mine = false;
    var dark_mode = false;
    var auto_execute = false;
    var auto_refresh = false;
    var auto_refresh_interval = 1000 * 60 * 6; // In Min
    // End of Variables

    var EXEMPT_MANDARIN = true;
    var TOTAL_NUMBER;

    var bc = [], prem = [], midElms = [], cBox, executeBtn, btnDiv, spans, auto_refresh_func;
    WaitAndCheck();
    var _COUNTER = 0;
    function WaitAndCheck(){
        cBox = document.getElementsByTagName('input');
        TOTAL_NUMBER = cBox.length - 1;
        executeBtn = document.getElementById('prioritize_work_items');
        btnDiv = document.getElementById('prioritize_button');
        PrefImplement();
        midElms.push(btnDiv);
        if(auto_mine){
            CheckMine();
            if(!auto_execute) ExecuteCall();
        }
        Categorize();
        midElms.push(spans[0]);
        Middlize(midElms);
        AddBtns();
    }
    function AutoRefresh(){
        auto_refresh_func = setTimeout(ExecuteCall, auto_refresh_interval);
    }
    function StopAutoRef(){
        clearTimeout(auto_refresh_func);
    }
    function CheckBC(){
        UncheckAll();
        bc.forEach(function(num) {
            cBox[num].click();
        });
        if(auto_execute) ExecuteCall();
    }
    function CheckPrem(){
        UncheckAll();
        prem.forEach(function(num) {
            cBox[num].click();
        });
        if(auto_execute) ExecuteCall();
    }
    function CheckMine(){
        UncheckAll();
        mine.forEach(function(num) {
            cBox[num].click();
        });
        if(auto_execute) ExecuteCall();
    }
    function SaveMine(){
        mine.length = 0;
        for(var i = 0; i < TOTAL_NUMBER; i++)
        {
            if(cBox[i].checked) mine.push(i);
        }
        SetCookie('mine', JSON.stringify(mine));
    }
    function ExecuteCall(){
        executeBtn.click();
    }
    function isEmptyOrSpaces(str){
        return str === null || str.match(/^ *$/) !== null;
    }
    function UncheckAll(){
        for(var i = 0; i < TOTAL_NUMBER; i++)
        {
            if(cBox[i].checked) cBox[i].click();
        }
    }
    function PrefImplement(){
        AddPrefElm();
        if(GetCookie('auto_refresh')) {
            auto_refresh = true;
            document.getElementById('auto_refresh').click();
        }
        if(GetCookie('auto_mine')) {
            auto_mine = true;
            document.getElementById('auto_mine').click();
        }
        if(GetCookie('auto_execute')) {
            auto_execute = true;
            document.getElementById('auto_execute').click();
        }
        if(GetCookie('dark_mode')) {
            dark_mode = true;
            document.getElementById('dark_mode').click();
        }
        try {
            mine = JSON.parse(GetCookie('mine'));
        } catch(e) {
            mine.length = 0;
        }
    }
    function AddDarkSB() {
        var rule = "<style id='darksb_css' type='text/css'>body {background-color: rgb(21, 21, 21) !important;} ::-webkit-scrollbar, ::-webkit-scrollbar-corner, ::-webkit-scrollbar-track-piece { background: #101010 !important; } ::-webkit-scrollbar { width: 17px !important; height: 17px !important; } ::-webkit-scrollbar-thumb { background: #333333; border: 3px solid #101010 !important; border-radius: 8px !important; } ::-webkit-scrollbar-thumb:hover { background: #444444; }</style>";
        $('html').append(rule);
    }
    function RmDarkSB() {
        document.getElementById('darksb_css').remove();
        document.getElementById("__genieContainer").removeAttribute("style");
    }
    function AddPrefElm(){
        var auto_refresh_text = 'Auto Refresh';
        var auto_mine_text = 'Auto Mine';
        var auto_execute_text = 'Auto Execute';
        var dark_mode_text = 'Dark Mode';
        executeBtn.style.background = 'green';
        executeBtn.style.transitionDuration = "0.3s";
        executeBtn.style.transitionTimingFunction = "ease-out";

        var node = document.createElement('DIV');
        node.style.marginRight = '10px';
        node.style.marginLeft = '-176px';
        node.style.textAlign = 'right';
        node.innerHTML =
            '<input type="checkbox" id="dark_mode" name="dark_mode"><label for="dark_mode">'+ dark_mode_text +'</label>'+
            '<input type="checkbox" id="auto_refresh" name="auto_refresh"><label for="auto_refresh">'+ auto_refresh_text +'</label><br />'+
            '<input type="checkbox" id="auto_mine" name="auto_mine"><label for="auto_mine">'+ auto_mine_text +'</label>'+
            '<input type="checkbox" id="auto_execute" name="auto_execute"><label for="auto_execute">'+ auto_execute_text +'</label>';
        executeBtn.parentNode.insertBefore(node, executeBtn);
        $('label').css({"color": "#555"});
        $('span b').css({"color": "#555"});
        $('#current_time').css({"color": "#555"});
        document.getElementById('dark_mode').nextSibling.style.marginRight = '10px';
        document.getElementById('auto_mine').nextSibling.style.marginRight = '10px';
        document.getElementById('dark_mode').onclick = function() {
            dark_mode = this.checked;
            SetCookie('dark_mode', this.checked);
            if(!dark_mode) RmDarkSB();
            var colorProperties = ['color', 'background-color'];
            $('*').each(function() {
                var color = null;
                for (var prop in colorProperties) {
                    prop = colorProperties[prop];
                    if (!$(this).css(prop) || $(this).is('button') || $(this).is(executeBtn)) continue;
                    color = new RGBColor($(this).css(prop));
                    if (color.ok) {
                        $(this).css(prop, 'rgb(' + (255 - color.r) + ', ' + (255 - color.g) + ', ' + (255 - color.b) + ')');
                    }
                    color = null; //some cleanup
                }
            });
            if(dark_mode) AddDarkSB();
        };
        document.getElementById('auto_refresh').onclick = function() {
            auto_refresh = this.checked;
            SetCookie('auto_refresh', this.checked);
            StopAutoRef();
            if(this.checked) AutoRefresh();
        };
        document.getElementById('auto_mine').onclick = function() {
            auto_mine = this.checked;
            SetCookie('auto_mine', this.checked);
        };
        document.getElementById('auto_execute').onclick = function() {
            auto_execute = this.checked;
            SetCookie('auto_execute', this.checked);
        };
    }
    function AddBtn(btn, id, text, func){
        btn = document.createElement("BUTTON");
        btn.classList.add('button');
        btn.id = id;
        btn.innerHTML = text;
        btn.addEventListener("click", func);
        btn.style.marginLeft = "3px";
        btnDiv.appendChild(btn);
        if(id == 'save') btn.style.background = '#232323';
        else if(id == 'clear') btn.style.background = 'rgb(185, 10, 10)';
    }
    function SetCookie(cname, cvalue) {
        var d = new Date();
        d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000));
        var expires = "expires=" + d.toUTCString();
        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }
    function GetCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) === 0) {
                var res = c.substring(name.length, c.length);
                if(res.toLowerCase() == 'true') return true;
                else if (res.toLowerCase() == 'false') return false;
                return res;
            }
        }
        return "";
    }
    function CheckCookie(cname) {
        if (GetCookie(cname) !== "") return true;
        else return false;
    }
    function Middlize(elms){
        elms.forEach(function(elm) {
            elm.style.display = "flex";
            elm.style.justifyContent = "center";
            elm.style.marginLeft = "0px";
        });
        executeBtn.style.marginLeft = "0px";
        btnDiv.style.marginTop = "2px";

        var table = document.getElementById('select_queues');
        table.style.position = "relative";
        table.style.left = "50%";
        table.style.transform = "translate(-50%)";
        table.style.marginLeft = "0px";
    }
    function AddBtns(){
        var btn;

        AddBtn(btn, 'mine', 'Mine', CheckMine);
        AddBtn(btn, 'bc', 'BC', CheckBC);
        AddBtn(btn, 'prem', 'Prem', CheckPrem);
        AddBtn(btn, 'save', 'Save', SaveMine);
        AddBtn(btn, 'clear', 'Clear', UncheckAll);
    }
    function Categorize(){
        spans = document.getElementsByTagName("span");
        spans[0].parentNode.style.marginLeft = "0px";
        var needSearch = ['bc', 'prem'];

        for (var i = 1; i <= TOTAL_NUMBER; i++) {
            var spanTxt = spans[i].innerText.toLowerCase();
            if (spanTxt.includes(needSearch[0]) || spanTxt.includes(needSearch[1])) {
                if(spanTxt.includes(needSearch[0])){
                    bc.push(i-1);
                } else if (EXEMPT_MANDARIN && spanTxt.includes('mandarin')) {}
                else prem.push(i-1);
            }
        }
    }
})();