UNPKG

docxtemplater

Version:

.docx generator working with templates and data (like Mustache)

345 lines (344 loc) 9.74 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for es6/modules/expandPairTrait.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">all files</a> / <a href="index.html">es6/modules/</a> expandPairTrait.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>65/65</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>30/30</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>6/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>65/65</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94</td><td class="line-coverage quiet"><span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">681×</span> <span class="cline-any cline-yes">478×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">203×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">325×</span> <span class="cline-any cline-yes">325×</span> <span class="cline-any cline-yes">325×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">480×</span> <span class="cline-any cline-yes">480×</span> <span class="cline-any cline-yes">1901×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">480×</span> <span class="cline-any cline-yes">480×</span> <span class="cline-any cline-yes">478×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">68×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">55×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">478×</span> <span class="cline-any cline-yes">478×</span> <span class="cline-any cline-yes">478×</span> <span class="cline-any cline-yes">66532×</span> <span class="cline-any cline-yes">66532×</span> <span class="cline-any cline-yes">66532×</span> <span class="cline-any cline-yes">66532×</span> <span class="cline-any cline-yes">49066×</span> <span class="cline-any cline-yes">49066×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">17466×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">17466×</span> <span class="cline-any cline-yes">17064×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">17466×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-yes">201×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">17265×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const traitName = "expandPair"; const mergeSort = require("../mergesort"); const DocUtils = require("../docUtils"); const {getExpandToDefault} = require("../traits"); const Errors = require("../errors"); &nbsp; function throwUnmatchedLoopException(options) { const location = options.location; const t = location === "start" ? "unclosed" : "unopened"; const T = location === "start" ? "Unclosed" : "Unopened"; &nbsp; const err = new Errors.XTTemplateError(`${T} loop`); const tag = options.part.value; err.properties = { id: `${t}_loop`, explanation: `The loop with tag ${tag} is ${t}`, xtag: tag, }; throw err; } &nbsp; function getPairs(traits) { if (traits.length === 0) { return []; } if (traits.length === 1) { const part = traits[0].part; throwUnmatchedLoopException({part, location: traits[0].part.location}); } const trait = traits[0]; let countOpen = 1; for (let i = 1; i &lt; traits.length; i++) { const t = traits[i]; countOpen += t.part.location === "start" ? 1 : -1; if (countOpen === 0) { const outer = getPairs(traits.slice(i + 1)); return [[trait, t]].concat(outer); } } } &nbsp; const expandPairTrait = { postparse: function (parsed, {getTraits, postparse}) { let traits = getTraits(traitName, parsed); traits = traits.map(function (trait) { return trait || []; }); traits = mergeSort(traits); const pairs = getPairs(traits); const expandedPairs = pairs.map(function (pair) { let expandTo = pair[0].part.expandTo; if (expandTo === "auto") { expandTo = getExpandToDefault(parsed.slice(pair[0].offset, pair[1].offset)); } if (!expandTo) { return [pair[0].offset, pair[1].offset]; } const left = DocUtils.getLeft(parsed, expandTo, pair[0].offset); const right = DocUtils.getRight(parsed, expandTo, pair[1].offset); return [left, right]; }); &nbsp; let currentPairIndex = 0; let innerParts; return parsed.reduce(function (newParsed, part, i) { const inPair = currentPairIndex &lt; pairs.length &amp;&amp; expandedPairs[currentPairIndex][0] &lt;= i; const pair = pairs[currentPairIndex]; const expandedPair = expandedPairs[currentPairIndex]; if(!inPair) { newParsed.push(part); return newParsed; } if (expandedPair[0] === i) { innerParts = []; } if (pair[0].offset !== i &amp;&amp; pair[1].offset !== i) { innerParts.push(part); } if (expandedPair[1] === i) { const basePart = parsed[pair[0].offset]; delete basePart.location; delete basePart.expandTo; basePart.subparsed = postparse(innerParts); newParsed.push(basePart); currentPairIndex++; return newParsed; } return newParsed; }, []); }, }; &nbsp; module.exports = expandPairTrait; &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Sat Jun 18 2016 12:59:17 GMT+0200 (CEST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html>