|
| 1 | +var fs = require('fs') |
| 2 | +var _ = require('lodash') |
| 3 | +var path = require('path') |
| 4 | +var mkdirp = require('mkdirp') |
| 5 | +var glob = require('glob') |
| 6 | +var titleize = require('titleize') |
| 7 | +var fm = require('json-front-matter') |
| 8 | +var escapeHtml = require('escape-html') |
| 9 | +var rmHtmlExt = require('remove-html-extension') |
| 10 | +var getClasses = require('get-classes-from-html') |
| 11 | +var postcss = require('postcss') |
| 12 | +var select = require('postcss-select') |
| 13 | +var atImport = require('postcss-import') |
| 14 | +var conditionals = require('postcss-conditionals') |
| 15 | +var removeComments = require('postcss-discard-comments') |
| 16 | +var perfectionist = require('perfectionist') |
| 17 | +var removeEmpty = require('postcss-discard-empty') |
| 18 | +var cssVariables = require('postcss-css-variables') |
| 19 | +var customMedia = require('postcss-custom-media') |
| 20 | +var mqPacker = require('css-mqpacker') |
| 21 | +var cssstats = require('cssstats') |
| 22 | + |
| 23 | +var tachyonsCss = fs.readFileSync('src/css/tachyons.css', 'utf8') |
| 24 | +var footer = fs.readFileSync('src/templates/footer.html', 'utf8') |
| 25 | +var analytics = fs.readFileSync('src/templates/ga.html', 'utf8') |
| 26 | +var head = fs.readFileSync('src/templates/head.html', 'utf8') |
| 27 | +var header = fs.readFileSync('src/templates/header.html', 'utf8') |
| 28 | +var highlight = fs.readFileSync('src/templates/highlight.html', 'utf8') |
| 29 | + |
| 30 | +module.exports = function () { |
| 31 | + glob('src/components/**/*.html', {}, function (err, components) { |
| 32 | + if (err) { |
| 33 | + console.error(err) |
| 34 | + return |
| 35 | + } |
| 36 | + |
| 37 | + var template = fs.readFileSync('src/templates/components.html', 'utf8') |
| 38 | + var indexTemplate = fs.readFileSync('src/templates/components-index.html', 'utf8') |
| 39 | + |
| 40 | + var componentsForNav = {} |
| 41 | + components.map(function (component) { |
| 42 | + var componentTokens = component.replace('src/components/', '').split('/') |
| 43 | + var category = componentTokens[0] |
| 44 | + |
| 45 | + componentsForNav[category] = componentsForNav[category] || [] |
| 46 | + componentsForNav[category].push({ |
| 47 | + href: component.replace('src', '').replace('.html', '') + '/index.html', |
| 48 | + name: getName(component) |
| 49 | + }) |
| 50 | + }) |
| 51 | + |
| 52 | + var compiledPage = _.template(indexTemplate)({ |
| 53 | + componentsForNav: componentsForNav, |
| 54 | + title: 'Components', |
| 55 | + analytics: analytics, |
| 56 | + footer: footer, |
| 57 | + head: head, |
| 58 | + header: header, |
| 59 | + }) |
| 60 | + |
| 61 | + mkdirp.sync('components') |
| 62 | + fs.writeFileSync('components/index.html', compiledPage) |
| 63 | + }) |
| 64 | +} |
| 65 | + |
| 66 | +function getTitle(component) { |
| 67 | + var title = rmHtmlExt(component).replace('src/components/', '').replace(/(\/|_|-)/g, ' ') |
| 68 | + return titleize(title) |
| 69 | +} |
| 70 | + |
| 71 | +function getName(component) { |
| 72 | + return titleize(getTitle(component.split('/')[3])) |
| 73 | +} |
0 commit comments