1 | <!DOCTYPE html>
|
2 |
|
3 | <html>
|
4 | <head>
|
5 | <title>denodify.js</title>
|
6 | <meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
7 | <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
|
8 | <link rel="stylesheet" media="all" href="docco.css" />
|
9 | </head>
|
10 | <body>
|
11 | <div id="container">
|
12 | <div id="background"></div>
|
13 |
|
14 | <ul class="sections">
|
15 |
|
16 | <li id="title">
|
17 | <div class="annotation">
|
18 | <h1>denodify.js</h1>
|
19 | </div>
|
20 | </li>
|
21 |
|
22 |
|
23 |
|
24 | <li id="section-1">
|
25 | <div class="annotation">
|
26 |
|
27 | <div class="pilwrap ">
|
28 | <a class="pilcrow" href="#section-1">¶</a>
|
29 | </div>
|
30 |
|
31 | </div>
|
32 |
|
33 | <div class="content"><div class='highlight'><pre>(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(global)</span> {</span>
|
34 |
|
35 | <span class="hljs-keyword">if</span> (global.denodify) <span class="hljs-keyword">return</span>;
|
36 |
|
37 | <span class="hljs-keyword">var</span> m = {};
|
38 | <span class="hljs-keyword">var</span> f = {};
|
39 |
|
40 | <span class="hljs-keyword">var</span> process = {
|
41 | platform: <span class="hljs-string">'browser'</span>
|
42 | };</pre></div></div>
|
43 |
|
44 | </li>
|
45 |
|
46 |
|
47 | <li id="section-2">
|
48 | <div class="annotation">
|
49 |
|
50 | <div class="pilwrap ">
|
51 | <a class="pilcrow" href="#section-2">¶</a>
|
52 | </div>
|
53 | <h3 id="api">API</h3>
|
54 |
|
55 | </div>
|
56 |
|
57 | <div class="content"><div class='highlight'><pre> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">require</span><span class="hljs-params">(parent, moduleid)</span> {</span>
|
58 | <span class="hljs-keyword">if</span> (moduleid.indexOf(<span class="hljs-string">'/'</span>) === -<span class="hljs-number">1</span>) parent = <span class="hljs-string">''</span>;
|
59 | <span class="hljs-keyword">else</span> {
|
60 | <span class="hljs-keyword">if</span> (Path.isAbsolute(moduleid)) parent = <span class="hljs-string">'/'</span>;
|
61 | <span class="hljs-keyword">else</span> moduleid = Path.join(parent, moduleid);
|
62 | <span class="hljs-keyword">if</span> (!Path.extname(moduleid)) moduleid += <span class="hljs-string">'.js'</span>;
|
63 | }
|
64 | <span class="hljs-keyword">var</span> module = m[moduleid];
|
65 | <span class="hljs-keyword">if</span> (module) <span class="hljs-keyword">return</span> module.exports;
|
66 | <span class="hljs-keyword">var</span> func = f[moduleid];
|
67 | <span class="hljs-keyword">if</span> (!func)
|
68 | <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">'Couldn\'t resolve module with resolved path of '</span> +
|
69 | Path.join(Path.dirname(parent), moduleid));
|
70 | func(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(__filename)</span> {</span> <span class="hljs-keyword">return</span> <span class="hljs-built_in">require</span>(Path.dirname(moduleid), __filename); },
|
71 | module = m[moduleid] = {},
|
72 | module.exports = {},
|
73 | moduleid,
|
74 | Path.dirname(moduleid),
|
75 | process);
|
76 | <span class="hljs-keyword">return</span> module.exports;
|
77 | }</pre></div></div>
|
78 |
|
79 | </li>
|
80 |
|
81 |
|
82 | <li id="section-3">
|
83 | <div class="annotation">
|
84 |
|
85 | <div class="pilwrap ">
|
86 | <a class="pilcrow" href="#section-3">¶</a>
|
87 | </div>
|
88 | <h3 id="denodify">denodify</h3>
|
89 | <p>Use this to denodify javascript. Wrap your source code with</p>
|
90 |
|
91 | </div>
|
92 |
|
93 | </li>
|
94 |
|
95 |
|
96 | <li id="section-4">
|
97 | <div class="annotation">
|
98 |
|
99 | <div class="pilwrap ">
|
100 | <a class="pilcrow" href="#section-4">¶</a>
|
101 | </div>
|
102 | <pre><code>denodify(<span class="hljs-string">'moduleid'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(require, module, exports, __filename, __dirname, process)</span> {</span>
|
103 | [your source code]
|
104 | });
|
105 | </code></pre>
|
106 | </div>
|
107 |
|
108 | <div class="content"><div class='highlight'><pre> global.denodify = <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(__filename, func)</span> {</span>
|
109 | f[__filename] = func;
|
110 | };</pre></div></div>
|
111 |
|
112 | </li>
|
113 |
|
114 |
|
115 | <li id="section-5">
|
116 | <div class="annotation">
|
117 |
|
118 | <div class="pilwrap ">
|
119 | <a class="pilcrow" href="#section-5">¶</a>
|
120 | </div>
|
121 | <h3 id="require">require</h3>
|
122 | <p>Use this function to pull in or kickstart any defined nodejs modules from
|
123 | outside nodejs modules. </p>
|
124 |
|
125 | </div>
|
126 |
|
127 | <div class="content"><div class='highlight'><pre> global.denodify.require = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(__filename)</span> {</span>
|
128 | <span class="hljs-built_in">require</span>(<span class="hljs-string">''</span>, __filename);
|
129 | };</pre></div></div>
|
130 |
|
131 | </li>
|
132 |
|
133 |
|
134 | <li id="section-6">
|
135 | <div class="annotation">
|
136 |
|
137 | <div class="pilwrap ">
|
138 | <a class="pilcrow" href="#section-6">¶</a>
|
139 | </div>
|
140 | <h3 id="debug">debug</h3>
|
141 |
|
142 | </div>
|
143 |
|
144 | <div class="content"><div class='highlight'><pre> global.denodify.debug = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(__filename)</span> {</span>
|
145 | console.log(<span class="hljs-string">'modules\n:'</span>, m);
|
146 | console.log(<span class="hljs-string">'funcs\n:'</span>, f);
|
147 | };</pre></div></div>
|
148 |
|
149 | </li>
|
150 |
|
151 |
|
152 | <li id="section-7">
|
153 | <div class="annotation">
|
154 |
|
155 | <div class="pilwrap ">
|
156 | <a class="pilcrow" href="#section-7">¶</a>
|
157 | </div>
|
158 | <p>End of API ———————————————————————-</p>
|
159 |
|
160 | </div>
|
161 |
|
162 | </li>
|
163 |
|
164 |
|
165 | <li id="section-8">
|
166 | <div class="annotation">
|
167 |
|
168 | <div class="pilwrap ">
|
169 | <a class="pilcrow" href="#section-8">¶</a>
|
170 | </div>
|
171 | <p>The rest is <code>path</code>, copied from path-browserify</p>
|
172 |
|
173 | </div>
|
174 |
|
175 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">var</span> path = (<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> {</span>
|
176 | <span class="hljs-keyword">var</span> exports = {};
|
177 | <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">normalizeArray</span><span class="hljs-params">(parts, allowAboveRoot)</span> {</span></pre></div></div>
|
178 |
|
179 | </li>
|
180 |
|
181 |
|
182 | <li id="section-9">
|
183 | <div class="annotation">
|
184 |
|
185 | <div class="pilwrap ">
|
186 | <a class="pilcrow" href="#section-9">¶</a>
|
187 | </div>
|
188 | <p>if the path tries to go above the root, <code>up</code> ends up > 0</p>
|
189 |
|
190 | </div>
|
191 |
|
192 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">var</span> up = <span class="hljs-number">0</span>;
|
193 | <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = parts.length - <span class="hljs-number">1</span>; i >= <span class="hljs-number">0</span>; i--) {
|
194 | <span class="hljs-keyword">var</span> last = parts[i];
|
195 | <span class="hljs-keyword">if</span> (last === <span class="hljs-string">'.'</span>) {
|
196 | parts.splice(i, <span class="hljs-number">1</span>);
|
197 | } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (last === <span class="hljs-string">'..'</span>) {
|
198 | parts.splice(i, <span class="hljs-number">1</span>);
|
199 | up++;
|
200 | } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (up) {
|
201 | parts.splice(i, <span class="hljs-number">1</span>);
|
202 | up--;
|
203 | }
|
204 | }</pre></div></div>
|
205 |
|
206 | </li>
|
207 |
|
208 |
|
209 | <li id="section-10">
|
210 | <div class="annotation">
|
211 |
|
212 | <div class="pilwrap ">
|
213 | <a class="pilcrow" href="#section-10">¶</a>
|
214 | </div>
|
215 | <p>if the path is allowed to go above the root, restore leading ..s</p>
|
216 |
|
217 | </div>
|
218 |
|
219 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> (allowAboveRoot) {
|
220 | <span class="hljs-keyword">for</span> (; up--; up) {
|
221 | parts.unshift(<span class="hljs-string">'..'</span>);
|
222 | }
|
223 | }
|
224 |
|
225 | <span class="hljs-keyword">return</span> parts;
|
226 | }</pre></div></div>
|
227 |
|
228 | </li>
|
229 |
|
230 |
|
231 | <li id="section-11">
|
232 | <div class="annotation">
|
233 |
|
234 | <div class="pilwrap ">
|
235 | <a class="pilcrow" href="#section-11">¶</a>
|
236 | </div>
|
237 | <p>Split a filename into [root, dir, basename, ext], unix version
|
238 | ‘root’ is just a slash, or nothing.</p>
|
239 |
|
240 | </div>
|
241 |
|
242 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">var</span> splitPathRe =
|
243 | <span class="hljs-regexp">/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/</span>;
|
244 | <span class="hljs-keyword">var</span> splitPath = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(filename)</span> {</span>
|
245 | <span class="hljs-keyword">return</span> splitPathRe.exec(filename).slice(<span class="hljs-number">1</span>);
|
246 | };</pre></div></div>
|
247 |
|
248 | </li>
|
249 |
|
250 |
|
251 | <li id="section-12">
|
252 | <div class="annotation">
|
253 |
|
254 | <div class="pilwrap ">
|
255 | <a class="pilcrow" href="#section-12">¶</a>
|
256 | </div>
|
257 | <p>path.resolve([from …], to)
|
258 | posix version</p>
|
259 |
|
260 | </div>
|
261 |
|
262 | <div class="content"><div class='highlight'><pre> exports.resolve = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> {</span>
|
263 | <span class="hljs-keyword">var</span> resolvedPath = <span class="hljs-string">''</span>,
|
264 | resolvedAbsolute = <span class="hljs-literal">false</span>;
|
265 |
|
266 | <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-built_in">arguments</span>.length - <span class="hljs-number">1</span>; i >= -<span class="hljs-number">1</span> && !resolvedAbsolute; i--) {
|
267 | <span class="hljs-keyword">var</span> path = (i >= <span class="hljs-number">0</span>) ? <span class="hljs-built_in">arguments</span>[i] : process.cwd();</pre></div></div>
|
268 |
|
269 | </li>
|
270 |
|
271 |
|
272 | <li id="section-13">
|
273 | <div class="annotation">
|
274 |
|
275 | <div class="pilwrap ">
|
276 | <a class="pilcrow" href="#section-13">¶</a>
|
277 | </div>
|
278 | <p>Skip empty and invalid entries</p>
|
279 |
|
280 | </div>
|
281 |
|
282 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> path !== <span class="hljs-string">'string'</span>) {
|
283 | <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">TypeError</span>(<span class="hljs-string">'Arguments to path.resolve must be strings'</span>);
|
284 | } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (!path) {
|
285 | <span class="hljs-keyword">continue</span>;
|
286 | }
|
287 |
|
288 | resolvedPath = path + <span class="hljs-string">'/'</span> + resolvedPath;
|
289 | resolvedAbsolute = path.charAt(<span class="hljs-number">0</span>) === <span class="hljs-string">'/'</span>;
|
290 | }</pre></div></div>
|
291 |
|
292 | </li>
|
293 |
|
294 |
|
295 | <li id="section-14">
|
296 | <div class="annotation">
|
297 |
|
298 | <div class="pilwrap ">
|
299 | <a class="pilcrow" href="#section-14">¶</a>
|
300 | </div>
|
301 | <p>At this point the path should be resolved to a full absolute path, but
|
302 | handle relative paths to be safe (might happen when process.cwd() fails)</p>
|
303 |
|
304 | </div>
|
305 |
|
306 | </li>
|
307 |
|
308 |
|
309 | <li id="section-15">
|
310 | <div class="annotation">
|
311 |
|
312 | <div class="pilwrap ">
|
313 | <a class="pilcrow" href="#section-15">¶</a>
|
314 | </div>
|
315 | <p>Normalize the path</p>
|
316 |
|
317 | </div>
|
318 |
|
319 | <div class="content"><div class='highlight'><pre> resolvedPath = normalizeArray(filter(resolvedPath.split(<span class="hljs-string">'/'</span>), <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(p)</span> {</span>
|
320 | <span class="hljs-keyword">return</span> !!p;
|
321 | }), !resolvedAbsolute).join(<span class="hljs-string">'/'</span>);
|
322 |
|
323 | <span class="hljs-keyword">return</span> ((resolvedAbsolute ? <span class="hljs-string">'/'</span> : <span class="hljs-string">''</span>) + resolvedPath) || <span class="hljs-string">'.'</span>;
|
324 | };</pre></div></div>
|
325 |
|
326 | </li>
|
327 |
|
328 |
|
329 | <li id="section-16">
|
330 | <div class="annotation">
|
331 |
|
332 | <div class="pilwrap ">
|
333 | <a class="pilcrow" href="#section-16">¶</a>
|
334 | </div>
|
335 | <p>path.normalize(path)
|
336 | posix version</p>
|
337 |
|
338 | </div>
|
339 |
|
340 | <div class="content"><div class='highlight'><pre> exports.normalize = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(path)</span> {</span>
|
341 | <span class="hljs-keyword">var</span> isAbsolute = exports.isAbsolute(path),
|
342 | trailingSlash = substr(path, -<span class="hljs-number">1</span>) === <span class="hljs-string">'/'</span>;</pre></div></div>
|
343 |
|
344 | </li>
|
345 |
|
346 |
|
347 | <li id="section-17">
|
348 | <div class="annotation">
|
349 |
|
350 | <div class="pilwrap ">
|
351 | <a class="pilcrow" href="#section-17">¶</a>
|
352 | </div>
|
353 | <p>Normalize the path</p>
|
354 |
|
355 | </div>
|
356 |
|
357 | <div class="content"><div class='highlight'><pre> path = normalizeArray(filter(path.split(<span class="hljs-string">'/'</span>), <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(p)</span> {</span>
|
358 | <span class="hljs-keyword">return</span> !!p;
|
359 | }), !isAbsolute).join(<span class="hljs-string">'/'</span>);
|
360 |
|
361 | <span class="hljs-keyword">if</span> (!path && !isAbsolute) {
|
362 | path = <span class="hljs-string">'.'</span>;
|
363 | }
|
364 | <span class="hljs-keyword">if</span> (path && trailingSlash) {
|
365 | path += <span class="hljs-string">'/'</span>;
|
366 | }
|
367 |
|
368 | <span class="hljs-keyword">return</span> (isAbsolute ? <span class="hljs-string">'/'</span> : <span class="hljs-string">''</span>) + path;
|
369 | };</pre></div></div>
|
370 |
|
371 | </li>
|
372 |
|
373 |
|
374 | <li id="section-18">
|
375 | <div class="annotation">
|
376 |
|
377 | <div class="pilwrap ">
|
378 | <a class="pilcrow" href="#section-18">¶</a>
|
379 | </div>
|
380 | <p>posix version</p>
|
381 |
|
382 | </div>
|
383 |
|
384 | <div class="content"><div class='highlight'><pre> exports.isAbsolute = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(path)</span> {</span>
|
385 | <span class="hljs-keyword">return</span> path.charAt(<span class="hljs-number">0</span>) === <span class="hljs-string">'/'</span>;
|
386 | };</pre></div></div>
|
387 |
|
388 | </li>
|
389 |
|
390 |
|
391 | <li id="section-19">
|
392 | <div class="annotation">
|
393 |
|
394 | <div class="pilwrap ">
|
395 | <a class="pilcrow" href="#section-19">¶</a>
|
396 | </div>
|
397 | <p>posix version</p>
|
398 |
|
399 | </div>
|
400 |
|
401 | <div class="content"><div class='highlight'><pre> exports.join = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> {</span>
|
402 | <span class="hljs-keyword">var</span> paths = <span class="hljs-built_in">Array</span>.prototype.slice.call(<span class="hljs-built_in">arguments</span>, <span class="hljs-number">0</span>);
|
403 | <span class="hljs-keyword">return</span> exports.normalize(filter(paths, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(p, index)</span> {</span>
|
404 | <span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> p !== <span class="hljs-string">'string'</span>) {
|
405 | <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">TypeError</span>(<span class="hljs-string">'Arguments to path.join must be strings'</span>);
|
406 | }
|
407 | <span class="hljs-keyword">return</span> p;
|
408 | }).join(<span class="hljs-string">'/'</span>));
|
409 | };</pre></div></div>
|
410 |
|
411 | </li>
|
412 |
|
413 |
|
414 | <li id="section-20">
|
415 | <div class="annotation">
|
416 |
|
417 | <div class="pilwrap ">
|
418 | <a class="pilcrow" href="#section-20">¶</a>
|
419 | </div>
|
420 | <p>path.relative(from, to)
|
421 | posix version</p>
|
422 |
|
423 | </div>
|
424 |
|
425 | <div class="content"><div class='highlight'><pre> exports.relative = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(from, to)</span> {</span>
|
426 | from = exports.resolve(from).substr(<span class="hljs-number">1</span>);
|
427 | to = exports.resolve(to).substr(<span class="hljs-number">1</span>);
|
428 |
|
429 | <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">trim</span><span class="hljs-params">(arr)</span> {</span>
|
430 | <span class="hljs-keyword">var</span> start = <span class="hljs-number">0</span>;
|
431 | <span class="hljs-keyword">for</span> (; start < arr.length; start++) {
|
432 | <span class="hljs-keyword">if</span> (arr[start] !== <span class="hljs-string">''</span>) <span class="hljs-keyword">break</span>;
|
433 | }
|
434 |
|
435 | <span class="hljs-keyword">var</span> end = arr.length - <span class="hljs-number">1</span>;
|
436 | <span class="hljs-keyword">for</span> (; end >= <span class="hljs-number">0</span>; end--) {
|
437 | <span class="hljs-keyword">if</span> (arr[end] !== <span class="hljs-string">''</span>) <span class="hljs-keyword">break</span>;
|
438 | }
|
439 |
|
440 | <span class="hljs-keyword">if</span> (start > end) <span class="hljs-keyword">return</span> [];
|
441 | <span class="hljs-keyword">return</span> arr.slice(start, end - start + <span class="hljs-number">1</span>);
|
442 | }
|
443 |
|
444 | <span class="hljs-keyword">var</span> fromParts = trim(from.split(<span class="hljs-string">'/'</span>));
|
445 | <span class="hljs-keyword">var</span> toParts = trim(to.split(<span class="hljs-string">'/'</span>));
|
446 |
|
447 | <span class="hljs-keyword">var</span> length = <span class="hljs-built_in">Math</span>.min(fromParts.length, toParts.length);
|
448 | <span class="hljs-keyword">var</span> samePartsLength = length;
|
449 | <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i < length; i++) {
|
450 | <span class="hljs-keyword">if</span> (fromParts[i] !== toParts[i]) {
|
451 | samePartsLength = i;
|
452 | <span class="hljs-keyword">break</span>;
|
453 | }
|
454 | }
|
455 |
|
456 | <span class="hljs-keyword">var</span> outputParts = [];
|
457 | <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = samePartsLength; i < fromParts.length; i++) {
|
458 | outputParts.push(<span class="hljs-string">'..'</span>);
|
459 | }
|
460 |
|
461 | outputParts = outputParts.concat(toParts.slice(samePartsLength));
|
462 |
|
463 | <span class="hljs-keyword">return</span> outputParts.join(<span class="hljs-string">'/'</span>);
|
464 | };
|
465 |
|
466 | exports.sep = <span class="hljs-string">'/'</span>;
|
467 | exports.delimiter = <span class="hljs-string">':'</span>;
|
468 |
|
469 | exports.dirname = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(path)</span> {</span>
|
470 | <span class="hljs-keyword">var</span> result = splitPath(path),
|
471 | root = result[<span class="hljs-number">0</span>],
|
472 | dir = result[<span class="hljs-number">1</span>];
|
473 |
|
474 | <span class="hljs-keyword">if</span> (!root && !dir) {</pre></div></div>
|
475 |
|
476 | </li>
|
477 |
|
478 |
|
479 | <li id="section-21">
|
480 | <div class="annotation">
|
481 |
|
482 | <div class="pilwrap ">
|
483 | <a class="pilcrow" href="#section-21">¶</a>
|
484 | </div>
|
485 | <p>No dirname whatsoever</p>
|
486 |
|
487 | </div>
|
488 |
|
489 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">return</span> <span class="hljs-string">'.'</span>;
|
490 | }
|
491 |
|
492 | <span class="hljs-keyword">if</span> (dir) {</pre></div></div>
|
493 |
|
494 | </li>
|
495 |
|
496 |
|
497 | <li id="section-22">
|
498 | <div class="annotation">
|
499 |
|
500 | <div class="pilwrap ">
|
501 | <a class="pilcrow" href="#section-22">¶</a>
|
502 | </div>
|
503 | <p>It has a dirname, strip trailing slash</p>
|
504 |
|
505 | </div>
|
506 |
|
507 | <div class="content"><div class='highlight'><pre> dir = dir.substr(<span class="hljs-number">0</span>, dir.length - <span class="hljs-number">1</span>);
|
508 | }
|
509 |
|
510 | <span class="hljs-keyword">return</span> root + dir;
|
511 | };
|
512 |
|
513 |
|
514 | exports.basename = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(path, ext)</span> {</span>
|
515 | <span class="hljs-keyword">var</span> f = splitPath(path)[<span class="hljs-number">2</span>];</pre></div></div>
|
516 |
|
517 | </li>
|
518 |
|
519 |
|
520 | <li id="section-23">
|
521 | <div class="annotation">
|
522 |
|
523 | <div class="pilwrap ">
|
524 | <a class="pilcrow" href="#section-23">¶</a>
|
525 | </div>
|
526 | <p>TODO: make this comparison case-insensitive on windows?</p>
|
527 |
|
528 | </div>
|
529 |
|
530 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> (ext && f.substr(-<span class="hljs-number">1</span> * ext.length) === ext) {
|
531 | f = f.substr(<span class="hljs-number">0</span>, f.length - ext.length);
|
532 | }
|
533 | <span class="hljs-keyword">return</span> f;
|
534 | };
|
535 |
|
536 |
|
537 | exports.extname = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(path)</span> {</span>
|
538 | <span class="hljs-keyword">return</span> splitPath(path)[<span class="hljs-number">3</span>];
|
539 | };
|
540 |
|
541 | <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">filter</span> <span class="hljs-params">(xs, f)</span> {</span>
|
542 | <span class="hljs-keyword">if</span> (xs.filter) <span class="hljs-keyword">return</span> xs.filter(f);
|
543 | <span class="hljs-keyword">var</span> res = [];
|
544 | <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i < xs.length; i++) {
|
545 | <span class="hljs-keyword">if</span> (f(xs[i], i, xs)) res.push(xs[i]);
|
546 | }
|
547 | <span class="hljs-keyword">return</span> res;
|
548 | }</pre></div></div>
|
549 |
|
550 | </li>
|
551 |
|
552 |
|
553 | <li id="section-24">
|
554 | <div class="annotation">
|
555 |
|
556 | <div class="pilwrap ">
|
557 | <a class="pilcrow" href="#section-24">¶</a>
|
558 | </div>
|
559 | <p>String.prototype.substr - negative index don’t work in IE8</p>
|
560 |
|
561 | </div>
|
562 |
|
563 | <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">var</span> substr = <span class="hljs-string">'ab'</span>.substr(-<span class="hljs-number">1</span>) === <span class="hljs-string">'b'</span>
|
564 | ? <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(str, start, len)</span> {</span> <span class="hljs-keyword">return</span> str.substr(start, len) }
|
565 | : <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(str, start, len)</span> {</span>
|
566 | <span class="hljs-keyword">if</span> (start < <span class="hljs-number">0</span>) start = str.length + start;
|
567 | <span class="hljs-keyword">return</span> str.substr(start, len);
|
568 | };
|
569 | <span class="hljs-keyword">return</span> { exports: exports };
|
570 | })();
|
571 |
|
572 |
|
573 | m[<span class="hljs-string">'path'</span>] = path;
|
574 | <span class="hljs-keyword">var</span> Path = path.exports;
|
575 |
|
576 | })(<span class="hljs-keyword">this</span>);</pre></div></div>
|
577 |
|
578 | </li>
|
579 |
|
580 | </ul>
|
581 | </div>
|
582 | </body>
|
583 | </html>
|