Home Reference Source

cables_dev/cables_ui/src/ui/components/filemanager_edit.js

import EditorTab from "./tabs/tab_editor.js";

/**
 * edit text files directly from the filemanager
 *
 * @export
 * @class FileManagerEditor
 */
export default class FileManagerEditor
{
    constructor()
    {
        CABLES.editorSession.addListener("editAssetFile",
            (name, data) =>
            {
                this.editAssetTextFile(data.filename, data.syntax, data.patchId);
            }
        );
    }

    editAssetTextFile(filename, syntax, patchId)
    {
        patchId = patchId || gui.project()._id;
        let url = CABLES.platform.getSandboxUrl() + "/assets/" + patchId + "/" + filename;

        if (syntax == "javascript")syntax = "js";
        if (syntax == "shader")syntax = "glsl";

        CABLES.ajax(
            url,
            (err2, _data, xhr2) =>
            {
                const name = filename;

                const editorObj = CABLES.editorSession.rememberOpenEditor("editAssetFile", name, { "filename": filename, "patchId": patchId, "syntax": syntax }, true);

                new EditorTab(
                    {
                        "title": name,
                        "content": _data,
                        "editorObj": editorObj,
                        "syntax": syntax,
                        "onClose": function (which)
                        {
                            CABLES.editorSession.remove(editorObj.type, editorObj.name);
                        },
                        "onSave": function (setStatus, content)
                        {
                            gui.jobs().start({ "id": "saveeditorcontent" + filename, "title": "saving file " + filename });

                            CABLESUILOADER.talkerAPI.send(
                                "updateFile",
                                {
                                    "fileName": filename,
                                    "content": content,
                                },
                                (err3, res3) =>
                                {
                                    gui.savedState.setSaved("editorOnChangeFile");
                                    gui.jobs().finish("saveeditorcontent" + filename);
                                    setStatus("saved");
                                }
                            );
                        },
                        "onChange": function (ev)
                        {
                            gui.savedState.setUnSaved("editorOnChangeFile");
                        },
                        "onFinished": () =>
                        {
                            // gui.mainTabs.activateTabByName(name);
                        }
                    });
            });
    }
}