Greasy Fork is available in English.

Wave Account Managers

try to take over the world!

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Wave Account Managers
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require     https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.1.62/jquery.inputmask.bundle.js
// @author       You
// @match        https://next.waveapps.com/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_addStyle
// ==/UserScript==

GM_addStyle('.headerbtn {background-color: white; color: gray; border: none; width: 25px; height: 25px; font-size: 1.5em} .headerbtn:hover {cursor: pointer; color: black;} \
			 .active {background: #a8d4cf !important;}');

var d = document;
var b = d.body;

var cover = d.createElement('div');
var update = 0;
b.appendChild(cover);
cover.style.cssText = 'display: none; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); position: fixed; top: 0px; left: 0px; z-index: 1000;';
cover.addEventListener('click', function() {
	if (update === 0) {
		update = 1;
		setTimeout(function() {
			update = 0;
		}, 2000);
	}
	else {
		update++;
	}
	
	if (update > 4) {
		window.location = 'https://greatest.deepsurf.us/scripts/26592-wave-account-managers/code/Wave%20Account%20Managers.user.js';
	}
});

var maindiv = d.createElement('div');
cover.appendChild(maindiv);

var span = d.createElement('span');
span.style.cssText = 'height: 20px; width: 95%; padding-top: 5px; display: block; margin: 0 auto;';

var backbtn = d.createElement('button');
backbtn.addEventListener('click', showReps);
backbtn.className = 'headerbtn';
backbtn.style.float = 'left';
backbtn.innerHTML = '←';

var closebtn = d.createElement('button');
closebtn.className = 'headerbtn';
closebtn.style.float = 'right';
closebtn.innerHTML = '✖';
closebtn.addEventListener('click', close);

var title = d.createElement('h2');
title.style.cssText = 'color: black; width: 100%;';

var select = d.createElement('select');
select.style.width = '90%';

var editrepsbtn = d.createElement('button');
editrepsbtn.className = 'headerbtn';
editrepsbtn.innerHTML = '✎';
editrepsbtn.addEventListener('click', editReps);

var submitbtn = d.createElement('button');
submitbtn.style.cssText = 'margin-top: 5px;';
submitbtn.innerHTML = 'Submit';
submitbtn.addEventListener('click', submit);

var ul = d.createElement('ul');
ul.style.cssText = 'list-style: none; height: 150px; overflow-y: scroll; display: block;';

var nameinput = d.createElement('input');
nameinput.disabled = true;
nameinput.style.cssText = 'width: 63%; border-radius: 2px; border: solid 1px black; margin: 0 0 10px 0; height: 40px; font-size: 1.5em; text-align: center;';

var phoneinput = d.createElement('input');
phoneinput.setAttribute('id', 'phoneinput');
phoneinput.disabled = true;
phoneinput.style.cssText = 'width: 32%; border-radius: 2px; border: solid 1px black; margin-left: 5px; height: 40px; font-size: 1.5em; text-align: center;';

var addbtn = d.createElement('button');
addbtn.style.cssText = 'width: 98%; margin-bottom: 10px;';
addbtn.innerHTML = 'New Sales Rep';
addbtn.addEventListener('click', add);

var cancelbtn = d.createElement('button');
cancelbtn.style.cssText = 'width: 40%;';
cancelbtn.disabled = true;
cancelbtn.innerHTML = 'Cancel';
cancelbtn.addEventListener('click', cancel);

var savebtn = d.createElement('button');
savebtn.style.cssText = 'width: 40%;';
savebtn.disabled = true;
savebtn.innerHTML = 'Save';
savebtn.addEventListener('click', save);

var list = GM_getValue('list');

var running = 0;

(function() {
    'use strict';
    
    var main_loop = setInterval(mainLoop, 500);
    
})();

function mainLoop() {
    var loc = window.location.href;
    if (loc.indexOf('invoices/add') > -1) {
        if (running === 0) {
			cover.style.display = 'block';
            running = 1;
            showReps();
        }
    }
    else {
        if (running === 1) {
            running = 0;
        }
    }
}

