-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsequence-diagrams-plugin.js
94 lines (73 loc) · 2.66 KB
/
sequence-diagrams-plugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
var RevealSequenceDiagram = window.RevealSequenceDiagram || (function(){
var className = "sequence-diagram";
var classNameBuilt = "sequence-diagram-built";
var config = Reveal.getConfig().sequencediagrams;
function onRevealJsReady(event){
var elements = document.getElementsByClassName(className);
for (var i = 0; i < elements.length; i++ ){
var diagramBlueprintElement = elements[i];
removeCreatedDiagram(diagramBlueprintElement);
var diagramContainer = document.createElement("div");
insertNodeBefore(diagramBlueprintElement, diagramContainer);
var diagramSyntax = diagramBlueprintElement.innerText;
var options = getOptions(diagramBlueprintElement);
createDiagram(diagramContainer, options, diagramSyntax);
}
}
function removeCreatedDiagram(node) {
if(node.previousSibling && node.previousSibling.className === classNameBuilt){
node.parentNode.removeChild(node.previousSibling);
}
}
function insertNodeBefore(referenceNode, newNode) {
referenceNode.parentNode.insertBefore(newNode, referenceNode);
}
function createDiagram(diagramContainer, options, diagramSyntax) {
var diagram = Diagram.parse(diagramSyntax);
listenToDiagramIsRendered(diagramContainer, options, makeFragmentsIfRequired);
diagram.drawSVG(diagramContainer, { theme: options.theme });
}
function listenToDiagramIsRendered(diagramContainer, options, callback){
var observer = new MutationObserver(function (e) {
Reveal.sync();
callback(diagramContainer, options)
if(config && config.initialize){
config.initialize(diagramContainer);
}
this.disconnect();
});
observer.observe(diagramContainer, { childList: true });
}
function makeFragmentsIfRequired(diagramContainer, options){
if (options.useFragments && diagramContainer) {
var svg = diagramContainer;
var signalElements = svg.querySelectorAll('.signal, .note');
for(var signalElementKey in signalElements){
var signalElement = signalElements[signalElementKey];
if(signalElement.classList){
signalElement.classList.add('fragment');
}
}
}
}
function getOptions(element){
var useFragments = getOption(element, "useFragments", false);
if(typeof useFragments == "string"){
useFragments = useFragments.toLowerCase() == "true";
}
return {
theme : getOption(element, "theme", "simple"),
useFragments : useFragments,
};
}
function getOption(element, key, defaultOption){
if(element.hasAttribute("data-config-"+key)){
return element.attributes["data-config-"+key].value;
}
if(config && config.hasOwnProperty(key)){
return config[key];
}
return defaultOption;
}
Reveal.addEventListener('ready',onRevealJsReady);
})();