nornj
Version:
A powerful template engine that can works with React, JSX enhancement or alternative tools.
311 lines (270 loc) • 8.76 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.registerFilter = registerFilter;
exports.filterConfig = exports.filters = void 0;
var _core = _interopRequireDefault(require("../core"));
var tools = _interopRequireWildcard(require("../utils/tools"));
var _transformData = require("../transforms/transformData");
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 }; }
var REGEX_DIGITS_RE = /(\d{3})(?=\d)/g; //Global filter list
var filters = {
//Get properties
'.': function _(obj, prop, callFn) {
if (obj == null) {
return obj;
}
if (obj._njSrc) {
return {
source: obj.value,
value: obj.value[prop],
prop: prop,
parent: obj,
_njSrc: true
};
} else if (callFn) {
return {
source: obj,
value: obj[prop],
prop: prop,
_njSrc: true
};
}
return obj[prop];
},
//Call function
_: function _(fn, args) {
if (fn == null) {
return fn;
}
if (fn._njSrc) {
var _fn = fn.source[fn.prop];
return _fn != null ? _fn.apply(fn.source, args) : _fn;
}
return fn.apply(null, args);
},
//Get accessor properties
'#': function _(obj, prop, options) {
if (obj == null) {
return obj;
}
return (0, _transformData.getAccessorData)(obj[prop], options.context);
},
'**': function _(val1, val2) {
var ret = Math.pow(val1, val2);
return isNaN(ret) ? 0 : ret;
},
'%%': function _(val1, val2) {
var ret = Math.floor(val1 / val2);
return isNaN(ret) ? 0 : ret;
},
//Ternary operator
'?:': function _(val, val1, val2) {
return val ? val1 : val2;
},
'!': function _(val) {
return !val;
},
//Convert to int
"int": function int(val) {
var radix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
var ret = parseInt(val, radix);
return isNaN(ret) ? 0 : ret;
},
//Convert to float
"float": function float(val, bit) {
var ret = parseFloat(val);
return isNaN(ret) ? 0 : bit != null ? ret.toFixed(bit) : ret;
},
//Convert to boolean
bool: function bool(val) {
if (val === 'false') {
return false;
}
return Boolean(val);
},
reg: function reg(pattern, flags) {
return new RegExp(pattern, flags);
},
//Transform css string to object
css: function css(cssText) {
return (0, _transformData.styleProps)(cssText);
},
//Generate array by two positive integers,closed interval
rOpe: _getArrayByNum(1),
//Generate array by two positive integers,right open interval
rLt: _getArrayByNum(0),
//Compare two number or letter
'<=>': function _(val1, val2) {
if (val1 > val2) {
return 1;
} else if (val1 == val2) {
return 0;
} else {
return -1;
}
},
upperFirst: function upperFirst(str) {
return tools.upperFirst(str);
},
lowerFirst: function lowerFirst(str) {
return tools.lowerFirst(str);
},
camelCase: function camelCase(str) {
return tools.camelCase(str);
},
isObject: function isObject(val) {
return tools.isObject(val);
},
isNumber: function isNumber(val) {
return tools.isNumber(val);
},
isString: function isString(val) {
return tools.isString(val);
},
isArrayLike: function isArrayLike(val) {
return tools.isArrayLike(val);
},
currency: function currency(value, decimals, symbol, placeholder) {
if (!(value - parseFloat(value) >= 0)) {
return placeholder != null ? placeholder : filterConfig.currency.placeholder;
}
value = parseFloat(value);
symbol = decimals != null && tools.isString(decimals) ? decimals : symbol;
symbol = symbol != null && tools.isString(symbol) ? symbol : filterConfig.currency.symbol;
decimals = decimals != null && tools.isNumber(decimals) ? decimals : 2;
var stringified = Math.abs(value).toFixed(decimals);
var _int = decimals ? stringified.slice(0, -1 - decimals) : stringified;
var i = _int.length % 3;
var head = i > 0 ? _int.slice(0, i) + (_int.length > 3 ? ',' : '') : '';
var _float = decimals ? stringified.slice(-1 - decimals) : '';
var sign = value < 0 ? '-' : '';
return sign + symbol + head + _int.slice(i).replace(REGEX_DIGITS_RE, '$1,') + _float;
}
};
exports.filters = filters;
function _getArrayByNum(isContainEnd) {
return function (val1, val2) {
return Object.keys(Array.apply(null, {
length: val2 - val1 + isContainEnd
})).map(function (item) {
return +item + val1;
});
};
}
function _config(params, extra) {
var ret = {
onlyGlobal: false,
hasOptions: false,
isOperator: false,
hasLevel: false,
hasTmplCtx: true,
alias: null
};
if (params) {
ret = tools.assign(ret, params);
}
if (extra) {
ret = tools.assign(ret, extra);
}
return ret;
}
var _defaultCfg = {
onlyGlobal: true,
hasOptions: false
}; //Filter default config
var filterConfig = {
'.': _config(_defaultCfg),
_: _config({
onlyGlobal: true
}),
'#': _config({
onlyGlobal: true,
hasOptions: true,
hasLevel: true
}),
'**': _config(_defaultCfg),
'%%': _config(_defaultCfg),
'?:': _config(_defaultCfg),
'!': _config(_defaultCfg),
"int": _config(_defaultCfg),
"float": _config(_defaultCfg),
bool: _config(_defaultCfg),
reg: _config(_defaultCfg),
css: _config(_defaultCfg),
rOpe: _config(_defaultCfg),
rLt: _config(_defaultCfg),
'<=>': _config(_defaultCfg),
upperFirst: _config(_defaultCfg),
lowerFirst: _config(_defaultCfg),
camelCase: _config(_defaultCfg),
isObject: _config(_defaultCfg),
isNumber: _config(_defaultCfg),
isString: _config(_defaultCfg),
isArrayLike: _config(_defaultCfg),
currency: _config(_defaultCfg, {
symbol: '$',
placeholder: ''
})
};
exports.filterConfig = filterConfig;
filters.capitalize = filters.upperFirst;
filterConfig.capitalize = _config(filterConfig.upperFirst);
function registerFilter(name, filter, options, mergeConfig) {
var params = name;
if (!tools.isObject(name)) {
params = {};
params[name] = {
filter: filter,
options: options
};
}
tools.each(params, function (v, name) {
if (v) {
var _filter = v.filter,
_options = v.options;
if (_options) {
if (_options.isOperator) {
var createRegexOperators = _core["default"].createRegexOperators;
if (createRegexOperators) {
createRegexOperators(name);
}
}
var alias = _options.alias;
if (alias) {
var createFilterAlias = _core["default"].createFilterAlias;
if (createFilterAlias) {
createFilterAlias(name, alias);
}
name = alias;
}
}
if (_filter) {
filters[name] = _filter;
} else if (!mergeConfig) {
filters[name] = v;
}
if (mergeConfig) {
if (!filterConfig[name]) {
filterConfig[name] = _config();
}
if (tools.isObject(_options)) {
tools.assign(filterConfig[name], _options);
} else {
filterConfig[name] = _config();
}
} else {
filterConfig[name] = _config(_options);
}
}
}, false);
}
tools.assign(_core["default"], {
filters: filters,
filterConfig: filterConfig,
registerFilter: registerFilter
});