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();
103 if(purl.pathname == "/") {
104 if(defaultMainPurl == null) {
105 console.log("set purl class to layouts");
108 // find and load the purl
111 if(typeof purlClass.layout == "undefined") {
112 console.log("set via undefined");
113 purlLayout = layouts.standard();
115 // find and resolve the layout
121 // now we should have a layout and a class
122 if(typeof purlClass.preResponse != "undefined") {
123 purlClass.preResponse(request, response, function() {
124 serviceLayout(request, response, purlClass, purlLayout);
127 serviceLayout(request, response, purlClass, purlLayout);
133 function serviceLayout(request, response, purlClass, purlLayout) {
134 var reallay = "start:"+purlLayout+":end";
135 var splitup = reallay.split("<?njs");
138 console.log("inservicer: ", purlLayout);
140 function processLayout() {
143 console.log("begin process layout");
145 if(offset >= splitup.length) {
146 response.write("end of caller");
149 } else if(offset == 0) {
150 console.log("write for offset 0");
151 output = splitup[0].replace(/^start:/g, "");
152 if(splitup.length == 1) output = output.replace(/:end$/g, "");
153 console.log("did write: ", output);
154 response.write(output);
158 var thispart = splitup[offset].split("?>");
159 var caller = thispart[0].trim();
161 console.log("in parts for bits: ", thispart);
162 console.log("and caller is: ", caller);
164 // here we resolve and call the caller....
165 //response.write("calling: " + caller);
166 resolveAndCall(request, response, caller, purlClass, function () {
167 output = thispart[1].replace(/:end$/g, "");
168 response.write(output);
177 //response.write("servicer");
181 function resolveAndCall(request, response, caller, purlClass, callback) {
182 //response.write("resolving: \"" + caller + "\"");
183 if(typeof purlClass[caller] != "undefined") {
184 purlClass[caller](request, response, callback);
185 } else if(typeof purlClass[caller] != "undefined"){
186 layouts[caller](request, response, callback);
188 response.write("<hr><br>Undefined layout section<br><hr>");
195 function serveStatic(staticname, response) {
196 var pathName = "./res/"+staticname;
197 console.log("Pathname for check is ", pathName);
198 fs.exists(pathName, function(exists) {
200 response.writeHead(404, {"Content-Type": "text/plain"});
201 response.write("404 Not Found\n");
206 fs.readFile(pathName, "binary", function(err, file) {
208 response.writeHead(500, {"Content-Type": "text/plain"});
209 response.write(err + "\n");
214 response.writeHead(200);
215 response.write(file, "binary");
221 exports.wsRequest = wsRequest;