Source: presets.js

"use strict";
// SPDX-License-Identifier: GPL-3.0-or-later
// myMPD (c) 2018-2024 Juergen Mang <mail@jcgames.de>
// https://github.com/jcorporation/mympd

/** @module settingsPlayback_js */

/**
 * Initialization function for the playback settings elements
 * @returns {void}
 */
function initPresets() {
    for (let i = 1; i <= 3; i++) {
        elGetById('selectPresetDropdown' + i).addEventListener('click', function(event) {
            event.preventDefault();
            if (event.target.nodeName === 'BUTTON') {
                applyPreset(event.target.textContent);
                const d = event.target.parentNode.parentNode.previousElementSibling;
                BSN.Dropdown.getInstance(d).hide();
            }
        }, false);
    }
}

/**
 * Applies a preset
 * @param {string} name preset name to load
 * @returns {void}
 */
function applyPreset(name) {
    sendAPI("MYMPD_API_PRESET_APPLY", {
        "name": name
    }, applyPresetCheckError, true);
}

/**
 * Handler for the MYMPD_API_PRESET_APPLY jsonrpc response
 * @param {object} obj jsonrpc response
 * @returns {void}
 */
 function applyPresetCheckError(obj) {
    if (modalClose(obj) === true) {
        getSettings(parseSettings);
    }
}

/**
 * Deletes a preset
 * @param {EventTarget} el triggering element
 * @param {string} name the preset name
 * @returns {void}
 */
//eslint-disable-next-line no-unused-vars
function deletePreset(el, name) {
    showConfirmInline(el.parentNode.previousSibling, tn('Do you really want to delete the preset?'), tn('Yes, delete it'), function() {
        sendAPI("MYMPD_API_PRESET_RM", {
            "name": name
        }, deletePresetCheckError, true);
    });
}

/**
 * Handler for the MYMPD_API_PRESET_RM jsonrpc response
 * @param {object} obj jsonrpc response
 * @returns {void}
 */
 function deletePresetCheckError(obj) {
    if (modalClose(obj) === true) {
        getSettings(parseSettings);
    }
}

/**
 * Populates the preset dropdowns
 * @returns {void}
 */
function populatePresetDropdowns() {
    const presetDropdowns = [
        elGetById('selectPresetDropdown1').lastElementChild,
        elGetById('selectPresetDropdown2').lastElementChild,
        elGetById('selectPresetDropdown3').lastElementChild
    ];
    const selectTimerPreset = elGetById('modalTimerPresetInput');
    for (const d of presetDropdowns) {
        elClear(d);
    }
    elClear(selectTimerPreset);
    selectTimerPreset.appendChild(
        elCreateTextTn('option', {"value": ""}, 'No preset')
    );
    for (const preset of settings.partition.presets) {
        const a = elCreateText('button', {"type":"button", "class": ["btn", "btn-secondary", "btn-sm"]}, preset);
        for (const d of presetDropdowns) {
            d.appendChild(a.cloneNode(true));
        }
        selectTimerPreset.appendChild(
            elCreateText('option', {"value": preset}, preset)
        );
    }
}