diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | routes/index.js | 26 | ||||
-rw-r--r-- | views/data.jade | 101 | ||||
-rw-r--r-- | views/index.jade | 12 |
4 files changed, 96 insertions, 44 deletions
@@ -1 +1,2 @@ node_modules +npm-debug.log diff --git a/routes/index.js b/routes/index.js index 6d57023..bceafc3 100644 --- a/routes/index.js +++ b/routes/index.js @@ -2,6 +2,14 @@ var http = require('http') , url = require('url') , collection_json = require('collection_json'); +function urlgenerator(req) { + var host = req.headers.host; + return { + render: function(u) { + return 'http://' + host + '/render?url=' + encodeURIComponent(u)} + }; +} + exports.index = function(req, res){ res.render('index', { title: 'Collection+JSON Explorer', @@ -17,14 +25,23 @@ exports.index = function(req, res){ }); }; -exports.render = function(req, res){ +exports.render = function(req, res) { + function sendErr(err) { + res.render('data', { + url: req.query.url, + err: err + }); + } fetchCollection(req.query.url, function(err, headers, body) { if(err) { - res.render('index', { title: 'Failed to render ' + req.query.url }); + sendErr(err); } else { - var parsedBody = JSON.parse(body); - var doc = collection_json.fromObject(parsedBody); + var parsedBody; + try { + parsedBody = JSON.parse(body); + } catch(e) { sendErr('Unable to parse JSON: ' + e); } + var doc = collection_json.fromObject(parsedBody).collection; var isUrl = function(u) { try { var x = url.parse(u); @@ -36,6 +53,7 @@ exports.render = function(req, res){ }; res.render('data', { isUrl: isUrl, + urlgenerator: urlgenerator(req), url: req.query.url, doc: doc, headers: headers, diff --git a/views/data.jade b/views/data.jade index 15189e9..0bd5afd 100644 --- a/views/data.jade +++ b/views/data.jade @@ -1,12 +1,23 @@ extends layout +block href + if typeof href != 'string' + | <no href> + else + span + a(href=href) #{href} + | + a(href=urlgenerator.render(href)) Explore + block link - var name = typeof link.name == 'string' ? link.name : '<no name attribute>' - var prompt = typeof link.prompt == 'string' ? link.prompt : '<no prompt attribute>' + - var href = link.href table tr td href - td: a(href=link.href, name=link.name) #{link.href} + td + block href tr td rel td @@ -25,14 +36,18 @@ block link td td: img(src=link.href, alt=link.name, title=name) -block content - h1 Collection+JSON Explorer +block err + p Error rendering #{url} + + p= err + +block data p Viewing #{url} form(action="/render") p label URL: - input(name="url", value=url) + input(name="url", size=100, value=url) input(type="submit", value="Render") form(action="http://redbot.org/?") @@ -52,47 +67,53 @@ block content li a(href="#body") Raw body - a(id="meta") - h1 - a(href="#meta") Meta + a(id="meta"): h1: a(href="#meta") Meta - table - tr - td Version - td #{doc.version} - tr - td URI - td - if typeof doc.uri == 'string' - a(href=doc.uri) #{doc.uri} - else - span No URI + - var href=doc.href + table + tr + td version + td #{doc.version} + tr + td href + td: block href - h2 Collection Links + h2 Collection Links + if doc.links.length == 0 + p Collection has no links. + else each link, i in doc.links - h3 Collection Link ##{i} + - var title = link.prompt || link.name + - title = title ? ": " + title : "" + h3 Collection Link ##{i}#{title} block link a(id="items"): h1: a(href="#items") Items - each item, i in doc.items - a(id="item-#{i+1}") - h2: a(href="#item-#{i+1}") Item ##{i+1} + if doc.items.length == 0 + p Collection has to items. + else + p The feed has #{doc.items.length} items. + each item, i in doc.items + a(id="item-#{i+1}"): h2: a(href="#item-#{i+1}") Item ##{i+1} - if typeof item.href == 'string' - | href - a(href=item.href) #{item.href} + - var href=item.href + p href: + block href - h2 Item Links - each link, i in item.links - h3 Item Link ##{i} - block link + h3 Item Links + if item.links.length == 0 + p Item has no links. + else + each link, i in item.links + h4 Item Link ##{i} + block link - h3 Data - table - each data in item.data - tr - td #{data.name} - td #{data.value} + h3 Data + table + each data in item.data + tr + td #{data.name} + td #{data.value} a(id="headers"): h1: a(href="#headers") Headers pre @@ -107,3 +128,11 @@ block content a(id="body"): h1: a(href="#body") Raw body pre= raw + +block content + h1 Collection+JSON Explorer + + if typeof err == 'undefined' + block data + else + block err diff --git a/views/index.jade b/views/index.jade index 5625546..cd12e4a 100644 --- a/views/index.jade +++ b/views/index.jade @@ -3,19 +3,23 @@ extends layout block content h1 Collection+JSON Explorer + div This is a simple/dumb explorer for the + a(href='http://amundsen.com/media-types/collection/') Collection+JSON Hypermedia + | . + h2 Explore your own collection form(action='/render') p label URL: - input(name='url', value='http://p2k12.bitraf.no/checkins-trygvis.php') + input(name='url', size='100', value='http://example-collection-json-db.herokuapp.com/') input(type='submit', value='Render') h2 Examples - - p Taken from: - a(href='http://amundsen.com/media-types/collection/examples/') Mike Amundsen's examples + p Taken from: + a(href='http://amundsen.com/media-types/collection/examples/') Mike Amundsen's examples ul + - var examples = examples || [] each example in examples li - var u='http://' + host + '/render?url=' + encodeURIComponent('http://' + host + '/examples/from-spec/' + example + '.collection+json') |