mirror of
https://gitlab.com/octtspacc/OcttKB
synced 2025-01-10 05:47:33 +01:00
81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
|
/*\
|
||
|
module-type: startup
|
||
|
|
||
|
Replaces the relinkTiddler defined in $:/core/modules/wiki-bulkops.js
|
||
|
|
||
|
This is a startup instead of a wikimethods module-type because it's the only
|
||
|
way to ensure this runs after the old relinkTiddler method is applied.
|
||
|
|
||
|
\*/
|
||
|
(function(){
|
||
|
|
||
|
/*jslint node: false, browser: true */
|
||
|
/*global $tw: false */
|
||
|
"use strict";
|
||
|
|
||
|
var language = require('$:/plugins/flibbles/relink/js/language.js');
|
||
|
var utils = require("$:/plugins/flibbles/relink/js/utils.js");
|
||
|
|
||
|
exports.name = "redefine-relinkTiddler";
|
||
|
exports.synchronous = true;
|
||
|
// load-modules is when wikimethods are applied in
|
||
|
// ``$:/core/modules/startup/load-modules.js``
|
||
|
exports.after = ['load-modules'];
|
||
|
// We come before commands because they may do renaming, or jasmine testing
|
||
|
exports.before = ['commands'];
|
||
|
|
||
|
exports.startup = function() {
|
||
|
$tw.Wiki.prototype.relinkTiddler = relinkTiddler;
|
||
|
};
|
||
|
|
||
|
/** Walks through all relinkable tiddlers and relinks them.
|
||
|
* This replaces the existing function in core Tiddlywiki.
|
||
|
*/
|
||
|
function relinkTiddler(fromTitle, toTitle, options) {
|
||
|
options = options || {};
|
||
|
var failures = [];
|
||
|
var indexer = utils.getIndexer(this);
|
||
|
var records = indexer.relinkLookup(fromTitle, toTitle, options);
|
||
|
for (var title in records) {
|
||
|
var entries = records[title],
|
||
|
changes = Object.create(null),
|
||
|
update = false,
|
||
|
fails = false;
|
||
|
for (var field in entries) {
|
||
|
var entry = entries[field];
|
||
|
fails = fails || entry.impossible;
|
||
|
if (entry.output !== undefined) {
|
||
|
changes[field] = entry.output;
|
||
|
update = true;
|
||
|
}
|
||
|
}
|
||
|
if (fails) {
|
||
|
failures.push(title);
|
||
|
}
|
||
|
// If any fields changed, update tiddler
|
||
|
if (update) {
|
||
|
console.log("Renaming '"+fromTitle+"' to '"+toTitle+"' in '" + title + "'");
|
||
|
|
||
|
var tiddler = this.getTiddler(title);
|
||
|
var modifyField = utils.touchModifyField(this) ? this.getModificationFields() : undefined;
|
||
|
var newTiddler = new $tw.Tiddler(tiddler,changes,modifyField)
|
||
|
newTiddler = $tw.hooks.invokeHook("th-relinking-tiddler",newTiddler,tiddler);
|
||
|
this.addTiddler(newTiddler);
|
||
|
// If the title changed, we need to perform a nested rename
|
||
|
if (newTiddler.fields.title !== title) {
|
||
|
this.deleteTiddler(title);
|
||
|
this.relinkTiddler(title, newTiddler.fields.title,options);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
if (failures.length > 0) {
|
||
|
var options = $tw.utils.extend(
|
||
|
{ variables: {to: toTitle, from: fromTitle},
|
||
|
wiki: this},
|
||
|
options );
|
||
|
language.reportFailures(failures, options);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
})();
|