/*\ title: $:/core/modules/utils/logger.js type: application/javascript module-type: utils A basic logging implementation \*/ (function(){ /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; var ALERT_TAG = "$:/tags/Alert"; /* Make a new logger */ function Logger(componentName) { this.componentName = componentName || ""; } /* Log a message */ Logger.prototype.log = function(/* args */) { if(console !== undefined && console.log !== undefined) { return Function.apply.call(console.log, console, [this.componentName + ":"].concat(Array.prototype.slice.call(arguments,0))); } }; /* Alert a message */ Logger.prototype.alert = function(/* args */) { // Prepare the text of the alert var text = Array.prototype.join.call(arguments," "); // Create alert tiddlers in the browser if($tw.browser) { // Check if there is an existing alert with the same text and the same component var existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG), alertFields, existingCount, self = this; $tw.utils.each(existingAlerts,function(title) { var tiddler = $tw.wiki.getTiddler(title); if(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) { alertFields = $tw.utils.extend({},tiddler.fields); } }); if(alertFields) { existingCount = alertFields.count || 1; } else { alertFields = { title: $tw.wiki.generateNewTitle("$:/temp/alerts/alert",{prefix: ""}), text: text, tags: [ALERT_TAG], component: this.componentName }; existingCount = 0; } alertFields.modified = new Date(); if(++existingCount > 1) { alertFields.count = existingCount; } else { alertFields.count = undefined; } $tw.wiki.addTiddler(new $tw.Tiddler(alertFields)); // Log the alert as well this.log.apply(this,Array.prototype.slice.call(arguments,0)); } else { // Print an orange message to the console if not in the browser console.error("\x1b[1;33m" + text + "\x1b[0m"); } }; exports.Logger = Logger; })();