#!/usr/bin/env node /* jshint node: true */ var fs = require('fs'), path = require('path'), list = [], // stores list of files as they are scanned titleRx = /([^<]+)/, // RegExp for scanning title tag internDirRx = /test[\/\\]intern[\/\\]/, // RegExp for paths under the intern folder testDir = path.join(__dirname, '..'), filename = path.join(__dirname, 'index.json'); function populateList(subdir) { // Populates the list variable with the names of all files under the given // path, including subdirectories. This function is called recursively; // the initial call should not specify an argument. var dir = path.join(testDir, subdir), files = fs.readdirSync(dir).sort(), i, len, file, match; for (i = 0, len = files.length; i < len; i++) { file = files[i]; if (path.extname(file) === '.html' && file !== 'index.html' && !internDirRx.test(dir)) { match = titleRx.exec(fs.readFileSync(path.join(dir, file))); list.push({ name: file, // filename only, for display purposes url: (subdir ? subdir + '/' : '') + file, // relative to test folder, serves as ID title: match ? match[1] : '', parent: subdir || '' }); } else if (fs.statSync(path.join(dir, file)).isDirectory() && (file !== 'data' && !internDirRx.test(dir + '/'))) { // Subdirectory found; add entry and recurse list.push({ name: file, url: (subdir ? subdir + '/' : '') + file, parent: subdir || '' }); populateList(path.join(subdir, file)); } } } populateList(''); fs.writeFileSync(filename, JSON.stringify(list, null, '\t') + '\n');