WME RTC Improvements

Adds several helpful features to RTC handling in the Waze Map Editor

Version au 14/06/2016. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

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

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name            WME RTC Improvements
// @description     Adds several helpful features to RTC handling in the Waze Map Editor
// @namespace       vaindil
// @version         1.1.5
// @grant           none
// @include         https://www.waze.com/editor/*
// @include         https://www.waze.com/*/editor/*
// @include         https://editor-beta.waze.com/editor/*
// @include         https://editor-beta.waze.com/*/editor/*
// @exclude         https://www.waze.com/user/*
// @exclude         https://www.waze.com/*/user/*
// @author          vaindil
// ==/UserScript==

var firstrun = true;
var ls = [];
var dmins = 120;
var dstr = '2';

switch (I18n.locale) {
    case 'es':
        ls.locale = 'es';
        ls.name = 'RTC Mejoras';
        ls.prefs = 'Defecto accidente duración (minutos)';
        ls.xdays = 'Expirará en X días';
        ls.crash = 'Accidente';
        ls.invalidstart = 'Fecha de inicio no es válida';
        ls.notint = 'No es untero válido';
        ls.neg = 'No puede ser negativo';
        ls.prefdefault = 'Defecto: ' + dstr + ' hrs';
        ls.preffuture = 'No se puede establecer más de 180 días en el futuro';
        ls.daysing = 'día';
        ls.daypl = 'días';
        ls.hoursing = 'hr';
        ls.hourpl = 'hrs';
        ls.minsing = 'min';
        ls.minpl = 'mins';
        break;
    case 'fr':
        ls.locale = 'fr';
        ls.name = 'RTC Améliorations';
        ls.prefs = 'Défaut crash durée (minutes)';
        ls.xdays = 'Expirer en X jours';
        ls.crash = 'Crash';
        ls.invalidstart = 'Date de début est invalide';
        ls.notint = 'Pas un entier valide';
        ls.neg = 'Vous ne pouvez pas être négatif';
        ls.prefdefault = 'Défaut: ' + dstr + ' heures';
        ls.preffuture = 'Ne peut pas être réglé plus de 180 jours dans le futur';
        ls.daysing = 'journée';
        ls.daypl = 'journées';
        ls.hoursing = 'heure';
        ls.hourpl = 'heures';
        ls.minsing = 'min';
        ls.minpl = 'mins';
        break;
    case 'de':
        ls.locale = 'de';
        ls.name = 'RTC Verbesserungen';
        ls.prefs = 'Standard Absturz Dauer (minuten)';
        ls.xdays = 'in X Tagen verfallen';
        ls.crash = 'Absturz';
        ls.invalidstart = 'Startdatum ist ungültig';
        ls.notint = 'Keine gültige ganze Zahl';
        ls.neg = 'Kann nicht negativ sein';
        ls.prefdefault = 'Default: ' + dstr + ' std';
        ls.preffuture = 'Es können nicht mehr als 180 Tage in der Zukunft festgelegt werden';
        ls.daysing = 'Tag';
        ls.daypl = 'Tagen';
        ls.hoursing = 'std';
        ls.hourpl = 'std';
        ls.minsing = 'min';
        ls.minpl = 'min';
        break;
    case 'it':
        ls.locale = 'it';
        ls.name = 'RTC Miglioramenti';
        ls.prefs = 'Predefinito schianto durata (minuti)';
        ls.xdays = 'Scade in X giorni';
        ls.crash = 'Schianto';
        ls.invalidstart = 'Data di inizio non è valida';
        ls.notint = 'Non un intero valido';
        ls.neg = 'Non può essere negativo';
        ls.prefdefault = 'Predefinito: ' + dstr + ' ore';
        ls.preffuture = 'Non può essere impostato più di 180 giorni per il futuro';
        ls.daysing = 'day';
        ls.daypl = 'days';
        ls.hoursing = 'ora';
        ls.hourpl = 'ore';
        ls.minsing = 'min';
        ls.minpl = 'min';
        break;
    default:
        ls.locale = 'en';
        ls.name = 'RTC Improvements';
        ls.prefs = 'Default crash length (minutes)';
        ls.xdays = 'Expire in X days';
        ls.crash = 'Crash';
        ls.invalidstart = 'Start date is invalid';
        ls.notint = 'Not a valid integer';
        ls.neg = 'Cannot be negative';
        ls.prefdefault = 'Default: ' + dstr + ' hrs';
        ls.preffuture = 'Can\'t be set more than 180 days in the future';
        ls.daysing = 'day';
        ls.daypl = 'days';
        ls.hoursing = 'hr';
        ls.hourpl = 'hrs';
        ls.minsing = 'min';
        ls.minpl = 'mins';
}

function welcomeToTheJungle() {
    try {
        var element = $('#sidepanel-prefs');
        if ($(element).length) {
            letsAGo();
        } else {
            setTimeout(welcomeToTheJungle, 1000);
        }
    } catch (err) {
        console.log("RTCENH - " + err);
        setTimeout(welcomeToTheJungle, 1000);
    }
}

welcomeToTheJungle();

