mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-09-19 02:39:42 +00:00
551ebdc005
We now use a fake DOM implementation on the server to let us share more rendering code between the text output vs. DOM output paths.
78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
/*\
|
|
title: $:/core/modules/widgets/view/viewers/relativedate.js
|
|
type: application/javascript
|
|
module-type: fieldviewer
|
|
|
|
A viewer for viewing tiddler fields as a relative date
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
var RelativeDateViewer = function(viewWidget,tiddler,field,value) {
|
|
this.viewWidget = viewWidget;
|
|
this.tiddler = tiddler;
|
|
this.field = field;
|
|
this.value = value;
|
|
};
|
|
|
|
RelativeDateViewer.prototype.render = function() {
|
|
var template = this.viewWidget.renderer.getAttribute("template","DD MMM YYYY"),
|
|
value = "";
|
|
if(this.value !== undefined) {
|
|
value = $tw.utils.formatDateString(this.value,template);
|
|
}
|
|
// Set the element details
|
|
this.viewWidget.tag = "span";
|
|
this.viewWidget.attributes = {
|
|
"class": "tw-view-date"
|
|
};
|
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
|
type: "text",
|
|
text: value
|
|
}]);
|
|
};
|
|
|
|
/*
|
|
Trigger the timer when the relative date is put into the DOM
|
|
*/
|
|
RelativeDateViewer.prototype.postRenderInDom = function() {
|
|
this.update();
|
|
};
|
|
|
|
/*
|
|
Trigger the timer for the next update of the relative date
|
|
*/
|
|
RelativeDateViewer.prototype.setTimer = function() {
|
|
var self = this;
|
|
if(this.relativeDate.updatePeriod < 24 * 60 * 60 * 1000) {
|
|
window.setTimeout(function() {
|
|
// Only call the update function if the dom node is still in the document
|
|
if($tw.utils.domContains(self.listWidget.renderer.renderTree.document,self.viewWidget.renderer.domNode)) {
|
|
self.update.call(self);
|
|
}
|
|
},this.relativeDate.updatePeriod);
|
|
}
|
|
};
|
|
|
|
/*
|
|
Update the relative date display, and trigger the timer for the next update
|
|
*/
|
|
RelativeDateViewer.prototype.update = function() {
|
|
this.relativeDate = $tw.utils.getRelativeDate((new Date()) - this.value);
|
|
if(this.relativeDate.delta > 0) {
|
|
while(this.viewWidget.renderer.domNode.hasChildNodes()) {
|
|
this.viewWidget.renderer.domNode.removeChild(this.viewWidget.renderer.domNode.firstChild);
|
|
}
|
|
this.viewWidget.renderer.domNode.appendChild(this.viewWidget.renderer.renderTree.document.createTextNode(this.relativeDate.description));
|
|
this.setTimer();
|
|
}
|
|
};
|
|
|
|
exports.relativedate = RelativeDateViewer;
|
|
|
|
})();
|