1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-29 12:59:56 +00:00

Handle switching the bound tiddler (#7868)

This commit is contained in:
yaisog 2023-11-30 19:26:26 +01:00 committed by GitHub
parent f7359671aa
commit e60ddf0b0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -177,14 +177,16 @@ ScrollableWidget.prototype.render = function(parent,nextSibling) {
if(this.scrollableBind) { if(this.scrollableBind) {
// After a delay for rendering, scroll to the bound position // After a delay for rendering, scroll to the bound position
setTimeout(this.updateScrollPositionFromBoundTiddler.bind(this),50); setTimeout(this.updateScrollPositionFromBoundTiddler.bind(this),50);
// Save scroll position on DOM scroll event // Set up event listener
var timeout; this.currentListener = this.listenerFunction.bind(this);
this.outerDomNode.addEventListener("scroll",function(event) { this.outerDomNode.addEventListener("scroll", this.currentListener);
if(timeout) {
clearTimeout(timeout);
timeout = null;
} }
timeout = setTimeout(function() { };
ScrollableWidget.prototype.listenerFunction = function(event) {
self = this;
clearTimeout(this.timeout);
this.timeout = setTimeout(function() {
var existingTiddler = self.wiki.getTiddler(self.scrollableBind), var existingTiddler = self.wiki.getTiddler(self.scrollableBind),
newTiddlerFields = { newTiddlerFields = {
title: self.scrollableBind, title: self.scrollableBind,
@ -194,10 +196,8 @@ ScrollableWidget.prototype.render = function(parent,nextSibling) {
if(!existingTiddler || (existingTiddler.fields["title"] !== newTiddlerFields["title"]) || (existingTiddler.fields["scroll-left"] !== newTiddlerFields["scroll-left"] || existingTiddler.fields["scroll-top"] !== newTiddlerFields["scroll-top"])) { if(!existingTiddler || (existingTiddler.fields["title"] !== newTiddlerFields["title"]) || (existingTiddler.fields["scroll-left"] !== newTiddlerFields["scroll-left"] || existingTiddler.fields["scroll-top"] !== newTiddlerFields["scroll-top"])) {
self.wiki.addTiddler(new $tw.Tiddler(existingTiddler,newTiddlerFields)); self.wiki.addTiddler(new $tw.Tiddler(existingTiddler,newTiddlerFields));
} }
},DEBOUNCE_INTERVAL); }, DEBOUNCE_INTERVAL);
}); }
}
};
ScrollableWidget.prototype.updateScrollPositionFromBoundTiddler = function() { ScrollableWidget.prototype.updateScrollPositionFromBoundTiddler = function() {
// Bail if we're running on the fakedom // Bail if we're running on the fakedom
@ -243,8 +243,19 @@ ScrollableWidget.prototype.refresh = function(changedTiddlers) {
this.refreshSelf(); this.refreshSelf();
return true; return true;
} }
if(changedAttributes.bind || changedTiddlers[this.getAttribute("bind")]) { // If the bound tiddler has changed, update the eventListener and update scroll position
this.updateScrollPositionFromBoundTiddler(); if(changedAttributes["bind"]) {
if(this.currentListener) {
this.outerDomNode.removeEventListener("scroll", this.currentListener, false);
}
this.scrollableBind = this.getAttribute("bind");
this.currentListener = this.listenerFunction.bind(this);
this.outerDomNode.addEventListener("scroll", this.currentListener);
setTimeout(this.updateScrollPositionFromBoundTiddler.bind(this),50);
}
// If a new scroll position was written into the tiddler, update scroll position
if(changedTiddlers[this.getAttribute("bind")]) {
setTimeout(this.updateScrollPositionFromBoundTiddler.bind(this),50);
} }
return this.refreshChildren(changedTiddlers); return this.refreshChildren(changedTiddlers);
}; };