all files / es6/modules/ loop.js

97.06% Statements 33/34
94.44% Branches 17/18
100% Functions 5/5
96.97% Lines 32/33
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         294× 294× 294× 50×   244×   235× 67×   168×   161×     196×       196× 5152× 153×   5152×       5589× 5523×   66× 112× 112×               66× 66×       90×  
const DocUtils = require("../doc-utils");
const dashInnerRegex = /^-([^\s]+)\s(.+)$/;
const wrapper = require("../module-wrapper");
 
const moduleName = "loop";
 
const loopModule = {
	name: "LoopModule",
	parse(placeHolderContent) {
		const module = moduleName;
		const type = "placeholder";
		if (placeHolderContent[0] === "#") {
			return {type, value: placeHolderContent.substr(1), expandTo: "auto", module, location: "start", inverted: false};
		}
		if (placeHolderContent[0] === "^") {
			return {type, value: placeHolderContent.substr(1), expandTo: "auto", module, location: "start", inverted: true};
		}
		if (placeHolderContent[0] === "/") {
			return {type, value: placeHolderContent.substr(1), module, location: "end"};
		}
		if (placeHolderContent[0] === "-") {
			const value = placeHolderContent.replace(dashInnerRegex, "$2");
			const expandTo = placeHolderContent.replace(dashInnerRegex, "$1");
			return {type, value, expandTo, module, location: "start", inverted: false};
		}
		return null;
	},
	getTraits(traitName, parsed) {
		Iif (traitName !== "expandPair") {
			return;
		}
 
		return parsed.reduce(function (tags, part, offset) {
			if (part.type === "placeholder" && part.module === moduleName) {
				tags.push({part, offset});
			}
			return tags;
		}, []);
	},
	render(part, options) {
		if(!part.type === "placeholder" || part.module !== moduleName) {
			return null;
		}
		const totalValue = [];
		function loopOver(scope) {
			const scopeManager = options.scopeManager.createSubScopeManager(scope, part.value);
			totalValue.push(options.render(
				DocUtils.mergeObjects({}, options, {
					compiled: part.subparsed,
					tags: {},
					scopeManager,
				})
			));
		}
		options.scopeManager.loopOver(part.value, loopOver, part.inverted);
		return {value: totalValue.join("")};
	},
};
 
module.exports = () => wrapper(loopModule);