Highrise Enhancements

try to take over the world!

Από την 09/01/2017. Δείτε την τελευταία έκδοση.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name         Highrise Enhancements
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  try to take over the world!
// @author       You
// @match        https://wodc.highrisehq.com/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
// ==/UserScript==

var products = ['pt', 'puretane', 'bf', 'blueflame', 'blue flame', 'nuggy', 's5'];
var company = '';
var frame = document.createElement('iframe');
frame.style.cssText = 'z-index: -1; visibility: hidden; position: absolute; top: 0; left: 0;';

var orderLineDiv = document.createElement('div');

(function() {
    'use strict';
    
    var url = window.location.href;
    if (url.toLowerCase().indexOf('iframe') < 0) {
        window.load = start();
    }
})();

function start() {
    
    settingsMenu();
	document.body.appendChild(frame);
    
    if (GM_getValue('Highlight_overdue_tasks')) {
        highlightOverdue();
    }
    
    if (GM_getValue('Show_full_timestamp')) {
        var feed = document.getElementById('recordings');
        if (feed !== null) {
            fullTimestamp();
        }
    }
    
    if (GM_getValue('Show_last_order_in_tasks')) {
        var waitForPopup = setInterval(popupScanner, 200);
    }
    
    if (GM_getValue('Auto_share_tasks')) {
        taskcheckbox();
    }
	
	//findYelpLink();
    
    /*
    var hoursDiv = document.createElement('div');
    var button = document.createElement('button');
    document.body.insertBefore(hoursDiv, document.body.firstChild);
    hoursDiv.appendChild(button);
    button.innerHTML = 'test';
    hoursDiv.style.cssText = 'top: 200px; left: 200px;';*/
    
    settingsButton();
	
	//alert(document.getElementsByClassName('sidebar').length);
}

function findYelpLink() {
	var hours;
	var yelp_link;
	GM_xmlhttpRequest({
		method: "GET",
		url: "https://www.google.com/search?q=Red+House+santa+fe+nm+yelp",
		onload: function(response) {
			yelp_link = response.response.split('www.yelp.com/biz/')[1];
			yelp_link = 'https://www.yelp.com/biz/' + yelp_link.split('"')[0];
			findHours(yelp_link);
		}
	});
}

function findHours(yelp) {
	var hours;
	
	GM_xmlhttpRequest({
		method: "GET",
		url: yelp,
		onload: function(response) {
			hours = response.responseText.split('<div class="ywidget biz-hours">')[1];
			hours = hours.split('</div>')[0];
			alert(hours);
		}
	});
}

function settingsMenu() {
    var options = ['Auto share tasks', 'Highlight overdue tasks', 'Show full timestamp', 'Show last order in tasks'];
    var desc = ['Make sure checkbox "Let everyone see this task" is checked and hidden', 'Highlight overdue text next to tasks link', 'Show the time and date on notes', 'Grab last order date and show in the popup next to tasks'];

    var page_cover = document.createElement('div');
    document.body.appendChild(page_cover);
    page_cover.setAttribute('id', 'page_cover');
    page_cover.style.cssText = 'display: none; position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 1000;';

    var settings_div = document.createElement('div');
    document.body.appendChild(settings_div);
    settings_div.setAttribute('id', 'settings_div');
    settings_div.style.cssText = 'padding: 50px; width: 600px; left: 50%; margin-left: -17.5%; display: none; position: fixed; background: white; border-radius: 20px; text-align: center; z-index: 1001;';

    var ul = document.createElement('ul');
    settings_div.appendChild(ul);

    page_cover.addEventListener('click', function() {
        page_cover.style.display = 'none';
        settings_div.style.display = 'none';
    });

    for (var i = 0; i < options.length; i++) {
        var liButton = document.createElement('li');
        var liDesc = document.createElement('li');
        var button = document.createElement('button');
        button.innerHTML = options[i];
        ul.appendChild(liButton);
        ul.appendChild(liDesc);
        liButton.appendChild(button);
        liDesc.innerHTML = desc[i];
        liDesc.style.cssText = 'margin-bottom: 20px;';
        button.style.cssText = 'border: none !important; margin: 5px 0; border-radius: 5px; color: white;';

        var gm_var = options[i].replace(/ /g, '_');
        if (GM_getValue(gm_var) === undefined) {
            GM_setValue(gm_var, true);
        }

        if (GM_getValue(gm_var) === true) {
            button.style.backgroundColor = '#378622';
        }
        else {
            button.style.backgroundColor = '#bd4b4b';
        }

        button.addEventListener('click', function() {
            gm_var = this.innerHTML.replace(/ /g, '_');
            GM_setValue(gm_var, !GM_getValue(gm_var));

            if (GM_getValue(gm_var) === true) {
                this.style.backgroundColor = '#378622';
            }
            else {
                this.style.backgroundColor = '#bd4b4b';
            }
        });
    }
	
	var update = document.createElement('a');
	update.innerHTML = 'Update';
	update.href = 'https://greasyfork.org/scripts/26136-highrise-enhancements/code/Highrise%20Enhancements.user.js';
	update.style.cssText = 'display: block; margin-top: 50px; font-size: 2em; font-weight: bold; text-decoration: none; color: gray;';
	settings_div.appendChild(update);
}

