/* * * Golden Layout plugin * */ let goldenlayout = (function () { var myLayout; // The actively used GoldenLayout API object. var evenniaGoldenLayouts = new Map(); // key/value Map for each selectable layout. var activeLayoutName = "default"; // The object key of the active evenniaGoldenLayout var activeLayoutModified = false; // Has the active layout been modified by the user, without being saved? var knownTypes = ["all", "untagged", "testing"]; var untagged = []; var newTabConfig = { title: "Untitled", type: "component", componentName: "evennia", tooltip: "Click and drag tabs to make new panes", componentState: { types: "all", updateMethod: "newlines", }, }; var newInputConfig = { title: "input", type: "component", componentName: "input", id: "inputComponent", }; // helper function: filter vals out of array function filter (vals, array) { if( Array.isArray( vals ) && Array.isArray( array ) ) { let tmp = array.slice(); vals.forEach( function (val) { while( tmp.indexOf(val) > -1 ) { tmp.splice( tmp.indexOf(val), 1 ); } }); return tmp; } // pass along whatever we got, since our arguments aren't right. return array; } // // Calculate all knownTypes minus the "all" type, // then filter out all types that have been mapped to a pane. var calculateUntaggedTypes = function () { // set initial untagged list untagged = filter( ["all", "untagged"], knownTypes); // for each .content pane $(".content").each( function () { let types = $(this).attr("types"); if ( typeof types !== "undefined" ) { let typesArray = types.split(" "); // add our types to known types so that the onText function don't add them to untagged later knownTypes = Array.from(new Set([...knownTypes, ...typesArray])); // remove our types from the untagged array untagged = filter( typesArray, untagged ); } }); } // // var closeRenameDropdown = function () { let content = $("#renamebox").parent().parent().parent().parent()[0]; let title = $("#renameboxin").val(); let components = myLayout.root.getItemsByType("component"); components.forEach( function (component) { let element = component.tab.header.parent.element[0]; if( (element === content) && (component.tab.isActive) ) { component.setTitle( title ); } }); myLayout.emit("stateChanged"); $("#renamebox").remove(); window.plugins["default_in"].setKeydownFocus(true); } // // var closeTypelistDropdown = function () { let content = $("#typelist").parent().find(".content"); let checkboxes = $("#typelist :input"); let types = []; checkboxes.each( function (idx) { if( $(checkboxes[idx]).prop("checked") ) { types.push( $(checkboxes[idx]).val() ); } }); content.attr("types", types.join(" ")); myLayout.emit("stateChanged"); calculateUntaggedTypes(); $("#typelist").remove(); } // // var closeUpdatelistDropdown = function () { let content = $("#updatelist").parent().find(".content"); let value = $("input[name=upmethod]:checked").val(); content.attr("updateMethod", value ); myLayout.emit("stateChanged"); $("#updatelist").remove(); } // // Handle the renameDropdown var renameDropdown = function (evnt) { let element = $(evnt.data.contentItem.element); let content = element.find(".content"); let title = evnt.data.contentItem.config.title; let renamebox = document.getElementById("renamebox"); // check that no other dropdown is open if( document.getElementById("typelist") ) { closeTypelistDropdown(); } if( document.getElementById("updatelist") ) { closeUpdatelistDropdown(); } if( !renamebox ) { renamebox = $("