1 var url = require("url");
2 var path = require("path");
3 var fs = require("fs");
4 //var myparse = require("./myparse.js");
5 var webmain = require("./webmain.js");
6 var layouts = require("./layouts.js");
9 var extraCss = new Array();
10 var extraJs = new Array();
11 //var defaultLayout = null;
12 var defaultMainPurl = null;
14 //var staticExtensions = ["html", "gif", "jpg", "css", "js", "ico"];
16 function wsRequest(request, response) {
18 var purl = url.parse(request.url);
20 /*staticExtensions.forEach(function testExtn(setest) {
21 console.log("testing url: ", request.url);
22 console.log("against: ", purl.pathname);
23 var chk = purl.pathname.split(".");
24 console.log("chk: ", chk);
25 var chkid = staticExtensions.indexOf(chk[chk.length-1].toLowerCase());
26 console.log("chkid is ", chkid);
32 // if the end of the pathname is something.something, we assume static
33 var lpath = purl.pathname.split("/").pop();
34 var idx = lpath.indexOf(".");
35 console.log("testing url: ", request.url);
36 console.log("against: ", purl.pathname);
37 console.log("lpath is: '%s'", lpath);
38 console.log("type is: '%s'", typeof lpath);
39 console.log("idx is: ", idx);
41 if(idx > 0) isStatic = 1;
45 console.log("Service as static");
46 serveStatic(lpath, response);
50 //console.log("request: ", request);
51 console.log("purl: ", purl);
53 // now we need to find the extension used
54 // to serve the request based no the first purl
59 if(purl.pathname == "/") {
60 console.log("Serv main");
61 webmain.serveMain(request, response, function (request, response) {
67 var thispurl = purl.pathname.split("/")[1];
68 fs.stat("./purls/web_"+thispurl+".js", function (err, stats) {
69 console.log("get purl is "+thispurl+" and err "+err+" and "+stats);
71 response.writeHead(404, {"Content-Type": "text/plain"});
72 response.write("404 Not Found\n");
76 var thiserv = require("../purls/web_"+thispurl+".js");
77 if(thiserv.requireBody()) {
78 console.log("yubber is true");
79 webmain.serveBody(request, response, thiserv.process);
81 console.log("yubber is false");
82 thiserv.process(request, response, function(request, response) {
90 urlServicer(request, response, purl);
96 function urlServicer(request, response, purl) {
97 console.log("url servicer called for ", purl);
99 // first resolve the module making the call and determine layout/purl
100 var purlClass = layouts;
101 var purlLayout = layouts.standard();
102 var mainPath = path.dirname(require.main.filename) + "/purls/";
104 console.log("main purl path is ", mainPath);
106 if(purl.pathname == "/") {
107 if(defaultMainPurl == null) {
108 console.log("set purl class to layouts");
111 // find and load the purl
116 var newPurlPath = mainPath+"/"+path.basename(purl.pathname.replace(/\/$/, ""))+".js";
117 console.log("attempting to require: ", newPurlPath);
119 var newPurlClass = require(newPurlPath);
120 purlClass = newPurlClass;
122 console.log("tried to load '%s' for request '%s', but this has failed, returning 302 to /", newPurlPath, purl.pathname);
123 response.writeHead("302", { 'Location': '/' });
130 if(typeof purlClass.layout == "undefined") {
131 console.log("set via undefined");
132 purlLayout = layouts.standard();
134 // find and resolve the layout
135 purlLayout = purlClass.layout();
138 // now we should have a layout and a class
139 if(typeof purlClass.preResponse != "undefined") {
140 purlClass.preResponse(request, response, function() {
141 serviceLayout(request, response, purlClass, purlLayout);
144 serviceLayout(request, response, purlClass, purlLayout);
150 function serviceLayout(request, response, purlClass, purlLayout) {
151 var reallay = "start:"+purlLayout+":end";
152 var splitup = reallay.split("<?njs");
155 console.log("inservicer: ", purlLayout);
157 function processLayout() {
160 console.log("begin process layout");
162 if(offset >= splitup.length) {
163 //response.write("end of caller");
166 } else if(offset == 0) {
167 console.log("write for offset 0");
168 output = splitup[0].replace(/^start:/g, "");
169 if(splitup.length == 1) output = output.replace(/:end$/g, "");
170 console.log("did write: ", output);
171 response.write(output);
175 var thispart = splitup[offset].split("?>");
176 var caller = thispart[0].trim();
178 console.log("in parts for bits: ", thispart);
179 console.log("and caller is: ", caller);
181 // here we resolve and call the caller....
182 //response.write("calling: " + caller);
183 resolveAndCall(request, response, caller, purlClass, function () {
184 output = thispart[1].replace(/:end$/g, "");
185 response.write(output);
194 //response.write("servicer");
198 function resolveAndCall(request, response, caller, purlClass, callback) {
199 //response.write("resolving: \"" + caller + "\"");
201 // TODO: do this properly.
202 if(typeof purlClass[caller] != "undefined") {
203 purlClass[caller](request, response, callback);
204 } else if(typeof layouts[caller] != "undefined"){
205 layouts[caller](request, response, callback);
207 response.write("<!-- ERROR:Undefined layout section -->");
214 function serveStatic(staticname, response) {
215 var pathName = "./res/"+staticname;
216 console.log("Pathname for check is ", pathName);
217 fs.exists(pathName, function(exists) {
219 response.writeHead(404, {"Content-Type": "text/plain"});
220 response.write("404 Not Found\n");
225 fs.readFile(pathName, "binary", function(err, file) {
227 response.writeHead(500, {"Content-Type": "text/plain"});
228 response.write(err + "\n");
233 response.writeHead(200);
234 response.write(file, "binary");
240 exports.wsRequest = wsRequest;