nornj
Version:
A powerful template engine that can works with React, JSX enhancement or alternative tools.
177 lines (146 loc) • 7.58 kB
JavaScript
;
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createTmplRule = createTmplRule;
var _core = _interopRequireDefault(require("../core"));
var tools = _interopRequireWildcard(require("./tools"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _createRegExp(reg, mode) {
return new RegExp(reg, mode);
} //Clear the repeated characters
function _clearRepeat(str) {
var ret = '',
i = 0,
_char;
var l = str.length;
for (; i < l; i++) {
_char = str[i];
if (ret.indexOf(_char) < 0) {
ret += _char;
}
}
return ret;
}
function _replace$(str) {
return str.replace(/\$/g, '\\$');
}
function _replaceMinus(str) {
return str.replace(/-/g, '\\-');
}
function _replaceMulti(str) {
return str.replace(/\*/g, '\\*');
}
function createTmplRule() {
var rules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var isGlobal = arguments.length > 1 ? arguments[1] : undefined;
var _nj$tmplRule = _core["default"].tmplRule,
_nj$tmplRule$startRul = _nj$tmplRule.startRule,
startRule = _nj$tmplRule$startRul === void 0 ? '{{' : _nj$tmplRule$startRul,
_nj$tmplRule$endRule = _nj$tmplRule.endRule,
endRule = _nj$tmplRule$endRule === void 0 ? '}}' : _nj$tmplRule$endRule,
_nj$tmplRule$extensio = _nj$tmplRule.extensionRule,
extensionRule = _nj$tmplRule$extensio === void 0 ? 'n-' : _nj$tmplRule$extensio,
_nj$tmplRule$propRule = _nj$tmplRule.propRule,
propRule = _nj$tmplRule$propRule === void 0 ? 'p-' : _nj$tmplRule$propRule,
_nj$tmplRule$strPropR = _nj$tmplRule.strPropRule,
strPropRule = _nj$tmplRule$strPropR === void 0 ? 's' : _nj$tmplRule$strPropR,
_nj$tmplRule$template = _nj$tmplRule.templateRule,
templateRule = _nj$tmplRule$template === void 0 ? 'template' : _nj$tmplRule$template,
_nj$tmplRule$tagSpRul = _nj$tmplRule.tagSpRule,
tagSpRule = _nj$tmplRule$tagSpRul === void 0 ? '#$@' : _nj$tmplRule$tagSpRul,
_nj$tmplRule$commentR = _nj$tmplRule.commentRule,
commentRule = _nj$tmplRule$commentR === void 0 ? '-' : _nj$tmplRule$commentR;
var start = rules.start,
end = rules.end,
extension = rules.extension,
prop = rules.prop,
strProp = rules.strProp,
template = rules.template,
tagSp = rules.tagSp,
comment = rules.comment,
rawStart = rules.rawStart,
rawEnd = rules.rawEnd;
if (start) {
startRule = start;
}
if (end) {
endRule = end;
}
if (extension) {
extensionRule = extension;
}
if (prop) {
propRule = prop;
}
if (strProp) {
strPropRule = strProp;
}
if (template) {
templateRule = template;
}
if (tagSp) {
tagSpRule = tagSp;
}
if (comment != null) {
commentRule = comment;
}
var firstChar = rawStart != null ? rawStart : startRule[0],
lastChar = rawEnd != null ? rawEnd : endRule[endRule.length - 1],
allRules = firstChar + lastChar,
extensionRules = _replaceMinus(_clearRepeat(extensionRule + propRule + strPropRule + tagSpRule)),
escapeExtensionRule = _replace$(extensionRule),
escapePropRule = _replace$(propRule),
escapeStrPropRule = _replace$(strPropRule),
startRuleR = firstChar + startRule,
endRuleR = endRule + lastChar,
varContent = '[\\s\\S]+?',
varContentS = '\\.\\.\\.' + varContent,
braceParamStr = _replaceMulti(startRuleR + varContent + endRuleR + '|' + startRule + varContent + endRule),
escapeStartRule = _replaceMulti(startRule),
escapeEndRule = _replaceMulti(endRule),
escapeStartRuleR = _replaceMulti(startRuleR),
escapeEndRuleR = _replaceMulti(endRuleR);
var tmplRules = {
startRule: startRule,
endRule: endRule,
extensionRule: extensionRule,
propRule: propRule,
strPropRule: strPropRule,
templateRule: templateRule,
tagSpRule: tagSpRule,
commentRule: commentRule,
firstChar: firstChar,
lastChar: lastChar,
braceParamStr: braceParamStr,
xmlOpenTag: _createRegExp('^<([a-z' + firstChar + extensionRules + '][^\\s>]*)[^>]*>$', 'i'),
openTagParams: _createRegExp('[\\s]+(((' + escapeStartRuleR + '(' + varContent + ')' + escapeEndRuleR + ')|(' + escapeStartRule + '(' + varContent + ')' + escapeEndRule + '))|[^\\s=>]+)(=((\'[^\']+\')|("[^"]+")|([^"\'\\s]+)))?', 'g'),
directives: _createRegExp('[\\s]+(((' + escapeStartRuleR + '(' + varContent + ')' + escapeEndRuleR + ')|(' + escapeStartRule + '(' + varContent + ')' + escapeEndRule + '))|((:?)(' + escapeExtensionRule + ')?([^\\s=>]+)))(=((\'[^\']+\')|("[^"]+")|([^"\'\\s>]+)))?', 'g'),
braceParam: _createRegExp(braceParamStr, 'i'),
braceParamG: _createRegExp(braceParamStr, 'ig'),
spreadProp: _createRegExp('[\\s]+(' + escapeStartRuleR + '[\\s]*(' + varContentS + ')' + escapeEndRuleR + ')|(' + escapeStartRule + '[\\s]*(' + varContentS + ')' + escapeEndRule + ')', 'g'),
replaceSplit: _createRegExp(braceParamStr),
replaceParam: _createRegExp('((' + escapeStartRuleR + ')(' + varContent + ')' + escapeEndRuleR + ')|((' + escapeStartRule + ')(' + varContent + ')' + escapeEndRule + ')', 'g'),
checkElem: _createRegExp('([^<>]+)|(<([a-z/!' + firstChar + extensionRules + '][^\\s<>]*)([^<>]*)>|<)([^<]*)', 'ig'),
extension: _createRegExp('^' + escapeExtensionRule + '([^\\s]+)', 'i'),
exAll: _createRegExp('^([/]?)(' + escapeExtensionRule + '|' + escapeStrPropRule + escapePropRule + '|' + escapePropRule + ')([^\\s]+)', 'i'),
include: _createRegExp('<' + escapeExtensionRule + 'include([^>]*)>', 'ig'),
incompleteStart: _createRegExp(startRule + '((?!' + escapeEndRule + ')[\\s\\S])*$'),
incompleteStartR: _createRegExp(escapeStartRuleR + '((?!' + escapeEndRuleR + ')[\\s\\S])*$'),
incompleteEnd: _createRegExp('^[\\s\\S]*?' + escapeEndRule),
incompleteEndR: _createRegExp('^[\\s\\S]*?' + escapeEndRuleR)
};
if (isGlobal) {
//Reset the regexs to global list
tools.assign(_core["default"].tmplRule, tmplRules);
} else {
return tmplRules;
}
} //Set global template rules
createTmplRule({}, true);
tools.assign(_core["default"], {
createTmplRule: createTmplRule
});