Barking Details

Barking parking lot and car wash details

// ==UserScript==
// @name         Barking Details
// @version      0.0.5
// @description  Barking parking lot and car wash details
// @author       LihtsaltMats
// @include      /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/
// @namespace	 https://greasyfork.org/users/564132
// ==/UserScript==

/* global W */
/* global $ */

(function () {

    function log(m) {
        console.log('%cBarking:%c ' + m, 'color: darkcyan; font-weight: bold', 'color: dimgray; font-weight: normal');
    }

    function wait() {
        if (!W || !W.map || !W.model) {
            setTimeout(wait, 1000);
            log('Waiting Waze...');
            return;
        }
        log('Ready...');
        init();
    }

    const parkingLotAttributes = {
        costType: 'LOW',
        lotType: ['STREET_LEVEL'],
        parkingType: 'PUBLIC',
        paymentType: ['PARKING_APP']
    };


    function getSelectedVenue() {
        const features = sm.getSelectedFeatures();
        return features.length === 1 && features[0].model.type === 'venue'
            ? features[0].model : undefined;
    }

    function initParkingLot() {
        const button = $("<button class='pull-right'>Lisa Parkla Info</button>");

        button.click(function () {
            addParkingLotDetails();
        });
        const tabElement = $('#venue-edit-general > div.form-group > label');
        tabElement.append(button);
    }

    function addParkingLotDetails() {
        let UpdateObject = require("Waze/Action/UpdateObject");
        W.model.actionManager.add(new UpdateObject(venue, {name: 'Barking '}));
        W.model.actionManager.add(new UpdateObject(venue, {description: 'Parkimiseks kasuta Barking äppi'}));
        W.model.actionManager.add(new UpdateObject(venue, {categoryAttributes: {PARKING_LOT: parkingLotAttributes}}));
        W.model.actionManager.add(new UpdateObject(venue, {brand: 'Barking'}));
        W.model.actionManager.add(new UpdateObject(venue, {lockRank: 1}));
        sharedDetails();
    }

    function initCarWash() {
        const button = $("<button class='pull-right'>Lisa Pesula Info</button>");

        button.click(function () {
            addCarWashDetails();
        });
        const tabElement = $('#venue-edit-general > div.form-group > label');
        tabElement.append(button);
    }


    function addCarWashDetails() {
        let UpdateObject = require("Waze/Action/UpdateObject");
        const categories = ['CAR_WASH'];
        W.model.actionManager.add(new UpdateObject(venue, {name: ' [B]'}));
        W.model.actionManager.add(new UpdateObject(venue, {categories}));
        W.model.actionManager.add(new UpdateObject(venue, {description: 'Pesu alustamiseks võimalik kasutada ka Barking äppi'}));
        W.model.actionManager.add(new UpdateObject(venue, {lockRank: 0}));
        sharedDetails();
    }

    function sharedDetails() {
        let UpdateObject = require("Waze/Action/UpdateObject");
        let OpeningHour = require('Waze/Model/Objects/OpeningHour');
        const aliases = ['Barking'];

        W.model.actionManager.add(new UpdateObject(venue, {aliases}));
        W.model.actionManager.add(new UpdateObject(venue, {
            openingHours: [new OpeningHour({
                days: [1, 2, 3, 4, 5, 6, 0],
                fromHour: '00:00',
                toHour: '00:00'
            })]
        }));
        W.model.actionManager.add(new UpdateObject(venue, {phone: '+37258114001'}));
        W.model.actionManager.add(new UpdateObject(venue, {url: 'barking.ee'}));
    }

    let sm = null;
    let venue;

    function init() {
        sm = W.selectionManager;
        sm.events.register('selectionchanged', null, onSelect);
    }

    function onSelect() {
        if (sm.getSelectedFeatures()[0]?.model?.type !== 'venue') {
            return;
        }
        venue = getSelectedVenue();
        if (sm.getSelectedFeatures()[0].model.attributes.categories[0] === 'PARKING_LOT') {
            initParkingLot();
        } else {
            initCarWash();
        }
    }

    wait();
})();