semi-functional
[nodejsws.git] / lib / wsrequest.js
index a7ad086..80e4d3c 100644 (file)
@@ -1,8 +1,15 @@
 var url = require("url");
 var path = require("path");
 var fs = require("fs");
-var myparse = require("./myparse.js");
+//var myparse = require("./myparse.js");
 var webmain = require("./webmain.js");
+var layouts = require("./layouts.js");
+
+// global stuff
+var extraCss = new Array();
+var extraJs = new Array();
+//var defaultLayout = null;
+var defaultMainPurl = null;
 
 //var staticExtensions = ["html", "gif", "jpg", "css", "js", "ico"];
 
@@ -45,6 +52,10 @@ function wsRequest(request, response) {
 
        // now we need to find the extension used
        // to serve the request based no the first purl
+       
+       
+       /*
+        * 
        if(purl.pathname == "/") {
                console.log("Serv main");
                webmain.serveMain(request, response, function (request, response) {
@@ -74,8 +85,110 @@ function wsRequest(request, response) {
                }
                return;
        });
+       */
+       
+       urlServicer(request, response, purl);
+       
+       
+       return;
+}
+
+function urlServicer(request, response, purl) {
+       console.log("url servicer called for ", purl);
+       
+       // first resolve the module making the call and determine layout/purl
+       var purlClass = layouts;
+       var purlLayout = layouts.standard();
+       
+       if(purl.pathname == "/") {
+               if(defaultMainPurl == null) {
+                       console.log("set purl class to layouts");
+                       purlClass = layouts;
+               } else {
+                       // find and load the purl
+               }
+               
+               if(typeof purlClass.layout == "undefined") {
+                       console.log("set via undefined");
+                       purlLayout = layouts.standard();
+               } else {
+                       // find and resolve the layout
+               }
+       } else {
+               // handle the purls
+       }
+       
+       // now we should have a layout and a class
+       if(typeof purlClass.preResponse != "undefined") {
+               purlClass.preResponse(request, response, function() {
+                       serviceLayout(request, response, purlClass, purlLayout);                        
+               });
+       } else {
+               serviceLayout(request, response, purlClass, purlLayout);
+       }
        
+       return;
+}
+
+function serviceLayout(request, response, purlClass, purlLayout) {
+       var reallay = "start:"+purlLayout+":end";
+       var splitup = reallay.split("<?njs");
+       var offset=0;
+
+       console.log("inservicer: ", purlLayout);
        
+       function processLayout() {
+               var output = "";
+               
+               console.log("begin process layout");
+               
+               if(offset >= splitup.length) {
+                       response.write("end of caller");
+                       response.end();
+                       return;
+               } else if(offset == 0) {
+                       console.log("write for offset 0");
+                       output = splitup[0].replace(/^start:/g, "");
+                       if(splitup.length == 1) output = output.replace(/:end$/g, "");
+                       console.log("did write: ", output);
+                       response.write(output);
+                       offset++;
+                       processLayout();
+               } else {
+                       var thispart = splitup[offset].split("?>");
+                       var caller = thispart[0].trim();
+                       
+                       console.log("in parts for bits: ", thispart);
+                       console.log("and caller is: ", caller);
+                       
+                       // here we resolve and call the caller....
+                       //response.write("calling: " + caller);
+                       resolveAndCall(request, response, caller, purlClass, function () {
+                               output = thispart[1].replace(/:end$/g, "");
+                               response.write(output);
+                               offset++;
+                               processLayout();
+                       });
+               }
+       }
+       
+       processLayout();
+       
+       //response.write("servicer");
+       //response.end();
+}
+
+function resolveAndCall(request, response, caller, purlClass, callback) {
+       //response.write("resolving: \"" + caller + "\"");
+       if(typeof purlClass[caller] != "undefined") {
+               purlClass[caller](request, response, callback);
+       } else if(typeof purlClass[caller] != "undefined"){
+               layouts[caller](request, response, callback);
+       } else {
+               response.write("<hr><br>Undefined layout section<br><hr>");
+               callback();
+       }
+       //callback();
        return;
 }