1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-04-22 18:53:14 +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

@ -124,7 +124,7 @@ var Command = function(params,commander,callback) {
if(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();
response.writeHead(204, "OK",{
Etag: "\"default/" + title + "/" + changeCount + ":\""

@ -47,7 +47,7 @@ exports.startup = function() {
for(var t=0; t<defaultTiddlers.length; 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
if($tw.browser) {
// Call browser startup modules

@ -239,7 +239,7 @@ ImportWidget.prototype.importFiles = function(files) {
};
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) {

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

@ -24,6 +24,8 @@ last dispatched. Each entry is a hashmap containing two fields:
/*global $tw: false */
"use strict";
var USER_NAME_TITLE = "$:/status/UserName";
/*
Get the value of a text reference. Text references can have any of these forms:
<tiddlertitle>
@ -56,7 +58,7 @@ exports.setTextReference = function(textRef,value,currTiddlerTitle) {
// Check if it is a reference to a tiddler
if(tr.title && !tr.field) {
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 if(tr.field) {
title = tr.title || currTiddlerTitle;
@ -64,7 +66,7 @@ exports.setTextReference = function(textRef,value,currTiddlerTitle) {
if(tiddler) {
fields = {};
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)) {
fields = {};
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);
};
/*
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
*/
@ -457,7 +487,7 @@ Set a tiddlers content to a JavaScript object. Currently this is done by setting
*/
exports.setTiddlerData = function(title,data) {
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()));
};
/*

@ -6,6 +6,8 @@ title: $:/ControlPanel
* [[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
! Import tiddlers