1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-08-07 14:23:53 +00:00

Set modified field and other metadata for newly created and modified tiddlers

Right now we're setting the created/modified time, and only setting the
creator/modifier if the tiddler `$:/status/UserName` is defined.
This commit is contained in:
Jeremy Ruston 2013-08-04 14:02:07 +01:00
parent bb843a408d
commit 86e73ee323
6 changed files with 47 additions and 14 deletions

View File

@ -124,7 +124,7 @@ var Command = function(params,commander,callback) {
if(fields["revision"]) { if(fields["revision"]) {
delete fields["revision"]; delete fields["revision"];
} }
state.wiki.addTiddler(new $tw.Tiddler(fields,{title: title})); state.wiki.addTiddler(new $tw.Tiddler(fields,{title: title},state.wiki.getModificationFields()));
var changeCount = state.wiki.getChangeCount(title).toString(); var changeCount = state.wiki.getChangeCount(title).toString();
response.writeHead(204, "OK",{ response.writeHead(204, "OK",{
Etag: "\"default/" + title + "/" + changeCount + ":\"" Etag: "\"default/" + title + "/" + changeCount + ":\""

View File

@ -47,7 +47,7 @@ exports.startup = function() {
for(var t=0; t<defaultTiddlers.length; t++) { for(var t=0; t<defaultTiddlers.length; t++) {
story[t] = defaultTiddlers[t]; story[t] = defaultTiddlers[t];
} }
$tw.wiki.addTiddler({title: storyTitle, text: story.join("\n")}); $tw.wiki.addTiddler({title: storyTitle, text: story.join("\n")},$tw.wiki.getModificationFields());
// Host-specific startup // Host-specific startup
if($tw.browser) { if($tw.browser) {
// Call browser startup modules // Call browser startup modules

View File

@ -239,7 +239,7 @@ ImportWidget.prototype.importFiles = function(files) {
}; };
ImportWidget.prototype.storeTiddler = function(fields) { ImportWidget.prototype.storeTiddler = function(fields) {
this.renderer.renderTree.wiki.addTiddler(new $tw.Tiddler(fields)); this.renderer.renderTree.wiki.addTiddler(new $tw.Tiddler(fields,this.renderer.renderTree.wiki.getModificationFields()));
}; };
ImportWidget.prototype.generateTitle = function(baseTitle) { ImportWidget.prototype.generateTitle = function(baseTitle) {

View File

@ -144,7 +144,9 @@ NavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {
title: draftTitle, title: draftTitle,
"draft.title": event.tiddlerTitle, "draft.title": event.tiddlerTitle,
"draft.of": event.tiddlerTitle "draft.of": event.tiddlerTitle
})); },
this.renderer.renderTree.wiki.getModificationFields()
));
} }
} }
this.saveStoryList(); this.saveStoryList();
@ -196,12 +198,11 @@ NavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {
var tiddler = this.renderer.renderTree.wiki.getTiddler(event.tiddlerTitle); var tiddler = this.renderer.renderTree.wiki.getTiddler(event.tiddlerTitle);
if(tiddler.hasField("draft.title")) { if(tiddler.hasField("draft.title")) {
// Save the draft tiddler as the real tiddler // Save the draft tiddler as the real tiddler
this.renderer.renderTree.wiki.addTiddler(new $tw.Tiddler(tiddler,{ this.renderer.renderTree.wiki.addTiddler(new $tw.Tiddler(this.renderer.renderTree.wiki.getCreationFields(),tiddler,{
title: tiddler.fields["draft.title"], title: tiddler.fields["draft.title"],
modified: new Date(),
"draft.title": undefined, "draft.title": undefined,
"draft.of": undefined "draft.of": undefined
})); },this.renderer.renderTree.wiki.getModificationFields()));
// Remove the draft tiddler // Remove the draft tiddler
this.renderer.renderTree.wiki.deleteTiddler(event.tiddlerTitle); this.renderer.renderTree.wiki.deleteTiddler(event.tiddlerTitle);
// Remove the original tiddler if we're renaming it // Remove the original tiddler if we're renaming it
@ -262,10 +263,10 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
break; break;
} }
} }
var tiddler = new $tw.Tiddler({ var tiddler = new $tw.Tiddler(this.renderer.renderTree.wiki.getCreationFields(),{
title: title, title: title,
text: "Newly created tiddler" text: "Newly created tiddler"
}); },this.renderer.renderTree.wiki.getModificationFields());
this.renderer.renderTree.wiki.addTiddler(tiddler); this.renderer.renderTree.wiki.addTiddler(tiddler);
// Create the draft tiddler // Create the draft tiddler
var draftTitle = this.generateDraftTitle(title), var draftTitle = this.generateDraftTitle(title),
@ -274,7 +275,7 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
title: draftTitle, title: draftTitle,
"draft.title": title, "draft.title": title,
"draft.of": title "draft.of": title
}); },this.renderer.renderTree.wiki.getModificationFields());
this.renderer.renderTree.wiki.addTiddler(draftTiddler); this.renderer.renderTree.wiki.addTiddler(draftTiddler);
// Update the story to insert the new draft at the top // Update the story to insert the new draft at the top
var slot = this.findTitleInStory(event.navigateFromTitle,-1) + 1; var slot = this.findTitleInStory(event.navigateFromTitle,-1) + 1;

