master
Dave Winer 9 years ago
parent f58e51d3d3
commit b412f9bfaa

@ -88,15 +88,19 @@ There will always be more work to do here. ;-)
#### Updates
##### v0.63 6/27/15 by DW
##### v0.64 7/7/15 by DW
If you add ?format=json to a request for an OPML file, you'll get a JSON representation of the outline. This is useful for single-page JavaScript apps that want to use the outlineBrowser toolkit to diplay the contents. An example of this is <a href="http://davewiner.com/">davewiner.com</a>.
I wanted to do a site redirect that was more than just a domain name change.
To do this I needed to write a JS page that's served by PagePark that returns the JSON representation of a specific OPML file. Here's a <a href="https://gist.github.com/scripting/02dfd9dd5d9d3053c510">gist</a> containing the code. And a <a href="http://pagepark.io/getdavewineropml.js">call</a> to that page. It's extra-nice that this feature could be added without modifying PagePark. It's starting to become a real platform! :-)
If a request came in for: <a href="http://archive.scripting.com/2007/12">http://archive.scripting.com/2007/12</a>.
In both cases, the CORS header allows access from anywhere.
I wanted it to redirect to: http://scripting.com/2007/12.html
And in both cases <a href="http://fargo.io/docs/fargo/includes.html">include</a> nodes are resolved.
That was accomplished with a new element in config.json: jsSiteRedirect. Its value is a JavaScript expression. You can access the path in the variable parsedUrl.pathname.
This is what config.json in the folder archive.scripting.com looks like.
<code>{"jsSiteRedirect": "'http://scripting.com' + parsedUrl.pathname + '.html'"}</code>
##### v0.62 6/25/15 by DW

@ -1,4 +1,4 @@
var myVersion = "0.64a", myProductName = "PagePark";
var myVersion = "0.63a", myProductName = "PagePark";
//The MIT License (MIT)
@ -310,30 +310,21 @@ function handleHttpRequest (httpRequest, httpResponse) {
}
break;
case config.extOpmlFiles: //6/23/15 by DW
var opmltext = data.toString ();
if (formatParam == "json") {
opmlLib.readOpmlString (opmltext, function (theOutline) {
httpResponse.writeHead (200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"});
httpResponse.end (utils.jsonStringify (theOutline));
var flReturnHtml = (!hasAcceptHeader ("text/x-opml")) && (formatParam != "opml");
if (pageparkPrefs.flProcessOpmlFiles && config.flProcessOpmlFiles && flReturnHtml) { //6/24/15 by DW
getOpmlTemplate (function (theTemplate) {
var opmltext = data.toString (), pagetable = new Object ();
opmlLib.readOpmlString (opmltext, function (theOutline) {
pagetable.bodytext = utils.jsonStringify (theOutline);
pagetable.title = utils.stringLastField (f, "/");
var s = utils.multipleReplaceAll (theTemplate, pagetable, false, "[%", "%]");
httpResponse.writeHead (200, {"Content-Type": "text/html"});
httpResponse.end (s);
});
});
}
else {
var flReturnHtml = (!hasAcceptHeader ("text/x-opml")) && (formatParam != "opml");
if (pageparkPrefs.flProcessOpmlFiles && config.flProcessOpmlFiles && flReturnHtml) { //6/24/15 by DW
getOpmlTemplate (function (theTemplate) {
var pagetable = new Object ();
opmlLib.readOpmlString (opmltext, function (theOutline) {
pagetable.bodytext = utils.jsonStringify (theOutline);
pagetable.title = utils.stringLastField (f, "/");
var s = utils.multipleReplaceAll (theTemplate, pagetable, false, "[%", "%]");
httpResponse.writeHead (200, {"Content-Type": "text/html"});
httpResponse.end (s);
});
});
}
else {
defaultReturn ("text/xml", data);
}
defaultReturn ("text/xml", data);
}
break;
default:
@ -437,6 +428,20 @@ function handleHttpRequest (httpRequest, httpResponse) {
fsSureFilePath (domainsPath, function () { //make sure domains folder exists
getConfigFile (actualhost, function (config) { //get config.json, if it exists -- 1/18/15 by DW
if (config != undefined) {
if (config.jsSiteRedirect != undefined) { //7/7/15 by DW
console.log ("config.jsSiteRedirect == " + config.jsSiteRedirect);
try {
var urlRedirect = eval (config.jsSiteRedirect.toString ());
console.log ("urlRedirect == " + urlRedirect);
httpResponse.writeHead (302, {"Location": urlRedirect.toString (), "Content-Type": "text/plain"});
httpResponse.end ("Temporary redirect to " + urlRedirect + ".");
}
catch (err) {
httpResponse.writeHead (500, {"Content-Type": "text/plain"});
httpResponse.end ("Error running " + config.jsSiteRedirect + ": \"" + err.message + "\"");
}
return;
}
if (config.urlSiteRedirect != undefined) {
var urlRedirect = config.urlSiteRedirect + parsedUrl.pathname;
httpResponse.writeHead (302, {"Location": urlRedirect, "Content-Type": "text/plain"});

Loading…
Cancel
Save