function settingsButton() {
    var menu = document.getElementsByClassName('global_links')[0];
    var li = document.createElement('li');
    menu.appendChild(li);
    var button = document.createElement('button');
    li.appendChild(button);
    
    button.style.cssText = 'border: none; color: #56778b; font-size: 12px;';
    
    button.innerHTML = 'BONUS';
    button.addEventListener('mouseover', function() {
        button.style.color = 'black';
    });
    
    button.addEventListener('mouseout', function() {
        button.style.color = '#56778b';
    });
    
    button.addEventListener('click', settingsPopup);
}

function taskcheckbox() {
    var taskcheckbox = [];
    taskcheckbox.push(document.getElementById('public_checkbox_task_main'));
    if (document.getElementById('public_checkbox_task_page') !== null) {
        taskcheckbox.push(document.getElementById('public_checkbox_task_page'));
    }
    
    for (var i = 0; i < taskcheckbox.length; i++) {
        taskcheckbox[i].checked = 'checked';
        taskcheckbox[i].parentNode.style.display = 'none';

        var task = document.createElement('div');
        taskcheckbox[i].parentNode.parentNode.insertBefore(task, taskcheckbox[i].parentNode);

        if (taskcheckbox[i].checked) {
            task.innerHTML = '<i>Everyone can see this task</i>';
        }
        else {
            task.innerHTML = '<b>TASK HIDDEN</i>';
        }
        task.style.cssText = 'font-size: 15px !important;';
    }
}


function settingsPopup() {
    var page_cover = document.getElementById('page_cover');
    var settings_div = document.getElementById('settings_div');
    page_cover.style.display = 'block';
    settings_div.style.display = 'block';
}


function highlightOverdue() {
    var span = document.getElementsByTagName('span');
    var len = span.length;
    
    for (var i = 0; i < len; i++) {
        if (span[i].innerHTML.indexOf('overdue') > -1) {
            var num = span[i].innerHTML.split('overdue')[0];
            num = num.split(' ');
            num = num[num.length - 2];
            var text = num + ' ' + 'overdue';
            span[i].innerHTML = span[i].innerHTML.replace(text, '<div id="highlightoverdue">' + text + '</div>');
        }
    }
    
    var overdue = document.getElementById('highlightoverdue');
    overdue.style.cssText = 'color: red; display: inline-block; font-weight: bold;';
}

function fullTimestamp() {
    var timer = setInterval(function() {
        var feed = document.getElementById('recordings');
        var dates = feed.getElementsByClassName('date-container');
        var len = dates.length;
        var split, date, hour, min_sec, ampm;
        
        for (var i = 0; i < len; i++) {
            split = dates[i].getAttribute('data-timestamp').split(' ');
            hour = parseInt(split[1].split(':')[0]);
            min_sec = split[1].split(':');
            min_sec = min_sec[1] + ':' + min_sec[2];
            
            if (hour >= 8) {
                hour -= 8;
            }
            else {
                hour += 16;
            }

            if (hour > 12) {
                hour -= 12;
                ampm = 'PM';
            }
            else if (hour == 12) {
                ampm = 'PM';
            }
            else {
                ampm = 'AM';
            }
            
            if (hour < 10) {
                hour = '0' + hour.toString();
            }

            dates[i].style.cssText = 'color: #333; background: #f1f5f9; padding: 4px; border-radius: 8px; border: 1px solid #d7d7d7; text-align: center; display: block; width: 74px; height: 36px; float: right;';
            dates[i].innerHTML = split[0] + '<br>' + hour + ':' + min_sec + ' ' + ampm;
        }
    }, 50);
}

