wed
Version:
Wed is a schema-aware editor for XML documents.
111 lines • 4.69 kB
JavaScript
/**
* This module is responsible for validating the document being edited in wed.
* @author Louis-Dominique Dubeau
* @license MPL 2.0
* @copyright Mangalam Research Center for Buddhist Languages
*/
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
define(["require", "exports", "salve-dom", "./dloc", "./domtypeguards"], function (require, exports, salve_dom_1, dloc, domtypeguards_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
dloc = __importStar(dloc);
exports.INCOMPLETE = salve_dom_1.WorkingState.INCOMPLETE;
exports.WORKING = salve_dom_1.WorkingState.WORKING;
exports.INVALID = salve_dom_1.WorkingState.INVALID;
exports.VALID = salve_dom_1.WorkingState.VALID;
/**
* A document validator.
*/
class Validator extends salve_dom_1.Validator {
/**
* @param schema A path to the schema to pass to salve for validation. This is
* a path that will be interpreted by RequireJS. The schema must have already
* been prepared for use by salve. See salve's documentation. Or this can be a
* ``Grammar`` object that has already been produced from ``salve``'s
* ``constructTree``.
*
* @param root The root of the DOM tree to validate. This root contains the
* document to validate but is not **part** of it.
*
* @param modeValidators The mode-specific validators to use.
*/
constructor(schema, root, modeValidators) {
super(schema, root, {
timeout: 0,
maxTimespan: 100,
});
this.modeValidators = modeValidators;
}
/**
* Runs document-wide validation specific to the mode passed to
* the validator.
*/
_runDocumentValidation() {
for (const validator of this.modeValidators) {
const errors = validator.validateDocument();
for (const error of errors) {
this._processError(error);
}
}
}
possibleAt(container, index = false, attributes = false) {
if (container instanceof dloc.DLoc) {
if (typeof index !== "boolean") {
throw new Error("2nd parameter must be boolean");
}
attributes = index;
index = container.offset;
container = container.node;
}
if (typeof index !== "number") {
throw new Error("index must be a number");
}
return super.possibleAt(container, index, attributes);
}
speculativelyValidate(container, index, toParse) {
if (container instanceof dloc.DLoc) {
if (!(domtypeguards_1.isNode(index) || index instanceof Array)) {
throw new Error("2nd argument must be a Node or an array of Nodes");
}
toParse = index;
index = container.offset;
container = container.node;
}
if (typeof index !== "number") {
throw new Error("index must be a number");
}
if (toParse === undefined) {
throw new Error("toParse must be defined");
}
return super.speculativelyValidate(container, index, toParse);
}
speculativelyValidateFragment(container, index, toParse) {
if (container instanceof dloc.DLoc) {
if ((typeof index === "number") || !domtypeguards_1.isElement(index)) {
// It appears as "toParse" to the caller, not "index".
throw new Error("toParse is not an element");
}
toParse = index;
index = container.offset;
container = container.node;
}
if (typeof index !== "number") {
throw new Error("index must be a number");
}
if (toParse === undefined) {
throw new Error("toParse must be defined");
}
return super.speculativelyValidateFragment(container, index, toParse);
}
}
exports.Validator = Validator;
});
// LocalWords: boolean Dubeau Mangalam validator MPL RequireJS unclosed DOM
// LocalWords: speculativelyValidate nd toParse
//# sourceMappingURL=validator.js.map