extends layout mixin get_name(link, prefix, i) - var name = typeof link.name == 'string' ? link.name : undefined - var prompt = typeof link.prompt == 'string' ? link.prompt : undefined - var prefix = typeof prefix == 'string' ? prefix + ': ' : '' |#{prefix + (name || prompt || '#' + i)} // TODO: Show show a 'copy' button to copy the entire link mixin href(href) if typeof href !== 'string' i no href else - var splits = urlgenerator.split(href) for split in splits a(href=urlgenerator.render(split[1]), title='Explore #{split[1]}') #{split[0]} | block link div a(class='btn btn-primary btn-mini', href=urlgenerator.render(link.href)) Explore | a(class='btn btn-primary btn-mini', href=link.href) Raw dl dt href dd: div: mixin href(link.href) dt rel dd if urlgenerator.isUrl(link.rel) a(href=link.rel) #{link.rel} else | #{link.rel} dt name dd if link.name | #{link.name} else i Not set dt prompt dd if link.prompt | #{link.prompt} else i Not set if link.render == 'image' dt dd: img(src=link.href, alt=link.name, title=link.name) block meta div(class='row-fluid') div(class='span12') dl dt version dd if collection.version | #{collection.version} else i Not set dt href dd: div: mixin href(collection.href) div(class='row-fluid') div(class='span12') p if collection.href a(class='btn btn-primary', href=urlgenerator.render(collection.href)) Explore | a(class='btn btn-primary', href=collection.href) Raw | a(class='btn btn-danger', href=urlgenerator.delete(url, collection.href)) Delete | form(action='http://redbot.org') input(type='text', name='uri', value=url, type='hidden') input(type='text', name='req_hdr', value='Accept: application/vnd.collection+json', type='hidden') button(class='btn btn-primary', type='submit') Check with redbot.org if collection.links.length > 0 h2 Collection Links each link, i in collection.links - var title = link.prompt || link.name - title = title ? ': ' + title : '' h3(id='link-#{i + 1}') Collection Link ##{i}#{title} block link block items_links - var first = root.findLinkByRel('first'); - var next = root.findLinkByRel('next'); - var prev = root.findLinkByRel('prev'); - var last = root.findLinkByRel('last'); if first || next || prev || last div(class='fluid-row') div(class='span12') if first a(class='btn btn-primary btn-mini', href=urlgenerator.render(first.href) + '#items') First | if prev a(class='btn btn-primary btn-mini', href=urlgenerator.render(prev.href) + '#items') Previous | if next a(class='btn btn-primary btn-mini', href=urlgenerator.render(next.href) + '#items') Next | if last a(class='btn btn-primary btn-mini', href=urlgenerator.render(last.href) + '#items') Last // TODO: If the collection has prev/next links, add buttons to // automaticaly navigate those. // TODO: Add ability to show the raw part of the collection. block items block items_links each item, i in collection.items div.item-container h2(id='item-#{i+1}') Item ##{i+1} if item.href div(class='fluid-row') div(class='span12') p a.btn.btn-primary.btn-mini(href=urlgenerator.render(item.href)) Explore | a.btn.btn-primary.btn-mini(href=item.href) Raw | a.btn.btn-primary.btn-mini(onClick='var item = $(this).parentsUntil("#items").last(); item.find(".item-form").toggle(); item.find(".item-data").toggle()') Edit | a.btn.btn-danger.btn-mini(href=urlgenerator.delete(url, item.href)) Delete div(class='fluid-row') div(class='span12') dl dt href dd: div: mixin href(item.href) if item.links.length > 0 h3 Item Links each link, i in item.links h4 Item Link ##{i} block link h3.item-data Data div.item-data.fluid-row div.span12 table.data-table each data in item.data tr th #{data.name} td #{data.value} h3.item-form(style='display: none') Data div.item-form.fluid-row(style='display: none') div.span12 form.well(action='/write', method='POST') input(type='hidden', name='url', value=item.href) table.cj-form tbody each data in item.data - var value = params[data.name] || data.value tr th(title="name: " + data.name) div label(for=data.name) if data.prompt | #{data.prompt} else | #{data.name} td input(id=data.name, type='text', name='param-' + data.name, value=value) tfoot tr th td p input.btn.btn-primary(type='submit') Update block items_links block queries each query, i in collection.queries - var name = query.prompt || query.name || 'Unnamed query' h2(id='query-#{i + 1}')= name div(class='row-fluid') div(class='span12') form.well(action='/render') input(type='hidden', name='url', value=query.href) table.cj-form tbody each data in query.data - var value = params[data.name] || data.value tr th(title="name: " + data.name) div label(for=data.name) if data.prompt | #{data.prompt} else | #{data.name} td input(id=data.name, type='text', name='param-' + data.name, value=value) tfoot tr th td input.btn.btn-primary(type='submit') Execute block template div(class='row-fluid') div(class='span12') p The data will be submitted to mixin href(collection.href) form.well(action='/write', method='POST') input(type='hidden', name='url', value=collection.href) table.cj-form tbody each data in collection.template.data - var value = params[data.name] || data.value tr th(title="name='" + data.name + "'") div label(for=data.name) if data.prompt | #{data.prompt} else | #{data.name} td input(id=data.name, type='text', name='param-' + data.name, value=value) tfoot tr th td if typeof collection.href == 'undefined' input.btn.btn-primary.disabled(type='submit', disabled) Write p.help-block This collection has a template, but doesn't have a href which is required. else input.btn.btn-primary(type='submit') Write div(class='control-group') div(class='controls') block error div(class='row-fluid') dl dt title dd if collection.error.title | #{collection.error.title} else i Not set dt code dd if collection.error.code | #{collection.error.code} else i Not set dt message dd if collection.error.message - var lines = collection.error.message.split('\n') if lines.length > 1 for line in lines | #{line.replace(/ /g, ' ')} br else | #{collection.error.message} else i Not set block httpResponse div(class='row-fluid') dl dt URL dd: a(href=urlgenerator.render(url)) #{url} if typeof referer != 'undefined' dt Referer dd: a(href=urlgenerator.render(referer)) #{referer} pre table tr td(colspan='2') #{httpResponse.statusCode} #{httpResponse.status} each value, key in httpResponse.headers tr td #{key}: td if key == 'location' mixin href(value) else | #{value} | | #{rawBody} block navbar div(class='navbar navbar-fixed-top') div(class='navbar-inner') div(class='container') a(class='btn btn-navbar', data-toggle='collapse', data-target='.nav-collapse') span(class='icon-bar') // span(class='icon-bar') span(class='icon-bar') span(class='icon-bar') span(class='icon-bar') span(class='icon-bar') a(class='brand', href='/') Collection+JSON Explorer div(class='nav-collapse') ul(class='nav') // li(class='active'): a(href='#meta') Meta li: a(href='#items') Items li: a(href='#queries') Queries li: a(href='#headers') Headers li: a(href='#formatted-body') Formatted Body li: a(href='#raw-body') Raw Body block sidebar div(id='navbar', class='sidebar-nav sidebar-nav-fixed') ul(class='nav nav-list') if typeof err != 'undefined' li(class='nav-header'): a(href='#server-error') Server Error if typeof collection != 'undefined' li(class='nav-header active'): a(href='#meta') Meta each link, i in collection.links li: a(href='#link-' + (i + 1)) mixin get_name(link, 'Link', i) if collection.items.length > 0 li(class='nav-header'): a(href='#items') Items each item, i in collection.items li: a(href='#item-' + (i + 1)) ##{i + 1} if collection.queries.length > 0 li(class='nav-header'): a(href='#queries') Queries each query, i in collection.queries li: a(href='#query-' + (i + 1)) mixin get_name(query, 'Query', i) if typeof collection.template != 'undefined' li(class='nav-header'): a(href='#template') Template if typeof collection.error != 'undefined' li(class='nav-header'): a(href='#error') Error if typeof parsedBody == 'object' li(class='nav-header'): a(href='#formatted-body') Formatted Body if typeof httpResponse != 'undefined' li(class='nav-header'): a(href='#http-response') HTTP Response block inner_content if typeof err != 'undefined' section(id='server-error') div(class='page-header') h1 Server Error div(class='row-fluid') p Error rendering: #{url} a(class='btn btn-primary btn-mini', href=urlgenerator.render(url)) Retry p= err if typeof collection != 'undefined' section(id='meta') div(class='page-header') h1 Meta block meta if collection.items.length > 0 section(id='items') div(class='page-header') h1 Items if collection.items.length > 1 span(class='badge') #{collection.items.length} if root.findLinkByRel('next') |+ block items if collection.queries.length > 0 section(id='queries') div(class='page-header') h1 Queries block queries if typeof collection.template != 'undefined' section(id='template') div(class='page-header') h1 Template block template if typeof collection.error != 'undefined' section(id='error') div(class='page-header') h1 Error block error if typeof parsedBody == 'object' section(id='formatted-body') div(class='page-header') h1 Formatted Body div(class='row-fluid') div(class='span12') pre= JSON.stringify(parsedBody, null, ' ') | #{parsedBody} if typeof httpResponse != 'undefined' section(id='http-response') div(class='page-header') h1 HTTP Response block httpResponse block content - var collection = root.collection - var params = params || {} div(class='row-fluid') div(class='span3') block sidebar div(class='span9') block inner_content