UNPKG

wed

Version:

Wed is a schema-aware editor for XML documents.

120 lines (104 loc) 3.09 kB
/** * @module kitchen-sink * @desc A demo module for wed * @author Louis-Dominique Dubeau * @license MPL 2.0 * @copyright Mangalam Research Center for Buddhist Languages */ /* global Promise */ define(function f(require) { "use strict"; var wed = require("wed"); var $ = require("jquery"); var URI = require("urijs/URI"); var lr = require("last-resort"); var onerror = require("wed/onerror"); var globalConfig = require("global-config"); var mergeOptions = require("merge-options"); // This installs last-resort on our current window and registers with it // wed's error handler. var onError = lr.install(window); onError.register(onerror.handler); var uri = new URI(); var query = uri.query(true); var mode = query.mode; var file = query.file; var schema = query.schema; var options_param = query.options; var fetchOptions = query.fetchOptions; function fetched(options) { if (mode) { options.mode = { path: mode }; } if (schema) { switch (schema) { case "@math": options.schema = "../schemas/tei-math-rng.js"; options.mode = { path: "wed/modes/generic/generic", options: { metadata: "../schemas/tei-math-metadata.json", }, }; break; case "@docbook": options.schema = "../schemas/docbook.js"; options.mode = { path: "wed/modes/generic/generic", options: { metadata: "../schemas/docbook-metadata.json", }, }; break; default: options.schema = schema; } } if (options_param === "noautoinsert") { options.mode.options = { autoinsert: false }; } if (options_param === "ambiguous_fileDesc_insert") { options.mode.options = { ambiguous_fileDesc_insert: true }; } if (options_param === "fileDesc_insert_needs_input") { options.mode.options = { fileDesc_insert_needs_input: true }; } if (options_param === "hide_attributes") { options.mode.options = { hide_attributes: true }; } var r = new wed.Runtime(options); var deps = []; if (file) { deps.push(file); } var text; Promise.all(deps.map(r.resolve.bind(r))) .then(function resolved(resolvedDeps) { if (deps.length === 0) { return; } var resolvedFile = resolvedDeps[0]; if (!resolvedFile) { throw new Error("did not resolve file! " + deps[0]); } text = resolvedFile; }) .then(function start() { $(function ready() { var widget = document.getElementById("widget"); var finalOptions = mergeOptions({}, globalConfig.config, options); window.wed_editor = wed.makeEditor(widget, finalOptions); window.wed_editor.init(text); }); }); } if (fetchOptions) { // eslint-disable-next-line import/no-dynamic-require require([fetchOptions], function loaded(module) { fetched(module.config); }); } else { fetched({}); } });