View File

@ -24,6 +24,8 @@ last dispatched. Each entry is a hashmap containing two fields:
/*global $tw: false */ /*global $tw: false */
"use strict"; "use strict";
var USER_NAME_TITLE = "$:/status/UserName";
/* /*
Get the value of a text reference. Text references can have any of these forms: Get the value of a text reference. Text references can have any of these forms:
<tiddlertitle> <tiddlertitle>
@ -56,7 +58,7 @@ exports.setTextReference = function(textRef,value,currTiddlerTitle) {
// Check if it is a reference to a tiddler // Check if it is a reference to a tiddler
if(tr.title && !tr.field) { if(tr.title && !tr.field) {
tiddler = this.getTiddler(tr.title); tiddler = this.getTiddler(tr.title);
this.addTiddler(new $tw.Tiddler(tiddler,{title: tr.title,text: value})); this.addTiddler(new $tw.Tiddler(tiddler,{title: tr.title,text: value},this.getModificationFields()));
// Else check for a field reference // Else check for a field reference
} else if(tr.field) { } else if(tr.field) {
title = tr.title || currTiddlerTitle; title = tr.title || currTiddlerTitle;
@ -64,7 +66,7 @@ exports.setTextReference = function(textRef,value,currTiddlerTitle) {
if(tiddler) { if(tiddler) {
fields = {}; fields = {};
fields[tr.field] = value; fields[tr.field] = value;
this.addTiddler(new $tw.Tiddler(tiddler,fields)); this.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));
} }
} }
}; };
@ -82,7 +84,7 @@ exports.deleteTextReference = function(textRef,currTiddlerTitle) {
if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) { if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {
fields = {}; fields = {};
fields[tr.field] = undefined; fields[tr.field] = undefined;
this.addTiddler(new $tw.Tiddler(tiddler,fields)); this.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));
} }
} }
}; };
@ -194,6 +196,34 @@ exports.addTiddler = function(tiddler) {
this.enqueueTiddlerEvent(title); this.enqueueTiddlerEvent(title);
}; };
/*
Return a hashmap of the fields that should be set when a tiddler is modified
*/
exports.getCreationFields = function() {
var fields = {
created: new Date()
},
creator = this.getTiddlerText(USER_NAME_TITLE);
if(creator) {
fields.creator = creator;
}
return fields;
};
/*
Return a hashmap of the fields that should be set when a tiddler is created
*/
exports.getModificationFields = function() {
var fields = {
modified: new Date()
},
modifier = this.getTiddlerText(USER_NAME_TITLE);
if(modifier) {
fields.modifier = modifier;
}
return fields;
};
/* /*
Return a sorted array of non-system tiddler titles, optionally filtered by a tag Return a sorted array of non-system tiddler titles, optionally filtered by a tag
*/ */
@ -457,7 +487,7 @@ Set a tiddlers content to a JavaScript object. Currently this is done by setting
*/ */
exports.setTiddlerData = function(title,data) { exports.setTiddlerData = function(title,data) {
var tiddler = this.getTiddler(title); var tiddler = this.getTiddler(title);
this.addTiddler(new $tw.Tiddler(tiddler,{title: title, type: "application/json", text: JSON.stringify(data,null,$tw.config.preferences.jsonSpaces)})); this.addTiddler(new $tw.Tiddler(tiddler,{title: title, type: "application/json", text: JSON.stringify(data,null,$tw.config.preferences.jsonSpaces)},this.getModificationFields()));
}; };
/* /*

View File

@ -6,6 +6,8 @@ title: $:/ControlPanel
* [[Subtitle|SiteSubtitle]]: <$edit tiddler="SiteSubtitle" default="" type="input"/> * [[Subtitle|SiteSubtitle]]: <$edit tiddler="SiteSubtitle" default="" type="input"/>
* [[Username for signing edits|$:/status/UserName]]: <$edit tiddler="$:/status/UserName" default="" type="input"/>
* Edit [[DefaultTiddlers|$:/DefaultTiddlers]] to choose which tiddlers are displayed at startup * Edit [[DefaultTiddlers|$:/DefaultTiddlers]] to choose which tiddlers are displayed at startup
! Import tiddlers ! Import tiddlers