@awesome-fe/translate
Version:
Translation utils
67 lines • 2.08 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.listItemVisitor = void 0;
var pad_1 = require("./utils/pad");
var lineFeed = '\n';
var space = ' ';
var leftSquareBracket = '[';
var rightSquareBracket = ']';
var lowercaseX = 'x';
var ceil = Math.ceil;
var blank = lineFeed + lineFeed;
var tabSize = 4;
// Stringify a list item.
//
// Prefixes the content with a checked checkbox when `checked: true`:
//
// ```markdown
// [x] foo
// ```
//
// Prefixes the content with an unchecked checkbox when `checked: false`:
//
// ```markdown
// [ ] foo
// ```
function listItemVisitor(node, parent, position, bullet) {
var self = this;
var style = self.options.listItemIndent;
var marker = node.marker || bullet || self.options.bullet;
var spread = node.spread == null ? true : node.spread;
var checked = node.checked;
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 = values.join(spread ? blank : lineFeed);
if (typeof checked === 'boolean') {
// Note: I’d like to be able to only add the space between the check and
// the value, but unfortunately github does not support empty list-items
// with a checkbox :(
value =
leftSquareBracket +
(checked ? lowercaseX : space) +
rightSquareBracket +
space +
value;
}
if (style === '1' || (style === 'mixed' && value.indexOf(lineFeed) === -1)) {
indent = marker.length + 1;
spacing = space;
}
else {
indent = ceil((marker.length + 1) / tabSize) * tabSize;
spacing = space.repeat(indent - marker.length);
}
return value
? marker + spacing + pad_1.pad(value, indent / tabSize).slice(indent)
: marker;
}
exports.listItemVisitor = listItemVisitor;
//# sourceMappingURL=list-item-visitor.js.map