diff --git a/core/modules/utils/logger.js b/core/modules/utils/logger.js index bf320ae42..f89e40304 100644 --- a/core/modules/utils/logger.js +++ b/core/modules/utils/logger.js @@ -12,6 +12,8 @@ A basic logging implementation /*global $tw: false */ "use strict"; +var ALERT_TAG = "$:/tags/Alert"; + /* Make a new logger */ @@ -32,15 +34,37 @@ Logger.prototype.log = function(/* args */) { Alert a message */ Logger.prototype.alert = function(/* args */) { - var text = Array.prototype.join.call(arguments," "), - fields = { + // Prepare the text of the alert + var text = Array.prototype.join.call(arguments," "); + // 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: ["$:/tags/Alert"], - component: this.componentName, - modified: new Date() + tags: [ALERT_TAG], + component: this.componentName }; - $tw.wiki.addTiddler(new $tw.Tiddler(fields)); + existingCount = 0; + } + alertFields.modified = new Date(); + if(++existingCount > 1) { + alertFields.count = existingCount; + } else { + alertFields.count = undefined; + } + $tw.wiki.addTiddler(new $tw.Tiddler(alertFields)); // Log it too this.log.apply(this,Array.prototype.slice.call(arguments,0)); }; diff --git a/core/ui/AlertTemplate.tid b/core/ui/AlertTemplate.tid index b9242f2e3..234a4d29a 100644 --- a/core/ui/AlertTemplate.tid +++ b/core/ui/AlertTemplate.tid @@ -1,3 +1,4 @@ title: $:/core/ui/AlertTemplate -