aglio-theme-goose
Version:
Custom theme for the Aglio API Blueprint renderer
81 lines (74 loc) • 2.36 kB
JavaScript
// Generated by CoffeeScript 2.2.1
(function() {
// This is an extremely simple example generator given refracted MSON input.
// It handles the following:
// * Simple types, enums, arrays, objects
// * Property descriptions
// * References
// * Mixins (Includes)
// * Arrays with members of different types
// * One Of properties (the first is always selected)
// It is missing support for many advanced features.
var defaultValue, inherit, renderExample;
inherit = require('./inherit');
defaultValue = function(type) {
switch (type) {
case 'boolean':
return true;
case 'number':
return 1;
case 'string':
return 'Hello, world!';
}
};
module.exports = renderExample = function(root, dataStructures) {
var i, item, j, key, len, member, obj, properties, ref, ref1, results;
switch (root.element) {
case 'boolean':
case 'string':
case 'number':
if (root.content != null) {
return root.content;
} else {
return defaultValue(root.element);
}
break;
case 'enum':
return renderExample(root.content[0], dataStructures);
case 'array':
ref1 = root.content || [];
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
item = ref1[j];
results.push(renderExample(item, dataStructures));
}
return results;
break;
case 'object':
obj = {};
properties = root.content.slice(0);
i = 0;
while (i < properties.length) {
member = properties[i];
i++;
if (member.element === 'ref') {
ref = dataStructures[member.content.href];
i--;
properties.splice.apply(properties, [i, 1].concat(ref.content));
continue;
} else if (member.element === 'select') {
// Note: we *always* select the first choice!
member = member.content[0].content[0];
}
key = member.content.key.content;
obj[key] = renderExample(member.content.value, dataStructures);
}
return obj;
default:
ref = dataStructures[root.element];
if (ref) {
return renderExample(inherit(ref, root), dataStructures);
}
}
};
}).call(this);