handsontable
Version:
Handsontable is a JavaScript Data Grid available for React, Angular and Vue.
106 lines (98 loc) • 2.89 kB
JavaScript
;
exports.__esModule = true;
exports.deprecatedWarn = deprecatedWarn;
exports.error = error;
exports.info = info;
exports.log = log;
exports.logAggregatedItems = logAggregatedItems;
exports.warn = warn;
var _string = require("./string");
var _mixed = require("./mixed");
/* eslint-disable no-console */
/* eslint-disable no-restricted-globals */
/**
* "In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened
* for a particular tab.".
*
* Source: https://stackoverflow.com/a/5473193.
*/
/**
* Logs message to the console if the `console` object is exposed.
*
* @param {...*} args Values which will be logged.
*/
function log() {
if ((0, _mixed.isDefined)(console)) {
console.log(...arguments);
}
}
/**
* Logs warn to the console if the `console` object is exposed.
*
* @param {...*} args Values which will be logged.
*/
function warn() {
if ((0, _mixed.isDefined)(console)) {
console.warn(...arguments);
}
}
/**
* Logs deprecated warn to the console if the `console` object is exposed.
*
* @param {string} message The message to log.
*/
function deprecatedWarn(message) {
if ((0, _mixed.isDefined)(console)) {
console.warn(`Deprecated: ${message}`);
}
}
/**
* Logs info to the console if the `console` object is exposed.
*
* @param {...*} args Values which will be logged.
*/
function info() {
if ((0, _mixed.isDefined)(console)) {
console.info(...arguments);
}
}
/**
* Logs error to the console if the `console` object is exposed.
*
* @param {...*} args Values which will be logged.
*/
function error() {
if ((0, _mixed.isDefined)(console)) {
console.error(...arguments);
}
}
/**
* Logs an aggregated log message with a sample list of items.
*
* @param {object} options Log options.
* @param {Function} [options.logFunction] Function to log the message.
* @param {string} options.message Message template.
* @param {Array} options.items List of items to aggregate.
* @param {number} [options.maxSample=5] Maximum number of items to list.
* @param {Function} [options.itemFormatter] Formatter for each item.
*/
function logAggregatedItems() {
let {
logFunction = log,
message,
items,
maxSample = 5,
itemFormatter = item => `${item}`
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (!Array.isArray(items) || items.length === 0) {
return;
}
const count = items.length;
const formattedItems = items.slice(0, maxSample).map(item => ` - ${itemFormatter(item)}`);
const more = count > maxSample ? ` - ...and ${count - maxSample} more` : '';
const affectedLines = ['Affected cells:', ...formattedItems, ...(more ? [more] : [])].join('\n');
logFunction((0, _string.substitute)(message, {
itemsCount: `${count} cell${count > 1 ? 's' : ''}`,
affectedCells: affectedLines
}));
}