function loadFrame(link) {
    frame.src = link;
    frame.addEventListener('load', scrollToBottom);
}

function popupScanner() {
    var com = '';
    var popup = document.getElementById('quick_show_window');
    
    var inner;
    
    if (popup.style.display !== 'none') {
        var link = popup.getElementsByTagName('img')[0].parentNode.href;
        
        com = popup.getElementsByTagName('h1')[0].innerHTML;
        if (company !== com) {
            orderLineDiv.innerHTML = '<i>Loading orders...</i>';
            inner = popup.getElementsByClassName('quick_show_window_content')[0];
            inner.appendChild(orderLineDiv);
            company = com;
            loadFrame(link);
        }
    }
    else {
        company = '';
    }
}

function scrollToBottom() {
    var frameWindow = window.frames[0].document;

    var count = 0;
    var spinnerTimer = setInterval(function(){
        if (frameWindow.body.getElementsByClassName('spinner').length !== count) {
            count = frameWindow.body.getElementsByClassName('spinner').length;
            frame.contentWindow.scrollTo(0, frameWindow.body.scrollHeight);
        }
        else {
            clearInterval(spinnerTimer);
            scanFrame();
        }
    }, 800);
}

function scanFrame() {
    var framebody = frame.contentWindow.document.body;
    var contents = framebody.getElementsByClassName('recording-container');
    var len = contents.length;
    var type, cont, html, date;
    var searching = 1;
    var order = false;
    
    for (var i = 0; i < len; i++) {
        cont = contents[i].getElementsByClassName('text-content')[0];
        html = cont.innerHTML.toLowerCase();
        if (searching === 1) {
            date = fixDate(contents[i].getElementsByClassName('date-container')[0].getAttribute('data-timestamp'));
            if (html.indexOf('$') > -1) {
                searching = 0;
                for (var j = 0; j < products.length; j++) {
                    if (html.indexOf(products[j]) > -1) {
                        flag = true;
                    }
                }
                if (flag === true) {
                    type = 'Order';
                }
                else {
                    type = '???';
                }
            }
            else if (html.indexOf('sample') > -1) {
                searching = 0;
                type = 'Sample';
            }
        }
    }
    if (type === '') {
        type = 'null';
    }
    
    if (type !== 'null') {
        orderLineDiv.innerHTML = type + ' sent on ' + date;
    }
    else {
        orderLineDiv.innerHTML = 'No shipments found';
    }
}

function getHours() {
    var name = document.getElementsByClassName('name')[1].innerHTML.split(' |')[0];
    
    var addresses = document.getElementsByClassName('address data_group');
    var ind;
    var len = addresses.length;
    var label;
    for (var i = 0; i < len; i++) {
        label = addresses[i].getElementsByClassName('label');
        if (label[0].innerHTML.toLowerCase().indexOf('work') > -1) {
            ind = i;
        }
    }
    
    var splits;
    var blocks = [];
    var address = addresses[ind].getElementsByClassName('value')[0].innerHTML.replace(/<br>/g, '');
    var lines = address.split('\n');
    len = lines.length - 1;
    
    for (i = 0; i < len; i++) {
        splits = lines[i].split(' ');
        for (var j = 0; j < splits.length; j++) {
            blocks.push(splits[j]);
        }
    }
    
    var searchFrame = document.createElement('iframe');
    searchFrame.style.cssText = 'height: 1000px; width: 1000px;';
    document.body.insertBefore(searchFrame, document.body.firstChild);
    
    var url = 'https://www.google.com/';
    
    /*
    len = blocks.length;
    for (i = 0; i < len; i++) {
        if (blocks[i].length > 0) {
            url = url + blocks[i];
            if ((len - 1) !== i) {
                url = url + '+';
            }
        }
    }
    
    url = url.replace(/,/g, '');*/
    
    searchFrame.src = url;
}

function fixDate(date) {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var year = date.split('-')[0];
    var month = months[parseInt(date.split('-')[1]) - 1];
    var day = date.split('-')[2].substring(0, 2);
    
    return month + ' ' + day + ', ' + year;
}