Code coverage report for bookdown-base/index.js

Statements: 89.74% (35 / 39)      Branches: 60% (6 / 10)      Functions: 100% (5 / 5)      Lines: 94.44% (34 / 36)      Ignored: none     

All files » bookdown-base/ » index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78    1 1 1 1 1   1 1           1 1         1 1               1 1 1 1     1     1       1 1 1 1     1     1               1 1 1 1 1   1 16 12 12 12         1    
'use strict'
 
const ware = require('ware')
const fs = require('fs')
const jade = require('jade')
const join = require('path').join
const assign = Object.assign
 
const buildJs = require('./lib/build_js')
const buildCss = require('./lib/build_css')
 
/**
 * Metalsmith middleware
 */
 
module.exports = function base (options) {
  var app = ware()
    .use(addJs)
    .use(addCss)
    .use(relayout)
 
  return function (files, ms, done) {
    app.run(files, ms, done)
  }
}
 
/**
 * Assets
 */
 
function addCss (files, ms, done) {
  buildCss((err, contents) => {
    Iif (err) return done(err)
    Iif (!files['assets/style.css']) {
      files['assets/style.css'] = { contents }
    } else {
      files['assets/style.css'].contents = contents + '\n' +
        files['assets/style.css'].contents
    }
    done()
  })
}
 
function addJs (files, ms, done) {
  buildJs((err, contents) => {
    Iif (err) return done(err)
    Iif (!files['assets/script.js']) {
      files['assets/script.js'] = { contents }
    } else {
      files['assets/script.js'].contents = contents + '\n' +
        files['assets/script.js'].contents
    }
    done()
  })
}
 
/**
 * Layout jade
 */
 
function relayout (files, ms, done) {
  const toc = JSON.parse(files['toc.json'].contents)
  const index = JSON.parse(files['index.json'].contents)
  const path = fs.readFileSync(join(__dirname, 'data/layout.jade'), 'utf-8')
  const layout = jade.compile(path)
 
  Object.keys(files).forEach((fname) => {
    if (!fname.match(/\.html$/)) return
    const file = files[fname]
    const base = Array(fname.split('/').length).join('../')
    file.contents = layout(assign({}, file, {
      base, toc, index, active: fname
    }))
  })
 
  done()
}