red6/dmn-check

View on GitHub
camunda-modeler-plugin/client/dmn-js-extension/DmnCheckJsExtension.js

Summary

Maintainability
A
3 hrs
Test Coverage
function DmnCheckJsExtension(eventBus, drd, elementRegistry, moddle, overlays, canvas) {

    const messages = document.createElement("div");
    messages.classList.add('message-box');
    messages.id = "message-box";
    messages.style.display = "none";
    canvas.getContainer().parentNode.appendChild(messages);

    eventBus.on('import.done', function() {
        validate();
    });


    eventBus.on('elements.changed', function() {
        validate();
    });

    function validate() {
        const map = {};

        moddle.toXML(drd._definitions, {}, (err, xml) => {
            log("Start validation.");

            fetch('http://localhost:42000/validate', {
                method: "POST",
                body: xml
            }).then(res => {
                res.text().then(function (results) {

                    log("Request complete! response:", results);

                    messages.textContent = "";

                    JSON.parse(results).items.forEach(result => {
                        const shape = elementRegistry.get(result.drgElementId);

                        if (typeof shape !== "undefined") {
                            overlays.add(shape, 'badge', {
                                position: {
                                    bottom: 0,
                                    left: 21 * map[result.drgElementId]
                                },
                                html: '<div title="' + result.message + '" class="badge badge-' + result.severity.toLowerCase() + '"></div>'
                            });

                            map[result.drgElementId] = ~~map[result.drgElementId] + 1;
                        } else {
                            messages.textContent = result.message;
                        }
                    });

                    if (messages.textContent !== "") {
                        messages.style.display = "block";
                    }
                })
            });

            log("Validation finished.");
        });
    }
}



function log(...args) {
    console.log('[DmnCheckJsExtension]', ...args);
}

DmnCheckJsExtension.$inject = ['eventBus', 'drd', 'elementRegistry', 'moddle', 'overlays', 'canvas'];

module.exports = DmnCheckJsExtension;