jsdoc: generate modules for sensor groups; customize yuidoc templates for displaying sensor groups by categories & connection types

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
Heidi Pan
2015-05-21 10:09:48 -07:00
committed by Mihai Tudor Panu
parent ed52f0e5cb
commit 33b508110e
14 changed files with 2150 additions and 116 deletions

View File

@ -28,10 +28,10 @@ var _ = require('lodash');
// generate YuiDocs-style documentation
function generateDocs(specjs) {
var docs = GENERATE_MODULE(specjs.MODULE);
GENERATE_TYPE = (function(enums) {
var docs = GENERATE_MODULE(specjs.MODULE, '');
GENERATE_TYPE = (function(enums) {
return function(type) {
return (_.contains(enums, type) ? ('Enum ' + type) : type);
return (_.contains(enums, type) ? ('Enum ' + type) : type);
}
})(_.keys(specjs.ENUMS_BY_GROUP));
docs = _.reduce(specjs.METHODS, function(memo, methodSpec, methodName) {
@ -40,24 +40,25 @@ function generateDocs(specjs) {
docs = _.reduce(specjs.ENUMS, function(memo, enumSpec, enumName) {
return memo += GENERATE_ENUM(enumName, enumSpec);
}, docs);
docs = _.reduce(specjs.CLASSES, function(memo, classSpec, parentClass) {
return memo
+ GENERATE_CLASS(parentClass, classSpec.description)
+ _.reduce(classSpec.methods, function(memo, methodSpec, methodName) {
return memo += GENERATE_METHOD(methodName, methodSpec, parentClass);
}, '')
+ _.reduce(classSpec.variables, function(memo, variableSpec, variableName) {
return memo += GENERATE_VAR(variableName, variableSpec, parentClass);
}, '')
+ _.reduce(classSpec.enums, function(memo, enumSpec, enumName) {
return memo += GENERATE_ENUM(enumName, enumSpec, parentClass);
}, '');
}, docs);
if (_.isEmpty(specjs.CLASSGROUPS)) {
docs += GENERATE_CLASSES(specjs.CLASSES);
} else {
docs += GENERATE_MODULE('common', '');
var grouped = _.flatten(_.pluck(_.values(specjs.CLASSGROUPS), 'classes'));
var ungrouped = _.difference(_.keys(specjs.CLASSES), grouped);
docs += GENERATE_CLASSES(_.pick(specjs.CLASSES, ungrouped), 'common');
_.each(specjs.CLASSGROUPS, function(groupSpec, groupName) {
docs += GENERATE_CLASSES(_.pick(specjs.CLASSES, groupSpec.classes), groupName);
});
// TODO: figure out why yuidoc won't associate the class with the right module if module definitions are interspersed
_.each(specjs.CLASSGROUPS, function(groupSpec, groupName) {
docs += GENERATE_MODULE(groupName, groupSpec.description);
});
}
return docs;
}
// comment wrapper around entire spec
function GENERATE_DOC(text) {
return '/**\n' + text + ' */\n';
@ -65,15 +66,35 @@ function GENERATE_DOC(text) {
// generate module spec
function GENERATE_MODULE(module) {
return GENERATE_DOC('@module ' + module + '\n');
function GENERATE_MODULE(name, description) {
return GENERATE_DOC(description + '\n'
+ '@module ' + name + '\n');
}
// generate spec for the given list of classes
function GENERATE_CLASSES(classes, parent) {
return _.reduce(classes, function(memo, classSpec, className) {
return memo
+ GENERATE_CLASS(className, classSpec.description, parent)
+ _.reduce(classSpec.methods, function(memo, methodSpec, methodName) {
return memo += GENERATE_METHOD(methodName, methodSpec, className);
}, '')
+ _.reduce(classSpec.variables, function(memo, variableSpec, variableName) {
return memo += GENERATE_VAR(variableName, variableSpec, className);
}, '')
+ _.reduce(classSpec.enums, function(memo, enumSpec, enumName) {
return memo += GENERATE_ENUM(enumName, enumSpec, className);
}, '');
}, '');
}
// generate class spec
function GENERATE_CLASS(name, description) {
return GENERATE_DOC(description + '\n'
+ '@class ' + name + '\n');
function GENERATE_CLASS(name, description, parent) {
return GENERATE_DOC(description + '\n'
+ '@class ' + name + '\n'
+ (parent ? ('@module ' + parent + '\n') : ''));
}
@ -83,7 +104,7 @@ function GENERATE_METHOD(name, spec, parent) {
+ '@method ' + name + '\n'
+ (parent ? ('@for ' + parent + '\n') : '@for common\n')
+ _.reduce(spec.params, function(memo, paramSpec, paramName) {
return memo + '@param {' + GENERATE_TYPE(paramSpec.type) + '} ' + paramName + ' ' + paramSpec.description + '\n';
return memo + '@param {' + GENERATE_TYPE(paramSpec.type) + '} ' + paramName + ' ' + paramSpec.description + '\n';
}, '')
+ ( !_.isEmpty(spec.return) ? ('@return {' + GENERATE_TYPE(spec.return.type) + '} ' + spec.return.description + '\n') : ''));
}
@ -105,13 +126,13 @@ function GENERATE_VAR(name, spec, parent) {
+ '@type ' + spec.type + '\n'
+ '@for ' + parent + '\n');
}
// TODO
// generate link spec
// generate link spec
function GENERATE_LINK(text) {
return '{{#crossLink "' + text + '"}}{{/crossLink}}';
}
module.exports = generateDocs;
module.exports = generateDocs;

196
doxy/node/generators/yuidoc/helper.js vendored Normal file
View File

@ -0,0 +1,196 @@
/*
* Author: Heidi Pan <heidi.pan@intel.com>
* Copyright (c) 2015 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
// extract the field from the class description text
function getField(classDescription, field) {
var pattern = new RegExp('\\+ __' + field + ':__ [A-Za-z0-9]*');
var label = new RegExp('\\+ __' + field + ':__');
if (classDescription) {
var matched = classDescription.match(pattern);
if (matched) {
return (matched[0].replace(label, '')).trim();
}
}
return 'other';
}
// generate html to group modules by the given field (e.g. category/connection type) of its children classes
function listByGroup(modules, classes, field, projectRoot) {
var moduleClasses = {};
var modulesByGroup = {};
var i, j;
for (i = 0; i < modules.length; i++) {
moduleClasses[modules[i].name] = [];
}
for (i = 0; i < classes.length; i++) {
moduleClasses[classes[i].module].push(i);
}
for (var module in moduleClasses) {
var classIndices = moduleClasses[module];
var groups = [];
for (i = 0; i < classIndices.length; i++) {
groups.push(getField(classes[classIndices[i]].description, field));
}
if (groups.length != 0) {
var group = groups[0];
var sanitychecked = true;
for (i = 1; i < groups.length; i++) {
if (groups[i] != group) {
sanitychecked = false;
break;
}
}
if (!sanitychecked) {
// TODO
}
if (group in modulesByGroup) {
modulesByGroup[group].push(module);
} else {
modulesByGroup[group] = [module];
}
}
}
var groups = Object.keys(modulesByGroup).sort();
var html = '';
var pfx = projectRoot + 'modules/';
var first = true;
for (i = 0; i < groups.length; i++) {
var group = groups[i];
html += (first ? '' : '</span>');
html += '<div class="upmGroup"><div class="right-arrow"></div>' + group + '</div><span class="upmModules" style="display:none">';
var moduleNames = modulesByGroup[group];
for (j = 0; j < moduleNames.length; j++) {
var moduleName = moduleNames[j];
html += '<a href="' + pfx + moduleName + '.html">' + moduleName + '</a>';
}
first = false;
}
return html;
}
// click handler to change direction of arrow and toggle visibility of grouped modules
var onClickHandler = "Y.on('domready', function() { \
Y.on('click', function(e) { \
var classes = this.next('.upmModules').toggleView(); \
if (classes.getStyle('display') == 'none') { \
this.one('> div').removeClass('down-arrow').addClass('right-arrow'); \
} else { \
this.one('> div').removeClass('right-arrow').addClass('down-arrow'); \
} \
}, '.upmGroup'); \
});";
// css to generate triangle icons
var insertStyles = "Y.one(document.head).append('<style> \
div.right-arrow { \
width: 0; \
height: 0; \
border-bottom: 5px solid transparent; \
border-top: 5px solid transparent; \
border-left: 5px solid #356de4; \
font-size: 0; \
margin-right: 5px; \
vertical-align: 5px; \
display: inline; \
} \
div.down-arrow { \
width: 0; \
height: 0; \
border-left: 5px solid transparent; \
border-right: 5px solid transparent; \
border-top: 5px solid #356de4; \
font-size: 0; \
margin-right: 5px; \
display: inline; \
} \
div.upmGroup { \
font-weight: bold; \
} \
</style>');";
var scripts = "YUI().use('node', 'event', function (Y) {"
+ onClickHandler
+ insertStyles
+ "});";
module.exports = {
listByCategory: function() {
return listByGroup(this.modules, this.classes, 'Category', this.projectRoot);
},
listByManufacturer: function() {
return listByGroup(this.modules, this.classes, 'Manufacturer', this.projectRoot);
},
listByConnection: function() {
return listByGroup(this.modules, this.classes, 'Connection', this.projectRoot);
},
javascripts: function(options) {
return '<script type="text/javascript">' + scripts + '</script>';
},
// generate custom cross links
// assume lowercase script will be run, so generate class links with lower case
customCrossLinks: function() {
var selector = 'script[type="class-metadata"]'
var html = "<script type='text/javascript'> \
var find = function(ar, elem) { \
for (var i = 0; i < ar.length; i++) { \
if (ar[i] == elem) { \
return true; \
} \
} \
return false; \
}; \
YUI().use('node', 'event', function (Y) { \
Y.on('domready', function() { \
var classes = Y.all('" + selector + "').getHTML(); \
for (var i = 0; i < classes.length; i++) { \
classes[i] = classes[i].toLowerCase(); \
} \
Y.all('span.type').each(function(node) { \
var t = node.getHTML(); \
if (find(classes, t.toLowerCase())) { \
node.setHTML('<a href=' + t.toLowerCase() + '.html>' + t + '</a>'); \
} \
}); \
}); \
}); \
</script>";
for (var i = 0; i < this.classes.length; i++) {
html += "<script type='class-metadata'>" + this.classes[i].name + "</script>";
}
return html;
}
};

View File

@ -0,0 +1,27 @@
Original Work Copyright 2011 Yahoo! Inc.
All rights reserved.
Modified Work Copyright (c) 2015 Intel Corporation.
Author: Heidi Pan <heidi.pan@intel.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Yahoo! Inc. nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,789 @@
/*
Font sizes for all selectors other than the body are given in percentages,
with 100% equal to 13px. To calculate a font size percentage, multiply the
desired size in pixels by 7.6923076923.
Here's a quick lookup table:
10px - 76.923%
11px - 84.615%
12px - 92.308%
13px - 100%
14px - 107.692%
15px - 115.385%
16px - 123.077%
17px - 130.769%
18px - 138.462%
19px - 146.154%
20px - 153.846%
*/
html {
background: #fff;
color: #333;
overflow-y: scroll;
}
body {
/*font: 13px/1.4 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', 'Bitstream Vera Sans', 'Helvetica', 'Arial', sans-serif;*/
font: 13px/1.4 'Helvetica', 'Arial', sans-serif;
margin: 0;
padding: 0;
}
/* -- Links ----------------------------------------------------------------- */
a {
color: #356de4;
text-decoration: none;
}
.hidden {
display: none;
}
a:hover { text-decoration: underline; }
/* "Jump to Table of Contents" link is shown to assistive tools, but hidden from
sight until it's focused. */
.jump {
position: absolute;
padding: 3px 6px;
left: -99999px;
top: 0;
}
.jump:focus { left: 40%; }
/* -- Paragraphs ------------------------------------------------------------ */
p { margin: 1.3em 0; }
dd p, td p { margin-bottom: 0; }
dd p:first-child, td p:first-child { margin-top: 0; }
/* -- Headings -------------------------------------------------------------- */
h1, h2, h3, h4, h5, h6 {
color: #D98527;/*was #f80*/
font-family: 'Trebuchet MS', sans-serif;
font-weight: bold;
line-height: 1.1;
margin: 1.1em 0 0.5em;
}
h1 {
font-size: 184.6%;
color: #30418C;
margin: 0.75em 0 0.5em;
}
h2 {
font-size: 153.846%;
color: #E48A2B;
}
h3 { font-size: 138.462%; }
h4 {
border-bottom: 1px solid #DBDFEA;
color: #E48A2B;
font-size: 115.385%;
font-weight: normal;
padding-bottom: 2px;
}
h5, h6 { font-size: 107.692%; }
/* -- Code and examples ----------------------------------------------------- */
code, kbd, pre, samp {
font-family: Menlo, Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;
font-size: 92.308%;
line-height: 1.35;
}
p code, p kbd, p samp, li code {
background: #FCFBFA;
border: 1px solid #EFEEED;
padding: 0 3px;
}
a code, a kbd, a samp,
pre code, pre kbd, pre samp,
table code, table kbd, table samp,
.intro code, .intro kbd, .intro samp,
.toc code, .toc kbd, .toc samp {
background: none;
border: none;
padding: 0;
}
pre.code, pre.terminal, pre.cmd {
overflow-x: auto;
*overflow-x: scroll;
padding: 0.3em 0.6em;
}
pre.code {
background: #FCFBFA;
border: 1px solid #EFEEED;
border-left-width: 5px;
}
pre.terminal, pre.cmd {
background: #F0EFFC;
border: 1px solid #D0CBFB;
border-left: 5px solid #D0CBFB;
}
/* Don't reduce the font size of <code>/<kbd>/<samp> elements inside <pre>
blocks. */
pre code, pre kbd, pre samp { font-size: 100%; }
/* Used to denote text that shouldn't be selectable, such as line numbers or
shell prompts. Guess which browser this doesn't work in. */
.noselect {
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
user-select: none;
}
/* -- Lists ----------------------------------------------------------------- */
dd { margin: 0.2em 0 0.7em 1em; }
dl { margin: 1em 0; }
dt { font-weight: bold; }
/* -- Tables ---------------------------------------------------------------- */
caption, th { text-align: left; }
table {
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #fff;
padding: 5px 12px;
vertical-align: top;
}
td { background: #E6E9F5; }
td dl { margin: 0; }
td dl dl { margin: 1em 0; }
td pre:first-child { margin-top: 0; }
th {
background: #D2D7E6;/*#97A0BF*/
border-bottom: none;
border-top: none;
color: #000;/*#FFF1D5*/
font-family: 'Trebuchet MS', sans-serif;
font-weight: bold;
line-height: 1.3;
white-space: nowrap;
}
/* -- Layout and Content ---------------------------------------------------- */
#doc {
margin: auto;
min-width: 1024px;
}
.content { padding: 0 20px 0 25px; }
.sidebar {
padding: 0 15px 0 10px;
}
#bd {
padding: 7px 0 130px;
position: relative;
width: 99%;
}
/* -- Table of Contents ----------------------------------------------------- */
/* The #toc id refers to the single global table of contents, while the .toc
class refers to generic TOC lists that could be used throughout the page. */
.toc code, .toc kbd, .toc samp { font-size: 100%; }
.toc li { font-weight: bold; }
.toc li li { font-weight: normal; }
/* -- Intro and Example Boxes ----------------------------------------------- */
/*
.intro, .example { margin-bottom: 2em; }
.example {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: 0 0 5px #bfbfbf;
-webkit-box-shadow: 0 0 5px #bfbfbf;
box-shadow: 0 0 5px #bfbfbf;
padding: 1em;
}
.intro {
background: none repeat scroll 0 0 #F0F1F8; border: 1px solid #D4D8EB; padding: 0 1em;
}
*/
/* -- Other Styles ---------------------------------------------------------- */
/* These are probably YUI-specific, and should be moved out of Selleck's default
theme. */
.button {
border: 1px solid #dadada;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
color: #444;
display: inline-block;
font-family: Helvetica, Arial, sans-serif;
font-size: 92.308%;
font-weight: bold;
padding: 4px 13px 3px;
-moz-text-shadow: 1px 1px 0 #fff;
-webkit-text-shadow: 1px 1px 0 #fff;
text-shadow: 1px 1px 0 #fff;
white-space: nowrap;
background: #EFEFEF; /* old browsers */
background: -moz-linear-gradient(top, #f5f5f5 0%, #efefef 50%, #e5e5e5 51%, #dfdfdf 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(50%,#efefef), color-stop(51%,#e5e5e5), color-stop(100%,#dfdfdf)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#dfdfdf',GradientType=0 ); /* ie */
}
.button:hover {
border-color: #466899;
color: #fff;
text-decoration: none;
-moz-text-shadow: 1px 1px 0 #222;
-webkit-text-shadow: 1px 1px 0 #222;
text-shadow: 1px 1px 0 #222;
background: #6396D8; /* old browsers */
background: -moz-linear-gradient(top, #6396D8 0%, #5A83BC 50%, #547AB7 51%, #466899 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6396D8), color-stop(50%,#5A83BC), color-stop(51%,#547AB7), color-stop(100%,#466899)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6396D8', endColorstr='#466899',GradientType=0 ); /* ie */
}
.newwindow { text-align: center; }
.header .version em {
display: block;
text-align: right;
}
#classdocs .item {
border-bottom: 1px solid #466899;
margin: 1em 0;
padding: 1.5em;
}
#classdocs .item .params p,
#classdocs .item .returns p,{
display: inline;
}
#classdocs .item em code, #classdocs .item em.comment {
color: green;
}
#classdocs .item em.comment a {
color: green;
text-decoration: underline;
}
#classdocs .foundat {
font-size: 11px;
font-style: normal;
}
.attrs .emits {
margin-left: 2em;
padding: .5em;
border-left: 1px dashed #ccc;
}
abbr {
border-bottom: 1px dashed #ccc;
font-size: 80%;
cursor: help;
}
.prettyprint li.L0,
.prettyprint li.L1,
.prettyprint li.L2,
.prettyprint li.L3,
.prettyprint li.L5,
.prettyprint li.L6,
.prettyprint li.L7,
.prettyprint li.L8 {
list-style: decimal;
}
ul li p {
margin-top: 0;
}
.method .name {
font-size: 110%;
}
.apidocs .methods .extends .method,
.apidocs .properties .extends .property,
.apidocs .attrs .extends .attr,
.apidocs .events .extends .event {
font-weight: bold;
}
.apidocs .methods .extends .inherited,
.apidocs .properties .extends .inherited,
.apidocs .attrs .extends .inherited,
.apidocs .events .extends .inherited {
font-weight: normal;
}
#hd {
background: whiteSmoke;
background: -moz-linear-gradient(top,#DCDBD9 0,#F6F5F3 100%);
background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#DCDBD9),color-stop(100%,#F6F5F3));
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dcdbd9',endColorstr='#F6F5F3',GradientType=0);
border-bottom: 1px solid #DFDFDF;
padding: 0 15px 1px 20px;
margin-bottom: 15px;
}
#hd img {
margin-right: 10px;
vertical-align: middle;
}
img {
max-height: 300px;
}
/* -- API Docs CSS ---------------------------------------------------------- */
/*
This file is organized so that more generic styles are nearer the top, and more
specific styles are nearer the bottom of the file. This allows us to take full
advantage of the cascade to avoid redundant style rules. Please respect this
convention when making changes.
*/
/* -- Generic TabView styles ------------------------------------------------ */
/*
These styles apply to all API doc tabviews. To change styles only for a
specific tabview, see the other sections below.
*/
.yui3-js-enabled .apidocs .tabview {
visibility: hidden; /* Hide until the TabView finishes rendering. */
_visibility: visible;
}
.apidocs .tabview.yui3-tabview-content { visibility: visible; }
.apidocs .tabview .yui3-tabview-panel { background: #fff; }
/* -- Generic Content Styles ------------------------------------------------ */
/* Headings */
h2, h3, h4, h5, h6 {
border: none;
color: #30418C;
font-weight: bold;
text-decoration: none;
}
.link-docs {
float: right;
font-size: 15px;
margin: 4px 4px 6px;
padding: 6px 30px 5px;
}
.apidocs { zoom: 1; }
/* Generic box styles. */
.apidocs .box {
border: 1px solid;
border-radius: 3px;
margin: 1em 0;
padding: 0 1em;
}
/* A flag is a compact, capsule-like indicator of some kind. It's used to
indicate private and protected items, item return types, etc. in an
attractive and unobtrusive way. */
.apidocs .flag {
background: #bababa;
border-radius: 3px;
color: #fff;
font-size: 11px;
margin: 0 0.5em;
padding: 2px 4px 1px;
}
/* Class/module metadata such as "Uses", "Extends", "Defined in", etc. */
.apidocs .meta {
background: #f9f9f9;
border-color: #efefef;
color: #555;
font-size: 11px;
padding: 3px 6px;
}
.apidocs .meta p { margin: 0; }
/* Deprecation warning. */
.apidocs .box.deprecated,
.apidocs .flag.deprecated {
background: #fdac9f;
border: 1px solid #fd7775;
}
.apidocs .box.deprecated p { margin: 0.5em 0; }
.apidocs .flag.deprecated { color: #333; }
/* Module/Class intro description. */
.apidocs .intro {
background: #f0f1f8;
border-color: #d4d8eb;
}
/* Loading spinners. */
#bd.loading .apidocs,
#api-list.loading .yui3-tabview-panel {
background: #fff url(../img/spinner.gif) no-repeat center 70px;
min-height: 150px;
}
#bd.loading .apidocs .content,
#api-list.loading .yui3-tabview-panel .apis {
display: none;
}
.apidocs .no-visible-items { color: #666; }
/* Generic inline list. */
.apidocs ul.inline {
display: inline;
list-style: none;
margin: 0;
padding: 0;
}
.apidocs ul.inline li { display: inline; }
/* Comma-separated list. */
.apidocs ul.commas li:after { content: ','; }
.apidocs ul.commas li:last-child:after { content: ''; }
/* Keyboard shortcuts. */
kbd .cmd { font-family: Monaco, Helvetica; }
/* -- Generic Access Level styles ------------------------------------------- */
.apidocs .item.protected,
.apidocs .item.private,
.apidocs .index-item.protected,
.apidocs .index-item.deprecated,
.apidocs .index-item.private {
display: none;
}
.show-deprecated .item.deprecated,
.show-deprecated .index-item.deprecated,
.show-protected .item.protected,
.show-protected .index-item.protected,
.show-private .item.private,
.show-private .index-item.private {
display: block;
}
.hide-inherited .item.inherited,
.hide-inherited .index-item.inherited {
display: none;
}
/* -- Generic Item Index styles --------------------------------------------- */
.apidocs .index { margin: 1.5em 0 3em; }
.apidocs .index h3 {
border-bottom: 1px solid #efefef;
color: #333;
font-size: 13px;
margin: 2em 0 0.6em;
padding-bottom: 2px;
}
.apidocs .index .no-visible-items { margin-top: 2em; }
.apidocs .index-list {
border-color: #efefef;
font-size: 12px;
list-style: none;
margin: 0;
padding: 0;
-moz-column-count: 4;
-moz-column-gap: 10px;
-moz-column-width: 170px;
-ms-column-count: 4;
-ms-column-gap: 10px;
-ms-column-width: 170px;
-o-column-count: 4;
-o-column-gap: 10px;
-o-column-width: 170px;
-webkit-column-count: 4;
-webkit-column-gap: 10px;
-webkit-column-width: 170px;
column-count: 4;
column-gap: 10px;
column-width: 170px;
}
.apidocs .no-columns .index-list {
-moz-column-count: 1;
-ms-column-count: 1;
-o-column-count: 1;
-webkit-column-count: 1;
column-count: 1;
}
.apidocs .index-item { white-space: nowrap; }
.apidocs .index-item .flag {
background: none;
border: none;
color: #afafaf;
display: inline;
margin: 0 0 0 0.2em;
padding: 0;
}
/* -- Generic API item styles ----------------------------------------------- */
.apidocs .args {
display: inline;
margin: 0 0.5em;
}
.apidocs .flag.chainable { background: #46ca3b; }
.apidocs .flag.protected { background: #9b86fc; }
.apidocs .flag.private { background: #fd6b1b; }
.apidocs .flag.async { background: #356de4; }
.apidocs .flag.required { background: #e60923; }
.apidocs .item {
border-bottom: 1px solid #efefef;
margin: 1.5em 0 2em;
padding-bottom: 2em;
}
.apidocs .item h4,
.apidocs .item h5,
.apidocs .item h6 {
color: #333;
font-family: inherit;
font-size: 100%;
}
.apidocs .item .description p,
.apidocs .item pre.code {
margin: 1em 0 0;
}
.apidocs .item .meta {
background: none;
border: none;
padding: 0;
}
.apidocs .item .name {
display: inline;
font-size: 14px;
}
.apidocs .item .type,
.apidocs .item .type a,
.apidocs .returns-inline {
color: #555;
}
.apidocs .item .type,
.apidocs .returns-inline {
font-size: 11px;
margin: 0 0 0 0;
}
.apidocs .item .type a { border-bottom: 1px dotted #afafaf; }
.apidocs .item .type a:hover { border: none; }
/* -- Item Parameter List --------------------------------------------------- */
.apidocs .params-list {
list-style: square;
margin: 1em 0 0 2em;
padding: 0;
}
.apidocs .param { margin-bottom: 1em; }
.apidocs .param .type,
.apidocs .param .type a {
color: #666;
}
.apidocs .param .type {
margin: 0 0 0 0.5em;
*margin-left: 0.5em;
}
.apidocs .param-name { font-weight: bold; }
/* -- Item "Emits" block ---------------------------------------------------- */
.apidocs .item .emits {
background: #f9f9f9;
border-color: #eaeaea;
}
/* -- Item "Returns" block -------------------------------------------------- */
.apidocs .item .returns .type,
.apidocs .item .returns .type a {
font-size: 100%;
margin: 0;
}
/* -- Class Constructor block ----------------------------------------------- */
.apidocs .constructor .item {
border: none;
padding-bottom: 0;
}
/* -- File Source View ------------------------------------------------------ */
.apidocs .file pre.code,
#doc .apidocs .file pre.prettyprint {
background: inherit;
border: none;
overflow: visible;
padding: 0;
}
.apidocs .L0,
.apidocs .L1,
.apidocs .L2,
.apidocs .L3,
.apidocs .L4,
.apidocs .L5,
.apidocs .L6,
.apidocs .L7,
.apidocs .L8,
.apidocs .L9 {
background: inherit;
}
/* -- Submodule List -------------------------------------------------------- */
.apidocs .module-submodule-description {
font-size: 12px;
margin: 0.3em 0 1em;
}
.apidocs .module-submodule-description p:first-child { margin-top: 0; }
/* -- Sidebar TabView ------------------------------------------------------- */
#api-tabview { margin-top: 0.6em; }
#api-tabview-filter,
#api-tabview-panel {
border: 1px solid #dfdfdf;
}
#api-tabview-filter {
border-bottom: none;
border-top: none;
padding: 0.6em 10px 0 10px;
}
#api-tabview-panel { border-top: none; }
#api-filter { width: 97%; }
/* -- Content TabView ------------------------------------------------------- */
#classdocs .yui3-tabview-panel { border: none; }
/* -- Source File Contents -------------------------------------------------- */
.prettyprint li.L0,
.prettyprint li.L1,
.prettyprint li.L2,
.prettyprint li.L3,
.prettyprint li.L5,
.prettyprint li.L6,
.prettyprint li.L7,
.prettyprint li.L8 {
list-style: decimal;
}
/* -- API options ----------------------------------------------------------- */
#api-options {
font-size: 11px;
margin-top: 2.2em;
position: absolute;
right: 1.5em;
}
/*#api-options label { margin-right: 0.6em; }*/
/* -- API list -------------------------------------------------------------- */
#api-list {
margin-top: 1.5em;
*zoom: 1;
}
.apis {
font-size: 12px;
line-height: 1.4;
list-style: none;
margin: 0;
padding: 0.5em 0 0.5em 0.4em;
}
.apis a {
border: 1px solid transparent;
display: block;
margin: 0 0 0 -4px;
padding: 1px 4px 0;
text-decoration: none;
_border: none;
_display: inline;
}
.apis a:hover,
.apis a:focus {
background: #E8EDFC;
background: -moz-linear-gradient(top, #e8edfc 0%, #becef7 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#E8EDFC), color-stop(100%,#BECEF7));
border-color: #AAC0FA;
border-radius: 3px;
color: #333;
outline: none;
}
.api-list-item a:hover,
.api-list-item a:focus {
font-weight: bold;
text-shadow: 1px 1px 1px #fff;
}
.apis .message { color: #888; }
.apis .result a { padding: 3px 5px 2px; }
.apis .result .type {
right: 4px;
top: 7px;
}
.api-list-item .yui3-highlight {
font-weight: bold;
}

View File

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{htmlTitle}}</title>
<link rel="stylesheet" href="{{yuiGridsUrl}}">
<link rel="stylesheet" href="{{projectAssets}}/vendor/prettify/prettify-min.css">
<link rel="stylesheet" href="{{projectAssets}}/css/main.css" id="site_styles">
<link rel="icon" href="{{projectAssets}}/favicon.ico">
<script src="{{yuiSeedUrl}}"></script>
</head>
<body class="yui3-skin-sam">
<div id="doc">
<div id="hd" class="yui3-g header">
<div class="yui3-u-3-4">
<h1>UPM</h1>
<p>
The UPM API is a high level sensor library for IoT devices using MRAA. See examples <a href="https://github.com/intel-iot-devkit/upm/tree/master/examples/javascript">here</a>.
</p>
</div>
</div>
<div id="bd" class="yui3-g">
<div class="yui3-u-1-4">
<div id="docs-sidebar" class="sidebar apidocs">
{{>sidebar}}
</div>
</div>
<div class="yui3-u-3-4">
{{>options}}
<div class="apidocs">
<div id="docs-main">
<div class="content">
{{>layout_content}}
</div>
</div>
</div>
</div>
</div>
</div>
<script src="{{projectAssets}}/vendor/prettify/prettify-min.js"></script>
<script>prettyPrint();</script>
<script src="{{projectAssets}}/js/yui-prettify.js"></script>
<script src="{{projectAssets}}/../api.js"></script>
<script src="{{projectAssets}}/js/api-filter.js"></script>
<script src="{{projectAssets}}/js/api-list.js"></script>
<script src="{{projectAssets}}/js/api-search.js"></script>
<script src="{{projectAssets}}/js/apidocs.js"></script>
</body>
</html>

View File

@ -0,0 +1,205 @@
<h1>{{name}} Class</h1>
<div class="box meta">
{{#if uses}}
<div class="uses">
Uses
<ul class="inline commas">
{{#uses}}
<li><a href="{{.}}.html">{{.}}</a></li>
{{/uses}}
</ul>
</div>
{{/if}}
{{#if extends}}
<div class="extends">
Extends {{#crossLink extends}}{{/crossLink}}
</div>
{{/if}}
{{#if foundAt}}
<div class="foundat">
Defined in: <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
</div>
{{/if}}
{{#if module}}
{{#if submodule}}
Module: {{#crossLinkModule submodule}}{{/crossLinkModule}}<br>
Parent Module: {{#crossLinkModule module}}{{/crossLinkModule}}
{{else}}
Module: {{#crossLinkModule module}}{{/crossLinkModule}}
{{/if}}
{{/if}}
{{#if since}}
<p>Available since {{since}}</p>
{{/if}}
</div>
{{#if deprecated}}
<div class="box deprecated">
<p>
{{#if deprecationMessage}}
<strong>Deprecated:</strong> {{deprecationMessage}}
{{else}}
This class is deprecated.
{{/if}}
</p>
</div>
{{/if}}
<div class="box intro">
{{{classDescription}}}
</div>
{{#is_constructor}}
<div class="constructor">
<h2>Constructor</h2>
{{>method}}
</div>
{{/is_constructor}}
<div id="classdocs" class="tabview">
<ul class="api-class-tabs">
<li class="api-class-tab index"><a href="#index">Index</a></li>
{{#if methods}}
<li class="api-class-tab methods"><a href="#methods">Methods</a></li>
{{/if}}
{{#if properties}}
<li class="api-class-tab properties"><a href="#properties">Properties</a></li>
{{/if}}
{{#if attrs}}
<li class="api-class-tab attrs"><a href="#attrs">Attributes</a></li>
{{/if}}
{{#if events}}
<li class="api-class-tab events"><a href="#events">Events</a></li>
{{/if}}
</ul>
<div>
<div id="index" class="api-class-tabpanel index">
<h2 class="off-left">Item Index</h2>
{{#if methods}}
<div class="index-section methods">
<h3>Methods</h3>
<ul class="index-list methods{{#if extends}} extends{{/if}}">
{{#methods}}
<li class="index-item method{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
<a href="#method_{{name}}">{{name}}</a>
{{#if static}}
<span class="flag static">static</span>
{{/if}}
{{#if deprecated}}
<span class="flag deprecated">deprecated</span>
{{/if}}
</li>
{{/methods}}
</ul>
</div>
{{/if}}
{{#if properties}}
<div class="index-section properties">
<h3>Properties</h3>
<ul class="index-list properties{{#if extends}} extends{{/if}}">
{{#properties}}
<li class="index-item property{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
<a href="#property_{{name}}">{{name}}</a>
{{#if static}}
<span class="flag static">static</span>
{{/if}}
{{#if deprecated}}
<span class="flag deprecated">deprecated</span>
{{/if}}
</li>
{{/properties}}
</ul>
</div>
{{/if}}
{{#if attrs}}
<div class="index-section attrs">
<h3>Attributes</h3>
<ul class="index-list attrs{{#if extends}} extends{{/if}}">
{{#attrs}}
<li class="index-item attr{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
<a href="#attr_{{name}}">{{name}}</a>
</li>
{{/attrs}}
</ul>
</div>
{{/if}}
{{#if events}}
<div class="index-section events">
<h3>Events</h3>
<ul class="index-list events{{#if extends}} extends{{/if}}">
{{#events}}
<li class="index-item event{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
<a href="#event_{{name}}">{{name}}</a>
{{#if static}}
<span class="flag static">static</span>
{{/if}}
{{#if deprecated}}
<span class="flag deprecated">deprecated</span>
{{/if}}
</li>
{{/events}}
</ul>
</div>
{{/if}}
</div>
{{#if methods}}
<div id="methods" class="api-class-tabpanel">
<h2 class="off-left">Methods</h2>
{{#methods}}
{{>method}}
{{/methods}}
</div>
{{/if}}
{{#if properties}}
<div id="properties" class="api-class-tabpanel">
<h2 class="off-left">Properties</h2>
{{#properties}}
{{>props}}
{{/properties}}
</div>
{{/if}}
{{#if attrs}}
<div id="attrs" class="api-class-tabpanel">
<h2 class="off-left">Attributes</h2>
{{#attrs}}
{{>attrs}}
{{/attrs}}
</div>
{{/if}}
{{#if events}}
<div id="events" class="api-class-tabpanel">
<h2 class="off-left">Events</h2>
{{#events}}
{{>events}}
{{/events}}
</div>
{{/if}}
</div>
</div>
{{{customCrossLinks}}}

View File

@ -0,0 +1,212 @@
<div id="method_{{name}}" class="method item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extended_from}} inherited{{/if}}">
<h3 class="name"><code>{{name}}</code></h3>
{{#if params}}
<div class="args">
<span class="paren">(</span><ul class="args-list inline commas">
{{#params}}
<li class="arg">
{{#if optional}}
<code class="optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
{{else}}
<code>{{name}}</code>
{{/if}}
</li>
{{/params}}
</ul><span class="paren">)</span>
</div>
{{else}}
<span class="paren">()</span>
{{/if}}
{{#if return}}
<span class="returns-inline">
<span class="type">{{#crossLink returnType}}{{/crossLink}}</span>
</span>
{{/if}}
{{#if deprecated}}
<span class="flag deprecated"{{#if deprecationMessage}} title="{{deprecationMessage}}"{{/if}}>deprecated</span>
{{/if}}
{{#if access}}
<span class="flag {{access}}">{{access}}</span>
{{/if}}
{{#if final}}
<span class="flag final">final</span>
{{/if}}
{{#if static}}
<span class="flag static">static</span>
{{/if}}
{{#if chainable}}
<span class="flag chainable">chainable</span>
{{/if}}
{{#if async}}
<span class="flag async">async</span>
{{/if}}
<div class="meta">
{{#if overwritten_from}}
<p>Inherited from
<a href="{{crossLinkRaw overwritten_from/class}}#method_{{overwritten_from/name}}">
{{overwritten_from/class}}
</a>
{{#if foundAt}}
but overwritten in
{{/if}}
{{else}}
{{#if extended_from}}
<p>Inherited from
<a href="{{crossLinkRaw extended_from}}#method_{{name}}">{{extended_from}}</a>:
{{else}}
{{#providedBy}}
<p>Provided by the <a href="../modules/{{.}}.html">{{.}}</a> module.</p>
{{/providedBy}}
<p>
{{#if foundAt}}
Defined in
{{/if}}
{{/if}}
{{/if}}
{{#if foundAt}}
<a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
{{/if}}
</p>
{{#if deprecationMessage}}
<p>Deprecated: {{deprecationMessage}}</p>
{{/if}}
{{#if since}}
<p>Available since {{since}}</p>
{{/if}}
</div>
<div class="description">
{{{methodDescription}}}
</div>
{{#if params}}
<div class="params">
<h4>Parameters:</h4>
<ul class="params-list">
{{#params}}
<li class="param">
{{#if optional}}
<code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
<span class="flag optional" title="This parameter is optional.">optional</span>
{{else}}
<code class="param-name">{{name}}</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
{{/if}}
{{#if multiple}}
<span class="flag multiple" title="This argument may occur one or more times.">multiple</span>
{{/if}}
<div class="param-description">
{{{description}}}
</div>
{{#if props}}
<ul class="params-list">
{{#props}}
<li class="param">
{{#if optional}}
<code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
<span class="flag optional" title="This parameter is optional.">optional</span>
{{else}}
<code class="param-name">{{name}}</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
{{/if}}
<div class="param-description">
{{{description}}}
</div>
{{#if props}}
<ul class="params-list">
{{#props}}
<li class="param">
{{#if optional}}
<code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
<span class="flag optional" title="This parameter is optional.">optional</span>
{{else}}
<code class="param-name">{{name}}</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
{{/if}}
<div class="param-description">
{{{description}}}
</div>
</li>
{{/props}}
</ul>
{{/if}}
</li>
{{/props}}
</ul>
{{/if}}
</li>
{{/params}}
</ul>
</div>
{{/if}}
{{#return}}
<div class="returns">
<h4>Returns:</h4>
<div class="returns-description">
{{#if description}}
{{#if type}}
<span class="type">{{#crossLink type}}{{/crossLink}}</span>:
{{/if}}
{{{description}}}
{{else}}
{{#if type}}
<span class="type">{{#crossLink type}}{{/crossLink}}</span>:
{{/if}}
{{/if}}
</div>
</div>
{{/return}}
{{#throws}}
<div class="throws">
<h4>Throws:</h4>
<div class="throws-description">
{{#if description}}
{{#if type}}
<span class="type">{{#crossLink type}}{{/crossLink}}</span>:
{{/if}}
{{{description}}}
{{else}}
{{#if type}}
<span class="type">{{#crossLink type}}{{/crossLink}}</span>:
{{/if}}
{{/if}}
</div>
</div>
{{/throws}}
{{#example}}
<div class="example">
<h4>Example:</h4>
<div class="example-content">
{{{.}}}
</div>
</div>
{{/example}}
</div>

View File

@ -0,0 +1,92 @@
<h1>{{name}} Module</h1>
<div class="box clearfix meta">
{{#extra}}
{{#selleck}}
<a class="button link-docs" href="/yui/docs/{{name}}">User Guide &amp; Examples</a>
{{/selleck}}
{{/extra}}
{{#if requires}}
<div class="uses">
Requires
<ul class="inline commas">
{{#requires}}
<li>{{#crossLinkModule .}}{{/crossLinkModule}}</li>
{{/requires}}
</ul>
</div>
{{/if}}
{{#if foundAt}}
<div class="foundat">
Defined in: <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
</div>
{{/if}}
{{#if since}}
<p>Available since {{since}}</p>
{{/if}}
</div>
{{#if deprecated}}
<div class="box deprecated">
<p>
{{#if deprecationMessage}}
<strong>Deprecated:</strong> {{deprecationMessage}}
{{else}}
This module is deprecated.
{{/if}}
</p>
</div>
{{/if}}
<div class="box intro">
{{{moduleDescription}}}
</div>
{{#example}}
<div class="example">
<h4>Example:</h4>
<div class="example-content">
{{{.}}}
</div>
</div>
{{/example}}
<div class="yui3-g">
<div class="yui3-u-1-2">
{{#if moduleClasses}}
<p>This module provides the following classes:</p>
<ul class="module-classes">
{{#moduleClasses}}
<li class="module-class">
<a href="{{../projectRoot}}classes/{{name}}.html">
{{displayName}}
</a>
</li>
{{/moduleClasses}}
</ul>
{{/if}}
</div>
<div class="yui3-u-1-2">
{{#if subModules}}
<p>This module is a rollup of the following modules:</p>
<ul class="module-submodules">
{{#subModules}}
<li class="module-submodule">
<a href="{{../projectRoot}}modules/{{name}}.html">
{{displayName}}
</a>
<div class="module-submodule-description">
{{{description}}}
</div>
</li>
{{/subModules}}
</ul>
{{/if}}
</div>
</div>

View File

@ -0,0 +1,22 @@
<div id="api-options" hidden>
Show:
<label for="api-show-inherited">
<input type="checkbox" id="api-show-inherited" checked>
Inherited
</label>
<label for="api-show-protected">
<input type="checkbox" id="api-show-protected">
Protected
</label>
<label for="api-show-private">
<input type="checkbox" id="api-show-private">
Private
</label>
<label for="api-show-deprecated">
<input type="checkbox" id="api-show-deprecated">
Deprecated
</label>
</div>

View File

@ -0,0 +1,119 @@
<div id="property_{{name}}" class="property item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extended_from}} inherited{{/if}}">
<h3 class="name"><code>{{name}}</code></h3>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
{{#if deprecated}}
<span class="flag deprecated"{{#if deprecationMessage}} title="{{deprecationMessage}}"{{/if}}>deprecated</span>
{{/if}}
{{#if access}}
<span class="flag {{access}}">{{access}}</span>
{{/if}}
{{#if final}}
<span class="flag final">final</span>
{{/if}}
{{#if static}}
<span class="flag static">static</span>
{{/if}}
<div class="meta">
{{#if overwritten_from}}
<p>Inherited from
<a href="{{crossLinkRaw overwritten_from/class}}#property_{{overwritten_from/name}}">
{{overwritten_from/class}}
</a>
{{#if foundAt}}
but overwritten in
{{/if}}
{{else}}
{{#if extended_from}}
<p>Inherited from
<a href="{{crossLinkRaw extended_from}}#property_{{name}}">{{extended_from}}</a>:
{{else}}
{{#providedBy}}
<p>Provided by the <a href="../modules/{{.}}.html">{{.}}</a> module.</p>
{{/providedBy}}
<p>
{{#if foundAt}}
Defined in
{{/if}}
{{/if}}
{{/if}}
{{#if foundAt}}
<a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
{{/if}}
</p>
{{#if deprecationMessage}}
<p>Deprecated: {{deprecationMessage}}</p>
{{/if}}
{{#if since}}
<p>Available since {{since}}</p>
{{/if}}
</div>
<div class="description">
{{{propertyDescription}}}
</div>
{{#if default}}
<p><strong>Default:</strong> {{default}}</p>
{{/if}}
{{#example}}
<div class="example">
<h4>Example:</h4>
<div class="example-content">
{{{.}}}
</div>
</div>
{{/example}}
{{#if subprops}}
<h4>Sub-properties:</h4>
<ul class="params-list">
{{#subprops}}
<li class="param">
{{#if optional}}
<code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
<span class="flag optional" title="This property is optional.">optional</span>
{{else}}
<code class="param-name">{{name}}</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
{{/if}}
<div class="param-description">
{{{description}}}
</div>
{{#if subprops}}
<ul class="params-list">
{{#subprops}}
<li class="param">
{{#if optional}}
<code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
<span class="flag optional" title="This property is optional.">optional</span>
{{else}}
<code class="param-name">{{name}}</code>
<span class="type">{{#crossLink type}}{{/crossLink}}</span>
{{/if}}
<div class="param-description">
{{{description}}}
</div>
</li>
{{/subprops}}
</ul>
{{/if}}
</li>
{{/subprops}}
</ul>
{{/if}}
</div>

View File

@ -0,0 +1,27 @@
<div id="api-list">
<h2 class="off-left">APIs</h2>
<div id="api-tabview" class="tabview">
<ul class="tabs">
<li><a href="#api-categories">By Category</a></li>
<li><a href="#api-connections">By Connection Type</a></li>
</ul>
<div id="api-tabview-filter">
<input type="search" id="api-filter" placeholder="Type to filter APIs" hidden>
</div>
<div id="api-tabview-panel">
<ul id="api-categories" class="apis modules">
{{{listByCategory}}}
</ul>
<ul id="api-connections" class="apis modules">
{{{listByConnection}}}
</ul>
</div>
</div>
{{{javascripts}}}
</div>