Path: blob/main/projects/HexGL/libs/Editor_files/App.js
2282 views
var pgli = pgli || {};12pgli.App = gamecore.Base.extend("App",3{ // static45},6{ // instance78project: null,9moduleList: null,10editor: null,11diagram: null,12preview: null,13nodeCount: 0,14console: null,15debug: 2, // 0:none, 1:inapp, 2:console, 3:both1617init: function(domDiagram, domModuleList, domEditor, domPreview)18{19var self = this;2021this.moduleList = new pgli.ui.ModuleList(domModuleList);2223this.editor = ace.edit(domEditor);24this.editor.setFontSize("16px");25this.editor.setTheme("ace/theme/monokai");26this.editor.getSession().setMode("ace/mode/json");2728this.diagram = new pgli.diagram.Diagram(domDiagram, 30);2930this.preview = new pgli.render.CanvasRenderer(domPreview);3132this.console = $('#console-text');3334this.bindEvents();3536pgli.lang.Parser.debug = self.debug;3738window.trace = function(args)39{40if(!self.debug) return;41for(var i=0, len=arguments.length; i<len; ++i)42{43if(self.debug < 2) console.log(arguments[i]);44if(self.debug == 1 || self.debug == 3) return;45self.console.append(arguments[i].toString()+"\n");46self.console.scrollTop(47self.console[0].scrollHeight - self.console.height()48);49};50}5152window.clearTrace = function()53{54self.console.text("");55}56},5758bindEvents: function()59{60var self = this;6162$(window).on('resize', function(){ return self.resize.call(self); });63$(document).bind('keydown', function(e){ return self.onKeyDown.call(self,e); });64$('#modules').on('drop', function(e) { return self.onDropEvent.call(self,e); });65//window.addEventListener("drop",function(e){ return self.onDropEvent.call(self,e); }) ;6667},6869bindProject: function(project)70{71this.nodeCount = 0;72this.project = project;73this.project.setAppInstance(this);74this.moduleList.bindProject(project);75this.preview.bindProject(project);76this.draw();77},7879draw: function()80{81this.moduleList != undefined && this.moduleList.draw();82//this.preview.draw();83},8485showInEditor: function(module)86{87this.project.setActiveFile(module);88this.editor.getSession().setValue(this.project.files.get(module));89},9091getEditorContent: function()92{93return this.editor.getSession().getValue();94},9596addDiagramNode: function(key, module)97{98this.diagram.addNode(new pgli.diagram.Node(key, module, 50 + 160 * this.nodeCount++, 50));99},100101resize: function()102{103this.diagram.resize();104this.preview.resize();105},106107saveModule: function()108{109for(var i=0; i<this.project.keys.length;i++)110{111var name = this.project.keys[i]112var fileToSave = this.project.getModule(name);113var jsonData = {file :'files/'+name ,obj: fileToSave};114115$.ajax({116url:"/",117type:"POST",118data: JSON.stringify(jsonData),119contentType: "application/json; charset=utf-8",120dataType: "text",121success:function(a)122{123console.log("AJAX POST OK: ", a);124},125error: function(a)126{127console.log("AJAX POST ERROR: ", a);128}129});130131console.log("STARTED AJAX REQUEST");132}133134},135136onKeyDown: function(e)137{138if(e.keyCode==117)139{140this.updateDiagram();141e.preventDefault();142return false;143}144else if(e.keyCode==118)145{146this.preview.draw();147e.preventDefault();148return false;149}150else if(e.keyCode==119)151{152this.saveModule();153e.preventDefault();154return false;155}156},157158updateDiagram:function()159{160this.project.rememberActiveFile();161162for(var i = 0, len = this.project.keys.length; i<len; i++)163{164165var object = pgli.lang.Parser.parseModule(this.project.files.get(this.project.keys[i]));166this.project.modules.put(this.project.keys[i], object);167this.diagram.getNode(this.project.keys[i]).module = object;168//this.getNode.updateModule()...169170}171172this.diagram.draw();173},174175onDropEvent: function(e)176{177trace("#Parsing dropped file(s)...");178e.preventDefault();179var self = this;180181var length = e.originalEvent.dataTransfer.files.length;182for (var i = 0; i < length; i++)183{184var file = e.originalEvent.dataTransfer.files[i];185console.log(file);186187fileName = file.name;188189if(i == 0 && this.project == null)190{191var path = window.prompt("Please prove project's root path (with trailing slash).", "../files/");192trace("#Opening new project from ["+fileName+"]...");193this.bindProject(new pgli.Project(path+fileName, function(){194self.draw();195self.showInEditor(self.project.root);196}));197}198else199this.project.loadFile(self.project.path+fileName,fileName,true,true);200201}202203this.draw();204return false;205206207}208209210211});212213