UNPKG

pimatic

Version:

A home automation server and framework for the Raspberry PI running on node.js

157 lines (139 loc) 4.89 kB
var _, assert, declapi, genDocForParamDescription, genDocsForAction, genDocsForActions, genDocsForParam, genDocsForParams, genRestDocs, glueConcat, glueList, glueType, printAction, printParam, printParamlist, printType; assert = require('assert'); declapi = require('./index.js'); _ = require('lodash'); genDocsForActions = function(actions) { var a, n; assert(typeof actions === "object"); return "<div>\n " + (glueConcat((function() { var results; results = []; for (n in actions) { a = actions[n]; results.push(genDocsForAction(n, a)); } return results; })())) + "\n</div>"; }; printAction = function(actionName, action, result) { return (actionName + "(" + (printParamlist(action)) + ")") + (result != null ? ' -> ' + printParam(result.name, result.info) : void 0); }; glueList = function(list) { return _.reduce(list, function(l, r) { return l + ", " + r; }); }; glueConcat = function(list) { return _.reduce(list, function(l, r) { return "" + l + r; }); }; glueType = function(list) { return _.reduce(list, function(l, r) { return l + "|" + r; }); }; printParamlist = function(action) { var name, p; if (_.keys(action.params).length === 0) { return ''; } return "" + (glueList((function() { var ref, results; ref = action.params; results = []; for (name in ref) { p = ref[name]; results.push(printParam(name, p)); } return results; })())); }; printParam = function(name, param) { var str; str = name + " : " + (printType(param)); if (param.optional) { str = "[" + str + "]"; } return str; }; printType = function(object) { if (!((object != null) && (object.type != null))) { return ''; } if (Array.isArray(object.type)) { return "" + (glueType(object.type)); } else { return "" + object.type; } }; genRestDocs = function(rest) { return "<pre class=\"api-action-rest\">\n " + rest.type + " " + rest.url + "\n</pre>"; }; genDocsForAction = function(actionName, action) { var name, result; assert(typeof actionName === "string"); assert(typeof action === "object"); assert(action.description != null); result = ((action.result != null) && _.keys(action.result).length > 0 ? (name = _.keys(action.result)[0], { name: name, info: action.result[name] }) : void 0); return ("<div class=\"api-action\">\n<h3 class=\"api-action-name\">" + actionName + "</h3>\n<div class=\"api-action-body\">\n <pre class=\"api-action-signature\">" + (printAction(actionName, action, result)) + "</pre>\n <p class=\"api-action-description\">" + action.description + "</p>\n " + (_.keys(action.params).length !== 0 ? '<h4>Parameters</h3>' : '') + "\n " + (genDocsForParams(action.params))) + (result != null ? "<h4>Result</h3>\n <ul>\n " + (genDocsForParam(result.name, result.info)) + "\n </ul>" : '') + (action.rest != null ? "<h4>HTTP-Request</h4>\n" + (genRestDocs(action.rest)) : '') + "</div>\n</div>"; }; genDocsForParams = function(params) { var n, p; if (_.keys(params).length === 0) { return ''; } return "<ul>\n " + (glueConcat((function() { var results; results = []; for (n in params) { p = params[n]; results.push(genDocsForParam(n, p)); } return results; })())) + "\n</ul>"; }; genDocsForParam = function(paramName, param) { var info, n, p; info = []; if (param.type != null) { info.push(printType(param)); } if (param.optional) { info.push('optional'); } return "<li class=\"api-param\">\n <code class=\"api-param-name\">" + paramName + "</code>\n <span class=\"api-param-description\">\n " + (info.length > 0 ? '(' + glueList(info) + ')' : '') + "\n " + (genDocForParamDescription(param)) + "\n </span>\n " + (param.properties != null ? '<ul class="action-param-properties">' + glueConcat((function() { var ref, results; ref = param.properties; results = []; for (n in ref) { p = ref[n]; results.push(genDocsForParam(n, p)); } return results; })()) + '</ul>' : '') + "\n " + (param.items != null ? '<ul class="action-param-items">' + glueConcat((function() { var ref, results; ref = param.items; results = []; for (n in ref) { p = ref[n]; results.push(genDocsForParam(n, p)); } return results; })()) + '</ul>' : '') + "\n</li>"; }; genDocForParamDescription = function(param) { if (param.description == null) { return ''; } return "<span class=\"api-param-description\">: " + param.description; }; module.exports = { genDocsForActions: genDocsForActions, genDocsForAction: genDocsForAction, genDocsForParams: genDocsForParams, genDocsForParam: genDocsForParam };