mirror of
https://github.com/konvajs/konva.git
synced 2025-06-28 11:42:17 +08:00
refactored jsdocs a little bit
This commit is contained in:
parent
8bdfc1215b
commit
1390a16443
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,7 +3,7 @@ analysis
|
|||||||
node_modules
|
node_modules
|
||||||
bower_components
|
bower_components
|
||||||
phantomjs.exe
|
phantomjs.exe
|
||||||
documentation
|
docs
|
||||||
test/sandbox.html
|
test/sandbox.html
|
||||||
|
|
||||||
# Numerous always-ignore extensions
|
# Numerous always-ignore extensions
|
||||||
|
@ -205,7 +205,7 @@ module.exports = function(grunt) {
|
|||||||
stderr : true,
|
stderr : true,
|
||||||
failOnError : true
|
failOnError : true
|
||||||
},
|
},
|
||||||
command: './node_modules/.bin/jsdoc ./dist/kinetic-v<%= pkg.version %>.js -d ./documentation'
|
command: './node_modules/.bin/jsdoc ./dist/kinetic-v<%= pkg.version %>.js -d ./docs'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mocha_phantomjs: {
|
mocha_phantomjs: {
|
||||||
@ -249,7 +249,7 @@ module.exports = function(grunt) {
|
|||||||
'copy:prod2'
|
'copy:prod2'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
grunt.registerTask('docs', 'Generate documentation to documentation folder', [
|
grunt.registerTask('docs', 'Generate docs', [
|
||||||
'full',
|
'full',
|
||||||
'shell:jsdoc',
|
'shell:jsdoc',
|
||||||
]);
|
]);
|
||||||
|
1
jsdoc-template/README.md
Normal file
1
jsdoc-template/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
The default template for JSDoc 3 uses: [the Taffy Database library](http://taffydb.com/) and the [Underscore Template library](http://documentcloud.github.com/underscore/#template).
|
559
jsdoc-template/publish.js
Normal file
559
jsdoc-template/publish.js
Normal file
@ -0,0 +1,559 @@
|
|||||||
|
/*global env: true */
|
||||||
|
var template = require('jsdoc/template'),
|
||||||
|
fs = require('jsdoc/fs'),
|
||||||
|
path = require('jsdoc/path'),
|
||||||
|
taffy = require('taffydb').taffy,
|
||||||
|
handle = require('jsdoc/util/error').handle,
|
||||||
|
helper = require('jsdoc/util/templateHelper'),
|
||||||
|
htmlsafe = helper.htmlsafe,
|
||||||
|
linkto = helper.linkto,
|
||||||
|
resolveAuthorLinks = helper.resolveAuthorLinks,
|
||||||
|
scopeToPunc = helper.scopeToPunc,
|
||||||
|
hasOwnProp = Object.prototype.hasOwnProperty,
|
||||||
|
data,
|
||||||
|
view,
|
||||||
|
outdir = env.opts.destination;
|
||||||
|
|
||||||
|
|
||||||
|
function find(spec) {
|
||||||
|
return helper.find(data, spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
function tutoriallink(tutorial) {
|
||||||
|
return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' });
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAncestorLinks(doclet) {
|
||||||
|
return helper.getAncestorLinks(data, doclet);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hashToLink(doclet, hash) {
|
||||||
|
if ( !/^(#.+)/.test(hash) ) { return hash; }
|
||||||
|
|
||||||
|
var url = helper.createLink(doclet);
|
||||||
|
|
||||||
|
url = url.replace(/(#.+|$)/, hash);
|
||||||
|
return '<a href="' + url + '">' + hash + '</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function needsSignature(doclet) {
|
||||||
|
var needsSig = false;
|
||||||
|
|
||||||
|
// function and class definitions always get a signature
|
||||||
|
if (doclet.kind === 'function' || doclet.kind === 'class') {
|
||||||
|
needsSig = true;
|
||||||
|
}
|
||||||
|
// typedefs that contain functions get a signature, too
|
||||||
|
else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names &&
|
||||||
|
doclet.type.names.length) {
|
||||||
|
for (var i = 0, l = doclet.type.names.length; i < l; i++) {
|
||||||
|
if (doclet.type.names[i].toLowerCase() === 'function') {
|
||||||
|
needsSig = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return needsSig;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSignatureParams(f) {
|
||||||
|
var params = helper.getSignatureParams(f, 'optional');
|
||||||
|
|
||||||
|
f.signature = (f.signature || '') + '('+params.join(', ')+')';
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSignatureReturns(f) {
|
||||||
|
var returnTypes = helper.getSignatureReturns(f);
|
||||||
|
|
||||||
|
f.signature = '<span class="signature">'+(f.signature || '') + '</span>' + '<span class="type-signature">'+(returnTypes.length? ' → {'+returnTypes.join('|')+'}' : '')+'</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSignatureTypes(f) {
|
||||||
|
var types = helper.getSignatureTypes(f);
|
||||||
|
|
||||||
|
f.signature = (f.signature || '') + '<span class="type-signature">'+(types.length? ' :'+types.join('|') : '')+'</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function addAttribs(f) {
|
||||||
|
var attribs = helper.getAttribs(f);
|
||||||
|
|
||||||
|
f.attribs = '<span class="type-signature">'+htmlsafe(attribs.length? '<'+attribs.join(', ')+'> ' : '')+'</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function shortenPaths(files, commonPrefix) {
|
||||||
|
// always use forward slashes
|
||||||
|
var regexp = new RegExp('\\\\', 'g');
|
||||||
|
|
||||||
|
Object.keys(files).forEach(function(file) {
|
||||||
|
files[file].shortened = files[file].resolved.replace(commonPrefix, '')
|
||||||
|
.replace(regexp, '/');
|
||||||
|
});
|
||||||
|
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveSourcePath(filepath) {
|
||||||
|
return path.resolve(process.cwd(), filepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPathFromDoclet(doclet) {
|
||||||
|
if (!doclet.meta) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var filepath = doclet.meta.path && doclet.meta.path !== 'null' ?
|
||||||
|
doclet.meta.path + '/' + doclet.meta.filename :
|
||||||
|
doclet.meta.filename;
|
||||||
|
|
||||||
|
return filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generate(title, docs, filename, resolveLinks) {
|
||||||
|
resolveLinks = resolveLinks === false ? false : true;
|
||||||
|
|
||||||
|
var docData = {
|
||||||
|
title: title,
|
||||||
|
docs: docs
|
||||||
|
};
|
||||||
|
|
||||||
|
var outpath = path.join(outdir, filename),
|
||||||
|
html = view.render('container.tmpl', docData);
|
||||||
|
|
||||||
|
if (resolveLinks) {
|
||||||
|
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(outpath, html, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateSourceFiles(sourceFiles) {
|
||||||
|
Object.keys(sourceFiles).forEach(function(file) {
|
||||||
|
var source;
|
||||||
|
// links are keyed to the shortened path in each doclet's `meta.filename` property
|
||||||
|
var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened);
|
||||||
|
helper.registerLink(sourceFiles[file].shortened, sourceOutfile);
|
||||||
|
|
||||||
|
try {
|
||||||
|
source = {
|
||||||
|
kind: 'source',
|
||||||
|
code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, 'utf8') )
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
handle(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
generate('Source: ' + sourceFiles[file].shortened, [source], sourceOutfile,
|
||||||
|
false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look for classes or functions with the same name as modules (which indicates that the module
|
||||||
|
* exports only that class or function), then attach the classes or functions to the `module`
|
||||||
|
* property of the appropriate module doclets. The name of each class or function is also updated
|
||||||
|
* for display purposes. This function mutates the original arrays.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
|
||||||
|
* check.
|
||||||
|
* @param {Array.<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.
|
||||||
|
*/
|
||||||
|
function attachModuleSymbols(doclets, modules) {
|
||||||
|
var symbols = {};
|
||||||
|
|
||||||
|
// build a lookup table
|
||||||
|
doclets.forEach(function(symbol) {
|
||||||
|
symbols[symbol.longname] = symbol;
|
||||||
|
});
|
||||||
|
|
||||||
|
return modules.map(function(module) {
|
||||||
|
if (symbols[module.longname]) {
|
||||||
|
module.module = symbols[module.longname];
|
||||||
|
module.module.name = module.module.name.replace('module:', 'require("') + '")';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the navigation sidebar.
|
||||||
|
* @param {object} members The members that will be used to create the sidebar.
|
||||||
|
* @param {array<object>} members.classes
|
||||||
|
* @param {array<object>} members.externals
|
||||||
|
* @param {array<object>} members.globals
|
||||||
|
* @param {array<object>} members.mixins
|
||||||
|
* @param {array<object>} members.modules
|
||||||
|
* @param {array<object>} members.namespaces
|
||||||
|
* @param {array<object>} members.tutorials
|
||||||
|
* @param {array<object>} members.events
|
||||||
|
* @return {string} The HTML for the navigation sidebar.
|
||||||
|
*/
|
||||||
|
function buildNav(members) {
|
||||||
|
var nav = '<h2><a href="index.html">Index</a></h2>',
|
||||||
|
seen = {},
|
||||||
|
hasClassList = false,
|
||||||
|
classNav = '',
|
||||||
|
globalNav = '';
|
||||||
|
|
||||||
|
if (members.modules.length) {
|
||||||
|
nav += '<h3>Modules</h3><ul>';
|
||||||
|
members.modules.forEach(function(m) {
|
||||||
|
if ( !hasOwnProp.call(seen, m.longname) ) {
|
||||||
|
nav += '<li>'+linkto(m.longname, m.name)+'</li>';
|
||||||
|
}
|
||||||
|
seen[m.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.externals.length) {
|
||||||
|
nav += '<h3>Externals</h3><ul>';
|
||||||
|
members.externals.forEach(function(e) {
|
||||||
|
if ( !hasOwnProp.call(seen, e.longname) ) {
|
||||||
|
nav += '<li>'+linkto( e.longname, e.name.replace(/(^"|"$)/g, '') )+'</li>';
|
||||||
|
}
|
||||||
|
seen[e.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.classes.length) {
|
||||||
|
members.classes.forEach(function(c) {
|
||||||
|
if ( !hasOwnProp.call(seen, c.longname) ) {
|
||||||
|
classNav += '<li>'+linkto(c.longname, c.name)+'</li>';
|
||||||
|
}
|
||||||
|
seen[c.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (classNav !== '') {
|
||||||
|
nav += '<h3>Classes</h3><ul>';
|
||||||
|
nav += classNav;
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.events.length) {
|
||||||
|
nav += '<h3>Events</h3><ul>';
|
||||||
|
members.events.forEach(function(e) {
|
||||||
|
if ( !hasOwnProp.call(seen, e.longname) ) {
|
||||||
|
nav += '<li>'+linkto(e.longname, e.name)+'</li>';
|
||||||
|
}
|
||||||
|
seen[e.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.namespaces.length) {
|
||||||
|
nav += '<h3>Namespaces</h3><ul>';
|
||||||
|
members.namespaces.forEach(function(n) {
|
||||||
|
if ( !hasOwnProp.call(seen, n.longname) ) {
|
||||||
|
nav += '<li>'+linkto(n.longname, n.name)+'</li>';
|
||||||
|
}
|
||||||
|
seen[n.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.mixins.length) {
|
||||||
|
nav += '<h3>Mixins</h3><ul>';
|
||||||
|
members.mixins.forEach(function(m) {
|
||||||
|
if ( !hasOwnProp.call(seen, m.longname) ) {
|
||||||
|
nav += '<li>'+linkto(m.longname, m.name)+'</li>';
|
||||||
|
}
|
||||||
|
seen[m.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.tutorials.length) {
|
||||||
|
nav += '<h3>Tutorials</h3><ul>';
|
||||||
|
members.tutorials.forEach(function(t) {
|
||||||
|
nav += '<li>'+tutoriallink(t.name)+'</li>';
|
||||||
|
});
|
||||||
|
|
||||||
|
nav += '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.globals.length) {
|
||||||
|
members.globals.forEach(function(g) {
|
||||||
|
if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) {
|
||||||
|
globalNav += '<li>' + linkto(g.longname, g.name) + '</li>';
|
||||||
|
}
|
||||||
|
seen[g.longname] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!globalNav) {
|
||||||
|
// turn the heading into a link so you can actually get to the global page
|
||||||
|
nav += '<h3>' + linkto('global', 'Global') + '</h3>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nav += '<h3>Global</h3><ul>' + globalNav + '</ul>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nav;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param {TAFFY} taffyData See <http://taffydb.com/>.
|
||||||
|
@param {object} opts
|
||||||
|
@param {Tutorial} tutorials
|
||||||
|
*/
|
||||||
|
exports.publish = function(taffyData, opts, tutorials) {
|
||||||
|
data = taffyData;
|
||||||
|
|
||||||
|
var conf = env.conf.templates || {};
|
||||||
|
conf['default'] = conf['default'] || {};
|
||||||
|
|
||||||
|
var templatePath = opts.template;
|
||||||
|
view = new template.Template(templatePath + '/tmpl');
|
||||||
|
|
||||||
|
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
|
||||||
|
// doesn't try to hand them out later
|
||||||
|
var indexUrl = helper.getUniqueFilename('index');
|
||||||
|
// don't call registerLink() on this one! 'index' is also a valid longname
|
||||||
|
|
||||||
|
var globalUrl = helper.getUniqueFilename('global');
|
||||||
|
helper.registerLink('global', globalUrl);
|
||||||
|
|
||||||
|
// set up templating
|
||||||
|
view.layout = 'layout.tmpl';
|
||||||
|
|
||||||
|
// set up tutorials for helper
|
||||||
|
helper.setTutorials(tutorials);
|
||||||
|
|
||||||
|
data = helper.prune(data);
|
||||||
|
data.sort('longname, version, since');
|
||||||
|
helper.addEventListeners(data);
|
||||||
|
|
||||||
|
var sourceFiles = {};
|
||||||
|
var sourceFilePaths = [];
|
||||||
|
data().each(function(doclet) {
|
||||||
|
doclet.attribs = '';
|
||||||
|
|
||||||
|
if (doclet.examples) {
|
||||||
|
doclet.examples = doclet.examples.map(function(example) {
|
||||||
|
var caption, code;
|
||||||
|
|
||||||
|
if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) {
|
||||||
|
caption = RegExp.$1;
|
||||||
|
code = RegExp.$3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
caption: caption || '',
|
||||||
|
code: code || example
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (doclet.see) {
|
||||||
|
doclet.see.forEach(function(seeItem, i) {
|
||||||
|
doclet.see[i] = hashToLink(doclet, seeItem);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// build a list of source files
|
||||||
|
var sourcePath;
|
||||||
|
var resolvedSourcePath;
|
||||||
|
if (doclet.meta) {
|
||||||
|
sourcePath = getPathFromDoclet(doclet);
|
||||||
|
resolvedSourcePath = resolveSourcePath(sourcePath);
|
||||||
|
sourceFiles[sourcePath] = {
|
||||||
|
resolved: resolvedSourcePath,
|
||||||
|
shortened: null
|
||||||
|
};
|
||||||
|
sourceFilePaths.push(resolvedSourcePath);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// update outdir if necessary, then create outdir
|
||||||
|
var packageInfo = ( find({kind: 'package'}) || [] ) [0];
|
||||||
|
if (packageInfo && packageInfo.name) {
|
||||||
|
outdir = path.join(outdir, packageInfo.name, packageInfo.version);
|
||||||
|
}
|
||||||
|
fs.mkPath(outdir);
|
||||||
|
|
||||||
|
// copy the template's static files to outdir
|
||||||
|
var fromDir = path.join(templatePath, 'static');
|
||||||
|
var staticFiles = fs.ls(fromDir, 3);
|
||||||
|
|
||||||
|
staticFiles.forEach(function(fileName) {
|
||||||
|
var toDir = fs.toDir( fileName.replace(fromDir, outdir) );
|
||||||
|
fs.mkPath(toDir);
|
||||||
|
fs.copyFileSync(fileName, toDir);
|
||||||
|
});
|
||||||
|
|
||||||
|
// copy user-specified static files to outdir
|
||||||
|
var staticFilePaths;
|
||||||
|
var staticFileFilter;
|
||||||
|
var staticFileScanner;
|
||||||
|
if (conf['default'].staticFiles) {
|
||||||
|
staticFilePaths = conf['default'].staticFiles.paths || [];
|
||||||
|
staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf['default'].staticFiles);
|
||||||
|
staticFileScanner = new (require('jsdoc/src/scanner')).Scanner();
|
||||||
|
|
||||||
|
staticFilePaths.forEach(function(filePath) {
|
||||||
|
var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
|
||||||
|
|
||||||
|
extraStaticFiles.forEach(function(fileName) {
|
||||||
|
var sourcePath = fs.statSync(filePath).isDirectory() ? filePath :
|
||||||
|
path.dirname(filePath);
|
||||||
|
var toDir = fs.toDir( fileName.replace(sourcePath, outdir) );
|
||||||
|
fs.mkPath(toDir);
|
||||||
|
fs.copyFileSync(fileName, toDir);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sourceFilePaths.length) {
|
||||||
|
sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) );
|
||||||
|
}
|
||||||
|
data().each(function(doclet) {
|
||||||
|
var url = helper.createLink(doclet);
|
||||||
|
helper.registerLink(doclet.longname, url);
|
||||||
|
|
||||||
|
// replace the filename with a shortened version of the full path
|
||||||
|
var docletPath;
|
||||||
|
if (doclet.meta) {
|
||||||
|
docletPath = getPathFromDoclet(doclet);
|
||||||
|
docletPath = sourceFiles[docletPath].shortened;
|
||||||
|
if (docletPath) {
|
||||||
|
doclet.meta.filename = docletPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
data().each(function(doclet) {
|
||||||
|
var url = helper.longnameToUrl[doclet.longname];
|
||||||
|
|
||||||
|
if (url.indexOf('#') > -1) {
|
||||||
|
doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
doclet.id = doclet.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( needsSignature(doclet) ) {
|
||||||
|
addSignatureParams(doclet);
|
||||||
|
addSignatureReturns(doclet);
|
||||||
|
addAttribs(doclet);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// do this after the urls have all been generated
|
||||||
|
data().each(function(doclet) {
|
||||||
|
doclet.ancestors = getAncestorLinks(doclet);
|
||||||
|
|
||||||
|
if (doclet.kind === 'member') {
|
||||||
|
addSignatureTypes(doclet);
|
||||||
|
addAttribs(doclet);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doclet.kind === 'constant') {
|
||||||
|
addSignatureTypes(doclet);
|
||||||
|
addAttribs(doclet);
|
||||||
|
doclet.kind = 'member';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var members = helper.getMembers(data);
|
||||||
|
members.tutorials = tutorials.children;
|
||||||
|
|
||||||
|
// add template helpers
|
||||||
|
view.find = find;
|
||||||
|
view.linkto = linkto;
|
||||||
|
view.resolveAuthorLinks = resolveAuthorLinks;
|
||||||
|
view.tutoriallink = tutoriallink;
|
||||||
|
view.htmlsafe = htmlsafe;
|
||||||
|
|
||||||
|
// once for all
|
||||||
|
view.nav = buildNav(members);
|
||||||
|
attachModuleSymbols( find({ kind: ['class', 'function'], longname: {left: 'module:'} }),
|
||||||
|
members.modules );
|
||||||
|
|
||||||
|
// only output pretty-printed source files if requested; do this before generating any other
|
||||||
|
// pages, so the other pages can link to the source files
|
||||||
|
if (conf['default'].outputSourceFiles) {
|
||||||
|
generateSourceFiles(sourceFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); }
|
||||||
|
|
||||||
|
// index page displays information from package.json and lists files
|
||||||
|
var files = find({kind: 'file'}),
|
||||||
|
packages = find({kind: 'package'});
|
||||||
|
|
||||||
|
generate('Index',
|
||||||
|
packages.concat(
|
||||||
|
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]
|
||||||
|
).concat(files),
|
||||||
|
indexUrl);
|
||||||
|
|
||||||
|
// set up the lists that we'll use to generate pages
|
||||||
|
var classes = taffy(members.classes);
|
||||||
|
var modules = taffy(members.modules);
|
||||||
|
var namespaces = taffy(members.namespaces);
|
||||||
|
var mixins = taffy(members.mixins);
|
||||||
|
var externals = taffy(members.externals);
|
||||||
|
|
||||||
|
Object.keys(helper.longnameToUrl).forEach(function(longname) {
|
||||||
|
var myClasses = helper.find(classes, {longname: longname});
|
||||||
|
if (myClasses.length) {
|
||||||
|
generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var myModules = helper.find(modules, {longname: longname});
|
||||||
|
if (myModules.length) {
|
||||||
|
generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var myNamespaces = helper.find(namespaces, {longname: longname});
|
||||||
|
if (myNamespaces.length) {
|
||||||
|
generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var myMixins = helper.find(mixins, {longname: longname});
|
||||||
|
if (myMixins.length) {
|
||||||
|
generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var myExternals = helper.find(externals, {longname: longname});
|
||||||
|
if (myExternals.length) {
|
||||||
|
generate('External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO: move the tutorial functions to templateHelper.js
|
||||||
|
function generateTutorial(title, tutorial, filename) {
|
||||||
|
var tutorialData = {
|
||||||
|
title: title,
|
||||||
|
header: tutorial.title,
|
||||||
|
content: tutorial.parse(),
|
||||||
|
children: tutorial.children
|
||||||
|
};
|
||||||
|
|
||||||
|
var tutorialPath = path.join(outdir, filename),
|
||||||
|
html = view.render('tutorial.tmpl', tutorialData);
|
||||||
|
|
||||||
|
// yes, you can use {@link} in tutorials too!
|
||||||
|
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
|
||||||
|
|
||||||
|
fs.writeFileSync(tutorialPath, html, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
|
// tutorials can have only one parent so there is no risk for loops
|
||||||
|
function saveChildren(node) {
|
||||||
|
node.children.forEach(function(child) {
|
||||||
|
generateTutorial('Tutorial: ' + child.title, child, helper.tutorialToUrl(child.name));
|
||||||
|
saveChildren(child);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
saveChildren(tutorials);
|
||||||
|
};
|
283
jsdoc-template/static/styles/jsdoc-default.css
Normal file
283
jsdoc-template/static/styles/jsdoc-default.css
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
html
|
||||||
|
{
|
||||||
|
overflow: auto;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
{
|
||||||
|
font: 14px "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans serif;
|
||||||
|
line-height: 130%;
|
||||||
|
color: #000;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:active {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
header
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
padding: 6px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.class-description {
|
||||||
|
font-style: italic;
|
||||||
|
font-family: Palatino, 'Palatino Linotype', serif;
|
||||||
|
font-size: 130%;
|
||||||
|
line-height: 140%;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main {
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 12px 24px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
margin-right: 240px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.variation {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optional:after {
|
||||||
|
content: "opt";
|
||||||
|
font-size: 60%;
|
||||||
|
color: #aaa;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
margin-left: -230px;
|
||||||
|
margin-top: 28px;
|
||||||
|
width: 220px;
|
||||||
|
border-left: 1px solid #ccc;
|
||||||
|
padding-left: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav ul {
|
||||||
|
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
|
||||||
|
font-size: 100%;
|
||||||
|
line-height: 17px;
|
||||||
|
padding:0;
|
||||||
|
margin:0;
|
||||||
|
list-style-type:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav h2 a, nav h2 a:visited {
|
||||||
|
color: #A35A00;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav h3 {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav li {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a {
|
||||||
|
color: #5C5954;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a:visited {
|
||||||
|
color: #5C5954;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a:active {
|
||||||
|
color: #5C5954;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
display: block;
|
||||||
|
padding: 6px;
|
||||||
|
margin-top: 12px;
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1
|
||||||
|
{
|
||||||
|
font-size: 200%;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 6px 0 9px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
font-size: 170%;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 6px 0 3px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3
|
||||||
|
{
|
||||||
|
font-size: 150%;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin: 6px 0 3px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4
|
||||||
|
{
|
||||||
|
font-size: 130%;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin: 18px 0 3px 0;
|
||||||
|
color: #A35A00;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5, .container-overview .subsection-title
|
||||||
|
{
|
||||||
|
font-size: 120%;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 8px 0 3px -16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6
|
||||||
|
{
|
||||||
|
font-size: 100%;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 6px 0 3px 0;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ancestors { color: #999; }
|
||||||
|
.ancestors a
|
||||||
|
{
|
||||||
|
color: #999 !important;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.important
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
color: #950B02;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yes-def {
|
||||||
|
text-indent: -1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type-signature {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name, .signature {
|
||||||
|
font-family: Consolas, "Lucida Console", Monaco, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.details { margin-top: 14px; }
|
||||||
|
.details dt { width:100px; float:left; border-left: 2px solid #DDD; padding-left: 10px; padding-top: 6px; }
|
||||||
|
.details dd { margin-left: 50px; }
|
||||||
|
.details ul { margin: 0; }
|
||||||
|
.details ul { list-style-type: none; }
|
||||||
|
.details li { margin-left: 30px; padding-top: 6px; }
|
||||||
|
|
||||||
|
.description {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: -16px;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-caption
|
||||||
|
{
|
||||||
|
font-style: italic;
|
||||||
|
font-family: Palatino, 'Palatino Linotype', serif;
|
||||||
|
font-size: 107%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint
|
||||||
|
{
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
width: 80%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.source {
|
||||||
|
width: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint code
|
||||||
|
{
|
||||||
|
font-family: Consolas, 'Lucida Console', Monaco, monospace;
|
||||||
|
font-size: 100%;
|
||||||
|
line-height: 18px;
|
||||||
|
display: block;
|
||||||
|
padding: 4px 12px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #000;
|
||||||
|
border-left: 3px #ddd solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params, .props
|
||||||
|
{
|
||||||
|
border-spacing: 0;
|
||||||
|
border: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params .name, .props .name, .name code {
|
||||||
|
color: #A35A00;
|
||||||
|
font-family: Consolas, 'Lucida Console', Monaco, monospace;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params td, .params th, .props td, .props th
|
||||||
|
{
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
margin: 0px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 4px 6px;
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params thead tr, .props thead tr
|
||||||
|
{
|
||||||
|
background-color: #ddd;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params .params thead tr, .props .props thead tr
|
||||||
|
{
|
||||||
|
background-color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params th, .props th { border-right: 1px solid #aaa; }
|
||||||
|
.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
|
||||||
|
|
||||||
|
.disabled {
|
||||||
|
color: #454545;
|
||||||
|
}
|
111
jsdoc-template/static/styles/prettify-jsdoc.css
Normal file
111
jsdoc-template/static/styles/prettify-jsdoc.css
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/* JSDoc prettify.js theme */
|
||||||
|
|
||||||
|
/* plain text */
|
||||||
|
.pln {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* string content */
|
||||||
|
.str {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a keyword */
|
||||||
|
.kwd {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a comment */
|
||||||
|
.com {
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a type name */
|
||||||
|
.typ {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a literal value */
|
||||||
|
.lit {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* punctuation */
|
||||||
|
.pun {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lisp open bracket */
|
||||||
|
.opn {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lisp close bracket */
|
||||||
|
.clo {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a markup tag name */
|
||||||
|
.tag {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a markup attribute name */
|
||||||
|
.atn {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a markup attribute value */
|
||||||
|
.atv {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a declaration */
|
||||||
|
.dec {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a variable name */
|
||||||
|
.var {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a function name */
|
||||||
|
.fun {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specify class=linenums on a pre to get line numbering */
|
||||||
|
ol.linenums {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
132
jsdoc-template/static/styles/prettify-tomorrow.css
Normal file
132
jsdoc-template/static/styles/prettify-tomorrow.css
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
/* Tomorrow Theme */
|
||||||
|
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
|
||||||
|
/* Pretty printing styles. Used with prettify.js. */
|
||||||
|
/* SPAN elements with the classes below are added by prettyprint. */
|
||||||
|
/* plain text */
|
||||||
|
.pln {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
@media screen {
|
||||||
|
/* string content */
|
||||||
|
.str {
|
||||||
|
color: #718c00; }
|
||||||
|
|
||||||
|
/* a keyword */
|
||||||
|
.kwd {
|
||||||
|
color: #8959a8; }
|
||||||
|
|
||||||
|
/* a comment */
|
||||||
|
.com {
|
||||||
|
color: #8e908c; }
|
||||||
|
|
||||||
|
/* a type name */
|
||||||
|
.typ {
|
||||||
|
color: #4271ae; }
|
||||||
|
|
||||||
|
/* a literal value */
|
||||||
|
.lit {
|
||||||
|
color: #f5871f; }
|
||||||
|
|
||||||
|
/* punctuation */
|
||||||
|
.pun {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
/* lisp open bracket */
|
||||||
|
.opn {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
/* lisp close bracket */
|
||||||
|
.clo {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
/* a markup tag name */
|
||||||
|
.tag {
|
||||||
|
color: #c82829; }
|
||||||
|
|
||||||
|
/* a markup attribute name */
|
||||||
|
.atn {
|
||||||
|
color: #f5871f; }
|
||||||
|
|
||||||
|
/* a markup attribute value */
|
||||||
|
.atv {
|
||||||
|
color: #3e999f; }
|
||||||
|
|
||||||
|
/* a declaration */
|
||||||
|
.dec {
|
||||||
|
color: #f5871f; }
|
||||||
|
|
||||||
|
/* a variable name */
|
||||||
|
.var {
|
||||||
|
color: #c82829; }
|
||||||
|
|
||||||
|
/* a function name */
|
||||||
|
.fun {
|
||||||
|
color: #4271ae; } }
|
||||||
|
/* Use higher contrast and text-weight for printable form. */
|
||||||
|
@media print, projection {
|
||||||
|
.str {
|
||||||
|
color: #060; }
|
||||||
|
|
||||||
|
.kwd {
|
||||||
|
color: #006;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.com {
|
||||||
|
color: #600;
|
||||||
|
font-style: italic; }
|
||||||
|
|
||||||
|
.typ {
|
||||||
|
color: #404;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.lit {
|
||||||
|
color: #044; }
|
||||||
|
|
||||||
|
.pun, .opn, .clo {
|
||||||
|
color: #440; }
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
color: #006;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.atn {
|
||||||
|
color: #404; }
|
||||||
|
|
||||||
|
.atv {
|
||||||
|
color: #060; } }
|
||||||
|
/* Style */
|
||||||
|
/*
|
||||||
|
pre.prettyprint {
|
||||||
|
background: white;
|
||||||
|
font-family: Menlo, Monaco, Consolas, monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1.5;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 10px; }
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Specify class=linenums on a pre to get line numbering */
|
||||||
|
ol.linenums {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0; }
|
||||||
|
|
||||||
|
/* IE indents via margin-left */
|
||||||
|
li.L0,
|
||||||
|
li.L1,
|
||||||
|
li.L2,
|
||||||
|
li.L3,
|
||||||
|
li.L4,
|
||||||
|
li.L5,
|
||||||
|
li.L6,
|
||||||
|
li.L7,
|
||||||
|
li.L8,
|
||||||
|
li.L9 {
|
||||||
|
/* */ }
|
||||||
|
|
||||||
|
/* Alternate shading for lines */
|
||||||
|
li.L1,
|
||||||
|
li.L3,
|
||||||
|
li.L5,
|
||||||
|
li.L7,
|
||||||
|
li.L9 {
|
||||||
|
/* */ }
|
154
jsdoc-template/tmpl/container.tmpl
Normal file
154
jsdoc-template/tmpl/container.tmpl
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<?js
|
||||||
|
var self = this;
|
||||||
|
docs.forEach(function(doc, i) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?js if (doc.kind === 'mainpage' || (doc.kind === 'package')) { ?>
|
||||||
|
<?js= self.partial('mainpage.tmpl', doc) ?>
|
||||||
|
<?js } else if (doc.kind === 'source') { ?>
|
||||||
|
<?js= self.partial('source.tmpl', doc) ?>
|
||||||
|
<?js } else { ?>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h2><?js if (doc.ancestors && doc.ancestors.length) { ?>
|
||||||
|
<span class="ancestors"><?js= doc.ancestors.join('') ?></span>
|
||||||
|
<?js } ?>
|
||||||
|
<?js= doc.name ?>
|
||||||
|
<?js if (doc.variation) { ?>
|
||||||
|
<sup class="variation"><?js= doc.variation ?></sup>
|
||||||
|
<?js } ?></h2>
|
||||||
|
<?js if (doc.classdesc) { ?>
|
||||||
|
<div class="class-description"><?js= doc.classdesc ?></div>
|
||||||
|
<?js } ?>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<div class="container-overview">
|
||||||
|
<?js if (doc.kind === 'module' && doc.module) { ?>
|
||||||
|
<?js= self.partial('method.tmpl', doc.module) ?>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (doc.kind === 'class') { ?>
|
||||||
|
<?js= self.partial('method.tmpl', doc) ?>
|
||||||
|
<?js } else { ?>
|
||||||
|
<?js if (doc.description) { ?>
|
||||||
|
<div class="description"><?js= doc.description ?></div>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js= self.partial('details.tmpl', doc) ?>
|
||||||
|
|
||||||
|
<?js if (doc.examples && doc.examples.length) { ?>
|
||||||
|
<h3>Example<?js= doc.examples.length > 1? 's':'' ?></h3>
|
||||||
|
<?js= self.partial('examples.tmpl', doc.examples) ?>
|
||||||
|
<?js } ?>
|
||||||
|
<?js } ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?js if (doc.augments && doc.augments.length) { ?>
|
||||||
|
<h3 class="subsection-title">Extends</h3>
|
||||||
|
|
||||||
|
<ul><?js doc.augments.forEach(function(a) { ?>
|
||||||
|
<li><?js= self.linkto(a, a) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (doc.mixes && doc.mixes.length) { ?>
|
||||||
|
<h3 class="subsection-title">Mixes In</h3>
|
||||||
|
|
||||||
|
<ul><?js doc.mixes.forEach(function(a) { ?>
|
||||||
|
<li><?js= self.linkto(a, a) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (doc.requires && doc.requires.length) { ?>
|
||||||
|
<h3 class="subsection-title">Requires</h3>
|
||||||
|
|
||||||
|
<ul><?js doc.requires.forEach(function(r) { ?>
|
||||||
|
<li><?js= self.linkto(r, r) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js
|
||||||
|
var classes = self.find({kind: 'class', memberof: doc.longname});
|
||||||
|
if (doc.kind !== 'globalobj' && classes && classes.length) {
|
||||||
|
?>
|
||||||
|
<h3 class="subsection-title">Classes</h3>
|
||||||
|
|
||||||
|
<dl><?js classes.forEach(function(c) { ?>
|
||||||
|
<dt><?js= self.linkto(c.longname, c.name) ?></dt>
|
||||||
|
<dd><?js if (c.summary) { ?><?js= c.summary ?><?js } ?></dd>
|
||||||
|
<?js }); ?></dl>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js
|
||||||
|
var namespaces = self.find({kind: 'namespace', memberof: doc.longname});
|
||||||
|
if (doc.kind !== 'globalobj' && namespaces && namespaces.length) {
|
||||||
|
?>
|
||||||
|
<h3 class="subsection-title">Namespaces</h3>
|
||||||
|
|
||||||
|
<dl><?js namespaces.forEach(function(n) { ?>
|
||||||
|
<dt><a href="namespaces.html#<?js= n.longname ?>"><?js= self.linkto(n.longname, n.name) ?></a></dt>
|
||||||
|
<dd><?js if (n.summary) { ?><?js= n.summary ?><?js } ?></dd>
|
||||||
|
<?js }); ?></dl>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js
|
||||||
|
var members = self.find({kind: 'member', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
|
||||||
|
if (members && members.length && members.forEach) {
|
||||||
|
?>
|
||||||
|
<h3 class="subsection-title">Members</h3>
|
||||||
|
|
||||||
|
<dl><?js members.forEach(function(p) { ?>
|
||||||
|
<?js= self.partial('members.tmpl', p) ?>
|
||||||
|
<?js }); ?></dl>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js
|
||||||
|
var methods = self.find({kind: 'function', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
|
||||||
|
if (methods && methods.length && methods.forEach) {
|
||||||
|
?>
|
||||||
|
<h3 class="subsection-title">Methods</h3>
|
||||||
|
|
||||||
|
<dl><?js methods.forEach(function(m) { ?>
|
||||||
|
<?js= self.partial('method.tmpl', m) ?>
|
||||||
|
<?js }); ?></dl>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js
|
||||||
|
var typedefs = self.find({kind: 'typedef', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
|
||||||
|
if (typedefs && typedefs.length && typedefs.forEach) {
|
||||||
|
?>
|
||||||
|
<h3 class="subsection-title">Type Definitions</h3>
|
||||||
|
|
||||||
|
<dl><?js typedefs.forEach(function(e) {
|
||||||
|
if (e.signature) {
|
||||||
|
?>
|
||||||
|
<?js= self.partial('method.tmpl', e) ?>
|
||||||
|
<?js
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
?>
|
||||||
|
<?js= self.partial('members.tmpl', e) ?>
|
||||||
|
<?js
|
||||||
|
}
|
||||||
|
}); ?></dl>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js
|
||||||
|
var events = self.find({kind: 'event', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
|
||||||
|
if (events && events.length && events.forEach) {
|
||||||
|
?>
|
||||||
|
<h3 class="subsection-title">Events</h3>
|
||||||
|
|
||||||
|
<dl><?js events.forEach(function(e) { ?>
|
||||||
|
<?js= self.partial('method.tmpl', e) ?>
|
||||||
|
<?js }); ?></dl>
|
||||||
|
<?js } ?>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js }); ?>
|
98
jsdoc-template/tmpl/details.tmpl
Normal file
98
jsdoc-template/tmpl/details.tmpl
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
var self = this;
|
||||||
|
?>
|
||||||
|
<dl class="details">
|
||||||
|
<?js
|
||||||
|
var properties = data.properties;
|
||||||
|
if (properties && properties.length && properties.forEach) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<h5 class="subsection-title">Properties:</h5>
|
||||||
|
|
||||||
|
<dl><?js= this.partial('properties.tmpl', properties) ?></dl>
|
||||||
|
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.version) {?>
|
||||||
|
<dt class="tag-version">Version:</dt>
|
||||||
|
<dd class="tag-version"><ul class="dummy"><li><?js= version ?></li></ul></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.since) {?>
|
||||||
|
<dt class="tag-since">Since:</dt>
|
||||||
|
<dd class="tag-since"><ul class="dummy"><li><?js= since ?></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.inherited && data.inherits) { ?>
|
||||||
|
<dt class="inherited-from">Inherited From:</dt>
|
||||||
|
<dd class="inherited-from"><ul class="dummy"><li>
|
||||||
|
<?js= this.linkto(data.inherits, this.htmlsafe(data.inherits)) ?>
|
||||||
|
</li></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.deprecated) { ?>
|
||||||
|
<dt class="important tag-deprecated">Deprecated:</dt><?js
|
||||||
|
if (data.deprecated === true) { ?><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd><?js }
|
||||||
|
else { ?><dd><ul class="dummy"><li><?js= data.deprecated ?></li><ul></dd><?js }
|
||||||
|
?>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.author && author.length) {?>
|
||||||
|
<dt class="tag-author">Author:</dt>
|
||||||
|
<dd class="tag-author">
|
||||||
|
<ul><?js author.forEach(function(a) { ?>
|
||||||
|
<li><?js= self.resolveAuthorLinks(a) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
</dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.copyright) {?>
|
||||||
|
<dt class="tag-copyright">Copyright:</dt>
|
||||||
|
<dd class="tag-copyright"><ul class="dummy"><li><?js= copyright ?></li></ul></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.license) {?>
|
||||||
|
<dt class="tag-license">License:</dt>
|
||||||
|
<dd class="tag-license"><ul class="dummy"><li><?js= license ?></li></ul></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.defaultvalue) {?>
|
||||||
|
<dt class="tag-default">Default Value:</dt>
|
||||||
|
<dd class="tag-default"><ul class="dummy"><li><?js= data.defaultvalue ?></li></ul></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (false && data.meta) {?>
|
||||||
|
<dt class="tag-source">Source:</dt>
|
||||||
|
<dd class="tag-source"><ul class="dummy"><li>
|
||||||
|
<?js= self.linkto(meta.filename) ?>, <?js= self.linkto(meta.filename, 'line ' + meta.lineno, null, 'line' + meta.lineno) ?>
|
||||||
|
</li></ul></dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.tutorials && tutorials.length) {?>
|
||||||
|
<dt class="tag-tutorial">Tutorials:</dt>
|
||||||
|
<dd class="tag-tutorial">
|
||||||
|
<ul><?js tutorials.forEach(function(t) { ?>
|
||||||
|
<li><?js= self.tutoriallink(t) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
</dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.see && see.length) {?>
|
||||||
|
<dt class="tag-see">See:</dt>
|
||||||
|
<dd class="tag-see">
|
||||||
|
<ul><?js see.forEach(function(s) { ?>
|
||||||
|
<li><?js= self.linkto(s) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
</dd>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.todo && todo.length) {?>
|
||||||
|
<dt class="tag-todo">To Do:</dt>
|
||||||
|
<dd class="tag-todo">
|
||||||
|
<ul><?js todo.forEach(function(t) { ?>
|
||||||
|
<li><?js= t ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
</dd>
|
||||||
|
<?js } ?>
|
||||||
|
</dl>
|
2
jsdoc-template/tmpl/example.tmpl
Normal file
2
jsdoc-template/tmpl/example.tmpl
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?js var data = obj; ?>
|
||||||
|
<pre><code><?js= data ?></code></pre>
|
11
jsdoc-template/tmpl/examples.tmpl
Normal file
11
jsdoc-template/tmpl/examples.tmpl
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
data.forEach(function(example) {
|
||||||
|
if (example.caption) {
|
||||||
|
?>
|
||||||
|
<p class="code-caption"><?js= example.caption ?></p>
|
||||||
|
<?js } ?>
|
||||||
|
<pre class="prettyprint"><code><?js= example.code ?></code></pre>
|
||||||
|
<?js
|
||||||
|
});
|
||||||
|
?>
|
30
jsdoc-template/tmpl/exceptions.tmpl
Normal file
30
jsdoc-template/tmpl/exceptions.tmpl
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
?>
|
||||||
|
<?js if (data.description && data.type && data.type.names) { ?>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<div class="param-desc">
|
||||||
|
<?js= data.description ?>
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dt>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
Type
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<?js= this.partial('type.tmpl', data.type.names) ?>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dt>
|
||||||
|
</dl>
|
||||||
|
<?js } else { ?>
|
||||||
|
<div class="param-desc">
|
||||||
|
<?js if (data.description) { ?>
|
||||||
|
<?js= data.description ?>
|
||||||
|
<?js } else if (data.type && data.type.names) { ?>
|
||||||
|
<?js= this.partial('type.tmpl', data.type.names) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</div>
|
||||||
|
<?js } ?>
|
47
jsdoc-template/tmpl/layout.tmpl
Normal file
47
jsdoc-template/tmpl/layout.tmpl
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: <?js= title ?></title>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link rel="stylesheet" href="http://www.kineticjs.com/css/normalize.css">
|
||||||
|
<link rel="stylesheet" href="http://www.kineticjs.com/css/main.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="../css/doc-style.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="top">
|
||||||
|
<a id="logo" href="http://www.kineticjs.com"></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<nav>
|
||||||
|
<?js= this.nav ?>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
<div id="main-wrapper">
|
||||||
|
|
||||||
|
<h1 class="page-title"><?js= title ?></h1>
|
||||||
|
|
||||||
|
<?js= content ?>
|
||||||
|
<?div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc <?js= env.version.number ?></a> on <?js= (new Date()) ?>
|
||||||
|
</footer>
|
||||||
|
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
|
||||||
|
<script>
|
||||||
|
var _gaq=[['_setAccount','UA-10955171-8'],['_trackPageview']];
|
||||||
|
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
|
||||||
|
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
|
||||||
|
s.parentNode.insertBefore(g,s)}(document,'script'));
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
14
jsdoc-template/tmpl/mainpage.tmpl
Normal file
14
jsdoc-template/tmpl/mainpage.tmpl
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
var self = this;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?js if (data.kind === 'package') { ?>
|
||||||
|
<h3><?js= data.name ?> <?js= data.version ?></h3>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.readme) { ?>
|
||||||
|
<section>
|
||||||
|
<article><?js= data.readme ?></article>
|
||||||
|
</section>
|
||||||
|
<?js } ?>
|
34
jsdoc-template/tmpl/members.tmpl
Normal file
34
jsdoc-template/tmpl/members.tmpl
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
var self = this;
|
||||||
|
?>
|
||||||
|
<dt>
|
||||||
|
<h4 class="name" id="<?js= id ?>"><?js= data.attribs + name + (data.signature ? data.signature : '') ?></h4>
|
||||||
|
|
||||||
|
<?js if (data.summary) { ?>
|
||||||
|
<p class="summary"><?js= summary ?></p>
|
||||||
|
<?js } ?>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<?js if (data.description) { ?>
|
||||||
|
<div class="description">
|
||||||
|
<?js= data.description ?>
|
||||||
|
</div>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.type && data.type.names) {?>
|
||||||
|
<h5>Type:</h5>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<?js= self.partial('type.tmpl', data.type.names) ?>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js= this.partial('details.tmpl', data) ?>
|
||||||
|
|
||||||
|
<?js if (data.examples && examples.length) { ?>
|
||||||
|
<h5>Example<?js= examples.length > 1? 's':'' ?></h5>
|
||||||
|
<?js= this.partial('examples.tmpl', examples) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</dd>
|
90
jsdoc-template/tmpl/method.tmpl
Normal file
90
jsdoc-template/tmpl/method.tmpl
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
var self = this;
|
||||||
|
?>
|
||||||
|
<dt>
|
||||||
|
<h4 class="name" id="<?js= id ?>"><?js= data.attribs + (kind === 'class' ? 'new ' : '') + name + (kind !== 'event' ? data.signature : '') ?></h4>
|
||||||
|
|
||||||
|
<?js if (data.summary) { ?>
|
||||||
|
<p class="summary"><?js= summary ?></p>
|
||||||
|
<?js } ?>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<?js if (data.description) { ?>
|
||||||
|
<div class="description">
|
||||||
|
<?js= data.description ?>
|
||||||
|
</div>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (kind === 'event' && data.type && data.type.names) {?>
|
||||||
|
<h5>Type:</h5>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<?js= self.partial('type.tmpl', data.type.names) ?>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data['this']) { ?>
|
||||||
|
<h5>This:</h5>
|
||||||
|
<ul><li><?js= this.linkto(data['this'], data['this']) ?></li></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.params && params.length) { ?>
|
||||||
|
<h5>Parameters:</h5>
|
||||||
|
<?js= this.partial('params.tmpl', params) ?>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js= this.partial('details.tmpl', data) ?>
|
||||||
|
|
||||||
|
<?js if (data.fires && fires.length) { ?>
|
||||||
|
<h5>Fires:</h5>
|
||||||
|
<ul><?js fires.forEach(function(f) { ?>
|
||||||
|
<li><?js= self.linkto(f) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.listens && listens.length) { ?>
|
||||||
|
<h5>Listens to Events:</h5>
|
||||||
|
<ul><?js listens.forEach(function(f) { ?>
|
||||||
|
<li><?js= self.linkto(f) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.listeners && listeners.length) { ?>
|
||||||
|
<h5>Listeners of This Event:</h5>
|
||||||
|
<ul><?js listeners.forEach(function(f) { ?>
|
||||||
|
<li><?js= self.linkto(f) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.exceptions && exceptions.length) { ?>
|
||||||
|
<h5>Throws:</h5>
|
||||||
|
<?js if (exceptions.length > 1) { ?><ul><?js
|
||||||
|
exceptions.forEach(function(r) { ?>
|
||||||
|
<li><?js= self.partial('exceptions.tmpl', r) ?></li>
|
||||||
|
<?js });
|
||||||
|
?></ul><?js } else {
|
||||||
|
exceptions.forEach(function(r) { ?>
|
||||||
|
<?js= self.partial('exceptions.tmpl', r) ?>
|
||||||
|
<?js });
|
||||||
|
} } ?>
|
||||||
|
|
||||||
|
<?js if (data.returns && returns.length) { ?>
|
||||||
|
<h5>Returns:</h5>
|
||||||
|
<?js if (returns.length > 1) { ?><ul><?js
|
||||||
|
returns.forEach(function(r) { ?>
|
||||||
|
<li><?js= self.partial('returns.tmpl', r) ?></li>
|
||||||
|
<?js });
|
||||||
|
?></ul><?js } else {
|
||||||
|
returns.forEach(function(r) { ?>
|
||||||
|
<?js= self.partial('returns.tmpl', r) ?>
|
||||||
|
<?js });
|
||||||
|
} } ?>
|
||||||
|
|
||||||
|
<?js if (data.examples && examples.length) { ?>
|
||||||
|
<h5>Example<?js= examples.length > 1? 's':'' ?></h5>
|
||||||
|
<?js= this.partial('examples.tmpl', examples) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</dd>
|
112
jsdoc-template/tmpl/params.tmpl
Normal file
112
jsdoc-template/tmpl/params.tmpl
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<?js
|
||||||
|
var params = obj;
|
||||||
|
|
||||||
|
/* sort subparams under their parent params (like opts.classname) */
|
||||||
|
var parentParam = null;
|
||||||
|
params.forEach(function(param, i) {
|
||||||
|
if (!param) { return; }
|
||||||
|
if ( parentParam && param.name && param.name.indexOf(parentParam.name + '.') === 0 ) {
|
||||||
|
param.name = param.name.substr(parentParam.name.length+1);
|
||||||
|
parentParam.subparams = parentParam.subparams || [];
|
||||||
|
parentParam.subparams.push(param);
|
||||||
|
params[i] = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
parentParam = param;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* determine if we need extra columns, "attributes" and "default" */
|
||||||
|
params.hasAttributes = false;
|
||||||
|
params.hasDefault = false;
|
||||||
|
params.hasName = false;
|
||||||
|
|
||||||
|
params.forEach(function(param) {
|
||||||
|
if (!param) { return; }
|
||||||
|
|
||||||
|
if (param.optional || param.nullable || param.variable) {
|
||||||
|
params.hasAttributes = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param.name) {
|
||||||
|
params.hasName = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof param.defaultvalue !== 'undefined') {
|
||||||
|
params.hasDefault = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table class="params">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<?js if (params.hasName) {?>
|
||||||
|
<th>Name</th>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<th>Type</th>
|
||||||
|
|
||||||
|
<?js if (params.hasAttributes) {?>
|
||||||
|
<th>Argument</th>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (params.hasDefault) {?>
|
||||||
|
<th>Default</th>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<th class="last">Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<?js
|
||||||
|
var self = this;
|
||||||
|
params.forEach(function(param) {
|
||||||
|
if (!param) { return; }
|
||||||
|
?>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<?js if (params.hasName) {?>
|
||||||
|
<td class="name"><code><?js= param.name ?></code></td>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<td class="type">
|
||||||
|
<?js if (param.type && param.type.names) {?>
|
||||||
|
<?js= self.partial('type.tmpl', param.type.names) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<?js if (params.hasAttributes) {?>
|
||||||
|
<td class="attributes">
|
||||||
|
<?js if (param.optional) { ?>
|
||||||
|
<optional><br>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (param.nullable) { ?>
|
||||||
|
<nullable><br>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (param.variable) { ?>
|
||||||
|
<repeatable><br>
|
||||||
|
<?js } ?>
|
||||||
|
</td>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (params.hasDefault) {?>
|
||||||
|
<td class="default">
|
||||||
|
<?js if (typeof param.defaultvalue !== 'undefined') { ?>
|
||||||
|
<?js= self.htmlsafe(param.defaultvalue) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</td>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<td class="description last"><?js= param.description ?><?js if (param.subparams) { ?>
|
||||||
|
<h6>Properties</h6>
|
||||||
|
<?js= self.partial('params.tmpl', param.subparams) ?>
|
||||||
|
<?js } ?></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?js }); ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
107
jsdoc-template/tmpl/properties.tmpl
Normal file
107
jsdoc-template/tmpl/properties.tmpl
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?js
|
||||||
|
var props = obj;
|
||||||
|
|
||||||
|
/* sort subprops under their parent props (like opts.classname) */
|
||||||
|
var parentProp = null;
|
||||||
|
props.forEach(function(prop, i) {
|
||||||
|
if (!prop) { return; }
|
||||||
|
if ( parentProp && prop.name && prop.name.indexOf(parentProp.name + '.') === 0 ) {
|
||||||
|
prop.name = prop.name.substr(parentProp.name.length+1);
|
||||||
|
parentProp.subprops = parentProp.subprops || [];
|
||||||
|
parentProp.subprops.push(prop);
|
||||||
|
props[i] = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
parentProp = prop;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* determine if we need extra columns, "attributes" and "default" */
|
||||||
|
props.hasAttributes = false;
|
||||||
|
props.hasDefault = false;
|
||||||
|
props.hasName = false;
|
||||||
|
|
||||||
|
props.forEach(function(prop) {
|
||||||
|
if (!prop) { return; }
|
||||||
|
|
||||||
|
if (prop.optional || prop.nullable) {
|
||||||
|
props.hasAttributes = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prop.name) {
|
||||||
|
props.hasName = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof prop.defaultvalue !== 'undefined') {
|
||||||
|
props.hasDefault = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table class="props">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<?js if (props.hasName) {?>
|
||||||
|
<th>Name</th>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<th>Type</th>
|
||||||
|
|
||||||
|
<?js if (props.hasAttributes) {?>
|
||||||
|
<th>Argument</th>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (props.hasDefault) {?>
|
||||||
|
<th>Default</th>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<th class="last">Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<?js
|
||||||
|
var self = this;
|
||||||
|
props.forEach(function(prop) {
|
||||||
|
if (!prop) { return; }
|
||||||
|
?>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<?js if (props.hasName) {?>
|
||||||
|
<td class="name"><code><?js= prop.name ?></code></td>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<td class="type">
|
||||||
|
<?js if (prop.type && prop.type.names) {?>
|
||||||
|
<?js= self.partial('type.tmpl', prop.type.names) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<?js if (props.hasAttributes) {?>
|
||||||
|
<td class="attributes">
|
||||||
|
<?js if (prop.optional) { ?>
|
||||||
|
<optional><br>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (prop.nullable) { ?>
|
||||||
|
<nullable><br>
|
||||||
|
<?js } ?>
|
||||||
|
</td>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (props.hasDefault) {?>
|
||||||
|
<td class="default">
|
||||||
|
<?js if (typeof prop.defaultvalue !== 'undefined') { ?>
|
||||||
|
<?js= self.htmlsafe(prop.defaultvalue) ?>
|
||||||
|
<?js } ?>
|
||||||
|
</td>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<td class="description last"><?js= prop.description ?><?js if (prop.subprops) { ?>
|
||||||
|
<h6>Properties</h6><?js= self.partial('properties.tmpl', prop.subprops) ?>
|
||||||
|
<?js } ?></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?js }); ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
19
jsdoc-template/tmpl/returns.tmpl
Normal file
19
jsdoc-template/tmpl/returns.tmpl
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
if (data.description) {
|
||||||
|
?>
|
||||||
|
<div class="param-desc">
|
||||||
|
<?js= description ?>
|
||||||
|
</div>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<?js if (data.type && data.type.names) {?>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
Type
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<?js= this.partial('type.tmpl', data.type.names) ?>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<?js } ?>
|
8
jsdoc-template/tmpl/source.tmpl
Normal file
8
jsdoc-template/tmpl/source.tmpl
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
?>
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source"><code><?js= data.code ?></code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
19
jsdoc-template/tmpl/tutorial.tmpl
Normal file
19
jsdoc-template/tmpl/tutorial.tmpl
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<section>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<?js if (children.length > 0) { ?>
|
||||||
|
<ul><?js
|
||||||
|
var self = this;
|
||||||
|
children.forEach(function(t) { ?>
|
||||||
|
<li><?js= self.tutoriallink(t.name) ?></li>
|
||||||
|
<?js }); ?></ul>
|
||||||
|
<?js } ?>
|
||||||
|
|
||||||
|
<h2><?js= header ?></h2>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<?js= content ?>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
</section>
|
7
jsdoc-template/tmpl/type.tmpl
Normal file
7
jsdoc-template/tmpl/type.tmpl
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?js
|
||||||
|
var data = obj;
|
||||||
|
var self = this;
|
||||||
|
data.forEach(function(name, i) { ?>
|
||||||
|
<span class="param-type"><?js= self.linkto(name, self.htmlsafe(name)) ?></span>
|
||||||
|
<?js if (i < data.length-1) { ?>|<?js } ?>
|
||||||
|
<?js }); ?>
|
63
kinetic.js
63
kinetic.js
@ -659,23 +659,49 @@ var Kinetic = {};
|
|||||||
/**
|
/**
|
||||||
* Transform constructor
|
* Transform constructor
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @param {Array} Optional six-element matrix
|
||||||
* @memberof Kinetic
|
* @memberof Kinetic
|
||||||
*/
|
*/
|
||||||
Kinetic.Transform = function() {
|
Kinetic.Transform = function(m) {
|
||||||
this.m = [1, 0, 0, 1, 0, 0];
|
this.m = (m && m.slice()) || [1, 0, 0, 1, 0, 0];
|
||||||
};
|
};
|
||||||
|
|
||||||
Kinetic.Transform.prototype = {
|
Kinetic.Transform.prototype = {
|
||||||
|
/**
|
||||||
|
* Copy Kinetic.Transform object
|
||||||
|
* @method
|
||||||
|
* @memberof Kinetic.Transform.prototype
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
|
*/
|
||||||
|
copy: function() {
|
||||||
|
return new Kinetic.Transform(this.m);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Transform point
|
||||||
|
* @method
|
||||||
|
* @memberof Kinetic.Transform.prototype
|
||||||
|
* @param {Object} 2D point(x, y)
|
||||||
|
* @returns {Object} 2D point(x, y)
|
||||||
|
*/
|
||||||
|
point: function(p) {
|
||||||
|
var m = this.m;
|
||||||
|
return {
|
||||||
|
x: m[0] * p.x + m[2] * p.y + m[4],
|
||||||
|
y: m[1] * p.x + m[3] * p.y + m[5]
|
||||||
|
};
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* Apply translation
|
* Apply translation
|
||||||
* @method
|
* @method
|
||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
* @param {Number} x
|
* @param {Number} x
|
||||||
* @param {Number} y
|
* @param {Number} y
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
*/
|
*/
|
||||||
translate: function(x, y) {
|
translate: function(x, y) {
|
||||||
this.m[4] += this.m[0] * x + this.m[2] * y;
|
this.m[4] += this.m[0] * x + this.m[2] * y;
|
||||||
this.m[5] += this.m[1] * x + this.m[3] * y;
|
this.m[5] += this.m[1] * x + this.m[3] * y;
|
||||||
|
return this;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Apply scale
|
* Apply scale
|
||||||
@ -683,18 +709,21 @@ var Kinetic = {};
|
|||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
* @param {Number} sx
|
* @param {Number} sx
|
||||||
* @param {Number} sy
|
* @param {Number} sy
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
*/
|
*/
|
||||||
scale: function(sx, sy) {
|
scale: function(sx, sy) {
|
||||||
this.m[0] *= sx;
|
this.m[0] *= sx;
|
||||||
this.m[1] *= sx;
|
this.m[1] *= sx;
|
||||||
this.m[2] *= sy;
|
this.m[2] *= sy;
|
||||||
this.m[3] *= sy;
|
this.m[3] *= sy;
|
||||||
|
return this;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Apply rotation
|
* Apply rotation
|
||||||
* @method
|
* @method
|
||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
* @param {Number} rad Angle in radians
|
* @param {Number} rad Angle in radians
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
*/
|
*/
|
||||||
rotate: function(rad) {
|
rotate: function(rad) {
|
||||||
var c = Math.cos(rad);
|
var c = Math.cos(rad);
|
||||||
@ -707,6 +736,7 @@ var Kinetic = {};
|
|||||||
this.m[1] = m12;
|
this.m[1] = m12;
|
||||||
this.m[2] = m21;
|
this.m[2] = m21;
|
||||||
this.m[3] = m22;
|
this.m[3] = m22;
|
||||||
|
return this;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Returns the translation
|
* Returns the translation
|
||||||
@ -726,6 +756,7 @@ var Kinetic = {};
|
|||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
* @param {Number} sx
|
* @param {Number} sx
|
||||||
* @param {Number} sy
|
* @param {Number} sy
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
*/
|
*/
|
||||||
skew: function(sx, sy) {
|
skew: function(sx, sy) {
|
||||||
var m11 = this.m[0] + this.m[2] * sy;
|
var m11 = this.m[0] + this.m[2] * sy;
|
||||||
@ -736,12 +767,14 @@ var Kinetic = {};
|
|||||||
this.m[1] = m12;
|
this.m[1] = m12;
|
||||||
this.m[2] = m21;
|
this.m[2] = m21;
|
||||||
this.m[3] = m22;
|
this.m[3] = m22;
|
||||||
},
|
return this;
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* Transform multiplication
|
* Transform multiplication
|
||||||
* @method
|
* @method
|
||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
* @param {Kinetic.Transform} matrix
|
* @param {Kinetic.Transform} matrix
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
*/
|
*/
|
||||||
multiply: function(matrix) {
|
multiply: function(matrix) {
|
||||||
var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
|
var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
|
||||||
@ -759,11 +792,13 @@ var Kinetic = {};
|
|||||||
this.m[3] = m22;
|
this.m[3] = m22;
|
||||||
this.m[4] = dx;
|
this.m[4] = dx;
|
||||||
this.m[5] = dy;
|
this.m[5] = dy;
|
||||||
|
return this;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Invert the matrix
|
* Invert the matrix
|
||||||
* @method
|
* @method
|
||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
*/
|
*/
|
||||||
invert: function() {
|
invert: function() {
|
||||||
var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
|
var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
|
||||||
@ -779,6 +814,7 @@ var Kinetic = {};
|
|||||||
this.m[3] = m3;
|
this.m[3] = m3;
|
||||||
this.m[4] = m4;
|
this.m[4] = m4;
|
||||||
this.m[5] = m5;
|
this.m[5] = m5;
|
||||||
|
return this;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* return matrix
|
* return matrix
|
||||||
@ -792,6 +828,7 @@ var Kinetic = {};
|
|||||||
* set to absolute position via translation
|
* set to absolute position via translation
|
||||||
* @method
|
* @method
|
||||||
* @memberof Kinetic.Transform.prototype
|
* @memberof Kinetic.Transform.prototype
|
||||||
|
* @returns {Kinetic.Transform}
|
||||||
* @author ericdrowell
|
* @author ericdrowell
|
||||||
*/
|
*/
|
||||||
setAbsolutePosition: function(x, y) {
|
setAbsolutePosition: function(x, y) {
|
||||||
@ -804,7 +841,7 @@ var Kinetic = {};
|
|||||||
yt = ((m0 * (y - m5)) - (m1 * (x - m4))) / ((m0 * m3) - (m1 * m2)),
|
yt = ((m0 * (y - m5)) - (m1 * (x - m4))) / ((m0 * m3) - (m1 * m2)),
|
||||||
xt = (x - m4 - (m2 * yt)) / m0;
|
xt = (x - m4 - (m2 * yt)) / m0;
|
||||||
|
|
||||||
this.translate(xt, yt);
|
return this.translate(xt, yt);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9111,7 +9148,7 @@ var Kinetic = {};
|
|||||||
return Kinetic.Container.prototype.clone.call(this, obj);
|
return Kinetic.Container.prototype.clone.call(this, obj);
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* remove stage
|
* destroy stage
|
||||||
* @method
|
* @method
|
||||||
* @memberof Kinetic.Stage.prototype
|
* @memberof Kinetic.Stage.prototype
|
||||||
*/
|
*/
|
||||||
@ -9554,7 +9591,7 @@ var Kinetic = {};
|
|||||||
// touch events
|
// touch events
|
||||||
if(evt.touches !== undefined) {
|
if(evt.touches !== undefined) {
|
||||||
// currently, only handle one finger
|
// currently, only handle one finger
|
||||||
if (evt.touches.length === 1) {
|
if (evt.touches.length > 0) {
|
||||||
|
|
||||||
touch = evt.touches[0];
|
touch = evt.touches[0];
|
||||||
|
|
||||||
@ -9647,20 +9684,6 @@ var Kinetic = {};
|
|||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
clearCache : function() {
|
clearCache : function() {
|
||||||
},
|
|
||||||
removeChildren : function() {
|
|
||||||
Kinetic.Container.prototype.removeChildren.call(this);
|
|
||||||
// clear all canvases
|
|
||||||
while (this.content.firstChild) {
|
|
||||||
this.content.removeChild(this.content.firstChild);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
destroyChildren : function() {
|
|
||||||
Kinetic.Container.prototype.destroyChildren.call(this);
|
|
||||||
// clear all canvases
|
|
||||||
while (this.content.firstChild) {
|
|
||||||
this.content.removeChild(this.content.firstChild);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Kinetic.Util.extend(Kinetic.Stage, Kinetic.Container);
|
Kinetic.Util.extend(Kinetic.Stage, Kinetic.Container);
|
||||||
|
8
kinetic.min.js
vendored
8
kinetic.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user