Files
Unify/framework/client/editor.js
2025-12-25 11:16:59 +01:00

216 lines
4.3 KiB
JavaScript

class editor{
create( applicationThree, selector ) {
//var selector =
//var id = app.selector.replace("#", "");
var playground = document.createElement("div");
playground.className = "playground";
var fileTree = document.createElement("div");
fileTree.className = "_fileTree fileTree";
var textarea = document.createElement("textarea");
playground.appendChild( textarea );
selector.appendChild( playground );
textarea.value = applicationThree.files[0].source;
/*
editor
*/
var filetree = this.createFileTreeMenu( applicationThree, editor );
//filetree = document.createElement("div");
//filetree.className = "";
fileTree.appendChild( filetree );
var outputDiv = document.createElement("div");
outputDiv.className = "outputDiv";
//outputDiv.id = id;
console.log( "applicationThree", applicationThree );
console.log("textarea", textarea);
playground.prepend( fileTree );
//playground.appendChild( outputDiv );
//this.createTreeJS( applicationThree, editor, app.selector );
document.querySelector(".CodeMirror").style.height = "900px";//document.body.clientHeight - 46 + "px";
document.querySelector(".fileTree").style.height = "569px";//document.body.clientHeight - 46 + "px";
//document.querySelector(".outputDiv").style.height = "569px";//document.body.clientHeight - 46 + "px";
var documentWidth = document.body.clientWidth;
var editorWidth = document.querySelector(".CodeMirror").clientWidth;
var fileTreeWidth = document.querySelector(".fileTree").clientWidth;
//document.querySelector(".outputDiv").style.width = documentWidth - ( fileTreeWidth + editorWidth ) - 12 + "px";
var outputDiv = document.createElement("div");
outputDiv.className = "outputDiv";
//outputDiv.id = id;
selector.appendChild( outputDiv );
/*
const ps = new PerfectScrollbar(selector, {
wheelSpeed: 2,
wheelPropagation: true,
minScrollbarLength: 20
});
*/
return editor;
}
createFileTreeMenu( applicationThree, editor ) {
var fileList = this.createFileTreeMenuItem( applicationThree, true, editor );
return fileList;
}
createFileTreeMenuItem( file, first, editor ) {
var files = file.files;
var fileList = document.createElement("li");
var row = document.createElement("div");
var label = document.createElement("div");
if( file.type == "directory" ) {
row.className = "caret";
row.state = "closed";
row.onclick = function() {
this.parentElement.querySelector(".nested").classList.toggle("active");
this.querySelector(".directory_icon").classList.toggle("open_directory");
if( this.state == "closed" ) {
this.state = "open";
} else {
this.state = "closed";
}
}
var icon = document.createElement("div");
icon.className = "directory_icon";
row.prepend( icon );
} else {
var icon = document.createElement("div");
icon.className = "file_icon";
row.prepend( icon );
}
row.className = "file_row";
label.innerText = file.name;
row.appendChild( label );
if( file.type == "file" ) {
row.onclick = function() {
if(document.querySelectorAll(".file_row.highlighted").length > 0) {
document.querySelector(".file_row.highlighted").classList.toggle("highlighted");
}
this.classList.toggle("highlighted");
var mode = {name: "javascript"};
var codeMirrorDocument = CodeMirror.Doc( file.source, mode );
//editor.swapDoc( codeMirrorDocument );
// alternative
}
}
fileList.appendChild( row );
var treeMenu = document.createElement("ul");
if( !first ) {
treeMenu.className = "nested"
}
for( var c = 0; c<files.length;c++ ) {
var childFile = files[c];
var childList = this.createFileTreeMenuItem( childFile, false, editor );
treeMenu.appendChild( childList );
}
fileList.appendChild( treeMenu );
if(first) {
return treeMenu;
}
return fileList;
}
}
export default new editor();