filehound 2.0.0-beta → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +37 -11
  2. package/dist/arrays.d.ts +1 -0
  3. package/dist/arrays.js +4 -0
  4. package/dist/file.d.ts +108 -0
  5. package/dist/file.js +184 -0
  6. package/dist/filehound.d.ts +322 -0
  7. package/dist/filehound.js +443 -0
  8. package/dist/files.d.ts +4 -0
  9. package/dist/files.js +37 -0
  10. package/dist/filetype.d.ts +10 -0
  11. package/dist/filetype.js +9 -0
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.js +3 -0
  14. package/dist/matchers.d.ts +297 -0
  15. package/dist/matchers.js +389 -0
  16. package/dist/walker/async.d.ts +4 -0
  17. package/dist/walker/async.js +237 -0
  18. package/dist/walker/heap.d.ts +7 -0
  19. package/dist/walker/heap.js +49 -0
  20. package/dist/walker/sync.d.ts +4 -0
  21. package/dist/walker/sync.js +66 -0
  22. package/dist/walker/walk.d.ts +32 -0
  23. package/dist/walker/walk.js +70 -0
  24. package/package.json +44 -49
  25. package/.github/stale.yml +0 -42
  26. package/.travis.yml +0 -8
  27. package/CONTRIBUTING.md +0 -8
  28. package/_config.yml +0 -1
  29. package/dist/src/arrays.js +0 -15
  30. package/dist/src/arrays.js.map +0 -1
  31. package/dist/src/asyncWalker.js +0 -63
  32. package/dist/src/asyncWalker.js.map +0 -1
  33. package/dist/src/bind.js +0 -15
  34. package/dist/src/bind.js.map +0 -1
  35. package/dist/src/filehound.js +0 -597
  36. package/dist/src/filehound.js.map +0 -1
  37. package/dist/src/files.js +0 -60
  38. package/dist/src/files.js.map +0 -1
  39. package/dist/src/functions.js +0 -22
  40. package/dist/src/functions.js.map +0 -1
  41. package/dist/src/matcher.js +0 -51
  42. package/dist/src/matcher.js.map +0 -1
  43. package/dist/src/syncWalker.js +0 -51
  44. package/dist/src/syncWalker.js.map +0 -1
  45. package/dist/src/walker/walk.js +0 -68
  46. package/dist/src/walker/walk.js.map +0 -1
  47. package/dist/src/walker/walkAsync.js +0 -33
  48. package/dist/src/walker/walkAsync.js.map +0 -1
  49. package/dist/src/walker/walkSync.js +0 -21
  50. package/dist/src/walker/walkSync.js.map +0 -1
  51. package/dist/src/walker.js +0 -31
  52. package/dist/src/walker.js.map +0 -1
  53. package/dist/test/filehound.js +0 -872
  54. package/dist/test/filehound.js.map +0 -1
  55. package/dist/test/files.js +0 -29
  56. package/dist/test/files.js.map +0 -1
  57. package/docconfig/jsdoc.json +0 -26
  58. package/docconfig/template/LICENSE +0 -61
  59. package/docconfig/template/README.md +0 -86
  60. package/docconfig/template/package.json +0 -22
  61. package/docconfig/template/publish.js +0 -676
  62. package/docconfig/template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
  63. package/docconfig/template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
  64. package/docconfig/template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
  65. package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  66. package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  67. package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  68. package/docconfig/template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
  69. package/docconfig/template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
  70. package/docconfig/template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
  71. package/docconfig/template/static/fonts/OpenSans-Light-webfont.eot +0 -0
  72. package/docconfig/template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
  73. package/docconfig/template/static/fonts/OpenSans-Light-webfont.woff +0 -0
  74. package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  75. package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  76. package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  77. package/docconfig/template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
  78. package/docconfig/template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
  79. package/docconfig/template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
  80. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.eot +0 -0
  81. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  82. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  83. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.woff +0 -0
  84. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  85. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  86. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  87. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  88. package/docconfig/template/static/scripts/linenumber.js +0 -25
  89. package/docconfig/template/static/scripts/prettify/Apache-License-2.0.txt +0 -202
  90. package/docconfig/template/static/scripts/prettify/lang-css.js +0 -2
  91. package/docconfig/template/static/scripts/prettify/prettify.js +0 -28
  92. package/docconfig/template/static/styles/jsdoc-default.css +0 -605
  93. package/docconfig/template/static/styles/prettify-jsdoc.css +0 -111
  94. package/docconfig/template/static/styles/prettify-tomorrow.css +0 -132
  95. package/docconfig/template/tmpl/augments.tmpl +0 -10
  96. package/docconfig/template/tmpl/container.tmpl +0 -183
  97. package/docconfig/template/tmpl/details.tmpl +0 -143
  98. package/docconfig/template/tmpl/example.tmpl +0 -2
  99. package/docconfig/template/tmpl/examples.tmpl +0 -13
  100. package/docconfig/template/tmpl/exceptions.tmpl +0 -32
  101. package/docconfig/template/tmpl/layout.tmpl +0 -47
  102. package/docconfig/template/tmpl/mainpage.tmpl +0 -10
  103. package/docconfig/template/tmpl/members.tmpl +0 -38
  104. package/docconfig/template/tmpl/method.tmpl +0 -105
  105. package/docconfig/template/tmpl/params.tmpl +0 -124
  106. package/docconfig/template/tmpl/properties.tmpl +0 -108
  107. package/docconfig/template/tmpl/returns.tmpl +0 -19
  108. package/docconfig/template/tmpl/source.tmpl +0 -8
  109. package/docconfig/template/tmpl/tutorial.tmpl +0 -19
  110. package/docconfig/template/tmpl/type.tmpl +0 -7
  111. package/docs/FileHound.html +0 -3079
  112. package/docs/FileHound_modified.html +0 -245
  113. package/docs/_config.yml +0 -1
  114. package/docs/filehound.js.html +0 -697
  115. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  116. package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
  117. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  118. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  119. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  120. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  121. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  122. package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
  123. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  124. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  125. package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
  126. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  127. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  128. package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  129. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  130. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  131. package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
  132. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  133. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  134. package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  135. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  136. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  137. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  138. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  139. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  140. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  141. package/docs/global.html +0 -288
  142. package/docs/index.html +0 -154
  143. package/docs/scripts/linenumber.js +0 -25
  144. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  145. package/docs/scripts/prettify/lang-css.js +0 -2
  146. package/docs/scripts/prettify/prettify.js +0 -28
  147. package/docs/styles/jsdoc-default.css +0 -605
  148. package/docs/styles/prettify-jsdoc.css +0 -111
  149. package/docs/styles/prettify-tomorrow.css +0 -132
  150. package/docs.md +0 -164
  151. package/index.js +0 -1
  152. package/issue_template.md +0 -6
  153. package/test/filehound.ts +0 -1076
  154. package/test/files.ts +0 -29
  155. package/test/fixtures/custom/failed.txt +0 -0
  156. package/test/fixtures/custom/passed.txt +0 -0
  157. package/test/fixtures/deeplyNested/c.json +0 -0
  158. package/test/fixtures/deeplyNested/d.json +0 -0
  159. package/test/fixtures/deeplyNested/mydir/e.json +0 -0
  160. package/test/fixtures/deeplyNested/mydir/mydir2/f.json +0 -0
  161. package/test/fixtures/deeplyNested/mydir/mydir2/mydir3/mydir4/failed.json +0 -0
  162. package/test/fixtures/deeplyNested/mydir/mydir2/mydir3/z.json +0 -0
  163. package/test/fixtures/deeplyNested/mydir/mydir2/y.json +0 -0
  164. package/test/fixtures/deeplyNestedWithHiddenDir/c.json +0 -0
  165. package/test/fixtures/deeplyNestedWithHiddenDir/d.json +0 -0
  166. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/e.json +0 -0
  167. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/f.json +0 -0
  168. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4/.mydir5/.keep +0 -0
  169. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4/failed.json +0 -0
  170. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/z.json +0 -0
  171. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/y.json +0 -0
  172. package/test/fixtures/ext/Dummy.java +0 -0
  173. package/test/fixtures/ext/Dumpy.go +0 -0
  174. package/test/fixtures/ext/dummy.json +0 -0
  175. package/test/fixtures/ext/dummy.txt +0 -0
  176. package/test/fixtures/justFiles/a.json +0 -0
  177. package/test/fixtures/justFiles/b.json +0 -0
  178. package/test/fixtures/justFiles/dummy.txt +0 -0
  179. package/test/fixtures/mixed/a.json +0 -0
  180. package/test/fixtures/mixed/aabbcc.json +0 -0
  181. package/test/fixtures/mixed/ab.json +0 -0
  182. package/test/fixtures/mixed/z.json +0 -0
  183. package/test/fixtures/nested/.hidden1/bad.txt +0 -0
  184. package/test/fixtures/nested/c.json +0 -0
  185. package/test/fixtures/nested/d.json +0 -0
  186. package/test/fixtures/nested/mydir/e.json +0 -0
  187. package/test/fixtures/sizes/10b.txt +0 -0
  188. package/test/fixtures/sizes/1b.txt +0 -0
  189. package/test/fixtures/sizes/1k.txt +0 -0
  190. package/test/fixtures/sizes/2k.txt +0 -0
  191. package/test/fixtures/visibility/.hidden/.hidden.json +0 -0
  192. package/test/fixtures/visibility/.hidden/visible.json +0 -3
  193. package/test/fixtures/visibility/.hidden.json +0 -3
  194. package/test/fixtures/visibility/visible/.hidden.json +0 -3
  195. package/test/fixtures/visibility/visible.json +0 -3
  196. package/test/mocha.opts +0 -4
  197. package/tsconfig.json +0 -16
  198. package/tslint.json +0 -44
