Your IP : 216.73.216.219


Current Path : /home/pteabiscqq/www/media/com_akeeba/js/
Upload File :
Current File : /home/pteabiscqq/www/media/com_akeeba/js/IncludeFolders.js

/**
 * @package   akeebabackup
 * @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd
 * @license   GNU General Public License version 3, or later
 */

// Object initialisation
if (typeof akeeba == "undefined")
{
    var akeeba = {};
}

if (typeof akeeba.Extradirs == "undefined")
{
    akeeba.Extradirs = {};
}

akeeba.Extradirs.render = function (data)
{
    var tbody       = document.getElementById("ak_list_contents");
    tbody.innerHTML = "";

    for (rootname in data)
    {
        if (!data.hasOwnProperty(rootname))
        {
            continue;
        }

        var def = data[rootname];

        akeeba.Extradirs.addRow(rootname, def, tbody);
    }

    akeeba.Extradirs.addNewRecordButton(tbody);
};

akeeba.Extradirs.addRow = function (rootuuid, def, append_to_here)
{
    var elTr       = document.createElement("tr");
    elTr.className = "ak_filter_row";

    // Cache UUID of this entry
    akeeba.System.data.set(elTr, "rootuuid", rootuuid);
    // Cache the definition data (virtual directory)
    akeeba.System.data.set(elTr, "def", def);

    var elDeleteContainer = document.createElement("td");
    var elEditContainer   = document.createElement("td");
    var elDirPath         = document.createElement("td");
    var elVirtualPath     = document.createElement("td");

    // Delete button
    var elDeleteSpan       = document.createElement("span");
    elDeleteSpan.className = "ak_filter_tab_icon_container akeeba-btn--red--mini delete";
    akeeba.System.addEventListener(elDeleteSpan, "click", function ()
    {
        var new_data = {
            uuid: akeeba.System.data.get(this.parentNode.parentNode, "rootuuid"), verb: "remove"
        };

        akeeba.Fsfilters.toggle(new_data, this, function (response, caller)
        {
            if (response.success == true)
            {
                var elRemove = caller.parentNode.parentNode;
                elRemove.parentNode.removeChild(elRemove);
            }
        });
    });

    elDeleteSpan.insertAdjacentHTML("beforeend", "<span class=\"akion-trash-a deletebutton ak-toggle-button\"></span>");
    elDeleteContainer.appendChild(elDeleteSpan);

    // Edit button
    var elEditSpan       = document.createElement("span");
    elEditSpan.className = "ak_filter_tab_icon_container akeeba-btn--teal--mini";

    akeeba.System.addEventListener(elEditSpan, "click", function ()
    {
        // Get reference to data root
        var data_root = this.parentNode.parentNode;

        // Hide pencil icon
        this.style.display = "none";

        // Hide delete icon
        data_root.querySelector("span.delete").style.display = "none";

        var elTd = this.parentNode;
        var elTr = elTd.parentNode;

        // Add a disk icon (save)
        var elDiskIcon       = document.createElement("span");
        elDiskIcon.className =
            "ak_filter_tab_icon_container akeeba-btn--teal--mini save ak-toggle-button ak-stacked-button";
        elDiskIcon.insertAdjacentHTML("beforeend", "<span class=\"akion-checkmark\"></span>");

        akeeba.System.addEventListener(elDiskIcon, "click", function ()
        {
            var that = this;

            var new_directory = data_root.querySelector("input.folder_editor").value;
            new_directory     = trim(new_directory);

            var add_dir = data_root.querySelector("input.virtual_editor").value;
            add_dir     = trim(add_dir);

            if (empty(add_dir))
            {
                add_dir = Math.uuid(8) + "-" + basename(new_directory);
            }

            var old_data = akeeba.System.data.get(data_root, "def", ",");
            old_data     = old_data.split(",", 2);

            if (new_directory == "")
            {
                if (old_data[0] == "")
                {
                    // Tried to save empty data on new row. That's like Cancel...
                    akeeba.System.triggerEvent(that.parentNode.querySelector("span.cancel"), "click");
                }
                else
                {
                    // Tried to save empty data on existing row. That's like Delete...
                    var elDelete           = data_root.querySelector("span.delete");
                    elDelete.style.display = "inline-block";
                    akeeba.System.triggerEvent(elDelete, "click");
                }
            }
            else
            {
                // Save entry
                var new_data = {
                    uuid: akeeba.System.data.get(data_root, "rootuuid"), root: new_directory, data: add_dir, verb: "set"
                };

                akeeba.Fsfilters.toggle(new_data, that, function (response, caller)
                {
                    if (response.success == true)
                    {
                        // Catch case of new row
                        if (old_data[0] == "")
                        {
                            // Change icon to pencil
                            var elIcon = caller.parentNode.querySelector("span.editbutton");
                            akeeba.System.removeClass(elIcon, "akion-plus");
                            akeeba.System.addClass(elIcon, "akion-edit ak-toggle-button");

                            // Add new row
                            akeeba.Extradirs.addNewRecordButton(append_to_here);
                        }

                        // Update cached data
                        var new_cache_data = [new_directory, add_dir];
                        akeeba.System.data.set(data_root, "def", new_cache_data);

                        // Update values in table
                        console.debug(data_root);
                        data_root.querySelector("span.ak_directory").textContent = new_directory;
                        data_root.querySelector("span.ak_virtual").textContent   = add_dir;

                        // Show pencil icon
                        caller.parentNode.querySelector(
                            "span.ak_filter_tab_icon_container").style.display = "inline-block";

                        // Remove cancel icon
                        var elRemove = caller.parentNode.querySelector("span.cancel");
                        elRemove.parentNode.removeChild(elRemove);

                        // Show the delete button
                        data_root.querySelector("span.delete").style.display = "inline-block";

                        // Remove disk icon
                        caller.parentNode.removeChild(caller);

                        // Remove input boxes
                        elRemove = data_root.querySelector("input.folder_editor");
                        elRemove.parentNode.removeChild(elRemove);

                        elRemove = data_root.querySelector("input.virtual_editor");
                        elRemove.parentNode.removeChild(elRemove);

                        // Remove browser button
                        elRemove = data_root.querySelector("span.browse");
                        elRemove.parentNode.removeChild(elRemove);

                        // Show values
                        data_root.querySelector("span.ak_directory").style.display = "inline-block";
                        data_root.querySelector("span.ak_virtual").style.display   = "inline-block";
                    }
                }, false);
            }
        });

        elTd.appendChild(elDiskIcon);

        // Add a Cancel icon
        var elCancelIcon       = document.createElement("span");
        elCancelIcon.className = "ak_filter_tab_icon_container akeeba-btn--orange--mini cancel ak-toggle-button";
        elCancelIcon.insertAdjacentHTML("beforeend", "<span class=\"akion-close \"></span>");

        akeeba.System.addEventListener(elCancelIcon, "click", function ()
        {
            var that                                                                         = this;
            // Show pencil icon
            that.parentNode.querySelector("span.ak_filter_tab_icon_container").style.display = "inline-block";
            // Remove disk icon
            var elRemove                                                                     = that.parentNode.querySelector(
                "span.save");
            elRemove.parentNode.removeChild(elRemove);

            // Remove cancel icon
            that.parentNode.removeChild(that);

            // Remove input boxes
            elRemove = data_root.querySelector("input.folder_editor");
            elRemove.parentNode.removeChild(elRemove);

            elRemove = data_root.querySelector("input.virtual_editor");
            elRemove.parentNode.removeChild(elRemove);

            // Remove browser button
            elRemove = data_root.querySelector("span.browse");
            elRemove.parentNode.removeChild(elRemove);

            // Show values
            data_root.querySelector("span.ak_directory").style.display = "inline-block";
            data_root.querySelector("span.ak_virtual").style.display   = "inline-block";

            // Show the delete button (if it's NOT a new row)
            var old_data = akeeba.System.data.get(data_root, "def", ",");
            old_data     = old_data.split(",", 2);

            if (old_data[0] != "")
            {
                data_root.querySelector("span.delete").style.display = "inline-block";
            }

        });

        elTd.appendChild(elCancelIcon);

        // Show edit box
        var old_data           = akeeba.System.data.get(data_root, "def", ",");
        old_data               = old_data.split(",", 2);
        var elFilterContainer  = elTr.querySelector("td.ak_filter_item");
        var elVirtualContainer = elFilterContainer.nextElementSibling;

        // -- Show input element for the filter (folder to include)
        var elFilterInput = document.createElement("input");
        elFilterInput.setAttribute("type", "text");
        elFilterInput.setAttribute("size", "60");
        elFilterInput.className = "folder_editor";
        elFilterInput.value     = old_data[0];

        // -- Show browser button
        var elBrowser       = document.createElement("span");
        elBrowser.className = "ak_filter_tab_icon_container akeeba-btn--dark--mini browse ak-toggle-button";
        elBrowser.insertAdjacentHTML("beforeend", "<span class=\"akion-folder\"></span>");

        akeeba.System.addEventListener(elBrowser, "click", function ()
        {
            var that   = this;
            // Show folder open dialog
            var editor = that.parentNode.querySelector("input.folder_editor");
            var val    = trim(editor.value);

            if (val == "")
            {
                val = "[ROOTPARENT]";
            }

            akeeba.Configuration.onBrowser(val, editor);
        });

        elFilterContainer.appendChild(elFilterInput);
        elFilterContainer.appendChild(elBrowser);

        var elVirtualInput = document.createElement("input");

        elVirtualInput.setAttribute("type", "text");
        elVirtualInput.setAttribute("size", "60");
        elVirtualInput.className = "virtual_editor";
        elVirtualInput.value     = old_data[1];

        elVirtualContainer.appendChild(elVirtualInput);

        // Hide existing value boxes
        elFilterContainer.querySelector("span.ak_directory").style.display = "none";
        elVirtualContainer.querySelector("span.ak_virtual").style.display  = "none";
    });

    elEditSpan.insertAdjacentHTML("beforeend", "<span class=\"akion-edit editbutton ak-toggle-button\"></span>");
    elEditContainer.appendChild(elEditSpan);

    // Directory path
    elDirPath.className          = "ak_filter_item";
    var elFilterNameSpan         = document.createElement("span");
    elFilterNameSpan.className   = "ak_filter_name ak_directory";
    elFilterNameSpan.textContent = def[0];
    elDirPath.appendChild(elFilterNameSpan);

    // Virtual path
    elVirtualPath.className       = "ak_filter_item";
    var elVirtualNameSpan         = document.createElement("span");
    elVirtualNameSpan.className   = "ak_filter_name ak_virtual";
    elVirtualNameSpan.textContent = def[1];
    elVirtualPath.appendChild(elVirtualNameSpan);

    elTr.appendChild(elDeleteContainer);
    elTr.appendChild(elEditContainer);
    elTr.appendChild(elDirPath);
    elTr.appendChild(elVirtualPath);

    append_to_here.appendChild(elTr);
};

akeeba.Extradirs.addNewRecordButton = function (append_to_here)
{
    var newUUID   = Math.uuid();
    var dummyData = ["", ""];
    akeeba.Extradirs.addRow(newUUID, dummyData, append_to_here);

    var trList = document.getElementById("ak_list_contents").children;
    var lastTr = trList[trList.length - 1];

    var tdList = lastTr.querySelectorAll("td");

    tdList[0].querySelector("span").style.display = "none";

    var spanList = tdList[1].querySelectorAll("span");
    var elPencil = spanList[spanList.length - 1];
    akeeba.System.removeClass(elPencil, "akion-edit");
    akeeba.System.addClass(elPencil, "akion-plus ak-toggle-button");
};

akeeba.Loader.add(['akeeba.UserInterfaceCommon', 'akeeba.System', 'akeeba.Configuration'], function () {
    var guiData = akeeba.System.getOptions("akeeba.IncludeFolders.guiData", null);

    if (guiData === null)
    {
        return;
    }

    akeeba.Configuration.enablePopoverFor(document.querySelectorAll("[rel=\"popover\"]"));
    akeeba.Extradirs.render(guiData);
});