| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- const escape = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": ''',
- '`': '`',
- '=': '='
- };
- const badChars = /[&<>"'`=]/g,
- possible = /[&<>"'`=]/;
- function escapeChar(chr) {
- return escape[chr];
- }
- export function extend(obj /* , ...source */) {
- for (let i = 1; i < arguments.length; i++) {
- for (let key in arguments[i]) {
- if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
- obj[key] = arguments[i][key];
- }
- }
- }
- return obj;
- }
- export let toString = Object.prototype.toString;
- // Sourced from lodash
- // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
- /* eslint-disable func-style */
- let isFunction = function(value) {
- return typeof value === 'function';
- };
- // fallback for older versions of Chrome and Safari
- /* istanbul ignore next */
- if (isFunction(/x/)) {
- isFunction = function(value) {
- return (
- typeof value === 'function' &&
- toString.call(value) === '[object Function]'
- );
- };
- }
- export { isFunction };
- /* eslint-enable func-style */
- /* istanbul ignore next */
- export const isArray =
- Array.isArray ||
- function(value) {
- return value && typeof value === 'object'
- ? toString.call(value) === '[object Array]'
- : false;
- };
- // Older IE versions do not directly support indexOf so we must implement our own, sadly.
- export function indexOf(array, value) {
- for (let i = 0, len = array.length; i < len; i++) {
- if (array[i] === value) {
- return i;
- }
- }
- return -1;
- }
- export function escapeExpression(string) {
- if (typeof string !== 'string') {
- // don't escape SafeStrings, since they're already safe
- if (string && string.toHTML) {
- return string.toHTML();
- } else if (string == null) {
- return '';
- } else if (!string) {
- return string + '';
- }
- // Force a string conversion as this will be done by the append regardless and
- // the regex test will do this transparently behind the scenes, causing issues if
- // an object's to string has escaped characters in it.
- string = '' + string;
- }
- if (!possible.test(string)) {
- return string;
- }
- return string.replace(badChars, escapeChar);
- }
- export function isEmpty(value) {
- if (!value && value !== 0) {
- return true;
- } else if (isArray(value) && value.length === 0) {
- return true;
- } else {
- return false;
- }
- }
- export function createFrame(object) {
- let frame = extend({}, object);
- frame._parent = object;
- return frame;
- }
- export function blockParams(params, ids) {
- params.path = ids;
- return params;
- }
- export function appendContextPath(contextPath, id) {
- return (contextPath ? contextPath + '.' : '') + id;
- }
|