json-strict
Version:
Json Specification & Validation & Document Generation
43 lines (36 loc) • 1.03 kB
text/coffeescript
{htmlInline, htmlBlock} = require './typespec'
{typeclass} = require './typeclass'
expandBlockHead = (f) -> (spec) ->
block = htmlBlock spec
if not block?
null
else
head: f(block.head)
body: block.body
tail: block.tail
genBlockBody = (bodyClass, keyClass) -> (specdict) ->
lis = map(([k, v]) ->
block = htmlBlock v
return """
<li>
<div class='#{if block? then 'fold' else 'inline'}'>
<span class='#{keyClass}'>#{k}</span>: #{htmlInline v}
</div>
#{if block? then (
"""
<div class='unfold'>
<span class='#{keyClass}'>#{k}</span>: #{block.head}
#{block.body ? ''}
#{block.tail ? ''}
</div>
"""
) else ''}
</li>
"""
) enumerate(specdict)
return "<ul class='#{bodyClass}'>" + (list lis).join('\n') + "</ul>"
isTypeSpec = (spec) ->
spec? and typeclass('TypeSpec').hasInstance(spec.constructor)
isTypeSpecDict = (specdict) ->
specdict? and all(([k, v]) -> isTypeSpec(v)) enumerate(specdict)
module.exports = {expandBlockHead, genBlockBody, isTypeSpec, isTypeSpecDict}