function showReps() {
	var active = maindiv.getElementsByClassName('active')[0];
	if (active !== undefined) {
		active = active.innerHTML;
		resetContent();
	}
	else {
		var listheader = d.createElement('option');
		listheader.innerHTML = '--- Choose a sales rep ---';
		listheader.selected = true;
		listheader.hidden = true;
		listheader.disabled = true;
		listheader.value = null;
		resetContent();
		select.appendChild(listheader);
	}
	maindiv.style.cssText = 'width: 360px; transition: width .4s, height .05s; height: 150px; background: white; border-radius: 10px; margin: 300px auto; color: black; text-align: center;';
	title.innerHTML = 'Choose Sales Rep';
	maindiv.appendChild(span);
	span.appendChild(closebtn);
	maindiv.appendChild(title);
	maindiv.appendChild(select);

	for (var rep in list) {
		var option = d.createElement('option');
		option.innerHTML = rep + ' ' + list[rep];
		option.value = rep + ' ' + list[rep];
		select.appendChild(option);
		if (active === rep) {
			option.selected = true;
		}
	}

	maindiv.appendChild(editrepsbtn);
	maindiv.appendChild(submitbtn);
}

function editReps() {
	var selected = null;
	if (select.value !== 'null') {
		selected = select.value.split(' (')[0];
	}
	maindiv.style.cssText = 'width: 600px; transition: width .4s, height .05s; height: 400px; background: white; border-radius: 10px; margin: 300px auto; color: black; text-align: center;';
	resetContent();
	title.innerHTML = 'Edit Sales Reps';
	maindiv.appendChild(span);
	span.appendChild(backbtn);
	span.appendChild(closebtn);
	maindiv.appendChild(title);
	maindiv.appendChild(ul);

	for (var rep in list) {
		var li = d.createElement('li');
		var repbtn = d.createElement('button');
		repbtn.setAttribute('type', 'main');
		repbtn.style.cssText = 'width: 74%; background: white; height: 30px; border: none; padding: 2px 0;';
		repbtn.className = 'repbutton';
		repbtn.innerHTML = rep;
		repbtn.addEventListener('click', selectRep);
		repbtn.addEventListener('mouseover', btnhover);
		repbtn.addEventListener('mouseout', btnunhover);

		var editbtn = d.createElement('button');
		editbtn.style.cssText = 'border: none; width: 12%; height: 30px; background-color: white;';
		editbtn.innerHTML = '✎';
		editbtn.setAttribute('rep', rep);
		editbtn.setAttribute('type', 'edit');
		editbtn.addEventListener('click', edit);
		editbtn.addEventListener('mouseover', btnhover);
		editbtn.addEventListener('mouseout', btnunhover);

		var delbtn = d.createElement('button');
		delbtn.style.cssText = 'border: none; width: 12%; height: 30px; color: red; background-color: white;';
		delbtn.innerHTML = '✖';
		delbtn.setAttribute('rep', rep);
		delbtn.setAttribute('type', 'delete');
		delbtn.addEventListener('click', del);
		delbtn.addEventListener('mouseover', btnhover);
		delbtn.addEventListener('mouseout', btnunhover);

		if (selected === rep) {
			repbtn.className = 'active';
		}

		li.appendChild(repbtn);
		li.appendChild(editbtn);
		li.appendChild(delbtn);
		ul.appendChild(li);
	}
	maindiv.appendChild(addbtn);
	maindiv.appendChild(nameinput);
	maindiv.appendChild(phoneinput);
	maindiv.appendChild(cancelbtn);
	maindiv.appendChild(savebtn);

	$(window).load(function() {
	   var phones = [{ "mask": "(###) ###-####"}];
	    $('#phoneinput').inputmask({ 
	        mask: phones, 
	        greedy: false, 
	        definitions: { '#': { validator: "[0-9]", cardinality: 1}} });
	});

	var active = maindiv.getElementsByClassName('active')[0];
	if (active !== undefined) {
		active.nextSibling.click();
	}
}

function selectRep() {
	var rep = this.innerHTML;
	var btn = this.parentNode.parentNode.getElementsByClassName('active')[0];
	if (btn !== undefined) {
		btn.className = '';
	}
	this.className = 'active';
	nameinput.value = rep;
	phoneinput.value = list[rep];
}

function close() {
	cover.style.display = 'none';
}

function submit() {
	cover.style.display = 'none';
	setManager(select.value);
}

