'use strict'; var repeat = require('repeat-string'); var pad = require('../util/pad'); module.exports = listItem; /* Which checkbox to use. */ var CHECKBOX_MAP = { undefined: '', null: '', true: '[x] ', false: '[ ] ' }; /* Stringify a list item. * * Prefixes the content with a checked checkbox when * `checked: true`: * * [x] foo * * Prefixes the content with an unchecked checkbox when * `checked: false`: * * [ ] foo */ function listItem(node, parent, position, bullet) { var self = this; var style = self.options.listItemIndent; var loose = node.loose; var children = node.children; var length = children.length; var values = []; var index = -1; var value; var indent; var spacing; while (++index < length) { values[index] = self.visit(children[index], node); } value = CHECKBOX_MAP[node.checked] + values.join(loose ? '\n\n' : '\n'); if (style === '1' || (style === 'mixed' && value.indexOf('\n') === -1)) { indent = bullet.length + 1; spacing = ' '; } else { indent = Math.ceil((bullet.length + 1) / 4) * 4; spacing = repeat(' ', indent - bullet.length); } value = bullet + spacing + pad(value, indent / 4).slice(indent); if (loose && parent.children.length - 1 !== position) { value += '\n'; } return value; }