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(/&lt;/g, "<").replace(/&gt;/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 + -
显示快捷键?