@@ -1,676 +0,0 @@
1
- /*global env: true */
2
- 'use strict';
3
-
4
- var doop = require('jsdoc/util/doop');
5
- var fs = require('jsdoc/fs');
6
- var helper = require('jsdoc/util/templateHelper');
7
- var logger = require('jsdoc/util/logger');
8
- var path = require('jsdoc/path');
9
- var taffy = require('taffydb').taffy;
10
- var template = require('jsdoc/template');
11
- var util = require('util');
12
-
13
- var htmlsafe = helper.htmlsafe;
14
- var linkto = helper.linkto;
15
- var resolveAuthorLinks = helper.resolveAuthorLinks;
16
- var scopeToPunc = helper.scopeToPunc;
17
- var hasOwnProp = Object.prototype.hasOwnProperty;
18
-
19
- var data;
20
- var view;
21
-
22
- var outdir = path.normalize(env.opts.destination);
23
-
24
- function find(spec) {
25
- return helper.find(data, spec);
26
- }
27
-
28
- function tutoriallink(tutorial) {
29
- return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' });
30
- }
31
-
32
- function getAncestorLinks(doclet) {
33
- return helper.getAncestorLinks(data, doclet);
34
- }
35
-
36
- function hashToLink(doclet, hash) {
37
- if ( !/^(#.+)/.test(hash) ) { return hash; }
38
-
39
- var url = helper.createLink(doclet);
40
-
41
- url = url.replace(/(#.+|$)/, hash);
42
- return '<a href="' + url + '">' + hash + '</a>';
43
- }
44
-
45
- function needsSignature(doclet) {
46
- var needsSig = false;
47
-
48
- // function and class definitions always get a signature
49
- if (doclet.kind === 'function' || doclet.kind === 'class') {
50
- needsSig = true;
51
- }
52
- // typedefs that contain functions get a signature, too
53
- else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names &&
54
- doclet.type.names.length) {
55
- for (var i = 0, l = doclet.type.names.length; i < l; i++) {
56
- if (doclet.type.names[i].toLowerCase() === 'function') {
57
- needsSig = true;
58
- break;
59
- }
60
- }
61
- }
62
-
63
- return needsSig;
64
- }
65
-
66
- function getSignatureAttributes(item) {
67
- var attributes = [];
68
-
69
- if (item.optional) {
70
- attributes.push('opt');
71
- }
72
-
73
- if (item.nullable === true) {
74
- attributes.push('nullable');
75
- }
76
- else if (item.nullable === false) {
77
- attributes.push('non-null');
78
- }
79
-
80
- return attributes;
81
- }
82
-
83
- function updateItemName(item) {
84
- var attributes = getSignatureAttributes(item);
85
- var itemName = item.name || '';
86
-
87
- if (item.variable) {
88
- itemName = '&hellip;' + itemName;
89
- }
90
-
91
- if (attributes && attributes.length) {
92
- itemName = util.format( '%s<span class="signature-attributes">%s</span>', itemName,
93
- attributes.join(', ') );
94
- }
95
-
96
- return itemName;
97
- }
98
-
99
- function addParamAttributes(params) {
100
- return params.filter(function(param) {
101
- return param.name && param.name.indexOf('.') === -1;
102
- }).map(updateItemName);
103
- }
104
-
105
- function buildItemTypeStrings(item) {
106
- var types = [];
107
-
108
- if (item && item.type && item.type.names) {
109
- item.type.names.forEach(function(name) {
110
- types.push( linkto(name, htmlsafe(name)) );
111
- });
112
- }
113
-
114
- return types;
115
- }
116
-
117
- function buildAttribsString(attribs) {
118
- var attribsString = '';
119
-
120
- if (attribs && attribs.length) {
121
- attribsString = htmlsafe( util.format('(%s) ', attribs.join(', ')) );
122
- }
123
-
124
- return attribsString;
125
- }
126
-
127
- function addNonParamAttributes(items) {
128
- var types = [];
129
-
130
- items.forEach(function(item) {
131
- types = types.concat( buildItemTypeStrings(item) );
132
- });
133
-
134
- return types;
135
- }
136
-
137
- function addSignatureParams(f) {
138
- var params = f.params ? addParamAttributes(f.params) : [];
139
- f.signature = util.format( '%s(%s)', (f.signature || ''), params.join(', ') );
140
- }
141
-
142
- function addSignatureReturns(f) {
143
- var attribs = [];
144
- var attribsString = '';
145
- var returnTypes = [];
146
- var returnTypesString = '';
147
-
148
- // jam all the return-type attributes into an array. this could create odd results (for example,
149
- // if there are both nullable and non-nullable return types), but let's assume that most people
150
- // who use multiple @return tags aren't using Closure Compiler type annotations, and vice-versa.
151
- if (f.returns) {
152
- f.returns.forEach(function(item) {
153
- helper.getAttribs(item).forEach(function(attrib) {
154
- if (attribs.indexOf(attrib) === -1) {
155
- attribs.push(attrib);
156
- }
157
- });
158
- });
159
-
160
- attribsString = buildAttribsString(attribs);
161
- }
162
-
163
- if (f.returns) {
164
- returnTypes = addNonParamAttributes(f.returns);
165
- }
166
- if (returnTypes.length) {
167
- returnTypesString = util.format( ' &rarr; %s{%s}', attribsString, returnTypes.join('|') );
168
- }
169
-
170
- f.signature = '<span class="signature">' + (f.signature || '') + '</span>' +
171
- '<span class="type-signature">' + returnTypesString + '</span>';
172
- }
173
-
174
- function addSignatureTypes(f) {
175
- var types = f.type ? buildItemTypeStrings(f) : [];
176
-
177
- f.signature = (f.signature || '') + '<span class="type-signature">' +
178
- (types.length ? ' :' + types.join('|') : '') + '</span>';
179
- }
180
-
181
- function addAttribs(f) {
182
- var attribs = helper.getAttribs(f);
183
- var attribsString = buildAttribsString(attribs);
184
-
185
- f.attribs = util.format('<span class="type-signature">%s</span>', attribsString);
186
- }
187
-
188
- function shortenPaths(files, commonPrefix) {
189
- Object.keys(files).forEach(function(file) {
190
- files[file].shortened = files[file].resolved.replace(commonPrefix, '')
191
- // always use forward slashes
192
- .replace(/\\/g, '/');
193
- });
194
-
195
- return files;
196
- }
197
-
198
- function getPathFromDoclet(doclet) {
199
- if (!doclet.meta) {
200
- return null;
201
- }
202
-
203
- return doclet.meta.path && doclet.meta.path !== 'null' ?
204
- path.join(doclet.meta.path, doclet.meta.filename) :
205
- doclet.meta.filename;
206
- }
207
-
208
- function generate(type, title, docs, filename, resolveLinks) {
209
- resolveLinks = resolveLinks === false ? false : true;
210
-
211
- var docData = {
212
- type: type,
213
- title: title,
214
- docs: docs
215
- };
216
-
217
- var outpath = path.join(outdir, filename),
218
- html = view.render('container.tmpl', docData);
219
-
220
- if (resolveLinks) {
221
- html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
222
- }
223
-
224
- fs.writeFileSync(outpath, html, 'utf8');
225
- }
226
-
227
- function generateSourceFiles(sourceFiles, encoding) {
228
- encoding = encoding || 'utf8';
229
- Object.keys(sourceFiles).forEach(function(file) {
230
- var source;
231
- // links are keyed to the shortened path in each doclet's `meta.shortpath` property
232
- var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened);
233
- helper.registerLink(sourceFiles[file].shortened, sourceOutfile);
234
-
235
- try {
236
- source = {
237
- kind: 'source',
238
- code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, encoding) )
239
- };
240
- }
241
- catch(e) {
242
- logger.error('Error while generating source file %s: %s', file, e.message);
243
- }
244
-
245
- generate('Source', sourceFiles[file].shortened, [source], sourceOutfile, false);
246
- });
247
- }
248
-
249
- /**
250
- * Look for classes or functions with the same name as modules (which indicates that the module
251
- * exports only that class or function), then attach the classes or functions to the `module`
252
- * property of the appropriate module doclets. The name of each class or function is also updated
253
- * for display purposes. This function mutates the original arrays.
254
- *
255
- * @private
256
- * @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
257
- * check.
258
- * @param {Array.<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.
259
- */
260
- function attachModuleSymbols(doclets, modules) {
261
- var symbols = {};
262
-
263
- // build a lookup table
264
- doclets.forEach(function(symbol) {
265
- symbols[symbol.longname] = symbols[symbol.longname] || [];
266
- symbols[symbol.longname].push(symbol);
267
- });
268
-
269
- return modules.map(function(module) {
270
- if (symbols[module.longname]) {
271
- module.modules = symbols[module.longname]
272
- // Only show symbols that have a description. Make an exception for classes, because
273
- // we want to show the constructor-signature heading no matter what.
274
- .filter(function(symbol) {
275
- return symbol.description || symbol.kind === 'class';
276
- })
277
- .map(function(symbol) {
278
- symbol = doop(symbol);
279
-
280
- if (symbol.kind === 'class' || symbol.kind === 'function') {
281
- symbol.name = symbol.name.replace('module:', '(require("') + '"))';
282
- }
283
-
284
- return symbol;
285
- });
286
- }
287
- });
288
- }
289
-
290
- function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) {
291
- var nav = '';
292
- var conf = env.conf.templates || {};
293
- conf.default = conf.default || {};
294
-
295
- if (items && items.length) {
296
- var itemsNav = '';
297
-
298
- items.forEach(function(item) {
299
- var methods = find({kind:'function', memberof: item.longname});
300
- var members = find({kind:'member', memberof: item.longname});
301
-
302
- if ( !hasOwnProp.call(item, 'longname') ) {
303
- itemsNav += '<li>' + linktoFn('', item.name);
304
- itemsNav += '</li>';
305
- } else if ( !hasOwnProp.call(itemsSeen, item.longname) ) {
306
- var displayName;
307
- if (!!conf.default.useLongnameInNav) {
308
- displayName = item.longname;
309
- if(conf.default.useLongnameInNav > 0 && conf.default.useLongnameInNav !== true){
310
- var num = conf.default.useLongnameInNav;
311
- var cropped = item.longname.split(".").slice(-num).join(".");
312
- if(cropped !== displayName){
313
- displayName = "..." + cropped;
314
- }
315
- }
316
- } else {
317
- displayName = item.name;
318
- }
319
-
320
- itemsNav += '<li>' + linktoFn(item.longname, displayName.replace(/^module:/g, ''));
321
- if (methods.length) {
322
- itemsNav += "<ul class='methods'>";
323
-
324
- methods.forEach(function (method) {
325
- itemsNav += "<li data-type='method'>";
326
- itemsNav += linkto(method.longname, method.name);
327
- itemsNav += "</li>";
328
- });
329
-
330
- itemsNav += "</ul>";
331
- }
332
- itemsNav += '</li>';
333
- itemsSeen[item.longname] = true;
334
- }
335
- });
336
-
337
- if (itemsNav !== '') {
338
- nav += '<h3>' + itemHeading + '</h3><ul>' + itemsNav + '</ul>';
339
- }
340
- }
341
-
342
- return nav;
343
- }
344
-
345
- function linktoTutorial(longName, name) {
346
- return tutoriallink(name);
347
- }
348
-
349
- function linktoExternal(longName, name) {
350
- return linkto(longName, name.replace(/(^"|"$)/g, ''));
351
- }
352
-
353
- /**
354
- * Create the navigation sidebar.
355
- * @param {object} members The members that will be used to create the sidebar.
356
- * @param {array<object>} members.classes
357
- * @param {array<object>} members.externals
358
- * @param {array<object>} members.globals
359
- * @param {array<object>} members.mixins
360
- * @param {array<object>} members.modules
361
- * @param {array<object>} members.namespaces
362
- * @param {array<object>} members.tutorials
363
- * @param {array<object>} members.events
364
- * @param {array<object>} members.interfaces
365
- * @return {string} The HTML for the navigation sidebar.
366
- */
367
- function buildNav(members) {
368
- var nav = '<h2><a href="index.html">Home</a></h2>';
369
- var seen = {};
370
- var seenTutorials = {};
371
-
372
- nav += buildMemberNav(members.classes, 'Classes', seen, linkto);
373
- nav += buildMemberNav(members.modules, 'Modules', {}, linkto);
374
- nav += buildMemberNav(members.externals, 'Externals', seen, linktoExternal);
375
- nav += buildMemberNav(members.events, 'Events', seen, linkto);
376
- nav += buildMemberNav(members.namespaces, 'Namespaces', seen, linkto);
377
- nav += buildMemberNav(members.mixins, 'Mixins', seen, linkto);
378
- nav += buildMemberNav(members.tutorials, 'Tutorials', seenTutorials, linktoTutorial);
379
- nav += buildMemberNav(members.interfaces, 'Interfaces', seen, linkto);
380
-
381
- if (members.globals.length) {
382
- var globalNav = '';
383
-
384
- members.globals.forEach(function(g) {
385
- if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) {
386
- globalNav += '<li>' + linkto(g.longname, g.name) + '</li>';
387
- }
388
- seen[g.longname] = true;
389
- });
390
-
391
- if (!globalNav) {
392
- // turn the heading into a link so you can actually get to the global page
393
- nav += '<h3>' + linkto('global', 'Global') + '</h3>';
394
- }
395
- else {
396
- nav += '<h3>Global</h3><ul>' + globalNav + '</ul>';
397
- }
398
- }
399
-
400
- return nav;
401
- }
402
-
403
- /**
404
- @param {TAFFY} taffyData See <http://taffydb.com/>.
405
- @param {object} opts
406
- @param {Tutorial} tutorials
407
- */
408
- exports.publish = function(taffyData, opts, tutorials) {
409
- data = taffyData;
410
-
411
- var conf = env.conf.templates || {};
412
- conf.default = conf.default || {};
413
-
414
- var templatePath = path.normalize(opts.template);
415
- view = new template.Template( path.join(templatePath, 'tmpl') );
416
-
417
- // claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
418
- // doesn't try to hand them out later
419
- var indexUrl = helper.getUniqueFilename('index');
420
- // don't call registerLink() on this one! 'index' is also a valid longname
421
-
422
- var globalUrl = helper.getUniqueFilename('global');
423
- helper.registerLink('global', globalUrl);
424
-
425
- // set up templating
426
- view.layout = conf.default.layoutFile ?
427
- path.getResourcePath(path.dirname(conf.default.layoutFile),
428
- path.basename(conf.default.layoutFile) ) :
429
- 'layout.tmpl';
430
-
431
- // set up tutorials for helper
432
- helper.setTutorials(tutorials);
433
-
434
- data = helper.prune(data);
435
- data.sort('longname, version, since');
436
- helper.addEventListeners(data);
437
-
438
- var sourceFiles = {};
439
- var sourceFilePaths = [];
440
- data().each(function(doclet) {
441
- doclet.attribs = '';
442
-
443
- if (doclet.examples) {
444
- doclet.examples = doclet.examples.map(function(example) {
445
- var caption, code;
446
-
447
- if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) {
448
- caption = RegExp.$1;
449
- code = RegExp.$3;
450
- }
451
-
452
- return {
453
- caption: caption || '',
454
- code: code || example
455
- };
456
- });
457
- }
458
- if (doclet.see) {
459
- doclet.see.forEach(function(seeItem, i) {
460
- doclet.see[i] = hashToLink(doclet, seeItem);
461
- });
462
- }
463
-
464
- // build a list of source files
465
- var sourcePath;
466
- if (doclet.meta) {
467
- sourcePath = getPathFromDoclet(doclet);
468
- sourceFiles[sourcePath] = {
469
- resolved: sourcePath,
470
- shortened: null
471
- };
472
- if (sourceFilePaths.indexOf(sourcePath) === -1) {
473
- sourceFilePaths.push(sourcePath);
474
- }
475
- }
476
- });
477
-
478
- // update outdir if necessary, then create outdir
479
- var packageInfo = ( find({kind: 'package'}) || [] ) [0];
480
- if (packageInfo && packageInfo.name) {
481
- outdir = path.join( outdir, packageInfo.name, (packageInfo.version || '') );
482
- }
483
- fs.mkPath(outdir);
484
-
485
- // copy the template's static files to outdir
486
- var fromDir = path.join(templatePath, 'static');
487
- var staticFiles = fs.ls(fromDir, 3);
488
-
489
- staticFiles.forEach(function(fileName) {
490
- var toDir = fs.toDir( fileName.replace(fromDir, outdir) );
491
- fs.mkPath(toDir);
492
- fs.copyFileSync(fileName, toDir);
493
- });
494
-
495
- // copy user-specified static files to outdir
496
- var staticFilePaths;
497
- var staticFileFilter;
498
- var staticFileScanner;
499
- if (conf.default.staticFiles) {
500
- // The canonical property name is `include`. We accept `paths` for backwards compatibility
501
- // with a bug in JSDoc 3.2.x.
502
- staticFilePaths = conf.default.staticFiles.include ||
503
- conf.default.staticFiles.paths ||
504
- [];
505
- staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf.default.staticFiles);
506
- staticFileScanner = new (require('jsdoc/src/scanner')).Scanner();
507
-
508
- staticFilePaths.forEach(function(filePath) {
509
- var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
510
-
511
- extraStaticFiles.forEach(function(fileName) {
512
- var sourcePath = fs.toDir(filePath);
513
- var toDir = fs.toDir( fileName.replace(sourcePath, outdir) );
514
- fs.mkPath(toDir);
515
- fs.copyFileSync(fileName, toDir);
516
- });
517
- });
518
- }
519
-
520
- if (sourceFilePaths.length) {
521
- sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) );
522
- }
523
- data().each(function(doclet) {
524
- var url = helper.createLink(doclet);
525
- helper.registerLink(doclet.longname, url);
526
-
527
- // add a shortened version of the full path
528
- var docletPath;
529
- if (doclet.meta) {
530
- docletPath = getPathFromDoclet(doclet);
531
- docletPath = sourceFiles[docletPath].shortened;
532
- if (docletPath) {
533
- doclet.meta.shortpath = docletPath;
534
- }
535
- }
536
- });
537
-
538
- data().each(function(doclet) {
539
- var url = helper.longnameToUrl[doclet.longname];
540
-
541
- if (url.indexOf('#') > -1) {
542
- doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop();
543
- }
544
- else {
545
- doclet.id = doclet.name;
546
- }
547
-
548
- if ( needsSignature(doclet) ) {
549
- addSignatureParams(doclet);
550
- addSignatureReturns(doclet);
551
- addAttribs(doclet);
552
- }
553
- });
554
-
555
- // do this after the urls have all been generated
556
- data().each(function(doclet) {
557
- doclet.ancestors = getAncestorLinks(doclet);
558
-
559
- if (doclet.kind === 'member') {
560
- addSignatureTypes(doclet);
561
- addAttribs(doclet);
562
- }
563
-
564
- if (doclet.kind === 'constant') {
565
- addSignatureTypes(doclet);
566
- addAttribs(doclet);
567
- doclet.kind = 'member';
568
- }
569
- });
570
-
571
- var members = helper.getMembers(data);
572
- members.tutorials = tutorials.children;
573
-
574
- // output pretty-printed source files by default
575
- var outputSourceFiles = conf.default && conf.default.outputSourceFiles !== false
576
- ? true
577
- : false;
578
-
579
- // add template helpers
580
- view.find = find;
581
- view.linkto = linkto;
582
- view.resolveAuthorLinks = resolveAuthorLinks;
583
- view.tutoriallink = tutoriallink;
584
- view.htmlsafe = htmlsafe;
585
- view.outputSourceFiles = outputSourceFiles;
586
-
587
- // once for all
588
- view.nav = buildNav(members);
589
- attachModuleSymbols( find({ longname: {left: 'module:'} }), members.modules );
590
-
591
- // generate the pretty-printed source files first so other pages can link to them
592
- if (outputSourceFiles) {
593
- generateSourceFiles(sourceFiles, opts.encoding);
594
- }
595
-
596
- if (members.globals.length) {
597
- generate('', 'Global', [{kind: 'globalobj'}], globalUrl);
598
- }
599
-
600
- // index page displays information from package.json and lists files
601
- var files = find({kind: 'file'});
602
- var packages = find({kind: 'package'});
603
-
604
- generate('', 'Home',
605
- packages.concat(
606
- [{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]
607
- ).concat(files),
608
- indexUrl);
609
-
610
- // set up the lists that we'll use to generate pages
611
- var classes = taffy(members.classes);
612
- var modules = taffy(members.modules);
613
- var namespaces = taffy(members.namespaces);
614
- var mixins = taffy(members.mixins);
615
- var externals = taffy(members.externals);
616
- var interfaces = taffy(members.interfaces);
617
-
618
- Object.keys(helper.longnameToUrl).forEach(function(longname) {
619
- var myModules = helper.find(modules, {longname: longname});
620
- if (myModules.length) {
621
- generate('Module', myModules[0].name, myModules, helper.longnameToUrl[longname]);
622
- }
623
-
624
- var myClasses = helper.find(classes, {longname: longname});
625
- if (myClasses.length) {
626
- generate('Class', myClasses[0].name, myClasses, helper.longnameToUrl[longname]);
627
- }
628
-
629
- var myNamespaces = helper.find(namespaces, {longname: longname});
630
- if (myNamespaces.length) {
631
- generate('Namespace', myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);
632
- }
633
-
634
- var myMixins = helper.find(mixins, {longname: longname});
635
- if (myMixins.length) {
636
- generate('Mixin', myMixins[0].name, myMixins, helper.longnameToUrl[longname]);
637
- }
638
-
639
- var myExternals = helper.find(externals, {longname: longname});
640
- if (myExternals.length) {
641
- generate('External', myExternals[0].name, myExternals, helper.longnameToUrl[longname]);
642
- }
643
-
644
- var myInterfaces = helper.find(interfaces, {longname: longname});
645
- if (myInterfaces.length) {
646
- generate('Interface', myInterfaces[0].name, myInterfaces, helper.longnameToUrl[longname]);
647
- }
648
- });
649
-
650
- // TODO: move the tutorial functions to templateHelper.js
651
- function generateTutorial(title, tutorial, filename) {
652
- var tutorialData = {
653
- title: title,
654
- header: tutorial.title,
655
- content: tutorial.parse(),
656
- children: tutorial.children
657
- };
658
-
659
- var tutorialPath = path.join(outdir, filename);
660
- var html = view.render('tutorial.tmpl', tutorialData);
661
-
662
- // yes, you can use {@link} in tutorials too!
663
- html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
664
- fs.writeFileSync(tutorialPath, html, 'utf8');
665
- }
666
-
667
- // tutorials can have only one parent so there is no risk for loops
668
- function saveChildren(node) {
669
- node.children.forEach(function(child) {
670
- generateTutorial('Tutorial: ' + child.title, child, helper.tutorialToUrl(child.name));
671
- saveChildren(child);
672
- });
673
- }
674
-
675
- saveChildren(tutorials);
676
- };