import { domify, classes } from 'min-dom'; import { find } from 'min-dash'; import { escapeHTML } from 'diagram-js/lib/util/EscapeUtil'; import { getBusinessObject, is } from '../../util/ModelUtil'; import { getPlaneIdFromShape } from '../../util/DrilldownUtil'; /** * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus * * @typedef {import('../../model/Types').Element} Element * @typedef {import('../../model/Types').Shape} Shape */ var OPEN_CLASS = 'bjs-breadcrumbs-shown'; /** * Adds overlays that allow switching planes on collapsed subprocesses. * * @param {EventBus} eventBus * @param {ElementRegistry} elementRegistry * @param {Canvas} canvas */ export default function DrilldownBreadcrumbs(eventBus, elementRegistry, canvas) { var breadcrumbs = domify('
'); var container = canvas.getContainer(); var containerClasses = classes(container); container.appendChild(breadcrumbs); var businessObjectParents = []; // update breadcrumbs if name or ID of the primary shape changes eventBus.on('element.changed', function(event) { var shape = event.element, businessObject = getBusinessObject(shape); var isPresent = find(businessObjectParents, function(element) { return element === businessObject; }); if (!isPresent) { return; } updateBreadcrumbs(); }); /** * Updates the displayed breadcrumbs. If no element is provided, only the * labels are updated. * * @param {Element} [element] */ function updateBreadcrumbs(element) { if (element) { businessObjectParents = getBusinessObjectParentChain(element); } var path = businessObjectParents.map(function(parent) { var title = escapeHTML(parent.name || parent.id); var link = domify('