UNPKG

oidc-lib

Version:

A library for creating OIDC Service Providers

83 lines (70 loc) 3.07 kB
module.exports = { compile: compile } function compile(source){ var offset = 0; var segments = []; while (offset < source.length){ var startTokenOffset = source.substring(offset).indexOf('{{#'); if (startTokenOffset >=0 ){ startTokenOffset += offset; segments.push({source: [], content: source.substring(offset, startTokenOffset)}); endOfStartTokenOffset = startTokenOffset + 3; var tokenLength = source.substring(endOfStartTokenOffset).indexOf('}}'); var tokenName = source.substring(endOfStartTokenOffset, endOfStartTokenOffset + tokenLength); var endOfStartToken = startTokenOffset + tokenName.length + 6; var closingToken = '{{/' + tokenName + '}}'; var closingTokenOffset = source.substring(endOfStartToken).indexOf(closingToken); var tokenContent = source.substring(endOfStartToken, endOfStartToken + closingTokenOffset); var endTokenOffset = endOfStartToken + tokenContent.length + closingToken.length; segments.push({source: [tokenName], content: tokenContent}); } else{ segments.push({source: [], content: source.substring(offset, source.length)}); var endTokenOffset = source.length; } offset = endTokenOffset; } addTemplateFunction(segments); return templateProcessor; } function substitute(tokenContent, json){ for (var claim in json){ tokenContent = tokenContent.replace(new RegExp('{{{' + claim + '}}}', 'g'), json[claim]).replace(new RegExp('{{' + claim + '}}', 'g'), json[claim]); } return tokenContent; } function addTemplateFunction(segments){ var oScript = document.createElement('script'); oScript.language = 'javascript'; oScript.type = 'text/javascript'; oScript.text = templateProcessorSource.toString() .replace('templateProcessorSource', 'templateProcessor') .replace('// placeHolderForSegments', 'var segments = ' + JSON.stringify(segments) + ';') + '\r\n\r\n' + templateProcessorSubstitute.toString(); document.getElementsByTagName('BODY').item(0).appendChild(oScript); } function templateProcessorSource(context){ // placeHolderForSegments var output = ""; for (var c1=0; c1 < segments.length; c1++){ var step =segments[c1]; if (step.source.length === 0){ output += step.content; } else if (step.source.length === 1){ var repeater = context[step.source[0]]; for (var c2=0; c2 < repeater.length; c2++){ output += templateProcessorSubstitute(step.content, repeater[c2]); } } } output = templateProcessorSubstitute(output, context); return output; } function templateProcessorSubstitute(tokenContent, json){ for (var claim in json){ var tokenContent = tokenContent.replace(new RegExp('{{{' + claim + '}}}', 'g'), json[claim]).replace(new RegExp('{{' + claim + '}}', 'g'), json[claim]); } return tokenContent; }