function letsAGo() {
    $(document).on('mouseover', 'div.add-closure-button.btn.btn-pastrama.btn-positive', function() {
        $(document).off('mouseover.RTCXdays');
        $(document).on('mouseover.RTCXdays', 'div.edit-closure.new', function() {
            justDewIt();
            $(document).off('mouseover.RTCXdays');
        });
    });

    $(document).on('input.RTCXdaysfield', 'input#expireinXdays', timeAndRelativeDimensionInSpace);
    $(document).on('click.RTCXdayscrash', 'div#RTCXdayscrash', ohNoes);

    $('#sidepanel-prefs').append('<hr />' +
                                 '<h4 style="font-size:13px">' + ls.name + '<br />' + ls.prefs + '</h4>' +
                                 '<input type="number" class="form-control" id="RTCimprovcrashdays" />' +
                                 '<span style="font-weight:bold" id="RTCimprovprefsmsg"></span>' +
                                 '<hr />');
    thisIsWhatYouWanted();
    $(document).on('input.RTCXdaysprefs', 'input#RTCimprovcrashdays', thisIsWhatYouWanted);
}

function justDewIt() {
    $('div.edit-closure.new > form.form > div.checkbox').before(
        '<div class="form-group">' +
            '<label class="control-label">' + ls.xdays + '</label>' +
            '<div class="controls">' +
                '<input type="number" length="3" maxlength="4" class="form-control" id="expireinXdays" />' +
            '</div>' +
        '</div>' +
        '<span id="RTCimprovXdaysmsg" style="color:red;font-weight:bold"></span>'
    );

    $('div.action-buttons').append(
        '<div class="btn btn-danger" id="RTCXdayscrash" style="float:right"><i class="fa fa-exclamation-triangle"></i>  ' + ls.crash + '</div>'
    );


    $('input[name="closure_endDate"]').datepicker('remove');
    $('input[name="closure_endDate"]').datepicker({ format: 'yyyy-mm-dd', todayHighlight: true, autoclose: true, language: ls.locale });
}

function timeAndRelativeDimensionInSpace() {
    var newdate = new Date();
    if ($('input[name="closure_startDate"]').val() !== '') {
        var p = $('input[name="closure_startDate"]').val().split('-');
        var y = Number(p[0]);
        var m = Number(p[1]);
        var d = Number(p[2]);
        if (!Number.isInteger(y) || isNaN(y) || !Number.isInteger(m) || isNaN(m) || !Number.isInteger(d) || isNaN(d)) {
            $('#RTCimprovXdaysmsg').text(ls.invalidstart);
            return;
        }
        newdate = new Date(y, m - 1, d);
    }
    var v = Number($('#expireinXdays').val());
    if (!Number.isInteger(v) || isNaN(v)) {
        $('#RTCimprovXdaysmsg').text('');
        return;
    }

    if (v === 0) {
        $('#RTCimprovXdaysmsg').text(ls.notint);
        return;
    }

    if (v < 0) {
        $('#RTCimprovXdaysmsg').text(ls.neg);
        return;
    }

    $('#RTCimprovXdaysmsg').text('');
    newdate.setDate(newdate.getDate() + v);
    $('input[name="closure_endDate"]').datepicker('update', newdate);
    if ($('input[name="closure_endTime"]').val() === '')
        $('input[name="closure_endTime"]').timepicker('setTime', '05:00');
}

function ohNoes() {
    $('input[name="closure_reason"]').val(ls.crash);
    var delay = Number(localStorage.getItem('RTCimprovcrashmins'));
    if (!Number.isInteger(delay) || isNaN(delay) || delay === 0 || delay === '0')
        delay = dmins;
    var cur = new Date();
    cur.setMinutes(cur.getMinutes() + delay);
    $('input[name="closure_endDate"]').datepicker('update', cur);
    $('input[name="closure_endTime"]').timepicker('setTime', (('0' + cur.getHours()).slice(-2)) + ':' + (('0' + cur.getMinutes()).slice(-2)));
}

function thisIsWhatYouWanted() {
    var v;
    if (firstrun) {
        v = localStorage.getItem('RTCimprovcrashmins');
        firstrun = false;
    }
    else
        v = $('input#RTCimprovcrashdays').val();

    v = Number(v);
    if (isNaN(Number(v)) || !Number.isInteger(v) || v === 0 || v === '0') {
        localStorage.setItem('RTCimprovcrashmins', dmins);
        $('#RTCimprovprefsmsg').css('color', 'green').text(ls.prefdefault);
        return;
    }
    if (!Number.isInteger(v) || isNaN(v)) {
        localStorage.setItem('RTCimprovcrashmins', dmins);
        $('#RTCimprovprefsmsg').css('color', 'red').text(ls.notint);
        return;
    }
    if (v < 0) {
        localStorage.setItem('RTCimprovcrashmins', dmins);
        $('#RTCimprovprefsmsg').css('color', 'red').text(ls.neg);
        return;
    }
    if (v > 259200) {
        localStorage.setItem('RTCimprovcrashmins', dmins);
        $('#RTCimprovprefsmsg').css('color', 'red').text(ls.preffuture);
        return;
    }
    localStorage.setItem('RTCimprovcrashmins', v);
    $('input#RTCimprovcrashdays').val(v);
    var min = v % 60;
    var hrso = (v - min) / 60;
    var hrsf = hrso % 24;
    var days = (hrso - hrsf) / 24;
    var ms = min !== 1 ? ls.minpl : ls.minsing;
    var hs = hrsf !== 1 ? ls.hourpl : ls.hoursing;
    var ds = days !== 1 ? ls.daypl : ls.daysing;
    $('#RTCimprovprefsmsg').css('color', 'green').text(days + ' ' + ds + ', ' + hrsf + ' ' + hs + ', ' + min + ' ' + ms);
}