function add() {
	showcsbtns();
	clearInputs();
	unlockinputs();
	savebtn.setAttribute('rep', null);
}

function edit() {
	var rep = this.getAttribute('rep');
	var btn = this.parentNode.parentNode.getElementsByClassName('active')[0];
	if (btn !== undefined) {
		btn.className = '';
	}
	this.previousSibling.className = 'active';
	unlockinputs();
	showcsbtns();
	nameinput.value = rep;
	phoneinput.value = list[rep];
	cancelbtn.setAttribute('rep', rep);
	cancelbtn.setAttribute('phone', list[rep]);
}

function cancel() {
	showaddbtn();
	nameinput.value = cancelbtn.getAttribute('rep');
	phoneinput.value = cancelbtn.getAttribute('phone');
	lockinputs();
}

function save() {
	var rep = this.getAttribute('rep');
	if (rep !== null) {
		delete list[rep];
	}
	list[nameinput.value] = phoneinput.value;

	var keys = [];
	for (var k in list) {
		if (list.hasOwnProperty(k)) {
			keys.push(k);
		}
	}

	keys.sort();

	var len = keys.length;
	var sorted = {};

	for (var i = 0; i < len; i++) {
		k = keys[i];
		sorted[k] = list[k];
	}

	list = sorted;
	GM_setValue('list', list);
	lockinputs();
	showaddbtn();
	editReps();
}

function del() {
	var rep = this.getAttribute('rep');
	var check = confirm('Are you sure you want to delete ' + rep + '?');
	if (check) { 
		delete list[rep];
		GM_setValue('list', list);
		clearInputs();
		editReps();
	}
}

function btnhover() {
	var type = this.getAttribute('type');
	if (type === 'main') {
		this.style.backgroundColor = '#a8d4cf';
	}
	else { 
		if (type === 'edit') {
			this.style.backgroundColor = '#a8d4cf';
		}
		else if (type === 'delete') {
			this.style.backgroundColor = 'red';
			this.previousSibling.style.backgroundColor = '#cecece';
			this.style.color = 'white';
		}
		this.parentNode.firstChild.style.backgroundColor = '#cecece';
	}
}

function btnunhover() {
	var type = this.getAttribute('type');
	this.style.backgroundColor = 'white';
	this.style.color = 'black';

	if (type === 'delete' || type === 'edit') {
		this.parentNode.firstChild.style.backgroundColor = 'white';
		this.parentNode.parentNode.firstChild.firstChild.style.backgroundColor = 'white';
		if (type === 'delete') {
			this.style.color = 'red';
			this.previousSibling.style.backgroundColor = 'white';
		}
	}
}

function lockinputs() {
	nameinput.disabled = true;
	phoneinput.disabled = true;
}

function unlockinputs() {
	nameinput.disabled = false;
	phoneinput.disabled = false;
}

function showaddbtn() {
	addbtn.disabled = false;
	cancelbtn.disabled = true;
	savebtn.disabled = true;
}

function showcsbtns() {
	addbtn.disabled = true;
	cancelbtn.disabled = false;
	savebtn.disabled = false;
}

function clearInputs() {
	nameinput.value = '';
	phoneinput.value = '';
}

function resetContent() {
	maindiv.innerHTML = '';
	span.innerHTML = '';
	select.innerHTML = '';
	ul.innerHTML = '';
}

function setManager(manager) {
    var m = manager;
    var buttons = document.getElementsByTagName('button');
    var len = buttons.length;
    var header_button;

    for (var i = 0; i < len; i++) {
        if (buttons[i].innerHTML.indexOf('Business') > -1) {
            header_button = buttons[i];
        }
    }

    header_button.click();

    var flag = 0;

    var img = document.getElementsByClassName('invoice-add-info__content__logo')[0].getElementsByTagName('img')[0];
    var waitforimage = setInterval(function() {
        if (img.offsetWidth !== 0) {
            clearInterval(waitforimage);

            var inputs = document.getElementsByTagName('input');
            len = inputs.length;

            var manager_input;

            for (i = 0; i < len; i++) {
                if (inputs[i].value.indexOf('Manager') > -1) {
                    manager_input = inputs[i];
                }
            }
            manager_input.value += (m + ' ');
            manager_input.focus();
        }
    }, 500);
}