mirror of https://gitlab.com/octtspacc/OcttKB
133 lines
3.6 KiB
JavaScript
133 lines
3.6 KiB
JavaScript
/*\
|
|
module-type: widget
|
|
|
|
Creates a mangler widget for field validation. This isn't meant to be used
|
|
by the user. It's only used in Relink configuration.
|
|
|
|
\*/
|
|
|
|
var Widget = require("$:/core/modules/widgets/widget.js").widget;
|
|
var language = require('$:/plugins/flibbles/relink/js/language.js');
|
|
var utils = require('$:/plugins/flibbles/relink/js/utils.js');
|
|
|
|
var RelinkManglerWidget = function(parseTreeNode,options) {
|
|
this.initialise(parseTreeNode,options);
|
|
this.addEventListeners([
|
|
{type: "relink-add-field", handler: "handleAddFieldEvent"},
|
|
{type: "relink-add-operator", handler: "handleAddOperatorEvent"},
|
|
{type: "relink-add-parameter", handler: "handleAddParameterEvent"},
|
|
{type: "relink-add-attribute", handler: "handleAddAttributeEvent"}
|
|
]);
|
|
};
|
|
|
|
exports.relinkmangler = RelinkManglerWidget;
|
|
|
|
RelinkManglerWidget.prototype = new Widget();
|
|
|
|
// This wraps alert so it can be monkeypatched during testing.
|
|
RelinkManglerWidget.prototype.alert = function(message) {
|
|
alert(message);
|
|
};
|
|
|
|
RelinkManglerWidget.prototype.handleAddFieldEvent = function(event) {
|
|
var param = event.paramObject;
|
|
if (typeof param !== "object" || !param.field) {
|
|
// Can't handle it.
|
|
return true;
|
|
}
|
|
var trimmedName = param.field.trim();
|
|
if (!trimmedName) {
|
|
// Still can't handle it, but don't warn.
|
|
return true;
|
|
}
|
|
if(!$tw.utils.isValidFieldName(trimmedName)) {
|
|
this.alert($tw.language.getString(
|
|
"InvalidFieldName",
|
|
{variables:
|
|
{fieldName: trimmedName}
|
|
}
|
|
));
|
|
} else {
|
|
add(this.wiki, "fields", trimmedName);
|
|
}
|
|
return true;
|
|
};
|
|
|
|
/**Not much validation, even though there are definitely illegal
|
|
* operator names. If you input on, Relink won't relink it, but it
|
|
* won't choke on it either. Tiddlywiki will...
|
|
*/
|
|
RelinkManglerWidget.prototype.handleAddOperatorEvent = function(event) {
|
|
var param = event.paramObject;
|
|
if (param) {
|
|
add(this.wiki, "operators", param.operator);
|
|
}
|
|
return true;
|
|
};
|
|
|
|
RelinkManglerWidget.prototype.handleAddParameterEvent = function(event) {
|
|
var param = event.paramObject;
|
|
if (param && param.macro && param.parameter) {
|
|
if (/\s/.test(param.macro.trim())) {
|
|
this.alert(language.getString(
|
|
"text/plain",
|
|
"Error/InvalidMacroName",
|
|
{ variables: {macroName: param.macro},
|
|
wiki: this.wiki
|
|
}
|
|
));
|
|
} else if (/[ \/]/.test(param.parameter.trim())) {
|
|
this.alert(language.getString(
|
|
"text/plain",
|
|
"Error/InvalidParameterName",
|
|
{ variables: {parameterName: param.parameter},
|
|
wiki: this.wiki
|
|
}
|
|
));
|
|
} else {
|
|
add(this.wiki, "macros", param.macro, param.parameter);
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
RelinkManglerWidget.prototype.handleAddAttributeEvent = function(event) {
|
|
var param = event.paramObject;
|
|
if (param && param.element && param.attribute) {
|
|
if (/[ \/]/.test(param.element.trim())) {
|
|
this.alert(language.getString(
|
|
"text/plain",
|
|
"Error/InvalidElementName",
|
|
{ variables: {elementName: param.element},
|
|
wiki: this.wiki
|
|
}
|
|
));
|
|
} else if (/[ \/]/.test(param.attribute.trim())) {
|
|
this.alert(language.getString(
|
|
"text/plain",
|
|
"Error/InvalidAttributeName",
|
|
{ variables: {attributeName: param.attribute},
|
|
wiki: this.wiki
|
|
}
|
|
));
|
|
} else {
|
|
add(this.wiki, "attributes", param.element, param.attribute);
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
function add(wiki, category/*, path parts*/) {
|
|
var path = "$:/config/flibbles/relink/" + category;
|
|
for (var x = 2; x < arguments.length; x++) {
|
|
var part = arguments[x];
|
|
// Abort if it's falsy, or only whitespace. Also, trim spaces
|
|
if (!part || !(part = part.trim())) {
|
|
return;
|
|
}
|
|
path = path + "/" + part;
|
|
}
|
|
var def = utils.getDefaultType(wiki);
|
|
wiki.addTiddler({title: path, text: def});
|
|
};
|