mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-10-25 20:57:38 +00:00
Enhance alerting to coalesce repeated alerts with the same text
This commit is contained in:
@@ -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));
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user