mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-19 15:30:03 +02:00
148 lines
2.8 KiB
JavaScript
148 lines
2.8 KiB
JavaScript
import mermaidAPI from '../../mermaidAPI';
|
|
import * as configApi from '../../config';
|
|
import common from '../common/common';
|
|
|
|
const sanitizeText = (txt) => common.sanitizeText(txt, configApi.getConfig());
|
|
|
|
let title = '';
|
|
let description = '';
|
|
let currentSection = '';
|
|
|
|
const sections = [];
|
|
const tasks = [];
|
|
const rawTasks = [];
|
|
|
|
export const parseDirective = function (statement, context, type) {
|
|
mermaidAPI.parseDirective(this, statement, context, type);
|
|
};
|
|
|
|
export const clear = function () {
|
|
sections.length = 0;
|
|
tasks.length = 0;
|
|
currentSection = '';
|
|
title = '';
|
|
description = '';
|
|
rawTasks.length = 0;
|
|
};
|
|
|
|
const setTitle = function (txt) {
|
|
title = sanitizeText(txt);
|
|
};
|
|
|
|
const getTitle = function () {
|
|
return title;
|
|
};
|
|
|
|
const setAccDescription = function (txt) {
|
|
description = sanitizeText(txt);
|
|
};
|
|
|
|
const getAccDescription = function () {
|
|
return description;
|
|
};
|
|
|
|
export const addSection = function (txt) {
|
|
currentSection = txt;
|
|
sections.push(txt);
|
|
};
|
|
|
|
export const getSections = function () {
|
|
return sections;
|
|
};
|
|
|
|
export const getTasks = function () {
|
|
let allItemsProcessed = compileTasks();
|
|
const maxDepth = 100;
|
|
let iterationCount = 0;
|
|
while (!allItemsProcessed && iterationCount < maxDepth) {
|
|
allItemsProcessed = compileTasks();
|
|
iterationCount++;
|
|
}
|
|
|
|
tasks.push(...rawTasks);
|
|
|
|
return tasks;
|
|
};
|
|
|
|
const updateActors = function () {
|
|
const tempActors = [];
|
|
tasks.forEach((task) => {
|
|
if (task.people) {
|
|
tempActors.push(...task.people);
|
|
}
|
|
});
|
|
|
|
const unique = new Set(tempActors);
|
|
return [...unique].sort();
|
|
};
|
|
|
|
export const addTask = function (descr, taskData) {
|
|
const pieces = taskData.substr(1).split(':');
|
|
|
|
let score = 0;
|
|
let peeps = [];
|
|
if (pieces.length === 1) {
|
|
score = Number(pieces[0]);
|
|
peeps = [];
|
|
} else {
|
|
score = Number(pieces[0]);
|
|
peeps = pieces[1].split(',');
|
|
}
|
|
const peopleList = peeps.map((s) => s.trim());
|
|
|
|
const rawTask = {
|
|
section: currentSection,
|
|
type: currentSection,
|
|
people: peopleList,
|
|
task: descr,
|
|
score,
|
|
};
|
|
|
|
rawTasks.push(rawTask);
|
|
};
|
|
|
|
export const addTaskOrg = function (descr) {
|
|
const newTask = {
|
|
section: currentSection,
|
|
type: currentSection,
|
|
description: descr,
|
|
task: descr,
|
|
classes: [],
|
|
};
|
|
tasks.push(newTask);
|
|
};
|
|
|
|
const compileTasks = function () {
|
|
const compileTask = function (pos) {
|
|
return rawTasks[pos].processed;
|
|
};
|
|
|
|
let allProcessed = true;
|
|
for (let i = 0; i < rawTasks.length; i++) {
|
|
compileTask(i);
|
|
|
|
allProcessed = allProcessed && rawTasks[i].processed;
|
|
}
|
|
return allProcessed;
|
|
};
|
|
|
|
const getActors = function () {
|
|
return updateActors();
|
|
};
|
|
|
|
export default {
|
|
parseDirective,
|
|
getConfig: () => configApi.getConfig().journey,
|
|
clear,
|
|
setTitle,
|
|
getTitle,
|
|
setAccDescription,
|
|
getAccDescription,
|
|
addSection,
|
|
getSections,
|
|
getTasks,
|
|
addTask,
|
|
addTaskOrg,
|
|
getActors,
|
|
};
|