template.js
来自「anewssystem新闻发布系统集成使用了spring hibernate f」· JavaScript 代码 · 共 395 行 · 第 1/2 页
JS
395 行
begStmt = endStmtPrev = blockEnd + blockMarker.length - 1; } } } else if (body.charAt(begStmt - 1) != '$' && // Not an expression or backslashed, body.charAt(begStmt - 1) != '\\') { // so check if it is a statement tag. var offset = (body.charAt(begStmt + 1) == '/' ? 2 : 1); // Close tags offset of 2 skips '/'. // 10 is larger than maximum statement tag length. if (body.substring(begStmt + offset, begStmt + 10 + offset).search(TrimPath.parseTemplate_etc.statementTag) == 0) break; // Found a match. } begStmt = body.indexOf("{", begStmt + 1); } if (begStmt < 0) // In "a{for}c", begStmt will be 1. break; var endStmt = body.indexOf("}", begStmt + 1); // In "a{for}c", endStmt will be 5. if (endStmt < 0) break; emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText); emitStatement(body.substring(begStmt, endStmt + 1), state, funcText, tmplName, etc); endStmtPrev = endStmt; } emitSectionText(body.substring(endStmtPrev + 1), funcText); if (state.stack.length != 0) throw new etc.ParseError(tmplName, state.line, "unclosed, unmatched statement(s): " + state.stack.join(",")); funcText.push("}}; TrimPath_Template_TEMP"); return funcText.join(""); } var emitStatement = function(stmtStr, state, funcText, tmplName, etc) { var parts = stmtStr.slice(1, -1).split(' '); var stmt = etc.statementDef[parts[0]]; // Here, parts[0] == for/if/else/... if (stmt == null) { // Not a real statement. emitSectionText(stmtStr, funcText); return; } if (stmt.delta < 0) { if (state.stack.length <= 0) throw new etc.ParseError(tmplName, state.line, "close tag does not match any previous statement: " + stmtStr); state.stack.pop(); } if (stmt.delta > 0) state.stack.push(stmtStr); if (stmt.paramMin != null && stmt.paramMin >= parts.length) throw new etc.ParseError(tmplName, state.line, "statement needs more parameters: " + stmtStr); if (stmt.prefixFunc != null) funcText.push(stmt.prefixFunc(parts, state, tmplName, etc)); else funcText.push(stmt.prefix); if (stmt.suffix != null) { if (parts.length <= 1) { if (stmt.paramDefault != null) funcText.push(stmt.paramDefault); } else { for (var i = 1; i < parts.length; i++) { if (i > 1) funcText.push(' '); funcText.push(parts[i]); } } funcText.push(stmt.suffix); } }
var emitSectionText = function(text, funcText) { if (text.length <= 0) return; var nlPrefix = 0; // Index to first non-newline in prefix. var nlSuffix = text.length - 1; // Index to first non-space/tab in suffix.
while (nlPrefix < text.length && (text.charAt(nlPrefix) == '\n')) nlPrefix++; while (nlSuffix >= 0 && (text.charAt(nlSuffix) == ' ' || text.charAt(nlSuffix) == '\t')) nlSuffix--; if (nlSuffix < nlPrefix) nlSuffix = nlPrefix; if (nlPrefix > 0) { funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
var s = text.substring(0, nlPrefix).replace('\n', '\\n'); // A macro IE fix from BJessen. if (s.charAt(s.length - 1) == '\n') s = s.substring(0, s.length - 1); funcText.push(s); funcText.push('");'); } var lines = text.substring(nlPrefix, nlSuffix + 1).split('\n'); for (var i = 0; i < lines.length; i++) { emitSectionTextLine(lines[i], funcText); if (i < lines.length - 1) funcText.push('_OUT.write("\\n");\n'); }
if (nlSuffix + 1 < text.length) { funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("'); var s = text.substring(nlSuffix + 1).replace('\n', '\\n'); if (s.charAt(s.length - 1) == '\n') s = s.substring(0, s.length - 1); funcText.push(s); funcText.push('");'); } } var emitSectionTextLine = function(line, funcText) { var endMarkPrev = '}'; var endExprPrev = -1; while (endExprPrev + endMarkPrev.length < line.length) { var begMark = "${", endMark = "}"; var begExpr = line.indexOf(begMark, endExprPrev + endMarkPrev.length); // In "a${b}c", begExpr == 1 if (begExpr < 0) break; if (line.charAt(begExpr + 2) == '%') { begMark = "${%"; endMark = "%}"; } var endExpr = line.indexOf(endMark, begExpr + begMark.length); // In "a${b}c", endExpr == 4; if (endExpr < 0) break; emitText(line.substring(endExprPrev + endMarkPrev.length, begExpr), funcText); // Example: exprs == 'firstName|default:"John Doe"|capitalize'.split('|') var exprArr = line.substring(begExpr + begMark.length, endExpr).replace(/\|\|/g, "#@@#").split('|'); for (var k in exprArr) { if (exprArr[k].replace) // IE 5.x fix from Igor Poteryaev. exprArr[k] = exprArr[k].replace(/#@@#/g, '||'); } funcText.push('_OUT.write('); emitExpression(exprArr, exprArr.length - 1, funcText); funcText.push(');'); endExprPrev = endExpr; endMarkPrev = endMark; } emitText(line.substring(endExprPrev + endMarkPrev.length), funcText); } var emitText = function(text, funcText) { if (text == null || text.length <= 0) return; text = text.replace(/\\/g, '\\\\'); text = text.replace(/\n/g, '\\n'); text = text.replace(/"/g, '\\"'); funcText.push('_OUT.write("'); funcText.push(text); funcText.push('");'); } var emitExpression = function(exprArr, index, funcText) { // Ex: foo|a:x|b:y1,y2|c:z1,z2 is emitted as c(b(a(foo,x),y1,y2),z1,z2) var expr = exprArr[index]; // Ex: exprArr == [firstName,capitalize,default:"John Doe"] if (index <= 0) { // Ex: expr == 'default:"John Doe"'
funcText.push(expr); return; } var parts = expr.split(':'); funcText.push('_MODIFIERS["'); funcText.push(parts[0]); // The parts[0] is a modifier function name, like capitalize. funcText.push('"]('); emitExpression(exprArr, index - 1, funcText); if (parts.length > 1) { funcText.push(','); funcText.push(parts[1]); } funcText.push(')'); }
var cleanWhiteSpace = function(result) { result = result.replace(/\t/g, " "); result = result.replace(/\r\n/g, "\n"); result = result.replace(/\r/g, "\n"); result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1'); // Right trim by Igor Poteryaev. return result; } var scrubWhiteSpace = function(result) { result = result.replace(/^\s+/g, ""); result = result.replace(/\s+$/g, ""); result = result.replace(/\s+/g, " "); result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1'); // Right trim by Igor Poteryaev. return result; } // The DOM helper functions depend on DOM/DHTML, so they only work in a browser. // However, these are not considered core to the engine. // TrimPath.parseDOMTemplate = function(elementId, optDocument, optEtc) { if (optDocument == null) optDocument = document; var element = optDocument.getElementById(elementId); var content = element.value; // Like textarea.value. if (content == null) content = element.innerHTML; // Like textarea.innerHTML. content = content.replace(/</g, "<").replace(/>/g, ">"); return TrimPath.parseTemplate(content, elementId, optEtc); } TrimPath.processDOMTemplate = function(elementId, context, optFlags, optDocument, optEtc) { return TrimPath.parseDOMTemplate(elementId, optDocument, optEtc).process(context, optFlags); }}) ();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?