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"];
// 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) {
}
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();
+ var mainPath = "";
+
+ if(typeof global.njspurls.mainPath != "undefined") {
+ mainPath = global.njspurls.mainPath;
+ console.log("gettingmainpath from global: ", mainPath);
+ } else {
+ mainPath = path.dirname(require.main.filename) + "/purls/";
+ }
+
+ console.log("main purl path is ", mainPath);
+
+ if(purl.pathname == "/") {
+ if(defaultMainPurl == null) {
+ console.log("set purl class to layouts");
+
+ var mainPurlClassPath = mainPath+"/main.js";
+ console.log("attempting to load main.js as the main purl class");
+ try {
+ var mainPurlClass = require(mainPurlClassPath);
+ purlClass = mainPurlClass;
+ console.log("main.js exists");
+ } catch(err) {
+ console.log("main.js doesnt exist, using default");
+ }
+ } else {
+ // find and load the purl, we'll use main.js
+ var mainPurlClassPath = mainPath+"/"+defaultMainPurl+".js";
+
+ console.log("attempting to load main.js as the main purl class");
+ try {
+ var mainPurlClass = require(mainPurlClassPath);
+ purlClass = mainPurlClass;
+ console.log("main.js exists");
+ } catch(err) {
+ console.log("main.js doesnt exist, using default");
+ }
+ }
+ } else {
+ // handle the purls... we taje the pathname, drop the beginning "/", then drop every after the next "/"
+ // so we end up with a purl of "abcd" from a url:
+ // http://host/abcd/qewr/asdf/asdf/asdf/asdf/asdf/
+ // and will load mainPath/abcd.js
+ var newPurlPath = mainPath+"/"+path.basename(purl.pathname.replace(/^\//, "").replace(/\/.*$/, ""))+".js";
+ console.log("attempting to require: ", newPurlPath);
+ try {
+ var newPurlClass = require(newPurlPath);
+ purlClass = newPurlClass;
+ } catch(err) {
+ console.log("tried to load '%s' for request '%s', but this has failed, returning 302 to /", newPurlPath, purl.pathname);
+ response.writeHead("302", { 'Location': '/' });
+ response.end();
+ return;
+ }
+ }
+
+ if(typeof purlClass.layout == "undefined") {
+ console.log("set via undefined");
+ purlLayout = layouts.standard(request, response);
+ } else {
+ // find and resolve the layout
+ purlLayout = purlClass.layout(request, response);
+ }
+
+ // 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 + "\"");
+ // TODO: do this properly.
+ if(typeof purlClass[caller] != "undefined") {
+ purlClass[caller](request, response, callback);
+ } else if(typeof layouts[caller] != "undefined"){
+ layouts[caller](request, response, callback);
+ } else {
+ response.write("<!-- ERROR:Undefined layout section -->");
+ callback();
+ }
+ //callback();
return;
}
function serveStatic(staticname, response) {
- var pathName = "./res/"+staticname;
+ var pathName = "";
+ if(typeof global.njspurls.mainResPath != "undefined") {
+ pathName = global.njspurls.mainResPath + "/" + staticname;
+ } else {
+ pathName = "./res/"+staticname;
+ }
console.log("Pathname for check is ", pathName);
fs.exists(pathName, function(exists) {
if(!exists) {