mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-10-25 17:04:19 +02:00
Compare commits
1 Commits
v9.4.0
...
sidv/mindm
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87cdc03e84 |
@@ -4,4 +4,3 @@ docs/Setup.md
|
|||||||
cypress.config.js
|
cypress.config.js
|
||||||
cypress/plugins/index.js
|
cypress/plugins/index.js
|
||||||
coverage
|
coverage
|
||||||
*.json
|
|
||||||
150
.eslintrc.cjs
150
.eslintrc.cjs
@@ -1,150 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
env: {
|
|
||||||
browser: true,
|
|
||||||
es6: true,
|
|
||||||
'jest/globals': true,
|
|
||||||
node: true,
|
|
||||||
},
|
|
||||||
root: true,
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
parserOptions: {
|
|
||||||
ecmaFeatures: {
|
|
||||||
experimentalObjectRestSpread: true,
|
|
||||||
jsx: true,
|
|
||||||
},
|
|
||||||
tsconfigRootDir: __dirname,
|
|
||||||
sourceType: 'module',
|
|
||||||
ecmaVersion: 2020,
|
|
||||||
allowAutomaticSingleRunInference: true,
|
|
||||||
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
},
|
|
||||||
extends: [
|
|
||||||
'eslint:recommended',
|
|
||||||
'plugin:@typescript-eslint/recommended',
|
|
||||||
'plugin:json/recommended',
|
|
||||||
'plugin:markdown/recommended',
|
|
||||||
'plugin:@cspell/recommended',
|
|
||||||
'prettier',
|
|
||||||
],
|
|
||||||
plugins: [
|
|
||||||
'@typescript-eslint',
|
|
||||||
'no-only-tests',
|
|
||||||
'html',
|
|
||||||
'jest',
|
|
||||||
'jsdoc',
|
|
||||||
'json',
|
|
||||||
'@cspell',
|
|
||||||
'lodash',
|
|
||||||
'unicorn',
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
curly: 'error',
|
|
||||||
'no-console': 'error',
|
|
||||||
'no-prototype-builtins': 'off',
|
|
||||||
'no-unused-vars': 'off',
|
|
||||||
'cypress/no-async-tests': 'off',
|
|
||||||
'@typescript-eslint/no-floating-promises': 'error',
|
|
||||||
'@typescript-eslint/no-misused-promises': 'error',
|
|
||||||
'@typescript-eslint/ban-ts-comment': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
'ts-expect-error': 'allow-with-description',
|
|
||||||
'ts-ignore': 'allow-with-description',
|
|
||||||
'ts-nocheck': 'allow-with-description',
|
|
||||||
'ts-check': 'allow-with-description',
|
|
||||||
minimumDescriptionLength: 10,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'json/*': ['error', 'allowComments'],
|
|
||||||
'@cspell/spellchecker': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
checkIdentifiers: false,
|
|
||||||
checkStrings: false,
|
|
||||||
checkStringTemplates: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'no-empty': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
allowEmptyCatch: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'no-only-tests/no-only-tests': 'error',
|
|
||||||
'lodash/import-scope': ['error', 'method'],
|
|
||||||
'unicorn/better-regex': 'error',
|
|
||||||
'unicorn/no-abusive-eslint-disable': 'error',
|
|
||||||
'unicorn/no-array-push-push': 'error',
|
|
||||||
'unicorn/no-for-loop': 'error',
|
|
||||||
'unicorn/no-instanceof-array': 'error',
|
|
||||||
'unicorn/no-typeof-undefined': 'error',
|
|
||||||
'unicorn/no-unnecessary-await': 'error',
|
|
||||||
'unicorn/no-unsafe-regex': 'warn',
|
|
||||||
'unicorn/no-useless-promise-resolve-reject': 'error',
|
|
||||||
'unicorn/prefer-array-find': 'error',
|
|
||||||
'unicorn/prefer-array-flat-map': 'error',
|
|
||||||
'unicorn/prefer-array-index-of': 'error',
|
|
||||||
'unicorn/prefer-array-some': 'error',
|
|
||||||
'unicorn/prefer-default-parameters': 'error',
|
|
||||||
'unicorn/prefer-includes': 'error',
|
|
||||||
'unicorn/prefer-negative-index': 'error',
|
|
||||||
'unicorn/prefer-object-from-entries': 'error',
|
|
||||||
'unicorn/prefer-string-starts-ends-with': 'error',
|
|
||||||
'unicorn/prefer-string-trim-start-end': 'error',
|
|
||||||
'unicorn/string-content': 'error',
|
|
||||||
'unicorn/prefer-spread': 'error',
|
|
||||||
'unicorn/no-lonely-if': 'error',
|
|
||||||
},
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: ['cypress/**', 'demos/**'],
|
|
||||||
rules: {
|
|
||||||
'no-console': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.{js,jsx,mjs,cjs}'],
|
|
||||||
extends: ['plugin:jsdoc/recommended'],
|
|
||||||
rules: {
|
|
||||||
'jsdoc/check-indentation': 'off',
|
|
||||||
'jsdoc/check-alignment': 'off',
|
|
||||||
'jsdoc/check-line-alignment': 'off',
|
|
||||||
'jsdoc/multiline-blocks': 'off',
|
|
||||||
'jsdoc/newline-after-description': 'off',
|
|
||||||
'jsdoc/tag-lines': 'off',
|
|
||||||
'jsdoc/require-param-description': 'off',
|
|
||||||
'jsdoc/require-param-type': 'off',
|
|
||||||
'jsdoc/require-returns': 'off',
|
|
||||||
'jsdoc/require-returns-description': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.{ts,tsx}'],
|
|
||||||
plugins: ['tsdoc'],
|
|
||||||
rules: {
|
|
||||||
'tsdoc/syntax': 'error',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
|
|
||||||
rules: {
|
|
||||||
'jsdoc/require-jsdoc': 'off',
|
|
||||||
'@typescript-eslint/no-unused-vars': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.html', '*.md', '**/*.md/*'],
|
|
||||||
rules: {
|
|
||||||
'no-var': 'error',
|
|
||||||
'no-undef': 'off',
|
|
||||||
'@typescript-eslint/no-unused-vars': 'off',
|
|
||||||
'@typescript-eslint/no-floating-promises': 'off',
|
|
||||||
'@typescript-eslint/no-misused-promises': 'off',
|
|
||||||
},
|
|
||||||
parserOptions: {
|
|
||||||
project: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
76
.eslintrc.json
Normal file
76
.eslintrc.json
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es6": true,
|
||||||
|
"jest/globals": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"experimentalObjectRestSpread": true,
|
||||||
|
"jsx": true
|
||||||
|
},
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"plugin:jsdoc/recommended",
|
||||||
|
"plugin:json/recommended",
|
||||||
|
"plugin:markdown/recommended",
|
||||||
|
"prettier"
|
||||||
|
],
|
||||||
|
"plugins": ["@typescript-eslint", "html", "jest", "jsdoc", "json"],
|
||||||
|
"rules": {
|
||||||
|
"no-console": "error",
|
||||||
|
"no-prototype-builtins": "off",
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"jsdoc/check-indentation": "off",
|
||||||
|
"jsdoc/check-alignment": "off",
|
||||||
|
"jsdoc/check-line-alignment": "off",
|
||||||
|
"jsdoc/multiline-blocks": "off",
|
||||||
|
"jsdoc/newline-after-description": "off",
|
||||||
|
"jsdoc/tag-lines": "off",
|
||||||
|
"jsdoc/require-param-description": "off",
|
||||||
|
"jsdoc/require-param-type": "off",
|
||||||
|
"jsdoc/require-returns": "off",
|
||||||
|
"jsdoc/require-returns-description": "off",
|
||||||
|
"cypress/no-async-tests": "off",
|
||||||
|
"@typescript-eslint/ban-ts-comment": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"ts-expect-error": "allow-with-description",
|
||||||
|
"ts-ignore": "allow-with-description",
|
||||||
|
"ts-nocheck": "allow-with-description",
|
||||||
|
"ts-check": "allow-with-description",
|
||||||
|
"minimumDescriptionLength": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"json/*": ["error", "allowComments"],
|
||||||
|
"no-empty": ["error", { "allowEmptyCatch": true }]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["cypress/**", "demos/**"],
|
||||||
|
"rules": {
|
||||||
|
"no-console": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["*.spec.{ts,js}", "cypress/**", "demos/**", "**/docs/**"],
|
||||||
|
"rules": {
|
||||||
|
"jsdoc/require-jsdoc": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["*.html", "*.md", "**/*.md/*"],
|
||||||
|
"rules": {
|
||||||
|
"no-var": "error",
|
||||||
|
"no-undef": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
@@ -1,8 +1,6 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github:
|
github: [knsv]
|
||||||
- knsv
|
|
||||||
- sidharthv96
|
|
||||||
#patreon: # Replace with a single Patreon username
|
#patreon: # Replace with a single Patreon username
|
||||||
#open_collective: # Replace with a single Open Collective username
|
#open_collective: # Replace with a single Open Collective username
|
||||||
#ko_fi: # Replace with a single Ko-fi username
|
#ko_fi: # Replace with a single Ko-fi username
|
||||||
|
|||||||
43
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
43
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: 'Status: Triage, Type: Bug / Error'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Code Sample**
|
||||||
|
If applicable, add the code sample or a link to the [live editor](https://mermaid.live).
|
||||||
|
|
||||||
|
**Desktop (please complete the following information):**
|
||||||
|
|
||||||
|
- OS: [e.g. iOS]
|
||||||
|
- Browser [e.g. chrome, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Smartphone (please complete the following information):**
|
||||||
|
|
||||||
|
- Device: [e.g. iPhone6]
|
||||||
|
- OS: [e.g. iOS8.1]
|
||||||
|
- Browser [e.g. stock browser, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
||||||
69
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
69
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,69 +0,0 @@
|
|||||||
name: Bug Report
|
|
||||||
description: Create a report to help us improve
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Bug / Error'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Security vulnerabilities
|
|
||||||
Please refer our [Security Policy](https://github.com/mermaid-js/.github/blob/main/SECURITY.md) and report to keep vulnerabilities confidential so we can release fixes first.
|
|
||||||
|
|
||||||
## Before you submit...
|
|
||||||
We like to help you, but in order to do that should you make a few things first:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible.
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Description
|
|
||||||
description: Give a clear and concise description of what the bug is.
|
|
||||||
placeholder: When I do ... does ... happen.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
description: Give a step-by-step example on how to reproduce the bug.
|
|
||||||
placeholder: |-
|
|
||||||
1. Do this
|
|
||||||
2. Do that
|
|
||||||
3. ...
|
|
||||||
4. Bug!
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to help explain your issue.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Code Sample
|
|
||||||
description: |-
|
|
||||||
If applicable, add the code sample or a link to the [Live Editor](https://mermaid.live).
|
|
||||||
Any text pasted here will be rendered as a Code block.
|
|
||||||
render: text
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Setup
|
|
||||||
description: |-
|
|
||||||
Please fill out the below info.
|
|
||||||
Note that you only need to fill out one and not both sections.
|
|
||||||
value: |-
|
|
||||||
**Desktop**
|
|
||||||
|
|
||||||
- OS and Version: [Windows, Linux, Mac, ...]
|
|
||||||
- Browser and Version: [Chrome, Edge, Firefox]
|
|
||||||
|
|
||||||
**Smartphone**
|
|
||||||
|
|
||||||
- Device: [Samsung, iPhone, ...]
|
|
||||||
- OS and Version: [Android, iOS, ...]
|
|
||||||
- Browser and Version: [Chrome, Safari, ...]
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Additional Context
|
|
||||||
description: Anything else to add?
|
|
||||||
14
.github/ISSUE_TEMPLATE/config.yml
vendored
14
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,14 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: GitHub Discussions
|
|
||||||
url: https://github.com/mermaid-js/mermaid/discussions
|
|
||||||
about: Ask the Community questions or share your own graphs in our discussions.
|
|
||||||
- name: Slack
|
|
||||||
url: https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE
|
|
||||||
about: Join our Community on Slack for Help and a casual chat.
|
|
||||||
- name: Documentation
|
|
||||||
url: https://mermaid-js.github.io
|
|
||||||
about: Read our documentation for all that Mermaid.js can offer.
|
|
||||||
- name: Live Editor
|
|
||||||
url: https://mermaid.live
|
|
||||||
about: Try the live editor to preview graphs in no time.
|
|
||||||
42
.github/ISSUE_TEMPLATE/diagram_proposal.yml
vendored
42
.github/ISSUE_TEMPLATE/diagram_proposal.yml
vendored
@@ -1,42 +0,0 @@
|
|||||||
name: Diagram Proposal
|
|
||||||
description: Suggest a new Diagram Type to add to Mermaid.
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Enhancement'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Before you submit...
|
|
||||||
First of all, thank you for proposing a new Diagram to us.
|
|
||||||
We are always happy about new ideas to improve Mermaid.js wherever possible.
|
|
||||||
|
|
||||||
To get the fastest and best response possible, make sure you do the following:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible.
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Proposal
|
|
||||||
description: A clear and concise description of what should be added to Mermaid.js.
|
|
||||||
placeholder: Mermaid.js should add ... because ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Use Cases
|
|
||||||
description: If applicable, give some use cases for where this diagram would be useful.
|
|
||||||
placeholder: The Diagram could be used for ...
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to show possible examples of how the diagram may look like.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Code Sample
|
|
||||||
description: |-
|
|
||||||
If applicable, add a code sample for how to implement this new diagram.
|
|
||||||
The text will automatically be rendered as JavaScript code.
|
|
||||||
render: javascript
|
|
||||||
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: 'Status: Triage, Type: Enhancement'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
16
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
16
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
name: Question
|
||||||
|
about: Get some help from the community.
|
||||||
|
title: ''
|
||||||
|
labels: 'Help wanted!, Type: Other'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## Help us help you!
|
||||||
|
|
||||||
|
You want an answer. Here are some ways to get it quicker:
|
||||||
|
|
||||||
|
- Use a clear and concise title.
|
||||||
|
- Try to pose a clear and concise question.
|
||||||
|
- Include as much, or as little, code as necessary.
|
||||||
|
- Don't be shy to give us some screenshots, if it helps!
|
||||||
34
.github/ISSUE_TEMPLATE/syntax_proposal.yml
vendored
34
.github/ISSUE_TEMPLATE/syntax_proposal.yml
vendored
@@ -1,34 +0,0 @@
|
|||||||
name: Syntax Proposal
|
|
||||||
description: Suggest a new Syntax to add to Mermaid.js.
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Enhancement'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Before you submit...
|
|
||||||
First of all, thank you for proposing a new Syntax to us.
|
|
||||||
We are always happy about new ideas to improve Mermaid.js wherever possible.
|
|
||||||
|
|
||||||
To get the fastest and best response possible, make sure you do the following:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible. Examples are always welcome.
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Proposal
|
|
||||||
description: A clear and concise description of what Syntax should be added to Mermaid.js.
|
|
||||||
placeholder: Mermaid.js should add ... because ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Example
|
|
||||||
description: If applicable, provide an example of the new Syntax.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to show possible examples of how the theme may look like.
|
|
||||||
42
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
42
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
@@ -1,42 +0,0 @@
|
|||||||
name: Theme Proposal
|
|
||||||
description: Suggest a new theme to add to Mermaid.js.
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Enhancement'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Before you submit...
|
|
||||||
First of all, thank you for proposing a new Theme to us.
|
|
||||||
We are always happy about new ideas to improve Mermaid.js wherever possible.
|
|
||||||
|
|
||||||
To get the fastest and best response possible, make sure you do the following:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible. Examples are always welcome!
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Proposal
|
|
||||||
description: A clear and concise description of what theme should be added to Mermaid.js.
|
|
||||||
placeholder: Mermaid.js should add ... because ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Colors
|
|
||||||
description: |-
|
|
||||||
A detailed list of the different colour values to use.
|
|
||||||
A list of currently used variable names can be found [here](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
|
|
||||||
placeholder: |-
|
|
||||||
- background: #f4f4f4
|
|
||||||
- primaryColor: #fff4dd
|
|
||||||
- ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to show possible examples of how the theme may look like.
|
|
||||||
18
.github/dependabot.yml
vendored
Normal file
18
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: npm
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
directory: /
|
||||||
|
target-branch: develop
|
||||||
|
versioning-strategy: increase
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
day: monday
|
||||||
|
time: '07:00'
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: /
|
||||||
|
target-branch: develop
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
day: monday
|
||||||
|
time: '07:00'
|
||||||
1
.github/pull_request_template.md
vendored
1
.github/pull_request_template.md
vendored
@@ -14,5 +14,4 @@ Make sure you
|
|||||||
|
|
||||||
- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
||||||
- [ ] :computer: have added unit/e2e tests (if appropriate)
|
- [ ] :computer: have added unit/e2e tests (if appropriate)
|
||||||
- [ ] :notebook: have added documentation (if appropriate)
|
|
||||||
- [ ] :bookmark: targeted `develop` branch
|
- [ ] :bookmark: targeted `develop` branch
|
||||||
|
|||||||
28
.github/workflows/docs.yml
vendored
Normal file
28
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
name: Documentation Checks
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
paths:
|
||||||
|
- 'packages/mermaid/src/docs/**/*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
paths:
|
||||||
|
- 'packages/mermaid/src/docs/**/*'
|
||||||
|
jobs:
|
||||||
|
spellcheck:
|
||||||
|
name: 'Docs: Spellcheck'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
name: Check out the code
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
name: Setup node
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- run: npm install -g cspell
|
||||||
|
name: Install cSpell
|
||||||
|
- run: cspell --config ./cSpell.json "packages/mermaid/src/docs/**/*.md" --no-progress
|
||||||
|
name: Run cSpell
|
||||||
8
.github/workflows/e2e.yml
vendored
8
.github/workflows/e2e.yml
vendored
@@ -32,7 +32,6 @@ jobs:
|
|||||||
# and run all Cypress tests
|
# and run all Cypress tests
|
||||||
- name: Cypress run
|
- name: Cypress run
|
||||||
uses: cypress-io/github-action@v4
|
uses: cypress-io/github-action@v4
|
||||||
id: cypress
|
|
||||||
# If CYPRESS_RECORD_KEY is set, run in parallel on all containers
|
# If CYPRESS_RECORD_KEY is set, run in parallel on all containers
|
||||||
# Otherwise (e.g. if running from fork), we run on a single container only
|
# Otherwise (e.g. if running from fork), we run on a single container only
|
||||||
if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
|
if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
|
||||||
@@ -45,10 +44,3 @@ jobs:
|
|||||||
parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
||||||
env:
|
env:
|
||||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||||
|
|
||||||
- name: Upload Artifacts
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
if: ${{ failure() && steps.cypress.conclusion == 'failure' }}
|
|
||||||
with:
|
|
||||||
name: error-snapshots
|
|
||||||
path: cypress/snapshots/**/__diff_output__/*
|
|
||||||
|
|||||||
44
.github/workflows/link-checker.yml
vendored
44
.github/workflows/link-checker.yml
vendored
@@ -1,44 +0,0 @@
|
|||||||
# This Link Checker is run on all documentation files once per week.
|
|
||||||
|
|
||||||
# references:
|
|
||||||
# - https://github.com/lycheeverse/lychee-action
|
|
||||||
# - https://github.com/lycheeverse/lychee
|
|
||||||
|
|
||||||
name: Link Checker
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
|
||||||
# * is a special character in YAML so you have to quote this string
|
|
||||||
- cron: '30 8 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
linkChecker:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Restore lychee cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: .lycheecache
|
|
||||||
key: cache-lychee-${{ github.sha }}
|
|
||||||
restore-keys: cache-lychee-
|
|
||||||
|
|
||||||
- name: Link Checker
|
|
||||||
uses: lycheeverse/lychee-action@v1.5.4
|
|
||||||
with:
|
|
||||||
args: --verbose --no-progress --cache --max-cache-age 1d packages/mermaid/src/docs/**/*.md README.md README.zh-CN.md
|
|
||||||
fail: true
|
|
||||||
jobSummary: true
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
||||||
33
.github/workflows/lint.yml
vendored
33
.github/workflows/lint.yml
vendored
@@ -7,10 +7,9 @@ on:
|
|||||||
- opened
|
- opened
|
||||||
- synchronize
|
- synchronize
|
||||||
- ready_for_review
|
- ready_for_review
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@@ -37,35 +36,7 @@ jobs:
|
|||||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||||
|
|
||||||
- name: Run Linting
|
- name: Run Linting
|
||||||
shell: bash
|
run: pnpm run lint
|
||||||
run: |
|
|
||||||
if ! pnpm run lint; then
|
|
||||||
# print a nice error message on lint failure
|
|
||||||
ERROR_MESSAGE='Running `pnpm run lint` failed.'
|
|
||||||
ERROR_MESSAGE+=' Running `pnpm run lint:fix` may fix this issue. '
|
|
||||||
ERROR_MESSAGE+=" If this error doesn't occur on your local machine,"
|
|
||||||
ERROR_MESSAGE+=' make sure your packages are up-to-date by running `pnpm install`.'
|
|
||||||
ERROR_MESSAGE+=' You may also need to delete your prettier cache by running'
|
|
||||||
ERROR_MESSAGE+=' `rm ./node_modules/.cache/prettier/.prettier-cache`.'
|
|
||||||
echo "::error title=Lint failure::${ERROR_MESSAGE}"
|
|
||||||
# make sure to return an error exitcode so that GitHub actions shows a red-cross
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Verify Docs
|
- name: Verify Docs
|
||||||
id: verifyDocs
|
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
continue-on-error: ${{ github.event_name == 'push' }}
|
|
||||||
run: pnpm run docs:verify
|
run: pnpm run docs:verify
|
||||||
|
|
||||||
- name: Rebuild Docs
|
|
||||||
if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
|
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
run: pnpm run docs:build
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: EndBug/add-and-commit@v9
|
|
||||||
if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
|
|
||||||
with:
|
|
||||||
message: 'Update docs'
|
|
||||||
add: 'docs/*'
|
|
||||||
|
|||||||
62
.github/workflows/publish-docs.yml
vendored
62
.github/workflows/publish-docs.yml
vendored
@@ -1,62 +0,0 @@
|
|||||||
name: Deploy Vitepress docs to Pages
|
|
||||||
|
|
||||||
on:
|
|
||||||
# Runs on pushes targeting the default branch
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pages: write
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# Allow one concurrent deployment
|
|
||||||
concurrency:
|
|
||||||
group: 'pages'
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# Build job
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: pnpm
|
|
||||||
node-version: 18
|
|
||||||
|
|
||||||
- name: Install Packages
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Setup Pages
|
|
||||||
uses: actions/configure-pages@v2
|
|
||||||
|
|
||||||
- name: Run Build
|
|
||||||
run: pnpm --filter mermaid run docs:build:vitepress
|
|
||||||
|
|
||||||
- name: Upload artifact
|
|
||||||
uses: actions/upload-pages-artifact@v1
|
|
||||||
with:
|
|
||||||
path: packages/mermaid/src/vitepress/.vitepress/dist
|
|
||||||
|
|
||||||
# Deployment job
|
|
||||||
deploy:
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
id: deployment
|
|
||||||
uses: actions/deploy-pages@v1
|
|
||||||
20
.github/workflows/release-preview-publish.yml
vendored
20
.github/workflows/release-preview-publish.yml
vendored
@@ -10,30 +10,22 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
|
||||||
node-version: 18.x
|
node-version: 18.x
|
||||||
|
- name: Install Yarn
|
||||||
- name: Install Packages
|
run: npm i yarn --global
|
||||||
run: |
|
|
||||||
pnpm install --frozen-lockfile
|
|
||||||
env:
|
|
||||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
|
||||||
|
|
||||||
- name: Install Json
|
- name: Install Json
|
||||||
run: npm i json --global
|
run: npm i json --global
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
|
||||||
- name: Publish
|
- name: Publish
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
run: |
|
run: |
|
||||||
PREVIEW_VERSION=$(git log --oneline "origin/$GITHUB_REF_NAME" ^"origin/master" | wc -l)
|
PREVIEW_VERSION=8
|
||||||
VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION
|
VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION
|
||||||
echo $VERSION
|
echo $VERSION
|
||||||
npm version --no-git-tag-version --allow-same-version $VERSION
|
npm version --no-git-tag-version --allow-same-version $VERSION
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -32,7 +32,6 @@ cypress/snapshots/
|
|||||||
.eslintcache
|
.eslintcache
|
||||||
.tsbuildinfo
|
.tsbuildinfo
|
||||||
tsconfig.tsbuildinfo
|
tsconfig.tsbuildinfo
|
||||||
|
|
||||||
knsv*.html
|
knsv*.html
|
||||||
|
|
||||||
local*.html
|
local*.html
|
||||||
stats/
|
|
||||||
|
|||||||
6
.lintstagedrc.json
Normal file
6
.lintstagedrc.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"packages/mermaid/src/docs/**": ["pnpm run docs:build --git"],
|
||||||
|
"packages/mermaid/src/docs.mts": ["pnpm run docs:build --git"],
|
||||||
|
"*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"],
|
||||||
|
"*.jison": ["pnpm run lint:jison"]
|
||||||
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
export default {
|
|
||||||
'!(docs/**/*)*.{ts,js,json,html,md,mts}': [
|
|
||||||
'eslint --cache --cache-strategy content --fix',
|
|
||||||
// don't cache prettier yet, since we use `prettier-plugin-jsdoc`,
|
|
||||||
// and prettier doesn't invalidate cache on plugin updates"
|
|
||||||
// https://prettier.io/docs/en/cli.html#--cache
|
|
||||||
'prettier --write',
|
|
||||||
],
|
|
||||||
'cSpell.json': ['ts-node-esm scripts/fixCSpell.ts'],
|
|
||||||
'**/*.jison': ['pnpm -w run lint:jison'],
|
|
||||||
};
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
# These links are ignored by our link checker https://github.com/lycheeverse/lychee
|
|
||||||
# The file allows you to list multiple regular expressions for exclusion (one pattern per line).
|
|
||||||
|
|
||||||
# Network error: Forbidden
|
|
||||||
https://codepen.io
|
|
||||||
|
|
||||||
# Network error: The certificate was not trusted
|
|
||||||
https://mkdocs.org/
|
|
||||||
https://osawards.com/javascript/#nominees
|
|
||||||
https://osawards.com/javascript/2019
|
|
||||||
|
|
||||||
# Timeout error, maybe Twitter has anti-bot defences against GitHub's CI servers?
|
|
||||||
https://twitter.com/mermaidjs_
|
|
||||||
|
|
||||||
# Don't check files that are generated during the build via `pnpm docs:code`
|
|
||||||
packages/mermaid/src/docs/config/setup/*
|
|
||||||
2
.npmrc
2
.npmrc
@@ -1,3 +1 @@
|
|||||||
auto-install-peers=true
|
auto-install-peers=true
|
||||||
strict-peer-dependencies=false
|
|
||||||
use-inline-specifiers-lockfile-format=true
|
|
||||||
|
|||||||
@@ -4,4 +4,3 @@ cypress/platform/xss3.html
|
|||||||
coverage
|
coverage
|
||||||
# Autogenerated by PNPM
|
# Autogenerated by PNPM
|
||||||
pnpm-lock.yaml
|
pnpm-lock.yaml
|
||||||
stats
|
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
import { build, InlineConfig, type PluginOption } from 'vite';
|
import { build, InlineConfig } from 'vite';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import jisonPlugin from './jisonPlugin.js';
|
import jisonPlugin from './jisonPlugin.js';
|
||||||
import { readFileSync } from 'fs';
|
import pkg from '../package.json' assert { type: 'json' };
|
||||||
import { visualizer } from 'rollup-plugin-visualizer';
|
|
||||||
import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
|
|
||||||
|
|
||||||
const visualize = process.argv.includes('--visualize');
|
const { dependencies } = pkg;
|
||||||
const watch = process.argv.includes('--watch');
|
const watch = process.argv.includes('--watch');
|
||||||
const mermaidOnly = process.argv.includes('--mermaid');
|
const mermaidOnly = process.argv.includes('--mermaid');
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
@@ -16,29 +14,30 @@ type OutputOptions = Exclude<
|
|||||||
undefined
|
undefined
|
||||||
>['output'];
|
>['output'];
|
||||||
|
|
||||||
const visualizerOptions = (packageName: string, core = false): PluginOption[] => {
|
|
||||||
if (packageName !== 'mermaid' || !visualize) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
return ['network', 'treemap', 'sunburst'].map((chartType) =>
|
|
||||||
visualizer({
|
|
||||||
filename: `./stats/${chartType}${core ? '.core' : ''}.html`,
|
|
||||||
template: chartType as TemplateType,
|
|
||||||
gzipSize: true,
|
|
||||||
brotliSize: true,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const packageOptions = {
|
const packageOptions = {
|
||||||
mermaid: {
|
mermaid: {
|
||||||
name: 'mermaid',
|
name: 'mermaid',
|
||||||
packageName: 'mermaid',
|
packageName: 'mermaid',
|
||||||
file: 'mermaid.ts',
|
file: 'mermaid.ts',
|
||||||
},
|
},
|
||||||
|
'mermaid-mindmap': {
|
||||||
|
name: 'mermaid-mindmap',
|
||||||
|
packageName: 'mermaid-mindmap',
|
||||||
|
file: 'diagram-definition.ts',
|
||||||
|
},
|
||||||
|
'mermaid-mindmap-detector': {
|
||||||
|
name: 'mermaid-mindmap-detector',
|
||||||
|
packageName: 'mermaid-mindmap',
|
||||||
|
file: 'detector.ts',
|
||||||
|
},
|
||||||
'mermaid-example-diagram': {
|
'mermaid-example-diagram': {
|
||||||
name: 'mermaid-example-diagram',
|
name: 'mermaid-example-diagram',
|
||||||
packageName: 'mermaid-example-diagram',
|
packageName: 'mermaid-example-diagram',
|
||||||
|
file: 'diagram-definition.ts',
|
||||||
|
},
|
||||||
|
'mermaid-example-diagram-detector': {
|
||||||
|
name: 'mermaid-example-diagram-detector',
|
||||||
|
packageName: 'mermaid-example-diagram',
|
||||||
file: 'detector.ts',
|
file: 'detector.ts',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -51,7 +50,7 @@ interface BuildOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => {
|
export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => {
|
||||||
const external: (string | RegExp)[] = ['require', 'fs', 'path'];
|
const external = ['require', 'fs', 'path'];
|
||||||
console.log(entryName, packageOptions[entryName]);
|
console.log(entryName, packageOptions[entryName]);
|
||||||
const { name, file, packageName } = packageOptions[entryName];
|
const { name, file, packageName } = packageOptions[entryName];
|
||||||
let output: OutputOptions = [
|
let output: OutputOptions = [
|
||||||
@@ -70,14 +69,9 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
|||||||
];
|
];
|
||||||
|
|
||||||
if (core) {
|
if (core) {
|
||||||
const { dependencies } = JSON.parse(
|
|
||||||
readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
|
|
||||||
);
|
|
||||||
// Core build is used to generate file without bundled dependencies.
|
// Core build is used to generate file without bundled dependencies.
|
||||||
// This is used by downstream projects to bundle dependencies themselves.
|
// This is used by downstream projects to bundle dependencies themselves.
|
||||||
// Ignore dependencies and any dependencies of dependencies
|
external.push(...Object.keys(dependencies));
|
||||||
// Adapted from the RegEx used by `rollup-plugin-node`
|
|
||||||
external.push(new RegExp('^(?:' + Object.keys(dependencies).join('|') + ')(?:/.+)?$'));
|
|
||||||
// This needs to be an array. Otherwise vite will build esm & umd with same name and overwrite esm with umd.
|
// This needs to be an array. Otherwise vite will build esm & umd with same name and overwrite esm with umd.
|
||||||
output = [
|
output = [
|
||||||
{
|
{
|
||||||
@@ -109,12 +103,16 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
|||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['.jison', '.js', '.ts', '.json'],
|
extensions: ['.jison', '.js', '.ts', '.json'],
|
||||||
},
|
},
|
||||||
plugins: [jisonPlugin(), ...visualizerOptions(packageName, core)],
|
plugins: [jisonPlugin()],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (watch && config.build) {
|
if (watch && config.build) {
|
||||||
config.build.watch = {
|
config.build.watch = {
|
||||||
include: ['packages/mermaid-example-diagram/src/**', 'packages/mermaid/src/**'],
|
include: [
|
||||||
|
'packages/mermaid-mindmap/src/**',
|
||||||
|
'packages/mermaid/src/**',
|
||||||
|
'packages/mermaid-example-diagram/src/**',
|
||||||
|
],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,19 +129,20 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
|||||||
|
|
||||||
const main = async () => {
|
const main = async () => {
|
||||||
const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
|
const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
|
||||||
for (const pkg of packageNames.filter((pkg) => !mermaidOnly || pkg === 'mermaid')) {
|
for (const pkg of packageNames) {
|
||||||
|
if (mermaidOnly && pkg !== 'mermaid') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
await buildPackage(pkg);
|
await buildPackage(pkg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (watch) {
|
if (watch) {
|
||||||
build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
|
build(getBuildConfig({ minify: false, watch, core: true, entryName: 'mermaid' }));
|
||||||
if (!mermaidOnly) {
|
if (!mermaidOnly) {
|
||||||
|
build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-mindmap' }));
|
||||||
build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
|
build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
|
||||||
}
|
}
|
||||||
} else if (visualize) {
|
|
||||||
await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
|
|
||||||
await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
|
|
||||||
} else {
|
} else {
|
||||||
void main();
|
void main();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
import express, { NextFunction, Request, Response } from 'express';
|
import express from 'express';
|
||||||
import { createServer as createViteServer } from 'vite';
|
import { createServer as createViteServer } from 'vite';
|
||||||
|
// import { getBuildConfig } from './build';
|
||||||
const cors = (req: Request, res: Response, next: NextFunction) => {
|
|
||||||
res.header('Access-Control-Allow-Origin', '*');
|
|
||||||
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
|
|
||||||
res.header('Access-Control-Allow-Headers', 'Content-Type');
|
|
||||||
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
|
|
||||||
async function createServer() {
|
async function createServer() {
|
||||||
const app = express();
|
const app = express();
|
||||||
@@ -19,10 +12,9 @@ async function createServer() {
|
|||||||
appType: 'custom', // don't include Vite's default HTML handling middlewares
|
appType: 'custom', // don't include Vite's default HTML handling middlewares
|
||||||
});
|
});
|
||||||
|
|
||||||
app.use(cors);
|
|
||||||
app.use(express.static('./packages/mermaid/dist'));
|
app.use(express.static('./packages/mermaid/dist'));
|
||||||
// app.use(express.static('./packages/mermaid-example-diagram/dist'));
|
|
||||||
app.use(express.static('./packages/mermaid-example-diagram/dist'));
|
app.use(express.static('./packages/mermaid-example-diagram/dist'));
|
||||||
|
app.use(express.static('./packages/mermaid-mindmap/dist'));
|
||||||
app.use(vite.middlewares);
|
app.use(vite.middlewares);
|
||||||
app.use(express.static('demos'));
|
app.use(express.static('demos'));
|
||||||
app.use(express.static('cypress/platform'));
|
app.use(express.static('cypress/platform'));
|
||||||
@@ -32,4 +24,5 @@ async function createServer() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// build(getBuildConfig({ minify: false, watch: true }));
|
||||||
createServer();
|
createServer();
|
||||||
|
|||||||
6
.vite/tsconfig.json
Normal file
6
.vite/tsconfig.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "ES2022"
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.vscode/launch.json
vendored
11
.vscode/launch.json
vendored
@@ -12,17 +12,6 @@
|
|||||||
"args": ["run", "${relativeFile}"],
|
"args": ["run", "${relativeFile}"],
|
||||||
"smartStep": true,
|
"smartStep": true,
|
||||||
"console": "integratedTerminal"
|
"console": "integratedTerminal"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Docs generation",
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"args": ["src/docs.mts"],
|
|
||||||
"runtimeArgs": ["--loader", "ts-node/esm"],
|
|
||||||
"cwd": "${workspaceRoot}/packages/mermaid",
|
|
||||||
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
|
||||||
"smartStep": true,
|
|
||||||
"internalConsoleOptions": "openOnSessionStart"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ We make all changes via pull requests. As we have many pull requests from develo
|
|||||||
|
|
||||||
- Large changes reviewed by knsv or other developer asked to review by knsv
|
- Large changes reviewed by knsv or other developer asked to review by knsv
|
||||||
- Smaller low-risk changes like dependencies, documentation, etc. can be merged by active collaborators
|
- Smaller low-risk changes like dependencies, documentation, etc. can be merged by active collaborators
|
||||||
- Documentation (updates to the `package/mermaid/src/docs` folder is also allowed via direct commits)
|
- Documentation (updates to the `src/docs` folder is also allowed via direct commits)
|
||||||
|
|
||||||
To commit code, create a branch, let it start with the type like feature or bug followed by the issue number for reference and some describing text.
|
To commit code, create a branch, let it start with the type like feature or bug followed by the issue number for reference and some describing text.
|
||||||
|
|
||||||
@@ -67,22 +67,31 @@ flowchart LR
|
|||||||
|
|
||||||
### The official documentation site
|
### The official documentation site
|
||||||
|
|
||||||
**[The mermaid documentation site](https://mermaid-js.github.io/mermaid/) is powered by [Vitepress](https://vitepress.vuejs.org/), a simple documentation site generator.**
|
**[The mermaid documentation site](https://mermaid-js.github.io/mermaid/) is powered by [Docsify](https://docsify.js.org), a simple documentation site generator.**
|
||||||
|
|
||||||
If you want to preview the whole documentation site on your machine:
|
If you want to preview the whole documentation site on your machine, you need to install `docsify-cli`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd packages/mermaid
|
$ npm i docsify-cli -g
|
||||||
pnpm i
|
|
||||||
pnpm docs:dev
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can now build and serve the documentation site:
|
If you are more familiar with Yarn, you can use the following command:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm docs:serve
|
$ yarn global add docsify-cli
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The above command will install `docsify-cli` globally.
|
||||||
|
If the installation is successful, the command `docsify` will be available in your `PATH`.
|
||||||
|
|
||||||
|
You can now run the following command to serve the documentation site:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ docsify serve docs
|
||||||
|
```
|
||||||
|
|
||||||
|
Once the local HTTP server is listening, you can point your browser at http://localhost:3000.
|
||||||
|
|
||||||
## Branching
|
## Branching
|
||||||
|
|
||||||
Going forward we will use a git flow inspired approach to branching. So development is done in develop, to do the development in the develop.
|
Going forward we will use a git flow inspired approach to branching. So development is done in develop, to do the development in the develop.
|
||||||
@@ -143,7 +152,7 @@ The source files for documentation are in `/packages/mermaid/src/docs` and are w
|
|||||||
|
|
||||||
#### Adding to or changing the documentation organization
|
#### Adding to or changing the documentation organization
|
||||||
|
|
||||||
If you want to add a new section or change the organization (structure), then you need to make sure to **change the side navigation** in `mermaid/src/docs/.vitepress/config.js`.
|
If you want to add a new section or change the organization (structure), then you need to make sure to **change the side navigation** in `src/docs/_sidebar.md`.
|
||||||
|
|
||||||
When changes are committed and then released, they become part of the `master` branch and become part of the published documentation on https://mermaid-js.github.io/mermaid/
|
When changes are committed and then released, they become part of the `master` branch and become part of the published documentation on https://mermaid-js.github.io/mermaid/
|
||||||
|
|
||||||
|
|||||||
35
README.md
35
README.md
@@ -1,6 +1,23 @@
|
|||||||
# mermaid
|
# mermaid
|
||||||
|
|
||||||
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [](https://www.npmjs.com/package/mermaid) [](https://bundlephobia.com/package/mermaid) [](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [](https://www.jsdelivr.com/package/npm/mermaid) [](https://www.npmjs.com/package/mermaid) [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [](https://twitter.com/mermaidjs_)
|
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [](https://www.npmjs.com/package/mermaid) [](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [](https://www.jsdelivr.com/package/npm/mermaid) [](https://www.npmjs.com/package/mermaid) [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [](https://twitter.com/mermaidjs_)
|
||||||
|
|
||||||
|
# Whoa, what's going on here?
|
||||||
|
|
||||||
|
We are transforming the Mermaid repository to a so called mono-repo. This is a part of the effort to decouple the diagrams from the core of mermaid. This will:
|
||||||
|
|
||||||
|
- Make it possible to select which diagrams to include on your site
|
||||||
|
- Open up for lazy loading
|
||||||
|
- Make it possible to add diagrams from outside of the Mermaid repository
|
||||||
|
- Separate the release flow between different diagrams and the Mermaid core
|
||||||
|
|
||||||
|
As such be aware of some changes..
|
||||||
|
|
||||||
|
# We use pnpm now
|
||||||
|
|
||||||
|
# The source code has moved
|
||||||
|
|
||||||
|
It is now located in the src folder for each respective package located as subfolders in packages.
|
||||||
|
|
||||||
English | [简体中文](./README.zh-CN.md)
|
English | [简体中文](./README.zh-CN.md)
|
||||||
|
|
||||||
@@ -10,7 +27,7 @@ English | [简体中文](./README.zh-CN.md)
|
|||||||
|
|
||||||
**Thanks to all involved, people committing pull requests, people answering questions! 🙏**
|
**Thanks to all involved, people committing pull requests, people answering questions! 🙏**
|
||||||
|
|
||||||
<a href="https://mermaid-js.github.io/mermaid/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
|
<a href="https://mermaid-js.github.io/mermaid/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
|
||||||
|
|
||||||
## About
|
## About
|
||||||
|
|
||||||
@@ -26,12 +43,12 @@ Mermaid addresses this problem by enabling users to create easily modifiable dia
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/>
|
Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/>
|
||||||
[Tutorials](./docs/config/Tutorials.md) has video tutorials.
|
[Tutorials](./docs/Tutorials.md) has video tutorials.
|
||||||
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/misc/integrations.md).
|
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/integrations.md).
|
||||||
|
|
||||||
You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/misc/integrations.md).
|
You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/integrations.md).
|
||||||
|
|
||||||
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/community/n00b-overview.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md).
|
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/n00b-overview.md), [Usage](./docs/usage.md) and [Tutorials](./docs/Tutorials.md).
|
||||||
|
|
||||||
🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | 📜 [Changelog](./docs/CHANGELOG.md)
|
🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | 📜 [Changelog](./docs/CHANGELOG.md)
|
||||||
|
|
||||||
@@ -337,11 +354,7 @@ To report a vulnerability, please e-mail security@mermaid.live with a descriptio
|
|||||||
|
|
||||||
A quick note from Knut Sveidqvist:
|
A quick note from Knut Sveidqvist:
|
||||||
|
|
||||||
> _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_
|
> _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_ >_Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._ >_Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
|
||||||
>
|
|
||||||
> _Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._
|
|
||||||
>
|
|
||||||
> _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
|
|
||||||
>
|
>
|
||||||
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_
|
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# mermaid
|
# mermaid
|
||||||
|
|
||||||
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [](https://www.npmjs.com/package/mermaid) [](https://bundlephobia.com/package/mermaid) [](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [](https://www.jsdelivr.com/package/npm/mermaid) [](https://www.npmjs.com/package/mermaid) [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [](https://twitter.com/mermaidjs_)
|
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [](https://www.npmjs.com/package/mermaid) [](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [](https://www.jsdelivr.com/package/npm/mermaid) [](https://www.npmjs.com/package/mermaid) [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [](https://twitter.com/mermaidjs_)
|
||||||
|
|
||||||
[English](./README.md) | 简体中文
|
[English](./README.md) | 简体中文
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
**感谢所有参与进来提交 PR,解答疑问的人们! 🙏**
|
**感谢所有参与进来提交 PR,解答疑问的人们! 🙏**
|
||||||
|
|
||||||
<a href="https://mermaid-js.github.io/mermaid/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
|
<a href="https://mermaid-js.github.io/mermaid/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/img/book-banner-pre-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
|
||||||
|
|
||||||
## 关于 Mermaid
|
## 关于 Mermaid
|
||||||
|
|
||||||
@@ -24,9 +24,9 @@ Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markd
|
|||||||
Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它也可以作为生产脚本(或其他代码)的一部分。<br/>
|
Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它也可以作为生产脚本(或其他代码)的一部分。<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。<br/>
|
Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。<br/>
|
||||||
你可以访问 [教程](./docs/config/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/misc/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。
|
你可以访问 [教程](./docs/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。
|
||||||
|
|
||||||
如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/community/n00b-overview.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md).
|
如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/n00b-overview.md), [用法](./docs/usage.md) 和 [教程](./docs/Tutorials.md).
|
||||||
|
|
||||||
🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [文档](https://mermaidjs.github.io) | 🙌 [贡献](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | 📜 [更新日志](./docs/CHANGELOG.md)
|
🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [文档](https://mermaidjs.github.io) | 🙌 [贡献](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | 📜 [更新日志](./docs/CHANGELOG.md)
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://merma
|
|||||||
<table>
|
<table>
|
||||||
<!-- <Flowchart> -->
|
<!-- <Flowchart> -->
|
||||||
|
|
||||||
### 流程图 [<a href="https://mermaid-js.github.io/mermaid/#/flowchart">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ3JhcGggVERcbiAgICBBW0hhcmRdIC0tPnxUZXh0fCBCKFJvdW5kKVxuICAgIEIgLS0-IEN7RGVjaXNpb259XG4gICAgQyAtLT58T25lfCBEW1Jlc3VsdCAxXVxuICAgIEMgLS0-fFR3b3wgRVtSZXN1bHQgMl0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>]
|
### 流程图 [<a href="https://mermaid-js.github.io/mermaid/#/flowchart">文档</a> - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ3JhcGggVERcbiAgICBBW0hhcmRdIC0tPnxUZXh0fCBCKFJvdW5kKVxuICAgIEIgLS0-IEN7RGVjaXNpb259XG4gICAgQyAtLT58T25lfCBEW1Jlc3VsdCAxXVxuICAgIEMgLS0-fFR3b3wgRVtSZXN1bHQgMl0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
flowchart LR
|
flowchart LR
|
||||||
@@ -57,7 +57,7 @@ C -->|One| D[Result 1]
|
|||||||
C -->|Two| E[Result 2]
|
C -->|Two| E[Result 2]
|
||||||
```
|
```
|
||||||
|
|
||||||
### 时序图 [<a href="https://mermaid-js.github.io/mermaid/#/sequenceDiagram">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG5BbGljZS0-PkpvaG46IEhlbGxvIEpvaG4sIGhvdyBhcmUgeW91P1xubG9vcCBIZWFsdGhjaGVja1xuICAgIEpvaG4tPj5Kb2huOiBGaWdodCBhZ2FpbnN0IGh5cG9jaG9uZHJpYVxuZW5kXG5Ob3RlIHJpZ2h0IG9mIEpvaG46IFJhdGlvbmFsIHRob3VnaHRzIVxuSm9obi0tPj5BbGljZTogR3JlYXQhXG5Kb2huLT4-Qm9iOiBIb3cgYWJvdXQgeW91P1xuQm9iLS0-PkpvaG46IEpvbGx5IGdvb2QhIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
### 时序图 [<a href="https://mermaid-js.github.io/mermaid/#/sequenceDiagram">文档</a> - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG5BbGljZS0-PkpvaG46IEhlbGxvIEpvaG4sIGhvdyBhcmUgeW91P1xubG9vcCBIZWFsdGhjaGVja1xuICAgIEpvaG4tPj5Kb2huOiBGaWdodCBhZ2FpbnN0IGh5cG9jaG9uZHJpYVxuZW5kXG5Ob3RlIHJpZ2h0IG9mIEpvaG46IFJhdGlvbmFsIHRob3VnaHRzIVxuSm9obi0tPj5BbGljZTogR3JlYXQhXG5Kb2huLT4-Qm9iOiBIb3cgYWJvdXQgeW91P1xuQm9iLS0-PkpvaG46IEpvbGx5IGdvb2QhIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
@@ -83,7 +83,7 @@ John->>Bob: How about you?
|
|||||||
Bob-->>John: Jolly good!
|
Bob-->>John: Jolly good!
|
||||||
```
|
```
|
||||||
|
|
||||||
### 甘特图 [<a href="https://mermaid-js.github.io/mermaid/#/gantt">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ2FudHRcbnNlY3Rpb24gU2VjdGlvblxuQ29tcGxldGVkIDpkb25lLCAgICBkZXMxLCAyMDE0LTAxLTA2LDIwMTQtMDEtMDhcbkFjdGl2ZSAgICAgICAgOmFjdGl2ZSwgIGRlczIsIDIwMTQtMDEtMDcsIDNkXG5QYXJhbGxlbCAxICAgOiAgICAgICAgIGRlczMsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAyICAgOiAgICAgICAgIGRlczQsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAzICAgOiAgICAgICAgIGRlczUsIGFmdGVyIGRlczMsIDFkXG5QYXJhbGxlbCA0ICAgOiAgICAgICAgIGRlczYsIGFmdGVyIGRlczQsIDFkIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
### 甘特图 [<a href="https://mermaid-js.github.io/mermaid/#/gantt">文档</a> - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ2FudHRcbnNlY3Rpb24gU2VjdGlvblxuQ29tcGxldGVkIDpkb25lLCAgICBkZXMxLCAyMDE0LTAxLTA2LDIwMTQtMDEtMDhcbkFjdGl2ZSAgICAgICAgOmFjdGl2ZSwgIGRlczIsIDIwMTQtMDEtMDcsIDNkXG5QYXJhbGxlbCAxICAgOiAgICAgICAgIGRlczMsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAyICAgOiAgICAgICAgIGRlczQsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAzICAgOiAgICAgICAgIGRlczUsIGFmdGVyIGRlczMsIDFkXG5QYXJhbGxlbCA0ICAgOiAgICAgICAgIGRlczYsIGFmdGVyIGRlczQsIDFkIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
gantt
|
gantt
|
||||||
@@ -107,7 +107,7 @@ gantt
|
|||||||
Parallel 4 : des6, after des4, 1d
|
Parallel 4 : des6, after des4, 1d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 类图 [<a href="https://mermaid-js.github.io/mermaid/#/classDiagram">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiY2xhc3NEaWFncmFtXG5DbGFzczAxIDx8LS0gQXZlcnlMb25nQ2xhc3MgOiBDb29sXG48PGludGVyZmFjZT4-IENsYXNzMDFcbkNsYXNzMDkgLS0-IEMyIDogV2hlcmUgYW0gaT9cbkNsYXNzMDkgLS0qIEMzXG5DbGFzczA5IC0tfD4gQ2xhc3MwN1xuQ2xhc3MwNyA6IGVxdWFscygpXG5DbGFzczA3IDogT2JqZWN0W10gZWxlbWVudERhdGFcbkNsYXNzMDEgOiBzaXplKClcbkNsYXNzMDEgOiBpbnQgY2hpbXBcbkNsYXNzMDEgOiBpbnQgZ29yaWxsYVxuY2xhc3MgQ2xhc3MxMCB7XG4gID4-c2VydmljZT4-XG4gIGludCBpZFxuICBzaXplKClcbn0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>]
|
### 类图 [<a href="https://mermaid-js.github.io/mermaid/#/classDiagram">文档</a> - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiY2xhc3NEaWFncmFtXG5DbGFzczAxIDx8LS0gQXZlcnlMb25nQ2xhc3MgOiBDb29sXG48PGludGVyZmFjZT4-IENsYXNzMDFcbkNsYXNzMDkgLS0-IEMyIDogV2hlcmUgYW0gaT9cbkNsYXNzMDkgLS0qIEMzXG5DbGFzczA5IC0tfD4gQ2xhc3MwN1xuQ2xhc3MwNyA6IGVxdWFscygpXG5DbGFzczA3IDogT2JqZWN0W10gZWxlbWVudERhdGFcbkNsYXNzMDEgOiBzaXplKClcbkNsYXNzMDEgOiBpbnQgY2hpbXBcbkNsYXNzMDEgOiBpbnQgZ29yaWxsYVxuY2xhc3MgQ2xhc3MxMCB7XG4gID4-c2VydmljZT4-XG4gIGludCBpZFxuICBzaXplKClcbn0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
classDiagram
|
classDiagram
|
||||||
@@ -147,7 +147,7 @@ class Class10 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 状态图 [[<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkLsOwjAMRX-l8ojahTEDCzB26kgYrMYtkfJAqVMJVf13QiIKqqfr44d8vUDvFYGAiZHponEMaJv5KF2V4na4V01zqjrWxhSUZYapuEetn7UbCy16P_5HzwGnR6FZfpdCDZaCRa3SWcunQQI_yJIEkaSiAaNhCdKtqRUj--7lehAcItUQn-pnBMSAZtroVWn2YYOU07b4z29Y37gJVYk">live editor</a>]
|
### 状态图 [[<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/#/edit/eyJjb2RlIjoic3RhdGVEaWFncmFtLXYyXG4gICAgWypdIC0tPiBTdGlsbFxuICAgIFN0aWxsIC0tPiBbKl1cbiAgICBTdGlsbCAtLT4gTW92aW5nXG4gICAgTW92aW5nIC0tPiBTdGlsbFxuICAgIE1vdmluZyAtLT4gQ3Jhc2hcbiAgICBDcmFzaCAtLT4gWypdIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQiLCJ0aGVtZVZhcmlhYmxlcyI6eyJiYWNrZ3JvdW5kIjoid2hpdGUiLCJwcmltYXJ5Q29sb3IiOiIjRUNFQ0ZGIiwic2Vjb25kYXJ5Q29sb3IiOiIjZmZmZmRlIiwidGVydGlhcnlDb2xvciI6ImhzbCg4MCwgMTAwJSwgOTYuMjc0NTA5ODAzOSUpIiwicHJpbWFyeUJvcmRlckNvbG9yIjoiaHNsKDI0MCwgNjAlLCA4Ni4yNzQ1MDk4MDM5JSkiLCJzZWNvbmRhcnlCb3JkZXJDb2xvciI6ImhzbCg2MCwgNjAlLCA4My41Mjk0MTE3NjQ3JSkiLCJ0ZXJ0aWFyeUJvcmRlckNvbG9yIjoiaHNsKDgwLCA2MCUsIDg2LjI3NDUwOTgwMzklKSIsInByaW1hcnlUZXh0Q29sb3IiOiIjMTMxMzAwIiwic2Vjb25kYXJ5VGV4dENvbG9yIjoiIzAwMDAyMSIsInRlcnRpYXJ5VGV4dENvbG9yIjoicmdiKDkuNTAwMDAwMDAwMSwgOS41MDAwMDAwMDAxLCA5LjUwMDAwMDAwMDEpIiwibGluZUNvbG9yIjoiIzMzMzMzMyIsInRleHRDb2xvciI6IiMzMzMiLCJtYWluQmtnIjoiI0VDRUNGRiIsInNlY29uZEJrZyI6IiNmZmZmZGUiLCJib3JkZXIxIjoiIzkzNzBEQiIsImJvcmRlcjIiOiIjYWFhYTMzIiwiYXJyb3doZWFkQ29sb3IiOiIjMzMzMzMzIiwiZm9udEZhbWlseSI6IlwidHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsIiwiZm9udFNpemUiOiIxNnB4IiwibGFiZWxCYWNrZ3JvdW5kIjoiI2U4ZThlOCIsIm5vZGVCa2ciOiIjRUNFQ0ZGIiwibm9kZUJvcmRlciI6IiM5MzcwREIiLCJjbHVzdGVyQmtnIjoiI2ZmZmZkZSIsImNsdXN0ZXJCb3JkZXIiOiIjYWFhYTMzIiwiZGVmYXVsdExpbmtDb2xvciI6IiMzMzMzMzMiLCJ0aXRsZUNvbG9yIjoiIzMzMyIsImVkZ2VMYWJlbEJhY2tncm91bmQiOiIjZThlOGU4IiwiYWN0b3JCb3JkZXIiOiJoc2woMjU5LjYyNjE2ODIyNDMsIDU5Ljc3NjUzNjMxMjglLCA4Ny45MDE5NjA3ODQzJSkiLCJhY3RvckJrZyI6IiNFQ0VDRkYiLCJhY3RvclRleHRDb2xvciI6ImJsYWNrIiwiYWN0b3JMaW5lQ29sb3IiOiJncmV5Iiwic2lnbmFsQ29sb3IiOiIjMzMzIiwic2lnbmFsVGV4dENvbG9yIjoiIzMzMyIsImxhYmVsQm94QmtnQ29sb3IiOiIjRUNFQ0ZGIiwibGFiZWxCb3hCb3JkZXJDb2xvciI6ImhzbCgyNTkuNjI2MTY4MjI0MywgNTkuNzc2NTM2MzEyOCUsIDg3LjkwMTk2MDc4NDMlKSIsImxhYmVsVGV4dENvbG9yIjoiYmxhY2siLCJsb29wVGV4dENvbG9yIjoiYmxhY2siLCJub3RlQm9yZGVyQ29sb3IiOiIjYWFhYTMzIiwibm90ZUJrZ0NvbG9yIjoiI2ZmZjVhZCIsIm5vdGVUZXh0Q29sb3IiOiJibGFjayIsImFjdGl2YXRpb25Cb3JkZXJDb2xvciI6IiM2NjYiLCJhY3RpdmF0aW9uQmtnQ29sb3IiOiIjZjRmNGY0Iiwic2VxdWVuY2VOdW1iZXJDb2xvciI6IndoaXRlIiwic2VjdGlvbkJrZ0NvbG9yIjoicmdiYSgxMDIsIDEwMiwgMjU1LCAwLjQ5KSIsImFsdFNlY3Rpb25Ca2dDb2xvciI6IndoaXRlIiwic2VjdGlvbkJrZ0NvbG9yMiI6IiNmZmY0MDAiLCJ0YXNrQm9yZGVyQ29sb3IiOiIjNTM0ZmJjIiwidGFza0JrZ0NvbG9yIjoiIzhhOTBkZCIsInRhc2tUZXh0TGlnaHRDb2xvciI6IndoaXRlIiwidGFza1RleHRDb2xvciI6IndoaXRlIiwidGFza1RleHREYXJrQ29sb3IiOiJibGFjayIsInRhc2tUZXh0T3V0c2lkZUNvbG9yIjoiYmxhY2siLCJ0YXNrVGV4dENsaWNrYWJsZUNvbG9yIjoiIzAwMzE2MyIsImFjdGl2ZVRhc2tCb3JkZXJDb2xvciI6IiM1MzRmYmMiLCJhY3RpdmVUYXNrQmtnQ29sb3IiOiIjYmZjN2ZmIiwiZ3JpZENvbG9yIjoibGlnaHRncmV5IiwiZG9uZVRhc2tCa2dDb2xvciI6ImxpZ2h0Z3JleSIsImRvbmVUYXNrQm9yZGVyQ29sb3IiOiJncmV5IiwiY3JpdEJvcmRlckNvbG9yIjoiI2ZmODg4OCIsImNyaXRCa2dDb2xvciI6InJlZCIsInRvZGF5TGluZUNvbG9yIjoicmVkIiwibGFiZWxDb2xvciI6ImJsYWNrIiwiZXJyb3JCa2dDb2xvciI6IiM1NTIyMjIiLCJlcnJvclRleHRDb2xvciI6IiM1NTIyMjIiLCJjbGFzc1RleHQiOiIjMTMxMzAwIiwiZmlsbFR5cGUwIjoiI0VDRUNGRiIsImZpbGxUeXBlMSI6IiNmZmZmZGUiLCJmaWxsVHlwZTIiOiJoc2woMzA0LCAxMDAlLCA5Ni4yNzQ1MDk4MDM5JSkiLCJmaWxsVHlwZTMiOiJoc2woMTI0LCAxMDAlLCA5My41Mjk0MTE3NjQ3JSkiLCJmaWxsVHlwZTQiOiJoc2woMTc2LCAxMDAlLCA5Ni4yNzQ1MDk4MDM5JSkiLCJmaWxsVHlwZTUiOiJoc2woLTQsIDEwMCUsIDkzLjUyOTQxMTc2NDclKSIsImZpbGxUeXBlNiI6ImhzbCg4LCAxMDAlLCA5Ni4yNzQ1MDk4MDM5JSkiLCJmaWxsVHlwZTciOiJoc2woMTg4LCAxMDAlLCA5My41Mjk0MTE3NjQ3JSkifX0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
@@ -169,7 +169,7 @@ Moving --> Crash
|
|||||||
Crash --> [*]
|
Crash --> [*]
|
||||||
```
|
```
|
||||||
|
|
||||||
### 饼图 [<a href="https://mermaid-js.github.io/mermaid/#/pie">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoicGllXG5cIkRvZ3NcIiA6IDQyLjk2XG5cIkNhdHNcIiA6IDUwLjA1XG5cIlJhdHNcIiA6IDEwLjAxIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
### 饼图 [<a href="https://mermaid-js.github.io/mermaid/#/pie">文档</a> - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoicGllXG5cIkRvZ3NcIiA6IDQyLjk2XG5cIkNhdHNcIiA6IDUwLjA1XG5cIlJhdHNcIiA6IDEwLjAxIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
pie
|
pie
|
||||||
@@ -185,9 +185,9 @@ pie
|
|||||||
"Rats" : 15
|
"Rats" : 15
|
||||||
```
|
```
|
||||||
|
|
||||||
### Git 图 [实验特性 - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ2l0R3JhcGg6XG5vcHRpb25zXG57XG4gICAgXCJub2RlU3BhY2luZ1wiOiAxNTAsXG4gICAgXCJub2RlUmFkaXVzXCI6IDEwXG59XG5lbmRcbmNvbW1pdFxuYnJhbmNoIG5ld2JyYW5jaFxuY2hlY2tvdXQgbmV3YnJhbmNoXG5jb21taXRcbmNvbW1pdFxuY2hlY2tvdXQgbWFzdGVyXG5jb21taXRcbmNvbW1pdFxubWVyZ2UgbmV3YnJhbmNoXG4iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>]
|
### Git 图 [实验特性 - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ2l0R3JhcGg6XG5vcHRpb25zXG57XG4gICAgXCJub2RlU3BhY2luZ1wiOiAxNTAsXG4gICAgXCJub2RlUmFkaXVzXCI6IDEwXG59XG5lbmRcbmNvbW1pdFxuYnJhbmNoIG5ld2JyYW5jaFxuY2hlY2tvdXQgbmV3YnJhbmNoXG5jb21taXRcbmNvbW1pdFxuY2hlY2tvdXQgbWFzdGVyXG5jb21taXRcbmNvbW1pdFxubWVyZ2UgbmV3YnJhbmNoXG4iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>]
|
||||||
|
|
||||||
### 用户体验旅程图 [<a href="https://mermaid-js.github.io/mermaid/#/user-journey">文档</a> - <a href="https://mermaid.live/edit#pako:eNpljzEPgkAMhf9K05nFGJdbJXFiYmVpuKIncDVHL4QQ_ruHaILaqXnf63vpjLVYRoMAd4nB81R5SKNOO4ZiglFC6_wVLL3JwLU68XARUHnhTQcoqGVQJgMnAwV_5GSMj0HJhcHAcU_y7d7AYVUzOJP-ddyk3ydZGf0n66uldPqCPxWYYc-hJ2fTj_OqVqg3Tplo0mq5odhphZVfkpWiSjn5Go2GyBnGhyXl3NE1UI-moW7g5QkSoF5m">live editor</a>]
|
### 用户体验旅程图 [<a href="https://mermaid-js.github.io/mermaid/#/user-journey">文档</a> - <a href="https://mermaidjs.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic3RhdGVEaWFncmFtXG4gICAgWypdIC0tPiBTdGlsbFxuICAgIFN0aWxsIC0tPiBbKl1cbiAgICBTdGlsbCAtLT4gTW92aW5nXG4gICAgTW92aW5nIC0tPiBTdGlsbFxuICAgIE1vdmluZyAtLT4gQ3Jhc2hcbiAgICBDcmFzaCAtLT4gWypdIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>]
|
||||||
|
|
||||||
```
|
```
|
||||||
journey
|
journey
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked C4Context diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const drawPersonOrSystemArray = vi.fn();
|
|
||||||
export const drawBoundary = vi.fn();
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
drawPersonOrSystemArray,
|
|
||||||
drawBoundary,
|
|
||||||
setConf,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked class diagram v2 renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
setConf,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked class diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,14 +1,67 @@
|
|||||||
// @ts-nocheck TODO: Fix TS
|
// @ts-nocheck TODO: Fix TS
|
||||||
import { MockedD3 } from '../packages/mermaid/src/tests/MockedD3';
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
const NewD3 = function () {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function returnThis() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
append: function () {
|
||||||
|
return NewD3();
|
||||||
|
},
|
||||||
|
lower: returnThis,
|
||||||
|
attr: returnThis,
|
||||||
|
style: returnThis,
|
||||||
|
text: returnThis,
|
||||||
|
0: {
|
||||||
|
0: {
|
||||||
|
getBBox: function () {
|
||||||
|
return {
|
||||||
|
height: 10,
|
||||||
|
width: 20,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export const select = function () {
|
export const select = function () {
|
||||||
return new MockedD3();
|
return new NewD3();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const selectAll = function () {
|
export const selectAll = function () {
|
||||||
return new MockedD3();
|
return new NewD3();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const curveBasis = 'basis';
|
export const curveBasis = 'basis';
|
||||||
export const curveLinear = 'linear';
|
export const curveLinear = 'linear';
|
||||||
export const curveCardinal = 'cardinal';
|
export const curveCardinal = 'cardinal';
|
||||||
|
|
||||||
|
export const MockD3 = (name, parent) => {
|
||||||
|
const children = [];
|
||||||
|
const elem = {
|
||||||
|
get __children() {
|
||||||
|
return children;
|
||||||
|
},
|
||||||
|
get __name() {
|
||||||
|
return name;
|
||||||
|
},
|
||||||
|
get __parent() {
|
||||||
|
return parent;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
elem.append = (name) => {
|
||||||
|
const mockElem = MockD3(name, elem);
|
||||||
|
children.push(mockElem);
|
||||||
|
return mockElem;
|
||||||
|
};
|
||||||
|
elem.lower = vi.fn(() => elem);
|
||||||
|
elem.attr = vi.fn(() => elem);
|
||||||
|
elem.text = vi.fn(() => elem);
|
||||||
|
elem.style = vi.fn(() => elem);
|
||||||
|
return elem;
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked er diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
setConf,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked flow (flowchart) diagram v2 renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
export const addVertices = vi.fn();
|
|
||||||
export const addEdges = vi.fn();
|
|
||||||
export const getClasses = vi.fn().mockImplementation(() => {
|
|
||||||
return {};
|
|
||||||
});
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
setConf,
|
|
||||||
addVertices,
|
|
||||||
addEdges,
|
|
||||||
getClasses,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked gantt diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
setConf,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked git (graph) diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked pie (picChart) diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
setConf,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked pie (picChart) diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked requirement diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked sequence diagram renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const bounds = vi.fn();
|
|
||||||
export const drawActors = vi.fn();
|
|
||||||
export const drawActorsPopup = vi.fn();
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
bounds,
|
|
||||||
drawActors,
|
|
||||||
drawActorsPopup,
|
|
||||||
setConf,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
/**
|
|
||||||
* Mocked state diagram v2 renderer
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
|
||||||
|
|
||||||
export const setConf = vi.fn();
|
|
||||||
export const getClasses = vi.fn().mockImplementation(() => {
|
|
||||||
return {};
|
|
||||||
});
|
|
||||||
export const stateDomId = vi.fn().mockImplementation(() => {
|
|
||||||
return 'mocked-stateDiagram-stateDomId';
|
|
||||||
});
|
|
||||||
export const draw = vi.fn().mockImplementation(() => {
|
|
||||||
return '';
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
|
||||||
setConf,
|
|
||||||
getClasses,
|
|
||||||
draw,
|
|
||||||
};
|
|
||||||
@@ -15,5 +15,5 @@ module.exports = defineConfig({
|
|||||||
// { deviceName: 'Pixel 2', screenOrientation: 'portrait' },
|
// { deviceName: 'Pixel 2', screenOrientation: 'portrait' },
|
||||||
],
|
],
|
||||||
// set batch name to the configuration
|
// set batch name to the configuration
|
||||||
// batchName: `Mermaid ${process.env.APPLI_BRANCH ?? "'no APPLI_BRANCH set'"}`,
|
batchName: `Mermaid ${process.env.APPLI_BRANCH ?? "'no APPLI_BRANCH set'"}`,
|
||||||
});
|
});
|
||||||
|
|||||||
152
cSpell.json
152
cSpell.json
@@ -2,114 +2,50 @@
|
|||||||
"version": "0.2",
|
"version": "0.2",
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"words": [
|
"words": [
|
||||||
"acyclicer",
|
|
||||||
"adamiecki",
|
|
||||||
"alois",
|
|
||||||
"antiscript",
|
|
||||||
"appli",
|
|
||||||
"applitools",
|
|
||||||
"asciidoctor",
|
|
||||||
"ashish",
|
|
||||||
"astah",
|
|
||||||
"bbox",
|
|
||||||
"bilkent",
|
|
||||||
"bisheng",
|
|
||||||
"blrs",
|
|
||||||
"braintree",
|
|
||||||
"brkt",
|
|
||||||
"brolin",
|
|
||||||
"brotli",
|
|
||||||
"classdef",
|
|
||||||
"codedoc",
|
|
||||||
"colour",
|
|
||||||
"cpettitt",
|
|
||||||
"customizability",
|
"customizability",
|
||||||
"cuzon",
|
"Gantt",
|
||||||
"cytoscape",
|
|
||||||
"dagre",
|
|
||||||
"descr",
|
|
||||||
"docsify",
|
|
||||||
"docsy",
|
|
||||||
"doku",
|
|
||||||
"dompurify",
|
|
||||||
"edgechromium",
|
|
||||||
"elkjs",
|
|
||||||
"faber",
|
|
||||||
"flatmap",
|
|
||||||
"ftplugin",
|
|
||||||
"gantt",
|
|
||||||
"gitea",
|
|
||||||
"gitgraph",
|
|
||||||
"globby",
|
|
||||||
"graphlib",
|
|
||||||
"graphviz",
|
|
||||||
"grav",
|
|
||||||
"greywolf",
|
|
||||||
"inkdrop",
|
|
||||||
"jaoude",
|
|
||||||
"jison",
|
"jison",
|
||||||
"kaufmann",
|
|
||||||
"khroma",
|
|
||||||
"klemm",
|
|
||||||
"klink",
|
|
||||||
"knsv",
|
"knsv",
|
||||||
"knut",
|
"Knut",
|
||||||
"laganeckas",
|
"mindmap",
|
||||||
"lintstagedrc",
|
"Mindmaps",
|
||||||
"logmsg",
|
"mitigations",
|
||||||
"lucida",
|
"sandboxed",
|
||||||
"matthieu",
|
"Sveidqvist",
|
||||||
"mdast",
|
"verdana",
|
||||||
|
"Visio"
|
||||||
|
],
|
||||||
|
"ignoreWords": [
|
||||||
|
"Adamiecki",
|
||||||
|
"applitools",
|
||||||
|
"Asciidoctor",
|
||||||
|
"Astah",
|
||||||
|
"Bisheng",
|
||||||
|
"codedoc",
|
||||||
|
"Docsy",
|
||||||
|
"Doku",
|
||||||
|
"Gitea",
|
||||||
|
"Gitgraph",
|
||||||
|
"Grav",
|
||||||
|
"Inkdrop",
|
||||||
|
"Jaoude",
|
||||||
"mdbook",
|
"mdbook",
|
||||||
"mermerd",
|
"mermerd",
|
||||||
"mindaugas",
|
|
||||||
"mindmap",
|
|
||||||
"mindmaps",
|
|
||||||
"mitigations",
|
|
||||||
"mkdocs",
|
"mkdocs",
|
||||||
"mult",
|
|
||||||
"orlandoni",
|
|
||||||
"phpbb",
|
"phpbb",
|
||||||
"plantuml",
|
"Plantuml",
|
||||||
"playfair",
|
"Playfair's",
|
||||||
"pnpm",
|
"Podlite",
|
||||||
"podlite",
|
|
||||||
"quence",
|
|
||||||
"radious",
|
|
||||||
"ranksep",
|
|
||||||
"rect",
|
|
||||||
"rects",
|
|
||||||
"redmine",
|
"redmine",
|
||||||
"roledescription",
|
|
||||||
"sandboxed",
|
|
||||||
"setupgraphviewbox",
|
|
||||||
"shiki",
|
|
||||||
"sidharth",
|
|
||||||
"sidharthv",
|
|
||||||
"sphinxcontrib",
|
"sphinxcontrib",
|
||||||
"statediagram",
|
"Tuleap"
|
||||||
"stylis",
|
|
||||||
"substate",
|
|
||||||
"sveidqvist",
|
|
||||||
"swimm",
|
|
||||||
"techn",
|
|
||||||
"teststr",
|
|
||||||
"textlength",
|
|
||||||
"treemap",
|
|
||||||
"ts-nocheck",
|
|
||||||
"tuleap",
|
|
||||||
"ugge",
|
|
||||||
"unist",
|
|
||||||
"verdana",
|
|
||||||
"viewports",
|
|
||||||
"vinod",
|
|
||||||
"visio",
|
|
||||||
"vitepress",
|
|
||||||
"xlink",
|
|
||||||
"yash"
|
|
||||||
],
|
],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{ "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" },
|
{
|
||||||
|
"name": "Markdown links",
|
||||||
|
"pattern": "\\((.*)\\)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Markdown code blocks",
|
"name": "Markdown code blocks",
|
||||||
"pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx",
|
"pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx",
|
||||||
@@ -120,14 +56,25 @@
|
|||||||
"pattern": "\\`([^\\`\\r\\n]+?)\\`",
|
"pattern": "\\`([^\\`\\r\\n]+?)\\`",
|
||||||
"description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex"
|
"description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex"
|
||||||
},
|
},
|
||||||
{ "name": "Link contents", "pattern": "\\<a(.*)\\>", "description": "" },
|
{
|
||||||
{ "name": "Snippet references", "pattern": "-- snippet:(.*)", "description": "" },
|
"name": "Link contents",
|
||||||
|
"pattern": "\\<a(.*)\\>",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Snippet references",
|
||||||
|
"pattern": "-- snippet:(.*)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Snippet references 2",
|
"name": "Snippet references 2",
|
||||||
"pattern": "\\<\\[sample:(.*)",
|
"pattern": "\\<\\[sample:(.*)",
|
||||||
"description": "another kind of snippet reference"
|
"description": "another kind of snippet reference"
|
||||||
},
|
},
|
||||||
{ "name": "Multi-line code blocks", "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" },
|
{
|
||||||
|
"name": "Multi-line code blocks",
|
||||||
|
"pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "HTML Tags",
|
"name": "HTML Tags",
|
||||||
"pattern": "<[^>]*>",
|
"pattern": "<[^>]*>",
|
||||||
@@ -144,8 +91,5 @@
|
|||||||
"Multi-line code blocks",
|
"Multi-line code blocks",
|
||||||
"HTML Tags"
|
"HTML Tags"
|
||||||
],
|
],
|
||||||
"ignorePaths": [
|
"ignorePaths": ["packages/mermaid/src/docs/CHANGELOG.md"]
|
||||||
"packages/mermaid/src/docs/CHANGELOG.md",
|
|
||||||
"packages/mermaid/src/docs/.vitepress/redirect.ts"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ const utf8ToB64 = (str) => {
|
|||||||
return window.btoa(unescape(encodeURIComponent(str)));
|
return window.btoa(unescape(encodeURIComponent(str)));
|
||||||
};
|
};
|
||||||
|
|
||||||
const batchId = 'mermaid-batch' + new Date().getTime();
|
|
||||||
|
|
||||||
export const mermaidUrl = (graphStr, options, api) => {
|
export const mermaidUrl = (graphStr, options, api) => {
|
||||||
const obj = {
|
const obj = {
|
||||||
code: graphStr,
|
code: graphStr,
|
||||||
@@ -46,48 +44,83 @@ export const imgSnapshotTest = (graphStr, _options, api = false, validation) =>
|
|||||||
if (!options.fontSize) {
|
if (!options.fontSize) {
|
||||||
options.fontSize = '16px';
|
options.fontSize = '16px';
|
||||||
}
|
}
|
||||||
const url = mermaidUrl(graphStr, options, api);
|
|
||||||
openURLAndVerifyRendering(url, options, validation);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const urlSnapshotTest = (url, _options, api = false, validation) => {
|
|
||||||
const options = Object.assign(_options);
|
|
||||||
openURLAndVerifyRendering(url, options, validation);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const renderGraph = (graphStr, options, api) => {
|
|
||||||
const url = mermaidUrl(graphStr, options, api);
|
|
||||||
openURLAndVerifyRendering(url, options);
|
|
||||||
};
|
|
||||||
|
|
||||||
const openURLAndVerifyRendering = (url, options, validation = undefined) => {
|
|
||||||
const useAppli = Cypress.env('useAppli');
|
const useAppli = Cypress.env('useAppli');
|
||||||
|
//const useAppli = false;
|
||||||
|
cy.log('Hello ' + useAppli ? 'Appli' : 'image-snapshot');
|
||||||
const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
||||||
|
|
||||||
if (useAppli) {
|
if (useAppli) {
|
||||||
cy.log('Opening eyes ' + Cypress.spec.name + ' --- ' + name);
|
|
||||||
cy.eyesOpen({
|
cy.eyesOpen({
|
||||||
appName: 'Mermaid',
|
appName: 'Mermaid',
|
||||||
testName: name,
|
testName: name,
|
||||||
batchName: Cypress.spec.name,
|
|
||||||
batchId: batchId + Cypress.spec.name,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
cy.visit(url);
|
const url = mermaidUrl(graphStr, options, api);
|
||||||
cy.window().should('have.property', 'rendered', true);
|
|
||||||
cy.get('svg').should('be.visible');
|
|
||||||
|
|
||||||
if (validation) {
|
cy.visit(url);
|
||||||
cy.get('svg').should(validation);
|
if (validation) cy.get('svg').should(validation);
|
||||||
}
|
cy.get('svg');
|
||||||
|
// Default name to test title
|
||||||
|
|
||||||
if (useAppli) {
|
if (useAppli) {
|
||||||
cy.log('Check eyes' + Cypress.spec.name);
|
|
||||||
cy.eyesCheckWindow('Click!');
|
cy.eyesCheckWindow('Click!');
|
||||||
cy.log('Closing eyes' + Cypress.spec.name);
|
|
||||||
cy.eyesClose();
|
cy.eyesClose();
|
||||||
} else {
|
} else {
|
||||||
cy.matchImageSnapshot(name);
|
cy.matchImageSnapshot(name);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const urlSnapshotTest = (url, _options, api = false, validation) => {
|
||||||
|
cy.log(_options);
|
||||||
|
const options = Object.assign(_options);
|
||||||
|
if (!options.fontFamily) {
|
||||||
|
options.fontFamily = 'courier';
|
||||||
|
}
|
||||||
|
if (!options.sequence) {
|
||||||
|
options.sequence = {};
|
||||||
|
}
|
||||||
|
if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) {
|
||||||
|
options.sequence.actorFontFamily = 'courier';
|
||||||
|
}
|
||||||
|
if (options.sequence && !options.sequence.noteFontFamily) {
|
||||||
|
options.sequence.noteFontFamily = 'courier';
|
||||||
|
}
|
||||||
|
options.sequence.actorFontFamily = 'courier';
|
||||||
|
options.sequence.noteFontFamily = 'courier';
|
||||||
|
options.sequence.messageFontFamily = 'courier';
|
||||||
|
if (options.sequence && !options.sequence.actorFontFamily) {
|
||||||
|
options.sequence.actorFontFamily = 'courier';
|
||||||
|
}
|
||||||
|
if (!options.fontSize) {
|
||||||
|
options.fontSize = '16px';
|
||||||
|
}
|
||||||
|
const useAppli = Cypress.env('useAppli');
|
||||||
|
cy.log('Hello ' + useAppli ? 'Appli' : 'image-snapshot');
|
||||||
|
const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
||||||
|
|
||||||
|
if (useAppli) {
|
||||||
|
cy.eyesOpen({
|
||||||
|
appName: 'Mermaid',
|
||||||
|
testName: name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
cy.visit(url);
|
||||||
|
if (validation) cy.get('svg').should(validation);
|
||||||
|
cy.get('body');
|
||||||
|
// Default name to test title
|
||||||
|
|
||||||
|
if (useAppli) {
|
||||||
|
cy.eyesCheckWindow('Click!');
|
||||||
|
cy.eyesClose();
|
||||||
|
} else {
|
||||||
|
cy.matchImageSnapshot(name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const renderGraph = (graphStr, options, api) => {
|
||||||
|
const url = mermaidUrl(graphStr, options, api);
|
||||||
|
|
||||||
|
cy.visit(url);
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
import { urlSnapshotTest } from '../../helpers/util';
|
|
||||||
|
|
||||||
describe('mermaid', () => {
|
|
||||||
describe('registerDiagram', () => {
|
|
||||||
it('should work on @mermaid-js/mermaid-example-diagram', () => {
|
|
||||||
const url = 'http://localhost:9000/external-diagrams-example-diagram.html';
|
|
||||||
urlSnapshotTest(url, {}, false, false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -7,10 +7,4 @@ describe('CSS injections', () => {
|
|||||||
flowchart: { htmlLabels: false },
|
flowchart: { htmlLabels: false },
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should not allow adding styletags affecting the page', () => {
|
|
||||||
urlSnapshotTest('http://localhost:9000/ghsa3.html', {
|
|
||||||
logLevel: 1,
|
|
||||||
flowchart: { htmlLabels: false },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ describe('Git Graph diagram', () => {
|
|||||||
// // Call Open on eyes to initialize a test session
|
// // Call Open on eyes to initialize a test session
|
||||||
// cy.eyesOpen({
|
// cy.eyesOpen({
|
||||||
// appName: 'Demo App',
|
// appName: 'Demo App',
|
||||||
// testName: 'UltraFast grid demo',
|
// testName: 'Ultrafast grid demo',
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// // check the login page with fluent api, see more info here
|
// // check the login page with fluent api, see more info here
|
||||||
|
|||||||
@@ -1,122 +0,0 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
|
||||||
|
|
||||||
describe('C4 diagram', () => {
|
|
||||||
it('should render a simple C4Context diagram', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
C4Context
|
|
||||||
accTitle: C4 context demo
|
|
||||||
accDescr: Many large C4 diagrams
|
|
||||||
|
|
||||||
title System Context diagram for Internet Banking System
|
|
||||||
|
|
||||||
Enterprise_Boundary(b0, "BankBoundary0") {
|
|
||||||
Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
|
|
||||||
|
|
||||||
System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
|
|
||||||
|
|
||||||
Enterprise_Boundary(b1, "BankBoundary") {
|
|
||||||
System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BiRel(customerA, SystemAA, "Uses")
|
|
||||||
Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")
|
|
||||||
Rel(SystemC, customerA, "Sends e-mails to")
|
|
||||||
|
|
||||||
UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red")
|
|
||||||
UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5")
|
|
||||||
UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20")
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('should render a simple C4Container diagram', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
C4Container
|
|
||||||
title Container diagram for Internet Banking System
|
|
||||||
|
|
||||||
System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0")
|
|
||||||
Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0")
|
|
||||||
|
|
||||||
Container_Boundary(c1, "Internet Banking") {
|
|
||||||
Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser")
|
|
||||||
}
|
|
||||||
|
|
||||||
Rel(customer, spa, "Uses", "HTTPS")
|
|
||||||
Rel(email_system, customer, "Sends e-mails to")
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('should render a simple C4Component diagram', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
C4Component
|
|
||||||
title Component diagram for Internet Banking System - API Application
|
|
||||||
|
|
||||||
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
|
|
||||||
|
|
||||||
Container_Boundary(api, "API Application") {
|
|
||||||
Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system")
|
|
||||||
}
|
|
||||||
|
|
||||||
Rel_Back(spa, sign, "Uses", "JSON/HTTPS")
|
|
||||||
UpdateRelStyle(spa, sign, $offsetY="-40")
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('should render a simple C4Dynamic diagram', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
C4Dynamic
|
|
||||||
title Dynamic diagram for Internet Banking System - API Application
|
|
||||||
|
|
||||||
ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
|
||||||
Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
|
|
||||||
Container_Boundary(b, "API Application") {
|
|
||||||
Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
|
|
||||||
Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
|
|
||||||
}
|
|
||||||
Rel(c1, c2, "Submits credentials to", "JSON/HTTPS")
|
|
||||||
Rel(c2, c3, "Calls isAuthenticated() on")
|
|
||||||
Rel(c3, c4, "select * from users where username = ?", "JDBC")
|
|
||||||
|
|
||||||
UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40")
|
|
||||||
UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60")
|
|
||||||
UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10")
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('should render a simple C4Deployment diagram', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
C4Deployment
|
|
||||||
title Deployment Diagram for Internet Banking System - Live
|
|
||||||
|
|
||||||
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
|
|
||||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
|
||||||
}
|
|
||||||
|
|
||||||
Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){
|
|
||||||
Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){
|
|
||||||
Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){
|
|
||||||
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -478,33 +478,4 @@ describe('Class diagram V2', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('18: should render a simple class diagram with notes', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
classDiagram-v2
|
|
||||||
note "I love this diagram!\nDo you love it?"
|
|
||||||
class Class10 {
|
|
||||||
int id
|
|
||||||
size()
|
|
||||||
}
|
|
||||||
note for Class10 "Cool class\nI said it's very cool class!"
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('1433: should render a simple class with a title', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`---
|
|
||||||
title: simple class diagram
|
|
||||||
---
|
|
||||||
classDiagram-v2
|
|
||||||
class Class10
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -407,20 +407,4 @@ describe('Class diagram', () => {
|
|||||||
// // expect(svg).to.not.have.attr('style');
|
// // expect(svg).to.not.have.attr('style');
|
||||||
// });
|
// });
|
||||||
// });
|
// });
|
||||||
|
|
||||||
it('19: should render a simple class diagram with notes', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
classDiagram
|
|
||||||
note "I love this diagram!\nDo you love it?"
|
|
||||||
class Class10 {
|
|
||||||
int id
|
|
||||||
size()
|
|
||||||
}
|
|
||||||
note for Class10 "Cool class\nI said it's very cool class!"
|
|
||||||
`,
|
|
||||||
{ logLevel: 1 }
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util';
|
import { imgSnapshotTest } from '../../helpers/util';
|
||||||
|
|
||||||
describe('Current diagram', () => {
|
describe('State diagram', () => {
|
||||||
it('should render a state with states in it', () => {
|
it('should render a state with states in it', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ describe('Entity Relationship Diagram', () => {
|
|||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render entities with generic and array attributes', () => {
|
it.only('should render entities with generic and array attributes', () => {
|
||||||
renderGraph(
|
renderGraph(
|
||||||
`
|
`
|
||||||
erDiagram
|
erDiagram
|
||||||
@@ -182,20 +182,6 @@ describe('Entity Relationship Diagram', () => {
|
|||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render entities with length in attributes type', () => {
|
|
||||||
renderGraph(
|
|
||||||
`
|
|
||||||
erDiagram
|
|
||||||
CLUSTER {
|
|
||||||
varchar(99) name
|
|
||||||
string(255) description
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
{ logLevel: 1 }
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render entities and attributes with big and small entity names', () => {
|
it('should render entities and attributes with big and small entity names', () => {
|
||||||
renderGraph(
|
renderGraph(
|
||||||
`
|
`
|
||||||
@@ -269,35 +255,4 @@ describe('Entity Relationship Diagram', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render entities with aliases', () => {
|
|
||||||
renderGraph(
|
|
||||||
`
|
|
||||||
erDiagram
|
|
||||||
T1 one or zero to one or more T2 : test
|
|
||||||
T2 one or many optionally to zero or one T3 : test
|
|
||||||
T3 zero or more to zero or many T4 : test
|
|
||||||
T4 many(0) to many(1) T5 : test
|
|
||||||
T5 many optionally to one T6 : test
|
|
||||||
T6 only one optionally to only one T1 : test
|
|
||||||
T4 0+ to 1+ T6 : test
|
|
||||||
T1 1 to 1 T3 : test
|
|
||||||
`,
|
|
||||||
{ logLevel: 1 }
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('1433: should render a simple ER diagram with a title', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`---
|
|
||||||
title: simple ER diagram
|
|
||||||
---
|
|
||||||
erDiagram
|
|
||||||
CUSTOMER ||--o{ ORDER : places
|
|
||||||
ORDER ||--|{ LINE-ITEM : contains
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,687 +0,0 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
|
|
||||||
|
|
||||||
describe('Flowchart ELK', () => {
|
|
||||||
it('1-elk: should render a simple flowchart', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
|
||||||
B --> C{Let me think}
|
|
||||||
C -->|One| D[Laptop]
|
|
||||||
C -->|Two| E[iPhone]
|
|
||||||
C -->|Three| F[fa:fa-car Car]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart TD
|
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
|
||||||
B --> C{Let me think}
|
|
||||||
C -->|One| D[Laptop]
|
|
||||||
C -->|Two| E[iPhone]
|
|
||||||
C -->|Three| F[fa:fa-car Car]
|
|
||||||
`,
|
|
||||||
{ flowchart: { defaultRenderer: 'elk' } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('2-elk: should render a simple flowchart with diagramPadding set to 0', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
|
||||||
B --> C{Let me think}
|
|
||||||
%% this is a comment
|
|
||||||
C -->|One| D[Laptop]
|
|
||||||
C -->|Two| E[iPhone]
|
|
||||||
C -->|Three| F[fa:fa-car Car]
|
|
||||||
`,
|
|
||||||
{ flowchart: { diagramPadding: 0 } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('3-elk: a link with correct arrowhead to a subgraph', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
P1
|
|
||||||
P1 -->P1.5
|
|
||||||
subgraph P1.5
|
|
||||||
P2
|
|
||||||
P2.5(( A ))
|
|
||||||
P3
|
|
||||||
end
|
|
||||||
P2 --> P4
|
|
||||||
P3 --> P6
|
|
||||||
P1.5 --> P5
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('4-elk: Length of edges', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
L1 --- L2
|
|
||||||
L2 --- C
|
|
||||||
M1 ---> C
|
|
||||||
R1 .-> R2
|
|
||||||
R2 <.-> C
|
|
||||||
C -->|Label 1| E1
|
|
||||||
C <-- Label 2 ---> E2
|
|
||||||
C ----> E3
|
|
||||||
C <-...-> E4
|
|
||||||
C ======> E5
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('5-elk: should render escaped without html labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
a["<strong>Haiya</strong>"]---->b
|
|
||||||
`,
|
|
||||||
{ htmlLabels: false, flowchart: { htmlLabels: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('6-elk: should render non-escaped with html labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
a["<strong>Haiya</strong>"]===>b
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('7-elk: should render a flowchart when useMaxWidth is true (default)', () => {
|
|
||||||
renderGraph(
|
|
||||||
`flowchart-elk TD
|
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
|
||||||
B --> C{Let me think}
|
|
||||||
C -->|One| D[Laptop]
|
|
||||||
C -->|Two| E[iPhone]
|
|
||||||
C -->|Three| F[fa:fa-car Car]
|
|
||||||
`,
|
|
||||||
{ flowchart: { useMaxWidth: true } }
|
|
||||||
);
|
|
||||||
cy.get('svg').should((svg) => {
|
|
||||||
expect(svg).to.have.attr('width', '100%');
|
|
||||||
// expect(svg).to.have.attr('height');
|
|
||||||
// use within because the absolute value can be slightly different depending on the environment ±5%
|
|
||||||
// const height = parseFloat(svg.attr('height'));
|
|
||||||
// expect(height).to.be.within(446 * 0.95, 446 * 1.05);
|
|
||||||
const style = svg.attr('style');
|
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
|
||||||
expect(maxWidthValue).to.be.within(230 * 0.95, 230 * 1.05);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
it('8-elk: should render a flowchart when useMaxWidth is false', () => {
|
|
||||||
renderGraph(
|
|
||||||
`flowchart-elk TD
|
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
|
||||||
B --> C{Let me think}
|
|
||||||
C -->|One| D[Laptop]
|
|
||||||
C -->|Two| E[iPhone]
|
|
||||||
C -->|Three| F[fa:fa-car Car]
|
|
||||||
`,
|
|
||||||
{ flowchart: { useMaxWidth: false } }
|
|
||||||
);
|
|
||||||
cy.get('svg').should((svg) => {
|
|
||||||
// const height = parseFloat(svg.attr('height'));
|
|
||||||
const width = parseFloat(svg.attr('width'));
|
|
||||||
// use within because the absolute value can be slightly different depending on the environment ±5%
|
|
||||||
// expect(height).to.be.within(446 * 0.95, 446 * 1.05);
|
|
||||||
expect(width).to.be.within(230 * 0.95, 230 * 1.05);
|
|
||||||
expect(svg).to.not.have.attr('style');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('V2 elk - 16: Render Stadium shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
` flowchart-elk TD
|
|
||||||
A([stadium shape test])
|
|
||||||
A -->|Get money| B([Go shopping])
|
|
||||||
B --> C([Let me think...<br />Do I want something for work,<br />something to spend every free second with,<br />or something to get around?])
|
|
||||||
C -->|One| D([Laptop])
|
|
||||||
C -->|Two| E([iPhone])
|
|
||||||
C -->|Three| F([Car<br/>wroom wroom])
|
|
||||||
click A "index.html#link-clicked" "link test"
|
|
||||||
click B testClick "click test"
|
|
||||||
classDef someclass fill:#f96;
|
|
||||||
class A someclass;
|
|
||||||
class C someclass;
|
|
||||||
`,
|
|
||||||
{ flowchart: { htmlLabels: false }, fontFamily: 'courier' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('50-elk: handle nested subgraphs in reverse order', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk LR
|
|
||||||
a -->b
|
|
||||||
subgraph A
|
|
||||||
B
|
|
||||||
end
|
|
||||||
subgraph B
|
|
||||||
b
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('51-elk: handle nested subgraphs in reverse order', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk LR
|
|
||||||
a -->b
|
|
||||||
subgraph A
|
|
||||||
B
|
|
||||||
end
|
|
||||||
subgraph B
|
|
||||||
b
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('52-elk: handle nested subgraphs in several levels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TB
|
|
||||||
b-->B
|
|
||||||
a-->c
|
|
||||||
subgraph O
|
|
||||||
A
|
|
||||||
end
|
|
||||||
subgraph B
|
|
||||||
c
|
|
||||||
end
|
|
||||||
subgraph A
|
|
||||||
a
|
|
||||||
b
|
|
||||||
B
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('53-elk: handle nested subgraphs with edges in and out', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TB
|
|
||||||
internet
|
|
||||||
nat
|
|
||||||
routeur
|
|
||||||
lb1
|
|
||||||
lb2
|
|
||||||
compute1
|
|
||||||
compute2
|
|
||||||
subgraph project
|
|
||||||
routeur
|
|
||||||
nat
|
|
||||||
subgraph subnet1
|
|
||||||
compute1
|
|
||||||
lb1
|
|
||||||
end
|
|
||||||
subgraph subnet2
|
|
||||||
compute2
|
|
||||||
lb2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
internet --> routeur
|
|
||||||
routeur --> subnet1 & subnet2
|
|
||||||
subnet1 & subnet2 --> nat --> internet
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('54-elk: handle nested subgraphs with outgoing links', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
subgraph main
|
|
||||||
subgraph subcontainer
|
|
||||||
subcontainer-child
|
|
||||||
end
|
|
||||||
subcontainer-child--> subcontainer-sibling
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('55-elk: handle nested subgraphs with outgoing links 2', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TD
|
|
||||||
|
|
||||||
subgraph one[One]
|
|
||||||
subgraph sub_one[Sub One]
|
|
||||||
_sub_one
|
|
||||||
end
|
|
||||||
subgraph sub_two[Sub Two]
|
|
||||||
_sub_two
|
|
||||||
end
|
|
||||||
_one
|
|
||||||
end
|
|
||||||
|
|
||||||
%% here, either the first or the second one
|
|
||||||
sub_one --> sub_two
|
|
||||||
_one --> b
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('56-elk: handle nested subgraphs with outgoing links 3', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TB
|
|
||||||
subgraph container_Beta
|
|
||||||
process_C-->Process_D
|
|
||||||
end
|
|
||||||
subgraph container_Alpha
|
|
||||||
process_A-->process_B
|
|
||||||
process_A-->|messages|process_C
|
|
||||||
end
|
|
||||||
process_B-->|via_AWSBatch|container_Beta
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('57-elk: handle nested subgraphs with outgoing links 4', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk LR
|
|
||||||
subgraph A
|
|
||||||
a -->b
|
|
||||||
end
|
|
||||||
subgraph B
|
|
||||||
b
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('57-elk: handle nested subgraphs with outgoing links 2', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TB
|
|
||||||
c1-->a2
|
|
||||||
subgraph one
|
|
||||||
a1-->a2
|
|
||||||
end
|
|
||||||
subgraph two
|
|
||||||
b1-->b2
|
|
||||||
end
|
|
||||||
subgraph three
|
|
||||||
c1-->c2
|
|
||||||
end
|
|
||||||
one --> two
|
|
||||||
three --> two
|
|
||||||
two --> c2
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('57.x: handle nested subgraphs with outgoing links 5', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%% this does not produce the desired result
|
|
||||||
flowchart-elk TB
|
|
||||||
subgraph container_Beta
|
|
||||||
process_C-->Process_D
|
|
||||||
end
|
|
||||||
subgraph container_Alpha
|
|
||||||
process_A-->process_B
|
|
||||||
process_B-->|via_AWSBatch|container_Beta
|
|
||||||
process_A-->|messages|process_C
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('58-elk: handle styling with style expressions', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk LR
|
|
||||||
id1(Start)-->id2(Stop)
|
|
||||||
style id1 fill:#f9f,stroke:#333,stroke-width:4px
|
|
||||||
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('59-elk: handle styling of subgraphs and links', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk TD
|
|
||||||
A[Christmas] ==> D
|
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
|
||||||
A[Christmas] ==> C
|
|
||||||
subgraph T ["Test"]
|
|
||||||
A
|
|
||||||
B
|
|
||||||
C
|
|
||||||
end
|
|
||||||
|
|
||||||
classDef Test fill:#F84E68,stroke:#333,color:white;
|
|
||||||
class A,T Test
|
|
||||||
classDef TestSub fill:green;
|
|
||||||
class T TestSub
|
|
||||||
linkStyle 0,1 color:orange, stroke: orange;
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('60-elk: handle styling for all node shapes - v2', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk LR
|
|
||||||
A[red text] -->|default style| B(blue text)
|
|
||||||
C([red text]) -->|default style| D[[blue text]]
|
|
||||||
E[(red text)] -->|default style| F((blue text))
|
|
||||||
G>red text] -->|default style| H{blue text}
|
|
||||||
I{{red text}} -->|default style| J[/blue text/]
|
|
||||||
K[\\ red text\\] -->|default style| L[/blue text\\]
|
|
||||||
M[\\ red text/] -->|default style| N[blue text];
|
|
||||||
O(((red text))) -->|default style| P(((blue text)));
|
|
||||||
linkStyle default color:Sienna;
|
|
||||||
style A stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style B stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style C stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style D stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style E stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style F stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style G stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style H stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style I stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style J stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style K stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style L stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style M stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style N stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
style O stroke:#ff0000,fill:#ffcccc,color:#ff0000;
|
|
||||||
style P stroke:#0000ff,fill:#ccccff,color:#0000ff;
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose', logLevel: 2 }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('61-elk: fontawesome icons in edge labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk TD
|
|
||||||
C -->|fa:fa-car Car| F[fa:fa-car Car]
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('62-elk: should render styled subgraphs', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk TB
|
|
||||||
A
|
|
||||||
B
|
|
||||||
subgraph foo[Foo SubGraph]
|
|
||||||
C
|
|
||||||
D
|
|
||||||
end
|
|
||||||
subgraph bar[Bar SubGraph]
|
|
||||||
E
|
|
||||||
F
|
|
||||||
end
|
|
||||||
G
|
|
||||||
|
|
||||||
A-->B
|
|
||||||
B-->C
|
|
||||||
C-->D
|
|
||||||
B-->D
|
|
||||||
D-->E
|
|
||||||
E-->A
|
|
||||||
E-->F
|
|
||||||
F-->D
|
|
||||||
F-->G
|
|
||||||
B-->G
|
|
||||||
G-->D
|
|
||||||
|
|
||||||
style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
|
|
||||||
style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('63-elk: title on subgraphs should be themable', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
%%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
|
|
||||||
flowchart-elk LR
|
|
||||||
subgraph A
|
|
||||||
a --> b
|
|
||||||
end
|
|
||||||
subgraph B
|
|
||||||
i -->f
|
|
||||||
end
|
|
||||||
A --> B
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('65-elk: text-color from classes', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk LR
|
|
||||||
classDef dark fill:#000,stroke:#000,stroke-width:4px,color:#fff
|
|
||||||
Lorem --> Ipsum --> Dolor
|
|
||||||
class Lorem,Dolor dark
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('66-elk: More nested subgraph cases (TB)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk TB
|
|
||||||
subgraph two
|
|
||||||
b1
|
|
||||||
end
|
|
||||||
subgraph three
|
|
||||||
c2
|
|
||||||
end
|
|
||||||
|
|
||||||
three --> two
|
|
||||||
two --> c2
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('67-elk: More nested subgraph cases (RL)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk RL
|
|
||||||
subgraph two
|
|
||||||
b1
|
|
||||||
end
|
|
||||||
subgraph three
|
|
||||||
c2
|
|
||||||
end
|
|
||||||
|
|
||||||
three --> two
|
|
||||||
two --> c2
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('68-elk: More nested subgraph cases (BT)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk BT
|
|
||||||
subgraph two
|
|
||||||
b1
|
|
||||||
end
|
|
||||||
subgraph three
|
|
||||||
c2
|
|
||||||
end
|
|
||||||
|
|
||||||
three --> two
|
|
||||||
two --> c2
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('69-elk: More nested subgraph cases (LR)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk LR
|
|
||||||
subgraph two
|
|
||||||
b1
|
|
||||||
end
|
|
||||||
subgraph three
|
|
||||||
c2
|
|
||||||
end
|
|
||||||
|
|
||||||
three --> two
|
|
||||||
two --> c2
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('70-elk: Handle nested subgraph cases (TB) link out and link between subgraphs', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk TB
|
|
||||||
subgraph S1
|
|
||||||
sub1 -->sub2
|
|
||||||
end
|
|
||||||
subgraph S2
|
|
||||||
sub4
|
|
||||||
end
|
|
||||||
S1 --> S2
|
|
||||||
sub1 --> sub4
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('71-elk: Handle nested subgraph cases (RL) link out and link between subgraphs', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk RL
|
|
||||||
subgraph S1
|
|
||||||
sub1 -->sub2
|
|
||||||
end
|
|
||||||
subgraph S2
|
|
||||||
sub4
|
|
||||||
end
|
|
||||||
S1 --> S2
|
|
||||||
sub1 --> sub4
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('72-elk: Handle nested subgraph cases (BT) link out and link between subgraphs', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk BT
|
|
||||||
subgraph S1
|
|
||||||
sub1 -->sub2
|
|
||||||
end
|
|
||||||
subgraph S2
|
|
||||||
sub4
|
|
||||||
end
|
|
||||||
S1 --> S2
|
|
||||||
sub1 --> sub4
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('74-elk: Handle nested subgraph cases (RL) link out and link between subgraphs', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk RL
|
|
||||||
subgraph S1
|
|
||||||
sub1 -->sub2
|
|
||||||
end
|
|
||||||
subgraph S2
|
|
||||||
sub4
|
|
||||||
end
|
|
||||||
S1 --> S2
|
|
||||||
sub1 --> sub4
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('74-elk: Handle labels for multiple edges from and to the same couple of nodes', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk RL
|
|
||||||
subgraph one
|
|
||||||
a1 -- l1 --> a2
|
|
||||||
a1 -- l2 --> a2
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('76-elk: handle unicode encoded character with HTML labels true', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart-elk TB
|
|
||||||
a{{"Lorem 'ipsum' dolor 'sit' amet, 'consectetur' adipiscing 'elit'."}}
|
|
||||||
--> b{{"Lorem #quot;ipsum#quot; dolor #quot;sit#quot; amet,#quot;consectetur#quot; adipiscing #quot;elit#quot;."}}
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('2050-elk: handling of different rendering direction in subgraphs', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk LR
|
|
||||||
|
|
||||||
subgraph TOP
|
|
||||||
direction TB
|
|
||||||
subgraph B1
|
|
||||||
direction RL
|
|
||||||
i1 -->f1
|
|
||||||
end
|
|
||||||
subgraph B2
|
|
||||||
direction BT
|
|
||||||
i2 -->f2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
A --> TOP --> B
|
|
||||||
B1 --> B2
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('2388-elk: handling default in the node name', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk LR
|
|
||||||
default-index.js --> dot.template.js
|
|
||||||
index.js --> module-utl.js
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('2824-elk: Clipping of edges', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
flowchart-elk TD
|
|
||||||
A --> B
|
|
||||||
A --> C
|
|
||||||
B --> C
|
|
||||||
`,
|
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('1433-elk: should render a titled flowchart with titleTopMargin set to 0', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`---
|
|
||||||
title: Simple flowchart
|
|
||||||
---
|
|
||||||
flowchart-elk TD
|
|
||||||
A --> B
|
|
||||||
`,
|
|
||||||
{ titleTopMargin: 0 }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -663,15 +663,4 @@ flowchart RL
|
|||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('1433: should render a titled flowchart with titleTopMargin set to 0', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`---
|
|
||||||
title: Simple flowchart
|
|
||||||
---
|
|
||||||
flowchart TD
|
|
||||||
A --> B
|
|
||||||
`,
|
|
||||||
{ titleTopMargin: 0 }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -310,129 +310,35 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 15 minutes', () => {
|
it('should render accessibility tags', function () {
|
||||||
imgSnapshotTest(
|
const expectedTitle = 'Gantt Diagram';
|
||||||
|
const expectedAccDescription = 'Tasks for Q4';
|
||||||
|
renderGraph(
|
||||||
`
|
`
|
||||||
gantt
|
gantt
|
||||||
title A Gantt Diagram
|
accTitle: ${expectedTitle}
|
||||||
|
accDescr: ${expectedAccDescription}
|
||||||
dateFormat YYYY-MM-DD
|
dateFormat YYYY-MM-DD
|
||||||
axisFormat %H:%M
|
|
||||||
tickInterval 15minute
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
section Section
|
||||||
A task : a1, 2022-10-03, 6h
|
A task :a1, 2014-01-01, 30d
|
||||||
Another task : after a1, 6h
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-03, 3h
|
|
||||||
another task : 3h
|
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
cy.get('svg').should((svg) => {
|
||||||
|
const el = svg.get(0);
|
||||||
|
const children = Array.from(el.children);
|
||||||
|
|
||||||
|
const titleEl = children.find(function (node) {
|
||||||
|
return node.tagName === 'title';
|
||||||
|
});
|
||||||
|
const descriptionEl = children.find(function (node) {
|
||||||
|
return node.tagName === 'desc';
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 6 hours', () => {
|
expect(titleEl).to.exist;
|
||||||
imgSnapshotTest(
|
expect(titleEl.textContent).to.equal(expectedTitle);
|
||||||
`
|
expect(descriptionEl).to.exist;
|
||||||
gantt
|
expect(descriptionEl.textContent).to.equal(expectedAccDescription);
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %d %H:%M
|
|
||||||
tickInterval 6hour
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 2022-10-03, 1d
|
|
||||||
Another task : after a1, 2d
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-04, 2d
|
|
||||||
another task : 2d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 1 day', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %m-%d
|
|
||||||
tickInterval 1day
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 2022-10-01, 30d
|
|
||||||
Another task : after a1, 20d
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-20, 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 1 week', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %m-%d
|
|
||||||
tickInterval 1week
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 2022-10-01, 30d
|
|
||||||
Another task : after a1, 20d
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-20, 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 1 month', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %m-%d
|
|
||||||
tickInterval 1month
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 2022-10-01, 30d
|
|
||||||
Another task : after a1, 20d
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-20, 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 1 day and topAxis is true', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %m-%d
|
|
||||||
tickInterval 1day
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 2022-10-01, 30d
|
|
||||||
Another task : after a1, 20d
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-20, 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{ gantt: { topAxis: true } }
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -322,15 +322,4 @@ describe('Git Graph diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('1433: should render a simple gitgraph with a title', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`---
|
|
||||||
title: simple gitGraph
|
|
||||||
---
|
|
||||||
gitGraph
|
|
||||||
commit id: "1-abcdefg"
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
75
cypress/integration/rendering/mermaid.spec.js
Normal file
75
cypress/integration/rendering/mermaid.spec.js
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
||||||
|
|
||||||
|
describe('Mindmap', () => {
|
||||||
|
it('square shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
root[
|
||||||
|
The root
|
||||||
|
]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
it('rounded rect shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
root((
|
||||||
|
The root
|
||||||
|
))
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
it('circle shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
root(
|
||||||
|
The root
|
||||||
|
)
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
it('default shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
The root
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
it('adding children', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
The root
|
||||||
|
child1
|
||||||
|
child2
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
it('adding grand children', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
The root
|
||||||
|
child1
|
||||||
|
child2
|
||||||
|
child3
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
});
|
||||||
115
cypress/integration/rendering/mindmap.spec.js
Normal file
115
cypress/integration/rendering/mindmap.spec.js
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
||||||
|
|
||||||
|
describe('Mindmaps', () => {
|
||||||
|
it('Only a root', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('a root with a shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root[root]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('a root with wrapping text and a shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root[A root with a long text that wraps to keep the node size in check]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('a root with an icon', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root[root]
|
||||||
|
::icon(mdi mdi-fire)
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Blang and cloud shape', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root))bang((
|
||||||
|
::icon(mdi mdi-fire)
|
||||||
|
a))Another bang((
|
||||||
|
::icon(mdi mdi-fire)
|
||||||
|
a)A cloud(
|
||||||
|
::icon(mdi mdi-fire)
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Blang and cloud shape with icons', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root))bang((
|
||||||
|
|
||||||
|
a))Another bang((
|
||||||
|
a)A cloud(
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('braches', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root
|
||||||
|
child1
|
||||||
|
grandchild 1
|
||||||
|
grandchild 2
|
||||||
|
child2
|
||||||
|
grandchild 3
|
||||||
|
grandchild 4
|
||||||
|
child3
|
||||||
|
grandchild 5
|
||||||
|
grandchild 6
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('braches with shapes and labels', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root
|
||||||
|
child1((Circle))
|
||||||
|
grandchild 1
|
||||||
|
grandchild 2
|
||||||
|
child2(Round rectangle)
|
||||||
|
grandchild 3
|
||||||
|
grandchild 4
|
||||||
|
child3[Square]
|
||||||
|
grandchild 5
|
||||||
|
::icon(mdi mdi-fire)
|
||||||
|
gc6((grand<br/>child 6))
|
||||||
|
::icon(mdi mdi-fire)
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('text shouhld wrap with icon', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`mindmap
|
||||||
|
root
|
||||||
|
Child3(A node with an icon and with a long text that wraps to keep the node size in check)
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
/* The end */
|
||||||
|
});
|
||||||
@@ -1,227 +0,0 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check whether the SVG Element has a Mindmap root
|
|
||||||
*
|
|
||||||
* Sometimes, Cypress takes a snapshot before the mermaid mindmap has finished
|
|
||||||
* generating the SVG.
|
|
||||||
*
|
|
||||||
* @param $p - The element to check.
|
|
||||||
*/
|
|
||||||
function shouldHaveRoot($p: JQuery<SVGSVGElement>) {
|
|
||||||
// get HTML Element from jquery element
|
|
||||||
const svgElement = $p[0];
|
|
||||||
expect(svgElement.nodeName).equal('svg');
|
|
||||||
|
|
||||||
const sectionRoots = svgElement.getElementsByClassName('mindmap-node section-root');
|
|
||||||
// mindmap should have at least one root section
|
|
||||||
expect(sectionRoots).to.have.lengthOf.at.least(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('Mindmaps', () => {
|
|
||||||
it('Only a root', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('a root with a shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root[root]
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('a root with wrapping text and a shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root[A root with a long text that wraps to keep the node size in check]
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('a root with an icon', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root[root]
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Blang and cloud shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root))bang((
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
a))Another bang((
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
a)A cloud(
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Blang and cloud shape with icons', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root))bang((
|
|
||||||
|
|
||||||
a))Another bang((
|
|
||||||
a)A cloud(
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('braches', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root
|
|
||||||
child1
|
|
||||||
grandchild 1
|
|
||||||
grandchild 2
|
|
||||||
child2
|
|
||||||
grandchild 3
|
|
||||||
grandchild 4
|
|
||||||
child3
|
|
||||||
grandchild 5
|
|
||||||
grandchild 6
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('braches with shapes and labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root
|
|
||||||
child1((Circle))
|
|
||||||
grandchild 1
|
|
||||||
grandchild 2
|
|
||||||
child2(Round rectangle)
|
|
||||||
grandchild 3
|
|
||||||
grandchild 4
|
|
||||||
child3[Square]
|
|
||||||
grandchild 5
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc6((grand<br/>child 6))
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('text shouhld wrap with icon', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`mindmap
|
|
||||||
root
|
|
||||||
Child3(A node with an icon and with a long text that wraps to keep the node size in check)
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('square shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
mindmap
|
|
||||||
root[
|
|
||||||
The root
|
|
||||||
]
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('rounded rect shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
mindmap
|
|
||||||
root((
|
|
||||||
The root
|
|
||||||
))
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('circle shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
mindmap
|
|
||||||
root(
|
|
||||||
The root
|
|
||||||
)
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('default shape', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
mindmap
|
|
||||||
The root
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('adding children', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
mindmap
|
|
||||||
The root
|
|
||||||
child1
|
|
||||||
child2
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('adding grand children', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
mindmap
|
|
||||||
The root
|
|
||||||
child1
|
|
||||||
child2
|
|
||||||
child3
|
|
||||||
`,
|
|
||||||
{},
|
|
||||||
undefined,
|
|
||||||
shouldHaveRoot
|
|
||||||
);
|
|
||||||
});
|
|
||||||
/* The end */
|
|
||||||
});
|
|
||||||
@@ -46,4 +46,69 @@ describe('Requirement diagram', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render accessibility tags', function () {
|
||||||
|
const expectedTitle = 'Gantt Diagram';
|
||||||
|
const expectedAccDescription = 'Tasks for Q4';
|
||||||
|
renderGraph(
|
||||||
|
`
|
||||||
|
requirementDiagram
|
||||||
|
accTitle: ${expectedTitle}
|
||||||
|
accDescr: ${expectedAccDescription}
|
||||||
|
|
||||||
|
requirement test_req {
|
||||||
|
id: 1
|
||||||
|
text: the test text.
|
||||||
|
risk: high
|
||||||
|
verifymethod: test
|
||||||
|
}
|
||||||
|
|
||||||
|
functionalRequirement test_req2 {
|
||||||
|
id: 1.1
|
||||||
|
text: the second test text.
|
||||||
|
risk: low
|
||||||
|
verifymethod: inspection
|
||||||
|
}
|
||||||
|
|
||||||
|
performanceRequirement test_req3 {
|
||||||
|
id: 1.2
|
||||||
|
text: the third test text.
|
||||||
|
risk: medium
|
||||||
|
verifymethod: demonstration
|
||||||
|
}
|
||||||
|
|
||||||
|
element test_entity {
|
||||||
|
type: simulation
|
||||||
|
}
|
||||||
|
|
||||||
|
element test_entity2 {
|
||||||
|
type: word doc
|
||||||
|
docRef: reqs/test_entity
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
test_entity - satisfies -> test_req2
|
||||||
|
test_req - traces -> test_req2
|
||||||
|
test_req - contains -> test_req3
|
||||||
|
test_req <- copies - test_entity2
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
cy.get('svg').should((svg) => {
|
||||||
|
const el = svg.get(0);
|
||||||
|
const children = Array.from(el.children);
|
||||||
|
|
||||||
|
const titleEl = children.find(function (node) {
|
||||||
|
return node.tagName === 'title';
|
||||||
|
});
|
||||||
|
const descriptionEl = children.find(function (node) {
|
||||||
|
return node.tagName === 'desc';
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(titleEl).to.exist;
|
||||||
|
expect(titleEl.textContent).to.equal(expectedTitle);
|
||||||
|
expect(descriptionEl).to.exist;
|
||||||
|
expect(descriptionEl.textContent).to.equal(expectedAccDescription);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,42 +3,6 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
|
||||||
|
|
||||||
context('Sequence diagram', () => {
|
context('Sequence diagram', () => {
|
||||||
it('should render a sequence diagram with boxes', () => {
|
|
||||||
renderGraph(
|
|
||||||
`
|
|
||||||
sequenceDiagram
|
|
||||||
box LightGrey Alice and Bob
|
|
||||||
participant Alice
|
|
||||||
participant Bob
|
|
||||||
end
|
|
||||||
participant John as John<br/>Second Line
|
|
||||||
Alice ->> Bob: Hello Bob, how are you?
|
|
||||||
Bob-->>John: How about you John?
|
|
||||||
Bob--x Alice: I am good thanks!
|
|
||||||
Bob-x John: I am good thanks!
|
|
||||||
Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row.
|
|
||||||
Bob-->Alice: Checking with John...
|
|
||||||
alt either this
|
|
||||||
Alice->>John: Yes
|
|
||||||
else or this
|
|
||||||
Alice->>John: No
|
|
||||||
else or this will happen
|
|
||||||
Alice->John: Maybe
|
|
||||||
end
|
|
||||||
par this happens in parallel
|
|
||||||
Alice -->> Bob: Parallel message 1
|
|
||||||
and
|
|
||||||
Alice -->> John: Parallel message 2
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{ sequence: { useMaxWidth: false } }
|
|
||||||
);
|
|
||||||
cy.get('svg').should((svg) => {
|
|
||||||
const width = parseFloat(svg.attr('width'));
|
|
||||||
expect(width).to.be.within(830 * 0.95, 830 * 1.05);
|
|
||||||
expect(svg).to.not.have.attr('style');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
it('should render a simple sequence diagram', () => {
|
it('should render a simple sequence diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ describe('State diagram', () => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('v2 it should be possible to use a choice', () => {
|
it('v2 it should be possibel to use a choice', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
@@ -521,54 +521,4 @@ stateDiagram-v2
|
|||||||
{ logLevel: 0, fontFamily: 'courier' }
|
{ logLevel: 0, fontFamily: 'courier' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('classDefs and applying classes', () => {
|
|
||||||
it('v2 states can have a class applied', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
stateDiagram-v2
|
|
||||||
[*] --> A
|
|
||||||
A --> B: test({ foo#colon; 'far' })
|
|
||||||
B --> [*]
|
|
||||||
classDef badBadEvent fill:#f00,color:white,font-weight:bold
|
|
||||||
class B badBadEvent
|
|
||||||
`,
|
|
||||||
{ logLevel: 0, fontFamily: 'courier' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('v2 can have multiple classes applied to multiple states', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
stateDiagram-v2
|
|
||||||
classDef notMoving fill:white
|
|
||||||
classDef movement font-style:italic;
|
|
||||||
classDef badBadEvent fill:#f00,color:white,font-weight:bold
|
|
||||||
|
|
||||||
[*] --> Still
|
|
||||||
Still --> [*]
|
|
||||||
Still --> Moving
|
|
||||||
Moving --> Still
|
|
||||||
Moving --> Crash
|
|
||||||
Crash --> [*]
|
|
||||||
|
|
||||||
class Still notMoving
|
|
||||||
class Moving, Crash movement
|
|
||||||
class Crash badBadEvent
|
|
||||||
`,
|
|
||||||
{ logLevel: 0, fontFamily: 'courier' }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
it('1433: should render a simple state diagram with a title', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`---
|
|
||||||
title: simple state diagram
|
|
||||||
---
|
|
||||||
stateDiagram-v2
|
|
||||||
[*] --> State1
|
|
||||||
State1 --> [*]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ describe('themeCSS balancing, it', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Delete/Rename this describe, keeping the inner contents.
|
|
||||||
describe('Pie Chart', () => {
|
describe('Pie Chart', () => {
|
||||||
// beforeEach(()=>{
|
// beforeEach(()=>{
|
||||||
// cy.clock((new Date('2014-06-09')).getTime());
|
// cy.clock((new Date('2014-06-09')).getTime());
|
||||||
|
|||||||
@@ -1,164 +0,0 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
|
||||||
|
|
||||||
describe('Timeline diagram', () => {
|
|
||||||
it('1: should render a simple timeline with no specific sections', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('2: should render a timeline diagram with sections', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`timeline
|
|
||||||
title Timeline of Industrial Revolution
|
|
||||||
section 17th-20th century
|
|
||||||
Industry 1.0 : Machinery, Water power, Steam <br>power
|
|
||||||
Industry 2.0 : Electricity, Internal combustion engine, Mass production
|
|
||||||
Industry 3.0 : Electronics, Computers, Automation
|
|
||||||
section 21st century
|
|
||||||
Industry 4.0 : Internet, Robotics, Internet of Things
|
|
||||||
Industry 5.0 : Artificial intelligence, Big data,3D printing
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('3: should render a complex timeline with sections, and long events text with <br>', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`timeline
|
|
||||||
title England's History Timeline
|
|
||||||
section Stone Age
|
|
||||||
7600 BC : Britain's oldest known house was built in Orkney, Scotland
|
|
||||||
6000 BC : Sea levels rise and Britain becomes an island.<br> The people who live here are hunter-gatherers.
|
|
||||||
section Broze Age
|
|
||||||
2300 BC : People arrive from Europe and settle in Britain. <br>They bring farming and metalworking.
|
|
||||||
: New styles of pottery and ways of burying the dead appear.
|
|
||||||
2200 BC : The last major building works are completed at Stonehenge.<br> People now bury their dead in stone circles.
|
|
||||||
: The first metal objects are made in Britain.Some other nice things happen. it is a good time to be alive.
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('4: should render a simple timeline with directives and disableMultiColor:true ', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'base', 'timeline': {'disableMulticolor': true}}}%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('5: should render a simple timeline with directive overriden colors', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
` %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
|
||||||
'cScale0': '#ff0000',
|
|
||||||
'cScale1': '#00ff00',
|
|
||||||
'cScale2': '#0000ff'
|
|
||||||
} } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('6: should render a simple timeline in base theme', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'base' } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('7: should render a simple timeline in default theme', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'default' } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('8: should render a simple timeline in dark theme', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('9: should render a simple timeline in neutral theme', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'neutral' } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('10: should render a simple timeline in forest theme', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,231 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
|
|
||||||
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
/* background: rgb(221, 208, 208); */
|
|
||||||
/* background:#333; */
|
|
||||||
font-family: 'Arial';
|
|
||||||
/* font-size: 18px !important; */
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: grey;
|
|
||||||
}
|
|
||||||
.mermaid2 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.mermaid svg {
|
|
||||||
/* font-size: 18px !important; */
|
|
||||||
background-color: #eee;
|
|
||||||
background-image: radial-gradient(#fff 1%, transparent 11%),
|
|
||||||
radial-gradient(#fff 1%, transparent 11%);
|
|
||||||
background-size: 20px 20px;
|
|
||||||
background-position: 0 0, 10px 10px;
|
|
||||||
background-repeat: repeat;
|
|
||||||
}
|
|
||||||
.malware {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: 150px;
|
|
||||||
background: red;
|
|
||||||
color: black;
|
|
||||||
display: flex;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
font-family: monospace;
|
|
||||||
font-size: 72px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div>Security check</div>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
timeline
|
|
||||||
title My day
|
|
||||||
section section with no tasks
|
|
||||||
section Go to work at the dog office
|
|
||||||
1930 : first step : second step is a long step
|
|
||||||
: third step
|
|
||||||
1940 : fourth step : fifth step
|
|
||||||
section Go home
|
|
||||||
1950 : India got independent and already won war against Pakistan
|
|
||||||
1960 : India fights poverty, looses war to China and gets nuclear weapons from USA and USSR
|
|
||||||
1970 : Green Revolution comes to india
|
|
||||||
section Another section with no tasks
|
|
||||||
I am a big big big tasks
|
|
||||||
I am not so big tasks
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
timeline
|
|
||||||
title MermaidChart 2023 Timeline
|
|
||||||
section 2023 Q1 <br> Release Personal Tier
|
|
||||||
Buttet 1 : sub-point 1a : sub-point 1b
|
|
||||||
: sub-point 1c
|
|
||||||
Bullet 2 : sub-point 2a : sub-point 2b
|
|
||||||
section 2023 Q2 <br> Release XYZ Tier
|
|
||||||
Buttet 3 : sub-point <br> 3a : sub-point 3b
|
|
||||||
: sub-point 3c
|
|
||||||
Bullet 4 : sub-point 4a : sub-point 4b
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
timeline
|
|
||||||
title England's History Timeline
|
|
||||||
section Stone Age
|
|
||||||
7600 BC : Britain's oldest known house was built in Orkney, Scotland
|
|
||||||
6000 BC : Sea levels rise and Britain becomes an island. The people who live here are hunter-gatherers.
|
|
||||||
section Broze Age
|
|
||||||
2300 BC : People arrive from Europe and settle in Britain. They bring farming and metalworking.
|
|
||||||
: New styles of pottery and ways of burying the dead appear.
|
|
||||||
2200 BC : The last major building works are completed at Stonehenge. People now bury their dead in stone circles.
|
|
||||||
: The first metal objects are made in Britain.Some other nice things happen. it is a good time to be alive.
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
%%{'init': { 'logLevel': 'debug', 'theme': 'default', 'timeline': {'disableMulticolor':false} } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google : Pixar
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008s : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'themeVariables': {
|
|
||||||
'cScale0': '#ff0000',
|
|
||||||
'cScale1': '#00ff00',
|
|
||||||
'cScale2': '#ff0000'
|
|
||||||
} } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google : Pixar
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008s : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
|
||||||
'cScale0': '#ff0000',
|
|
||||||
'cScale1': '#00ff00',
|
|
||||||
'cScale2': '#0000ff'
|
|
||||||
} } }%%
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008 : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
timeline
|
|
||||||
title History of Social Media Platform
|
|
||||||
2002 : LinkedIn
|
|
||||||
2004 : Facebook : Google
|
|
||||||
2005 : Youtube
|
|
||||||
2006 : Twitter
|
|
||||||
2007 : Tumblr
|
|
||||||
2008s : Instagram
|
|
||||||
2010 : Pinterest
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
mindmap
|
|
||||||
root
|
|
||||||
child1((Circle))
|
|
||||||
grandchild 1
|
|
||||||
grandchild 2
|
|
||||||
child2(Round rectangle)
|
|
||||||
grandchild 3
|
|
||||||
grandchild 4
|
|
||||||
child3[Square]
|
|
||||||
grandchild 5
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc6((grand<br/>child 6))
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc7((grand<br/>grand<br/>child 8))
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
flowchart-elk TB
|
|
||||||
a --> b
|
|
||||||
a --> c
|
|
||||||
b --> d
|
|
||||||
c --> d
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<!-- <div id="cy"></div> -->
|
|
||||||
<!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> -->
|
|
||||||
<!-- <script src="./mermaid-example-diagram-detector.js"></script> -->
|
|
||||||
<!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
|
|
||||||
<script type="module">
|
|
||||||
//import mindmap from '../../packages/mermaid-mindmap/src/detector';
|
|
||||||
// import example from '../../packages/mermaid-example-diagram/src/detector';
|
|
||||||
// import timeline from '../../packages/mermaid-timeline/src/detector';
|
|
||||||
import mermaid from '../../packages/mermaid/src/mermaid';
|
|
||||||
// await mermaid.registerExternalDiagrams([]);
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
// console.error('Mermaid error: ', err);
|
|
||||||
};
|
|
||||||
mermaid.initialize({
|
|
||||||
theme: 'base',
|
|
||||||
startOnLoad: true,
|
|
||||||
logLevel: 0,
|
|
||||||
flowchart: {
|
|
||||||
useMaxWidth: false,
|
|
||||||
htmlLabels: true,
|
|
||||||
},
|
|
||||||
gantt: {
|
|
||||||
useMaxWidth: false,
|
|
||||||
},
|
|
||||||
timeline: {
|
|
||||||
disableMulticolor: false,
|
|
||||||
htmlLabels: false,
|
|
||||||
},
|
|
||||||
useMaxWidth: true,
|
|
||||||
lazyLoadedDiagrams: [
|
|
||||||
// './mermaid-mindmap-detector.esm.mjs',
|
|
||||||
// './mermaid-example-diagram-detector.esm.mjs',
|
|
||||||
//'./mermaid-timeline-detector.esm.mjs',
|
|
||||||
],
|
|
||||||
});
|
|
||||||
function callback() {
|
|
||||||
alert('It worked');
|
|
||||||
}
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
console.error('In parse error:');
|
|
||||||
console.error(err);
|
|
||||||
};
|
|
||||||
// mermaid.test1('first_slow', 1200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('second_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('third_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('forth_slow', 1200).then((r) => console.info(r));
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -46,9 +46,13 @@
|
|||||||
<pre class="mermaid" style="width: 100%; height: 20%">
|
<pre class="mermaid" style="width: 100%; height: 20%">
|
||||||
%%{init: {'theme': 'base', 'fontFamily': 'courier', 'themeVariables': { 'primaryColor': '#fff000'}}}%%
|
%%{init: {'theme': 'base', 'fontFamily': 'courier', 'themeVariables': { 'primaryColor': '#fff000'}}}%%
|
||||||
classDiagram-v2
|
classDiagram-v2
|
||||||
classA <|-- classB : implements
|
class BankAccount{
|
||||||
classC *-- classD : composition
|
+String owner
|
||||||
classE o-- classF : aggregation
|
+BigDecimal balance
|
||||||
|
+deposit(amount) bool
|
||||||
|
+withdrawl(amount) int
|
||||||
|
}
|
||||||
|
cssClass "BankAccount" customCss
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="mermaid2" style="width: 100%; height: 20%">
|
<pre class="mermaid2" style="width: 100%; height: 20%">
|
||||||
%%{init: {'theme': 'base', 'fontFamily': 'courier', 'themeVariables': { 'primaryColor': '#fff000'}}}%%
|
%%{init: {'theme': 'base', 'fontFamily': 'courier', 'themeVariables': { 'primaryColor': '#fff000'}}}%%
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<h1>Should correctly load a third-party diagram using registerDiagram</h1>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
example-diagram
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<!-- <div id="cy"></div> -->
|
|
||||||
<!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> -->
|
|
||||||
<!-- <script src="./mermaid-example-diagram-detector.js"></script> -->
|
|
||||||
<!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
|
|
||||||
<!-- <script type="module" src="./external-diagrams-mindmap.mjs" /> -->
|
|
||||||
<script type="module">
|
|
||||||
import exampleDiagram from '../../packages/mermaid-example-diagram/src/detector';
|
|
||||||
// import example from '../../packages/mermaid-example-diagram/src/detector';
|
|
||||||
import mermaid from '../../packages/mermaid/src/mermaid';
|
|
||||||
|
|
||||||
await mermaid.registerExternalDiagrams([exampleDiagram]);
|
|
||||||
await mermaid.initialize({ logLevel: 0 });
|
|
||||||
await mermaid.initThrowsErrorsAsync();
|
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<body>
|
<body>
|
||||||
<div id="target">
|
<div id="target">
|
||||||
<h1>Background should be yellow!!!</h1>
|
<h1>This element does not belong to the SVG but we can style it</h1>
|
||||||
</div>
|
</div>
|
||||||
<svg id="diagram"></svg>
|
<svg id="diagram"></svg>
|
||||||
|
|
||||||
@@ -21,9 +21,6 @@
|
|||||||
const diagram = document.getElementById('diagram');
|
const diagram = document.getElementById('diagram');
|
||||||
const svg = mermaid.render('diagram-svg', graph);
|
const svg = mermaid.render('diagram-svg', graph);
|
||||||
diagram.innerHTML = svg;
|
diagram.innerHTML = svg;
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -21,9 +21,6 @@
|
|||||||
const diagram = document.getElementById('diagram');
|
const diagram = document.getElementById('diagram');
|
||||||
const svg = mermaid.render('diagram-svg', graph);
|
const svg = mermaid.render('diagram-svg', graph);
|
||||||
diagram.innerHTML = svg;
|
diagram.innerHTML = svg;
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
|
|
||||||
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
/* background: rgb(221, 208, 208); */
|
|
||||||
/* background:#333; */
|
|
||||||
font-family: 'Arial';
|
|
||||||
/* font-size: 18px !important; */
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: grey;
|
|
||||||
}
|
|
||||||
.mermaid2 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.mermaid svg {
|
|
||||||
/* font-size: 18px !important; */
|
|
||||||
}
|
|
||||||
.malware {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: 150px;
|
|
||||||
background: red;
|
|
||||||
color: black;
|
|
||||||
display: flex;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
font-family: monospace;
|
|
||||||
font-size: 72px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>PAGE SHOULD NOT BE RED</h1>
|
|
||||||
<div class="flex">
|
|
||||||
<div id="diagram" class="mermaid"></div>
|
|
||||||
<div id="res" class=""></div>
|
|
||||||
</div>
|
|
||||||
<script src="./mermaid.js"></script>
|
|
||||||
<script>
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
// console.error('Mermaid error: ', err);
|
|
||||||
};
|
|
||||||
mermaid.initialize({
|
|
||||||
theme: 'forest',
|
|
||||||
arrowMarkerAbsolute: true,
|
|
||||||
// themeCSS: '.edgePath .path {stroke: red;} .arrowheadPath {fill: red;}',
|
|
||||||
logLevel: 0,
|
|
||||||
state: {
|
|
||||||
defaultRenderer: 'dagre-wrapper',
|
|
||||||
},
|
|
||||||
flowchart: {
|
|
||||||
// defaultRenderer: 'dagre-wrapper',
|
|
||||||
nodeSpacing: 10,
|
|
||||||
curve: 'cardinal',
|
|
||||||
htmlLabels: true,
|
|
||||||
},
|
|
||||||
htmlLabels: true,
|
|
||||||
// gantt: { axisFormat: '%m/%d/%Y' },
|
|
||||||
sequence: { actorFontFamily: 'courier', actorMargin: 50, showSequenceNumbers: false },
|
|
||||||
// sequenceDiagram: { actorMargin: 300 } // deprecated
|
|
||||||
// fontFamily: '"times", sans-serif',
|
|
||||||
// fontFamily: 'courier',
|
|
||||||
fontSize: 18,
|
|
||||||
curve: 'basis',
|
|
||||||
// securityLevel: 'strict',
|
|
||||||
startOnLoad: false,
|
|
||||||
secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'],
|
|
||||||
// themeVariables: {relationLabelColor: 'red'}
|
|
||||||
});
|
|
||||||
function callback() {
|
|
||||||
alert('It worked');
|
|
||||||
}
|
|
||||||
|
|
||||||
let diagram = '%%{init: {"flowchart": {"htmlLabels": "true"}} }%%\n';
|
|
||||||
diagram += 'flowchart\n';
|
|
||||||
diagram += 'A["<p><sty';
|
|
||||||
diagram += 'le> * { background : red}</style>test</p>"]';
|
|
||||||
|
|
||||||
console.log(diagram);
|
|
||||||
// document.querySelector('#diagram').innerHTML = diagram;
|
|
||||||
mermaid.render('diagram', diagram, (res) => {
|
|
||||||
document.querySelector('#res').innerHTML = res;
|
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -54,203 +54,40 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<div>Security check</div>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
|
classDiagram
|
||||||
graph BT
|
direction LR
|
||||||
a{The cat in the hat} -- 1o --> b
|
class Student {
|
||||||
a -- 2o --> c
|
-idCard : IdCard
|
||||||
a -- 3o --> d
|
}
|
||||||
g --2i--> a
|
class IdCard{
|
||||||
d --1i--> a
|
-id : int
|
||||||
h --3i -->a
|
-name : string
|
||||||
b --> d(The dog in the hog)
|
}
|
||||||
c --> d
|
class Bike{
|
||||||
|
-id : int
|
||||||
|
-name : string
|
||||||
|
}
|
||||||
|
Student "1" --o "1" IdCard : carries
|
||||||
|
Student "1" --o "1" Bike : rides
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
flowchart-elk TB
|
|
||||||
a --> b
|
|
||||||
a --> c
|
|
||||||
b --> d
|
|
||||||
c --> d
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
|
|
||||||
flowchart TB
|
|
||||||
%% I could not figure out how to use double quotes in labels in Mermaid
|
|
||||||
subgraph ibm[IBM Espresso CPU]
|
|
||||||
core0[IBM PowerPC Broadway Core 0]
|
|
||||||
core1[IBM PowerPC Broadway Core 1]
|
|
||||||
core2[IBM PowerPC Broadway Core 2]
|
|
||||||
|
|
||||||
rom[16 KB ROM]
|
|
||||||
|
|
||||||
core0 --- core2
|
|
||||||
|
|
||||||
rom --> core2
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph amd[AMD Latte GPU]
|
|
||||||
mem[Memory & I/O Bridge]
|
|
||||||
dram[DRAM Controller]
|
|
||||||
edram[32 MB EDRAM MEM1]
|
|
||||||
rom[512 B SEEPROM]
|
|
||||||
|
|
||||||
sata[SATA IF]
|
|
||||||
exi[EXI]
|
|
||||||
|
|
||||||
subgraph gx[GX]
|
|
||||||
sram[3 MB 1T-SRAM]
|
|
||||||
end
|
|
||||||
|
|
||||||
radeon[AMD Radeon R7xx GX2]
|
|
||||||
|
|
||||||
mem --- gx
|
|
||||||
mem --- radeon
|
|
||||||
|
|
||||||
rom --- mem
|
|
||||||
|
|
||||||
mem --- sata
|
|
||||||
mem --- exi
|
|
||||||
|
|
||||||
dram --- sata
|
|
||||||
dram --- exi
|
|
||||||
end
|
|
||||||
|
|
||||||
ddr3[2 GB DDR3 RAM MEM2]
|
|
||||||
|
|
||||||
mem --- ddr3
|
|
||||||
dram --- ddr3
|
|
||||||
edram --- ddr3
|
|
||||||
|
|
||||||
core1 --- mem
|
|
||||||
|
|
||||||
exi --- rtc
|
|
||||||
rtc{{rtc}}
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<br />
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
flowchart TB
|
|
||||||
%% I could not figure out how to use double quotes in labels in Mermaid
|
|
||||||
subgraph ibm[IBM Espresso CPU]
|
|
||||||
core0[IBM PowerPC Broadway Core 0]
|
|
||||||
core1[IBM PowerPC Broadway Core 1]
|
|
||||||
core2[IBM PowerPC Broadway Core 2]
|
|
||||||
|
|
||||||
rom[16 KB ROM]
|
|
||||||
|
|
||||||
core0 --- core2
|
|
||||||
|
|
||||||
rom --> core2
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph amd[AMD Latte GPU]
|
|
||||||
mem[Memory & I/O Bridge]
|
|
||||||
dram[DRAM Controller]
|
|
||||||
edram[32 MB EDRAM MEM1]
|
|
||||||
rom[512 B SEEPROM]
|
|
||||||
|
|
||||||
sata[SATA IF]
|
|
||||||
exi[EXI]
|
|
||||||
|
|
||||||
subgraph gx[GX]
|
|
||||||
sram[3 MB 1T-SRAM]
|
|
||||||
end
|
|
||||||
|
|
||||||
radeon[AMD Radeon R7xx GX2]
|
|
||||||
|
|
||||||
mem --- gx
|
|
||||||
mem --- radeon
|
|
||||||
|
|
||||||
rom --- mem
|
|
||||||
|
|
||||||
mem --- sata
|
|
||||||
mem --- exi
|
|
||||||
|
|
||||||
dram --- sata
|
|
||||||
dram --- exi
|
|
||||||
end
|
|
||||||
|
|
||||||
ddr3[2 GB DDR3 RAM MEM2]
|
|
||||||
|
|
||||||
mem --- ddr3
|
|
||||||
dram --- ddr3
|
|
||||||
edram --- ddr3
|
|
||||||
|
|
||||||
core1 --- mem
|
|
||||||
|
|
||||||
exi --- rtc
|
|
||||||
rtc{{rtc}}
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
flowchart LR
|
|
||||||
B1 --be be--x B2
|
|
||||||
B1 --bo bo--o B3
|
|
||||||
subgraph Ugge
|
|
||||||
B2
|
|
||||||
B3
|
|
||||||
subgraph inner
|
|
||||||
B4
|
|
||||||
B5
|
|
||||||
end
|
|
||||||
subgraph inner2
|
|
||||||
subgraph deeper
|
|
||||||
C4
|
|
||||||
C5
|
|
||||||
end
|
|
||||||
C6
|
|
||||||
end
|
|
||||||
|
|
||||||
B4 --> C4
|
|
||||||
|
|
||||||
B3 -- X --> B4
|
|
||||||
B2 --> inner
|
|
||||||
|
|
||||||
C4 --> C5
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph outer
|
|
||||||
B6
|
|
||||||
end
|
|
||||||
B6 --> B5
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
sequenceDiagram
|
|
||||||
Customer->>+Stripe: Makes a payment request
|
|
||||||
Stripe->>+Bank: Forwards the payment request to the bank
|
|
||||||
Bank->>+Customer: Asks for authorization
|
|
||||||
Customer->>+Bank: Provides authorization
|
|
||||||
Bank->>+Stripe: Sends a response with payment details
|
|
||||||
Stripe->>+Merchant: Sends a notification of payment receipt
|
|
||||||
Merchant->>+Stripe: Confirms the payment
|
|
||||||
Stripe->>+Customer: Sends a confirmation of payment
|
|
||||||
Customer->>+Merchant: Receives goods or services
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
mindmap
|
mindmap
|
||||||
root((mindmap))
|
root
|
||||||
Origins
|
child1((Circle))
|
||||||
Long history
|
grandchild 1
|
||||||
::icon(fa fa-book)
|
grandchild 2
|
||||||
Popularisation
|
child2(Round rectangle)
|
||||||
British popular psychology author Tony Buzan
|
grandchild 3
|
||||||
Research
|
grandchild 4
|
||||||
On effectiveness<br/>and features
|
child3[Square]
|
||||||
On Automatic creation
|
grandchild 5
|
||||||
Uses
|
::icon(mdi mdi-fire)
|
||||||
Creative techniques
|
gc6((grand<br/>child 6))
|
||||||
Strategic planning
|
::icon(mdi mdi-fire)
|
||||||
Argument mapping
|
gc7((grand<br/>grand<br/>child 8))
|
||||||
Tools
|
|
||||||
Pen and paper
|
|
||||||
Mermaid
|
|
||||||
</pre>
|
</pre>
|
||||||
<br />
|
|
||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
example-diagram
|
example-diagram
|
||||||
</pre>
|
</pre>
|
||||||
@@ -259,29 +96,23 @@ mindmap
|
|||||||
<!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> -->
|
<!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> -->
|
||||||
<!-- <script src="./mermaid-example-diagram-detector.js"></script> -->
|
<!-- <script src="./mermaid-example-diagram-detector.js"></script> -->
|
||||||
<!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
|
<!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
|
||||||
<!-- <script src="./mermaid.js"></script> -->
|
<script src="./mermaid.js"></script>
|
||||||
|
|
||||||
<script type="module">
|
<script>
|
||||||
// import mindmap from '../../packages/mermaid-mindmap/src/detector';
|
|
||||||
import example from '../../packages/mermaid-example-diagram/src/detector';
|
|
||||||
import mermaid from '../../packages/mermaid/src/mermaid';
|
|
||||||
await mermaid.registerExternalDiagrams([example]);
|
|
||||||
mermaid.parseError = function (err, hash) {
|
mermaid.parseError = function (err, hash) {
|
||||||
// console.error('Mermaid error: ', err);
|
// console.error('Mermaid error: ', err);
|
||||||
};
|
};
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
theme: 'forest',
|
theme: 'forest',
|
||||||
startOnLoad: true,
|
startOnLoad: true,
|
||||||
logLevel: 5,
|
logLevel: 0,
|
||||||
flowchart: {
|
// basePath: './packages/',
|
||||||
// defaultRenderer: 'elk',
|
// themeVariables: { darkMode: true },
|
||||||
useMaxWidth: false,
|
lazyLoadedDiagrams: [
|
||||||
htmlLabels: true,
|
'./mermaid-mindmap-detector.esm.mjs',
|
||||||
},
|
'./mermaid-example-diagram-detector.esm.mjs',
|
||||||
gantt: {
|
],
|
||||||
useMaxWidth: false,
|
// lazyLoadedDiagrams: ['../../mermaid-mindmap/registry.ts'],
|
||||||
},
|
|
||||||
useMaxWidth: false,
|
|
||||||
});
|
});
|
||||||
function callback() {
|
function callback() {
|
||||||
alert('It worked');
|
alert('It worked');
|
||||||
@@ -290,10 +121,6 @@ mindmap
|
|||||||
console.error('In parse error:');
|
console.error('In parse error:');
|
||||||
console.error(err);
|
console.error(err);
|
||||||
};
|
};
|
||||||
// mermaid.test1('first_slow', 1200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('second_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('third_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('forth_slow', 1200).then((r) => console.info(r));
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,111 +1,257 @@
|
|||||||
<!DOCTYPE html>
|
<html>
|
||||||
<html lang="en">
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
||||||
<title>Mindmap Mermaid Quick Test Page</title>
|
<link
|
||||||
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
rel="stylesheet"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
<style>
|
<style>
|
||||||
div.mermaid {
|
body {
|
||||||
/* font-family: 'trebuchet ms', verdana, arial; */
|
/* background: rgb(221, 208, 208); */
|
||||||
font-family: 'Courier New', Courier, monospace !important;
|
/* background:#333; */
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
/* font-size: 18px !important; */
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
.mermaid2 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mermaid {
|
||||||
|
border: 1px solid red;
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
/* font-size: 18px !important; */
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>Mindmap diagram demo</h1>
|
<div>info below</div>
|
||||||
<pre class="mermaid">
|
<div class="">
|
||||||
mindmap
|
<pre class="mermaid2" style="width: 100%; height: 400px">
|
||||||
root
|
flowchart TB;subgraph "number as labels";1;end;
|
||||||
child1((Circle))
|
|
||||||
grandchild 1
|
|
||||||
grandchild 2
|
|
||||||
child2(Round rectangle)
|
|
||||||
grandchild 3
|
|
||||||
grandchild 4
|
|
||||||
child3[Square]
|
|
||||||
grandchild 5
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc6((grand<br/>child 6))
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc7((grand<br/>grand<br/>child 8))
|
|
||||||
</pre>
|
</pre>
|
||||||
|
<pre class="mermaid2" style="width: 100%; height: 400px">
|
||||||
<h2>Mindmap with root wrapping text and a shape</h2>
|
flowchart TB;a[APA];
|
||||||
<pre class="mermaid">
|
|
||||||
mindmap
|
|
||||||
root[A root with a long text that wraps to keep the node size in check]
|
|
||||||
</pre>
|
</pre>
|
||||||
|
<pre class="mermaid2" style="margin-left: 100px">
|
||||||
|
graph TD
|
||||||
|
work --> sleep
|
||||||
|
sleep --> work
|
||||||
|
eat --> sleep
|
||||||
|
work --> eat
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="margin-left: 100px">
|
||||||
|
flowchart TD
|
||||||
|
work --> sleep
|
||||||
|
sleep --> work
|
||||||
|
eat --> sleep
|
||||||
|
work --> eat
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
graph TB
|
||||||
|
A
|
||||||
|
B
|
||||||
|
subgraph foo[Foo SubGraph]
|
||||||
|
C
|
||||||
|
D
|
||||||
|
end
|
||||||
|
subgraph bar[Bar SubGraph]
|
||||||
|
E
|
||||||
|
F
|
||||||
|
end
|
||||||
|
G
|
||||||
|
|
||||||
<script type="module">
|
A-->B
|
||||||
// import mermaid from './mermaid.esm.mjs';
|
B-->C
|
||||||
import mermaid from '../../packages/mermaid/src/mermaid';
|
C-->D
|
||||||
// import mermaidMindmap from './mermaid-mindmap.esm.mjs';
|
B-->D
|
||||||
|
D-->E
|
||||||
|
E-->A
|
||||||
|
E-->F
|
||||||
|
F-->D
|
||||||
|
F-->G
|
||||||
|
B-->G
|
||||||
|
G-->D
|
||||||
|
|
||||||
// import mermaidMindmap from 'https://cdn.jsdelivr.net/npm/@mermaid-js/mermaid-mindmap@9.3.0/+esm';
|
style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
|
||||||
// await mermaid.registerExternalDiagrams([mermaidMindmap]);
|
style bar fill:#999,stroke-width:2px,stroke:#0F0,color:blue
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
graph TB
|
||||||
|
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
|
||||||
|
A
|
||||||
|
B
|
||||||
|
subgraph foo[Foo SubGraph]
|
||||||
|
C
|
||||||
|
D
|
||||||
|
end
|
||||||
|
subgraph bar[Bar SubGraph]
|
||||||
|
E
|
||||||
|
F
|
||||||
|
end
|
||||||
|
G
|
||||||
|
|
||||||
const ALLOWED_TAGS = [
|
A-->B
|
||||||
'a',
|
B-->C
|
||||||
'b',
|
C-->D
|
||||||
'blockquote',
|
B-->D
|
||||||
'br',
|
D-->E
|
||||||
'dd',
|
E-->A
|
||||||
'div',
|
E-->F
|
||||||
'dl',
|
F-->D
|
||||||
'dt',
|
F-->G
|
||||||
'em',
|
B-->G
|
||||||
'foreignObject',
|
G-->D
|
||||||
'h1',
|
|
||||||
'h2',
|
style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
|
||||||
'h3',
|
style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
|
||||||
'h4',
|
</pre>
|
||||||
'h5',
|
<pre class="mermaid2" style="">
|
||||||
'h6',
|
graph TD
|
||||||
'h7',
|
A[Christmas] ==> D
|
||||||
'h8',
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
'hr',
|
A[Christmas] ==> C
|
||||||
'i',
|
</pre>
|
||||||
'li',
|
<pre class="mermaid2" style="">
|
||||||
'ul',
|
graph TD
|
||||||
'ol',
|
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
|
||||||
'p',
|
A[Christmas] ==> D
|
||||||
'pre',
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
'span',
|
A[Christmas] ==> C
|
||||||
'strike',
|
</pre>
|
||||||
'strong',
|
<pre class="mermaid2" style="">
|
||||||
'table',
|
flowchart TD
|
||||||
'tbody',
|
A[Christmas] ==> D
|
||||||
'td',
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
'tfoot',
|
A[Christmas] ==> C
|
||||||
'th',
|
</pre>
|
||||||
'thead',
|
<pre class="mermaid2" style="">
|
||||||
'tr',
|
flowchart TD
|
||||||
];
|
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
|
||||||
|
A[Christmas] ==> D
|
||||||
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
|
A[Christmas] ==> C
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
flowchart LR
|
||||||
|
a["<strong>Haiya</strong>"]---->b
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid" style="">
|
||||||
|
flowchart LR
|
||||||
|
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
|
||||||
|
a["<strong>Haiya</strong>"]---->b
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
flowchart TD
|
||||||
|
A[Christmas] ==> D
|
||||||
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
|
A[Christmas] ==> C
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
flowchart TD
|
||||||
|
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
|
||||||
|
A[Christmas] ==> D
|
||||||
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
|
A[Christmas] ==> C
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
|
||||||
|
classDiagram-v2
|
||||||
|
Class01 <|-- AveryLongClass : Cool
|
||||||
|
<<interface>> Class01
|
||||||
|
Class03 *-- Class04
|
||||||
|
Class05 o-- Class06
|
||||||
|
Class07 .. Class08
|
||||||
|
Class09 --> C2 : Where am i?
|
||||||
|
Class09 --* C3
|
||||||
|
Class09 --|> Class07
|
||||||
|
Class12 <|.. Class08
|
||||||
|
Class11 ..>Class12
|
||||||
|
Class07 : equals()
|
||||||
|
Class07 : Object[] elementData
|
||||||
|
Class01 : size()
|
||||||
|
Class01 : int chimp
|
||||||
|
Class01 : int gorilla
|
||||||
|
Class01 : -int privateChimp
|
||||||
|
Class01 : +int publicGorilla
|
||||||
|
Class01 : #int protectedMarmoset
|
||||||
|
Class08 <--> C2: Cool label
|
||||||
|
class Class10 {
|
||||||
|
<<service>>
|
||||||
|
int id
|
||||||
|
test()
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid2" style="">
|
||||||
|
classDiagram-v2
|
||||||
|
Class01 <|-- AveryLongClass : Cool
|
||||||
|
<<interface>> Class01
|
||||||
|
Class03 *-- Class04
|
||||||
|
Class05 o-- Class06
|
||||||
|
Class07 .. Class08
|
||||||
|
Class09 --> C2 : Where am i?
|
||||||
|
Class09 --* C3
|
||||||
|
Class09 --|> Class07
|
||||||
|
Class12 <|.. Class08
|
||||||
|
Class11 ..>Class12
|
||||||
|
Class07 : equals()
|
||||||
|
Class07 : Object[] elementData
|
||||||
|
Class01 : size()
|
||||||
|
Class01 : int chimp
|
||||||
|
Class01 : int gorilla
|
||||||
|
Class01 : -int privateChimp
|
||||||
|
Class01 : +int publicGorilla
|
||||||
|
Class01 : #int protectedMarmoset
|
||||||
|
Class08 <--> C2: Cool label
|
||||||
|
class Class10 {
|
||||||
|
<<service>>
|
||||||
|
int id
|
||||||
|
test()
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
<pre class="mermaid" style="">
|
||||||
|
flowchart BT
|
||||||
|
subgraph S1
|
||||||
|
sub1 -->sub2
|
||||||
|
end
|
||||||
|
subgraph S2
|
||||||
|
sub4
|
||||||
|
end
|
||||||
|
S1 --> S2
|
||||||
|
sub1 --> sub4
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<script src="./mermaid.js"></script>
|
||||||
|
<script>
|
||||||
mermaid.parseError = function (err, hash) {
|
mermaid.parseError = function (err, hash) {
|
||||||
// console.error('Mermaid error: ', err);
|
// console.error('Mermaid error: ', err);
|
||||||
};
|
};
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
theme: 'base',
|
// theme: 'neutral',
|
||||||
startOnLoad: true,
|
// arrowMarkerAbsolute: true,
|
||||||
|
// themeCSS: '.edgePath .path {stroke: red;} .arrowheadPath {fill: red;}',
|
||||||
logLevel: 0,
|
logLevel: 0,
|
||||||
flowchart: {
|
flowchart: { curve: 'cardinal', htmlLabels: false },
|
||||||
useMaxWidth: false,
|
// htmlLabels: true,
|
||||||
htmlLabels: true,
|
// gantt: { axisFormat: '%m/%d/%Y' },
|
||||||
},
|
// sequence: { actorFontFamily: 'courier', actorMargin: 50, showSequenceNumbers: false },
|
||||||
gantt: {
|
// sequenceDiagram: { actorMargin: 300 } // deprecated
|
||||||
useMaxWidth: false,
|
// fontFamily: '"times", sans-serif',
|
||||||
},
|
fontFamily: 'courier',
|
||||||
useMaxWidth: false,
|
// fontSize: 18,
|
||||||
|
// curve: 'cardinal',
|
||||||
|
securityLevel: 'loose',
|
||||||
|
// themeVariables: {relationLabelColor: 'red'}
|
||||||
});
|
});
|
||||||
function callback() {
|
function callback() {
|
||||||
alert('It worked');
|
alert('It worked');
|
||||||
}
|
}
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
console.error('In parse error:');
|
|
||||||
console.error(err);
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,283 +1,14 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
|
|
||||||
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
/* background: rgb(221, 208, 208); */
|
|
||||||
/* background:#333; */
|
|
||||||
font-family: 'Arial';
|
|
||||||
/* font-size: 18px !important; */
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: grey;
|
|
||||||
}
|
|
||||||
.mermaid2 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.mermaid svg {
|
|
||||||
/* font-size: 18px !important; */
|
|
||||||
background-color: #eee;
|
|
||||||
background-image: radial-gradient(#fff 1%, transparent 11%),
|
|
||||||
radial-gradient(#fff 1%, transparent 11%);
|
|
||||||
background-size: 20px 20px;
|
|
||||||
background-position: 0 0, 10px 10px;
|
|
||||||
background-repeat: repeat;
|
|
||||||
}
|
|
||||||
.malware {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: 150px;
|
|
||||||
background: red;
|
|
||||||
color: black;
|
|
||||||
display: flex;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
font-family: monospace;
|
|
||||||
font-size: 72px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre class="mermaid">
|
||||||
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
|
none
|
||||||
graph TB
|
hello world
|
||||||
a --> b
|
|
||||||
a --> c
|
|
||||||
b --> d
|
|
||||||
c --> d
|
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<script src="./mermaid.js"></script>
|
||||||
flowchart-elk LR
|
<script>
|
||||||
subgraph A
|
|
||||||
a -->b
|
|
||||||
end
|
|
||||||
subgraph B
|
|
||||||
b
|
|
||||||
end
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
|
|
||||||
flowchart TB
|
|
||||||
%% I could not figure out how to use double quotes in labels in Mermaid
|
|
||||||
subgraph ibm[IBM Espresso CPU]
|
|
||||||
core0[IBM PowerPC Broadway Core 0]
|
|
||||||
core1[IBM PowerPC Broadway Core 1]
|
|
||||||
core2[IBM PowerPC Broadway Core 2]
|
|
||||||
|
|
||||||
rom[16 KB ROM]
|
|
||||||
|
|
||||||
core0 --- core2
|
|
||||||
|
|
||||||
rom --> core2
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph amd[AMD Latte GPU]
|
|
||||||
mem[Memory & I/O Bridge]
|
|
||||||
dram[DRAM Controller]
|
|
||||||
edram[32 MB EDRAM MEM1]
|
|
||||||
rom[512 B SEEPROM]
|
|
||||||
|
|
||||||
sata[SATA IF]
|
|
||||||
exi[EXI]
|
|
||||||
|
|
||||||
subgraph gx[GX]
|
|
||||||
sram[3 MB 1T-SRAM]
|
|
||||||
end
|
|
||||||
|
|
||||||
radeon[AMD Radeon R7xx GX2]
|
|
||||||
|
|
||||||
mem --- gx
|
|
||||||
mem --- radeon
|
|
||||||
|
|
||||||
rom --- mem
|
|
||||||
|
|
||||||
mem --- sata
|
|
||||||
mem --- exi
|
|
||||||
|
|
||||||
dram --- sata
|
|
||||||
dram --- exi
|
|
||||||
end
|
|
||||||
|
|
||||||
ddr3[2 GB DDR3 RAM MEM2]
|
|
||||||
|
|
||||||
mem --- ddr3
|
|
||||||
dram --- ddr3
|
|
||||||
edram --- ddr3
|
|
||||||
|
|
||||||
core1 --- mem
|
|
||||||
|
|
||||||
exi --- rtc
|
|
||||||
rtc{{rtc}}
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<br />
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
flowchart TB
|
|
||||||
%% I could not figure out how to use double quotes in labels in Mermaid
|
|
||||||
subgraph ibm[IBM Espresso CPU]
|
|
||||||
core0[IBM PowerPC Broadway Core 0]
|
|
||||||
core1[IBM PowerPC Broadway Core 1]
|
|
||||||
core2[IBM PowerPC Broadway Core 2]
|
|
||||||
|
|
||||||
rom[16 KB ROM]
|
|
||||||
|
|
||||||
core0 --- core2
|
|
||||||
|
|
||||||
rom --> core2
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph amd[AMD Latte GPU]
|
|
||||||
mem[Memory & I/O Bridge]
|
|
||||||
dram[DRAM Controller]
|
|
||||||
edram[32 MB EDRAM MEM1]
|
|
||||||
rom[512 B SEEPROM]
|
|
||||||
|
|
||||||
sata[SATA IF]
|
|
||||||
exi[EXI]
|
|
||||||
|
|
||||||
subgraph gx[GX]
|
|
||||||
sram[3 MB 1T-SRAM]
|
|
||||||
end
|
|
||||||
|
|
||||||
radeon[AMD Radeon R7xx GX2]
|
|
||||||
|
|
||||||
mem --- gx
|
|
||||||
mem --- radeon
|
|
||||||
|
|
||||||
rom --- mem
|
|
||||||
|
|
||||||
mem --- sata
|
|
||||||
mem --- exi
|
|
||||||
|
|
||||||
dram --- sata
|
|
||||||
dram --- exi
|
|
||||||
end
|
|
||||||
|
|
||||||
ddr3[2 GB DDR3 RAM MEM2]
|
|
||||||
|
|
||||||
mem --- ddr3
|
|
||||||
dram --- ddr3
|
|
||||||
edram --- ddr3
|
|
||||||
|
|
||||||
core1 --- mem
|
|
||||||
|
|
||||||
exi --- rtc
|
|
||||||
rtc{{rtc}}
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
flowchart LR
|
|
||||||
B1 --be be--x B2
|
|
||||||
B1 --bo bo--o B3
|
|
||||||
subgraph Ugge
|
|
||||||
B2
|
|
||||||
B3
|
|
||||||
subgraph inner
|
|
||||||
B4
|
|
||||||
B5
|
|
||||||
end
|
|
||||||
subgraph inner2
|
|
||||||
subgraph deeper
|
|
||||||
C4
|
|
||||||
C5
|
|
||||||
end
|
|
||||||
C6
|
|
||||||
end
|
|
||||||
|
|
||||||
B4 --> C4
|
|
||||||
|
|
||||||
B3 -- X --> B4
|
|
||||||
B2 --> inner
|
|
||||||
|
|
||||||
C4 --> C5
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph outer
|
|
||||||
B6
|
|
||||||
end
|
|
||||||
B6 --> B5
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
sequenceDiagram
|
|
||||||
Customer->>+Stripe: Makes a payment request
|
|
||||||
Stripe->>+Bank: Forwards the payment request to the bank
|
|
||||||
Bank->>+Customer: Asks for authorization
|
|
||||||
Customer->>+Bank: Provides authorization
|
|
||||||
Bank->>+Stripe: Sends a response with payment details
|
|
||||||
Stripe->>+Merchant: Sends a notification of payment receipt
|
|
||||||
Merchant->>+Stripe: Confirms the payment
|
|
||||||
Stripe->>+Customer: Sends a confirmation of payment
|
|
||||||
Customer->>+Merchant: Receives goods or services
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
gantt
|
|
||||||
title Style today marker (vertical line should be 5px wide and half-transparent blue)
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %d
|
|
||||||
todayMarker stroke-width:5px,stroke:#00f,opacity:0.5
|
|
||||||
section Section1
|
|
||||||
Today: 1, -1h
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<!-- <div id="cy"></div> -->
|
|
||||||
<!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> -->
|
|
||||||
<!-- <script src="./mermaid-example-diagram-detector.js"></script> -->
|
|
||||||
<!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
|
|
||||||
<!-- <script src="./mermaid.js"></script> -->
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
import mindmap from '../../packages/mermaid-mindmap/src/detector';
|
|
||||||
// import example from '../../packages/mermaid-example-diagram/src/detector';
|
|
||||||
import mermaid from '../../packages/mermaid/src/mermaid';
|
|
||||||
await mermaid.registerExternalDiagrams([mindmap]);
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
// console.error('Mermaid error: ', err);
|
|
||||||
};
|
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
// theme: 'forest',
|
logLevel: 1,
|
||||||
startOnLoad: true,
|
|
||||||
logLevel: 0,
|
|
||||||
flowchart: {
|
|
||||||
// defaultRenderer: 'elk',
|
|
||||||
useMaxWidth: false,
|
|
||||||
htmlLabels: true,
|
|
||||||
},
|
|
||||||
gantt: {
|
|
||||||
useMaxWidth: false,
|
|
||||||
},
|
|
||||||
useMaxWidth: false,
|
|
||||||
});
|
});
|
||||||
function callback() {
|
|
||||||
alert('It worked');
|
|
||||||
}
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
console.error('In parse error:');
|
|
||||||
console.error(err);
|
|
||||||
};
|
|
||||||
// mermaid.test1('first_slow', 1200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('second_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('third_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('forth_slow', 1200).then((r) => console.info(r));
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,23 +1,15 @@
|
|||||||
import mermaid2 from '../../packages/mermaid/src/mermaid';
|
import mermaid2 from '../../packages/mermaid/src/mermaid';
|
||||||
import externalExample from '../../packages/mermaid-example-diagram/src/detector';
|
|
||||||
|
|
||||||
function b64ToUtf8(str) {
|
function b64ToUtf8(str) {
|
||||||
return decodeURIComponent(escape(window.atob(str)));
|
return decodeURIComponent(escape(window.atob(str)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adds a rendered flag to window when rendering is done, so cypress can wait for it.
|
|
||||||
function markRendered() {
|
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
* ##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
||||||
* configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
* configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
||||||
* page.
|
* page.
|
||||||
*/
|
*/
|
||||||
const contentLoaded = async function () {
|
const contentLoaded = function () {
|
||||||
let pos = document.location.href.indexOf('?graph=');
|
let pos = document.location.href.indexOf('?graph=');
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
pos = pos + 7;
|
pos = pos + 7;
|
||||||
@@ -44,10 +36,10 @@ const contentLoaded = async function () {
|
|||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
document.getElementsByTagName('body')[0].appendChild(div);
|
||||||
}
|
}
|
||||||
|
|
||||||
await mermaid2.registerExternalDiagrams([externalExample]);
|
graphObj.mermaid.lazyLoadedDiagrams = ['/mermaid-mindmap-detector.esm.mjs'];
|
||||||
|
|
||||||
mermaid2.initialize(graphObj.mermaid);
|
mermaid2.initialize(graphObj.mermaid);
|
||||||
await mermaid2.init();
|
mermaid2.init();
|
||||||
markRendered();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -62,7 +54,7 @@ function merge(current, update) {
|
|||||||
if (
|
if (
|
||||||
current.hasOwnProperty(key) &&
|
current.hasOwnProperty(key) &&
|
||||||
typeof current[key] === 'object' &&
|
typeof current[key] === 'object' &&
|
||||||
!Array.isArray(current[key])
|
!(current[key] instanceof Array)
|
||||||
) {
|
) {
|
||||||
merge(current[key], update[key]);
|
merge(current[key], update[key]);
|
||||||
|
|
||||||
@@ -128,15 +120,12 @@ const contentLoadedApi = function () {
|
|||||||
(svgCode, bindFunctions) => {
|
(svgCode, bindFunctions) => {
|
||||||
div.innerHTML = svgCode;
|
div.innerHTML = svgCode;
|
||||||
|
|
||||||
if (bindFunctions) {
|
if (bindFunctions) bindFunctions(div);
|
||||||
bindFunctions(div);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
div
|
div
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
markRendered();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (typeof document !== 'undefined') {
|
if (typeof document !== 'undefined') {
|
||||||
@@ -151,7 +140,7 @@ if (typeof document !== 'undefined') {
|
|||||||
contentLoadedApi();
|
contentLoadedApi();
|
||||||
} else {
|
} else {
|
||||||
this.console.log('Not using api');
|
this.console.log('Not using api');
|
||||||
void contentLoaded();
|
contentLoaded();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
false
|
false
|
||||||
|
|||||||
@@ -94,7 +94,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// var diagram = ` graph TD
|
// var diagram = ` graph TD
|
||||||
// A --> B["<a href='javascript`;
|
// A --> B["<a href='javasc`;
|
||||||
// diagram += `ript#colon;xssAttack()'>AAA</a>"]`;
|
// diagram += `ript#colon;xssAttack()'>AAA</a>"]`;
|
||||||
let diagram = ` graph TD
|
let diagram = ` graph TD
|
||||||
A --> B["<a href='javasc`;
|
A --> B["<a href='javasc`;
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es2020",
|
|
||||||
"lib": ["es2020", "dom"],
|
|
||||||
"types": ["cypress", "node"]
|
|
||||||
},
|
|
||||||
"include": ["**/*.ts"]
|
|
||||||
}
|
|
||||||
@@ -17,9 +17,6 @@
|
|||||||
<h1>Class diagram demos</h1>
|
<h1>Class diagram demos</h1>
|
||||||
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: Demo Class Diagram
|
|
||||||
---
|
|
||||||
classDiagram
|
classDiagram
|
||||||
accTitle: Demo Class Diagram
|
accTitle: Demo Class Diagram
|
||||||
accDescr: This class diagram show the abstract Animal class, and 3 classes that inherit from it: Duck, Fish, and Zebra.
|
accDescr: This class diagram show the abstract Animal class, and 3 classes that inherit from it: Duck, Fish, and Zebra.
|
||||||
@@ -138,20 +135,7 @@
|
|||||||
Pineapple : -int leafCount()
|
Pineapple : -int leafCount()
|
||||||
Pineapple : -int spikeCount()
|
Pineapple : -int spikeCount()
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
classDiagram
|
|
||||||
class Person {
|
|
||||||
+Id : Guid
|
|
||||||
+FirstName : string
|
|
||||||
+LastName : string
|
|
||||||
-privateProperty : string
|
|
||||||
#ProtectedProperty : string
|
|
||||||
~InternalProperty : string
|
|
||||||
~AnotherInternalProperty : List~List~string~~
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<script src="./mermaid.js"></script>
|
<script src="./mermaid.js"></script>
|
||||||
|
|||||||
@@ -19,10 +19,8 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: This is a title
|
erDiagram
|
||||||
---
|
|
||||||
erDiagram
|
|
||||||
%% title This is a title
|
%% title This is a title
|
||||||
%% accDescription Test a description
|
%% accDescription Test a description
|
||||||
|
|
||||||
@@ -39,7 +37,7 @@
|
|||||||
string city
|
string city
|
||||||
string region
|
string region
|
||||||
string state
|
string state
|
||||||
string(5) postal_code
|
string postal_code
|
||||||
string country
|
string country
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,58 +54,6 @@
|
|||||||
number final_price
|
number final_price
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
erDiagram
|
|
||||||
"HOSPITAL" {
|
|
||||||
int id PK
|
|
||||||
int doctor_id FK
|
|
||||||
string address UK
|
|
||||||
string name
|
|
||||||
string phone_number
|
|
||||||
string fax_number
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
erDiagram
|
|
||||||
"HOSPITAL" {
|
|
||||||
int id PK
|
|
||||||
int doctor_id PK, FK
|
|
||||||
string address UK
|
|
||||||
string name
|
|
||||||
string phone_number
|
|
||||||
string fax_number
|
|
||||||
}
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
erDiagram
|
|
||||||
CAR ||--o{ NAMED-DRIVER : allows
|
|
||||||
CAR {
|
|
||||||
string registrationNumber PK
|
|
||||||
string make
|
|
||||||
string model
|
|
||||||
string[] parts
|
|
||||||
}
|
|
||||||
PERSON ||--o{ NAMED-DRIVER : is
|
|
||||||
PERSON {
|
|
||||||
string driversLicense PK "The license #"
|
|
||||||
string(99) firstName "Only 99 characters are allowed"
|
|
||||||
string lastName
|
|
||||||
string phone UK
|
|
||||||
int age
|
|
||||||
}
|
|
||||||
NAMED-DRIVER {
|
|
||||||
string carRegistrationNumber PK, FK
|
|
||||||
string driverLicence PK,FK
|
|
||||||
}
|
|
||||||
MANUFACTURER only one to zero or more CAR : makes
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<script src="./mermaid.js"></script>
|
<script src="./mermaid.js"></script>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
|||||||
@@ -17,9 +17,6 @@
|
|||||||
<h2>Sample 1</h2>
|
<h2>Sample 1</h2>
|
||||||
<h3>graph</h3>
|
<h3>graph</h3>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: This is a complicated flow
|
|
||||||
---
|
|
||||||
graph LR
|
graph LR
|
||||||
accTitle: This is a complicated flow
|
accTitle: This is a complicated flow
|
||||||
accDescr: This is the descriptoin for the complicated flow.
|
accDescr: This is the descriptoin for the complicated flow.
|
||||||
@@ -224,9 +221,6 @@
|
|||||||
<h2>Sample 2</h2>
|
<h2>Sample 2</h2>
|
||||||
<h3>graph</h3>
|
<h3>graph</h3>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: What to buy
|
|
||||||
---
|
|
||||||
graph TD
|
graph TD
|
||||||
accTitle: What to buy
|
accTitle: What to buy
|
||||||
accDescr: Options of what to buy with Christmas money
|
accDescr: Options of what to buy with Christmas money
|
||||||
|
|||||||
@@ -74,22 +74,22 @@
|
|||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
gantt
|
gantt
|
||||||
title Hide today marker (vertical line should not be visible)
|
title Hide today marker (vertical line should not be visible)
|
||||||
dateFormat Z
|
dateFormat YYYY-MM-DD
|
||||||
axisFormat %d/%m
|
axisFormat %d
|
||||||
todayMarker off
|
todayMarker off
|
||||||
section Section1
|
section Section1
|
||||||
Today: 1, -01:00, 5min
|
Today: 1, -1h
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
gantt
|
gantt
|
||||||
title Style today marker (vertical line should be 5px wide and half-transparent blue)
|
title Style today marker (vertical line should be 5px wide and half-transparent blue)
|
||||||
dateFormat Z
|
dateFormat YYYY-MM-DD
|
||||||
axisFormat %d/%m
|
axisFormat %d
|
||||||
todayMarker stroke-width:5px,stroke:#00f,opacity:0.5
|
todayMarker stroke-width:5px,stroke:#00f,opacity:0.5
|
||||||
section Section1
|
section Section1
|
||||||
Today: 1, -01:00, 5min
|
Today: 1, -1h
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,6 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>Git diagram demo</h1>
|
<h1>Git diagram demo</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: Simple Git diagram
|
|
||||||
---
|
|
||||||
gitGraph:
|
gitGraph:
|
||||||
options
|
options
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -48,9 +48,6 @@
|
|||||||
<li>
|
<li>
|
||||||
<h2><a href="./journey.html">Journey</a></h2>
|
<h2><a href="./journey.html">Journey</a></h2>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<h2><a href="./mindmap.html">Mindmap</a></h2>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<h2><a href="./pie.html">Pie</a></h2>
|
<h2><a href="./pie.html">Pie</a></h2>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -16,10 +16,8 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>Journey diagram demo</h1>
|
<h1>Journey diagram demo</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: My working day
|
|
||||||
---
|
|
||||||
journey
|
journey
|
||||||
|
title My working day
|
||||||
accTitle: Very simple journey demo
|
accTitle: Very simple journey demo
|
||||||
accDescr: 2 main sections: work and home, each with just a few tasks
|
accDescr: 2 main sections: work and home, each with just a few tasks
|
||||||
|
|
||||||
|
|||||||
@@ -1,108 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<title>Mindmap Mermaid Quick Test Page</title>
|
|
||||||
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
|
||||||
<style>
|
|
||||||
div.mermaid {
|
|
||||||
/* font-family: 'trebuchet ms', verdana, arial; */
|
|
||||||
font-family: 'Courier New', Courier, monospace !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<h1>Mindmap diagram demo</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
mindmap
|
|
||||||
root
|
|
||||||
child1((Circle))
|
|
||||||
grandchild 1
|
|
||||||
grandchild 2
|
|
||||||
child2(Round rectangle)
|
|
||||||
grandchild 3
|
|
||||||
grandchild 4
|
|
||||||
child3[Square]
|
|
||||||
grandchild 5
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc6((grand<br/>child 6))
|
|
||||||
::icon(mdi mdi-fire)
|
|
||||||
gc7((grand<br/>grand<br/>child 8))
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h2>Mindmap with root wrapping text and a shape</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
mindmap
|
|
||||||
root[A root with a long text that wraps to keep the node size in check]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
import mermaid from './mermaid.esm.mjs';
|
|
||||||
import mermaidMindmap from './mermaid-mindmap.esm.mjs';
|
|
||||||
|
|
||||||
const ALLOWED_TAGS = [
|
|
||||||
'a',
|
|
||||||
'b',
|
|
||||||
'blockquote',
|
|
||||||
'br',
|
|
||||||
'dd',
|
|
||||||
'div',
|
|
||||||
'dl',
|
|
||||||
'dt',
|
|
||||||
'em',
|
|
||||||
'foreignObject',
|
|
||||||
'h1',
|
|
||||||
'h2',
|
|
||||||
'h3',
|
|
||||||
'h4',
|
|
||||||
'h5',
|
|
||||||
'h6',
|
|
||||||
'h7',
|
|
||||||
'h8',
|
|
||||||
'hr',
|
|
||||||
'i',
|
|
||||||
'li',
|
|
||||||
'ul',
|
|
||||||
'ol',
|
|
||||||
'p',
|
|
||||||
'pre',
|
|
||||||
'span',
|
|
||||||
'strike',
|
|
||||||
'strong',
|
|
||||||
'table',
|
|
||||||
'tbody',
|
|
||||||
'td',
|
|
||||||
'tfoot',
|
|
||||||
'th',
|
|
||||||
'thead',
|
|
||||||
'tr',
|
|
||||||
];
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
// console.error('Mermaid error: ', err);
|
|
||||||
};
|
|
||||||
await mermaid.registerExternalDiagrams([mermaidMindmap]);
|
|
||||||
mermaid.initialize({
|
|
||||||
theme: 'base',
|
|
||||||
startOnLoad: true,
|
|
||||||
logLevel: 0,
|
|
||||||
flowchart: {
|
|
||||||
useMaxWidth: false,
|
|
||||||
htmlLabels: true,
|
|
||||||
},
|
|
||||||
gantt: {
|
|
||||||
useMaxWidth: false,
|
|
||||||
},
|
|
||||||
useMaxWidth: false,
|
|
||||||
});
|
|
||||||
function callback() {
|
|
||||||
alert('It worked');
|
|
||||||
}
|
|
||||||
mermaid.parseError = function (err, hash) {
|
|
||||||
console.error('In parse error:');
|
|
||||||
console.error(err);
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -128,22 +128,6 @@
|
|||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
sequenceDiagram
|
|
||||||
box lightgreen Alice & John
|
|
||||||
participant A
|
|
||||||
participant J
|
|
||||||
end
|
|
||||||
box Another Group very very long description not wrapped
|
|
||||||
participant B
|
|
||||||
end
|
|
||||||
A->>J: Hello John, how are you?
|
|
||||||
J->>A: Great!
|
|
||||||
A->>B: Hello Bob, how are you ?
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<script src="./mermaid.js"></script>
|
<script src="./mermaid.js"></script>
|
||||||
<script>
|
<script>
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
|
|||||||
187
demos/state.html
187
demos/state.html
@@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
@@ -15,11 +15,7 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>State diagram demos</h1>
|
<h1>State diagram demos</h1>
|
||||||
<h2>Very simple showing change from State1 to State2</h2>
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: Very simple diagram
|
|
||||||
---
|
|
||||||
stateDiagram
|
stateDiagram
|
||||||
accTitle: This is the accessible title
|
accTitle: This is the accessible title
|
||||||
accDescr:This is an accessible description
|
accDescr:This is an accessible description
|
||||||
@@ -28,200 +24,59 @@
|
|||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<h2>This has classDef statements to apply style classes to specific states</h2>
|
|
||||||
<h4>Here are the <code>classDef</code> statements:</h4>
|
|
||||||
<p>
|
|
||||||
<code>
|
|
||||||
classDef notMoving fill:white<br />
|
|
||||||
classDef movement font-style:italic<br />
|
|
||||||
classDef badBadEvent
|
|
||||||
fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow<br />
|
|
||||||
</code>
|
|
||||||
</p>
|
|
||||||
<h4>And these are how they are applied:</h4>
|
|
||||||
<p>
|
|
||||||
<code>
|
|
||||||
class Still notMoving<br />
|
|
||||||
class Moving, Crash movement<br />
|
|
||||||
class Crash badBadEvent<br />
|
|
||||||
</code>
|
|
||||||
</p>
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
stateDiagram-v2
|
||||||
title: Very simple diagram
|
|
||||||
---
|
|
||||||
stateDiagram
|
|
||||||
direction TB
|
|
||||||
|
|
||||||
accTitle: This is the accessible title
|
accTitle: This is the accessible title
|
||||||
accDescr: This is an accessible description
|
accDescr: This is an accessible description
|
||||||
|
[*] --> Still
|
||||||
classDef notMoving fill:white
|
|
||||||
classDef movement font-style:italic
|
|
||||||
classDef badBadEvent fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow
|
|
||||||
|
|
||||||
[*]--> Still
|
|
||||||
Still --> [*]
|
Still --> [*]
|
||||||
Still --> Moving
|
Still --> Moving
|
||||||
Moving --> Still
|
Moving --> Still
|
||||||
Moving --> Crash
|
Moving --> Crash
|
||||||
Crash --> [*]
|
Crash --> [*]
|
||||||
|
|
||||||
class Still notMoving
|
|
||||||
class Moving, Crash movement
|
|
||||||
class Crash badBadEvent
|
|
||||||
class end badBadEvent
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<h2>Here is a diagram that uses the ::: operator to apply styles to states</h2>
|
|
||||||
<h4>Here are the <code>classDef</code> statements:</h4>
|
|
||||||
<p>
|
|
||||||
<code>
|
|
||||||
classDef notMoving fill:white<br />
|
|
||||||
classDef movement font-style:italic<br />
|
|
||||||
classDef badBadEvent
|
|
||||||
fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow<br />
|
|
||||||
</code>
|
|
||||||
</p>
|
|
||||||
<h4>And these are how they are applied:</h4>
|
|
||||||
<p>
|
|
||||||
<code>
|
|
||||||
[*] --> Still:::notMoving<br />
|
|
||||||
...<br />
|
|
||||||
Still --> Moving:::movement<br />
|
|
||||||
...<br />
|
|
||||||
Moving --> Crash:::movement<br />
|
|
||||||
Crash:::badBadEvent --> [*]<br />
|
|
||||||
</code>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Note that both the starting state and the end state have styles applied:<br />
|
|
||||||
The start state has the <i>start</i> classDef style<br />and the end state has the
|
|
||||||
<i>stop</i> classDef style applied.
|
|
||||||
</p>
|
|
||||||
<pre class="mermaid">
|
|
||||||
stateDiagram
|
|
||||||
direction TB
|
|
||||||
|
|
||||||
accTitle: This is the accessible title
|
|
||||||
accDescr: This is an accessible description
|
|
||||||
|
|
||||||
classDef notMoving fill:white
|
|
||||||
classDef movement font-style:italic
|
|
||||||
classDef badBadEvent fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow
|
|
||||||
|
|
||||||
[*] --> Still:::notMoving
|
|
||||||
Still --> [*]
|
|
||||||
Still --> Moving:::movement
|
|
||||||
Moving --> Still
|
|
||||||
Moving --> Crash:::movement
|
|
||||||
Crash:::badBadEvent --> [*]
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
stateDiagram-v2
|
stateDiagram
|
||||||
accTitle: very very simple state
|
accTitle: very very simple state
|
||||||
accDescr: This is a state diagram showing one state
|
accDescr: This is a state diagram showing one state
|
||||||
State1
|
State1
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<h2>States with spaces in them</h2>
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
stateDiagram
|
stateDiagram
|
||||||
classDef yourState font-style:italic,font-weight:bold,fill:white
|
|
||||||
|
|
||||||
yswsii: Your state with spaces in it
|
|
||||||
[*] --> yswsii:::yourState
|
|
||||||
[*] --> SomeOtherState
|
|
||||||
SomeOtherState --> YetAnotherState
|
|
||||||
yswsii --> YetAnotherState
|
|
||||||
YetAnotherState --> [*]
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<h2>You can label the relationships</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
stateDiagram-v2
|
|
||||||
[*] --> State1
|
|
||||||
State1 --> State2 : Transition 1
|
|
||||||
State1 --> State3 : Transition 2
|
|
||||||
State1 --> State4 : Transition 3
|
|
||||||
State1 --> [*]
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<h2>This shows Composite states</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
stateDiagram-v2
|
|
||||||
[*] --> First
|
[*] --> First
|
||||||
First --> Second
|
state First {
|
||||||
First --> Third
|
[*] --> second
|
||||||
|
second --> [*]
|
||||||
state "the first composite" as First {
|
|
||||||
[*] --> 1st
|
|
||||||
state innerFirst {
|
|
||||||
state "1 in innerFirst" as 1st1st
|
|
||||||
1st2nd: 2 in innerFirst
|
|
||||||
[*] --> 1st1st
|
|
||||||
1st1st --> 1st2nd
|
|
||||||
%% 1st2nd --> 1st
|
|
||||||
}
|
|
||||||
1st --> innerFirst
|
|
||||||
innerFirst --> 2nd
|
|
||||||
}
|
|
||||||
state Second {
|
|
||||||
2nd --> [*]
|
|
||||||
}
|
|
||||||
state Third {
|
|
||||||
[*] --> 3rd
|
|
||||||
3rd --> [*]
|
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
|
||||||
|
|
||||||
<h2>Compsite states can link to themselves</h2>
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
stateDiagram-v2
|
stateDiagram
|
||||||
state Active {
|
State1: The state with a note
|
||||||
Idle
|
|
||||||
}
|
|
||||||
Inactive --> Idle: ACT
|
|
||||||
Active --> Active: LOG
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<h2>transition labels can span multiple lines using "br" tags or \n</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
stateDiagram-v2
|
|
||||||
[*] --> S1
|
|
||||||
S1 --> S2: This long line uses a br tag<br />to create multiple<br />lines.
|
|
||||||
S1 --> S3: This transition descripton uses \na newline character\nto create multiple\nlines.
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<h2>You can add Notes</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
stateDiagram-v2
|
|
||||||
direction LR
|
|
||||||
State1: A state with a note
|
|
||||||
note right of State1
|
note right of State1
|
||||||
Important information!<br />You can write notes.<br />And\nthey\ncan\nbe\nmulti-\nline.
|
Important information! You can write
|
||||||
|
notes.
|
||||||
end note
|
end note
|
||||||
State1 --> State2
|
State1 --> State2
|
||||||
note left of State2 : Notes can be to the left of a state\n(like this one).
|
note left of State2 : This is the note to the left.
|
||||||
note right of State2 : Notes can be to the right of a state\n(like this one).
|
</pre>
|
||||||
|
<pre class="mermaid">
|
||||||
|
stateDiagram
|
||||||
|
State1
|
||||||
|
note right of State1
|
||||||
|
Line1<br>Line2<br />Line3<br />Line4<br />Line5
|
||||||
|
end note
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
|
||||||
|
|
||||||
<script src="./mermaid.js"></script>
|
<script src="./mermaid.js"></script>
|
||||||
<script>
|
<script>
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
theme: 'default',
|
theme: 'base',
|
||||||
// themeCSS: '.node rect { fill: red; }',
|
// themeCSS: '.node rect { fill: red; }',
|
||||||
logLevel: 3,
|
logLevel: 3,
|
||||||
securityLevel: 'loose',
|
securityLevel: 'loose',
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<title>Mermaid Quick Test Page</title>
|
|
||||||
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
|
||||||
<style>
|
|
||||||
div.mermaid {
|
|
||||||
/* font-family: 'trebuchet ms', verdana, arial; */
|
|
||||||
font-family: 'Courier New', Courier, monospace !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<pre class="mermaid">
|
|
||||||
timeline
|
|
||||||
title My day
|
|
||||||
section Go to work
|
|
||||||
1930 : first step : second step
|
|
||||||
: third step
|
|
||||||
1940 : fourth step : fifth step
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<script src="./mermaid.js"></script>
|
|
||||||
<script>
|
|
||||||
mermaid.initialize({
|
|
||||||
theme: 'forest',
|
|
||||||
logLevel: 1,
|
|
||||||
securityLevel: 'loose',
|
|
||||||
flowchart: { curve: 'basis' },
|
|
||||||
gantt: { axisFormat: '%m/%d/%Y' },
|
|
||||||
sequence: { actorMargin: 50 },
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
> **Warning**
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
|
||||||
>
|
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
|
||||||
>
|
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/8.6.0_docs.md](../../packages/mermaid/src/docs/config/8.6.0_docs.md).
|
|
||||||
|
|
||||||
# Version 8.6.0 Changes
|
# Version 8.6.0 Changes
|
||||||
|
|
||||||
@@ -12,8 +8,8 @@
|
|||||||
|
|
||||||
With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation.
|
With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation.
|
||||||
|
|
||||||
`directives` allow for a single-use overwriting of `config`, as it has been discussed in [Configurations](../config/configuration.md).
|
`directives` allow for a single-use overwriting of `config`, as it has been discussed in [Configurations](./Setup.md).
|
||||||
This allows site Diagram Authors to instantiate temporary modifications to `config` through the use of [Directives](directives.md), which are parsed before rendering diagram definitions. This allows the Diagram Authors to alter the appearance of the diagrams.
|
This allows site Diagram Authors to instantiate temporary modifications to `config` through the use of [Directives](), which are parsed before rendering diagram definitions. This allows the Diagram Authors to alter the appearance of the diagrams.
|
||||||
|
|
||||||
**A likely application for this is in the creation of diagrams/charts inside company/organizational webpages, that rely on mermaid for diagram and chart rendering.**
|
**A likely application for this is in the creation of diagrams/charts inside company/organizational webpages, that rely on mermaid for diagram and chart rendering.**
|
||||||
|
|
||||||
@@ -52,8 +48,9 @@ Implementors can only modify configurations using directives, and cannot change
|
|||||||
|
|
||||||
The Two types of directives: are `init` (or `initialize`) and `wrap`.
|
The Two types of directives: are `init` (or `initialize`) and `wrap`.
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> All directives are enclosed in `%%{ }%%`
|
All directives are enclosed in `%%{ }%%`
|
||||||
|
```
|
||||||
|
|
||||||
Older versions of mermaid will not parse directives because `%%` will comment out the directive. This makes the update backwards-compatible.
|
Older versions of mermaid will not parse directives because `%%` will comment out the directive. This makes the update backwards-compatible.
|
||||||
|
|
||||||
@@ -65,17 +62,18 @@ Older versions of mermaid will not parse directives because `%%` will comment ou
|
|||||||
| --------- | ----------------------- | --------- | -------- | ----------------------------------------------- |
|
| --------- | ----------------------- | --------- | -------- | ----------------------------------------------- |
|
||||||
| init | modifies configurations | Directive | Optional | Any parameters not included in the secure array |
|
| init | modifies configurations | Directive | Optional | Any parameters not included in the secure array |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> init would be an argument-directive: `%%{init: { **insert argument here**}}%%`
|
init would be an argument-directive: `%%{init: { **insert argument here**}}%%`
|
||||||
>
|
|
||||||
> The json object that is passed as {**argument** } must be valid, quoted json or it will be ignored.
|
The json object that is passed as {**argument** } must be valid, quoted json or it will be ignored.
|
||||||
> **for example**:
|
**for example**:
|
||||||
>
|
|
||||||
> `%%{init: {"theme": "default", "logLevel": 1 }}%%`
|
`%%{init: {"theme": "default", "logLevel": 1 }}%%`
|
||||||
>
|
|
||||||
> Configurations that are passed through init cannot change the parameters in a secure array at a higher level. In the event of a collision, mermaid will give priority to secure arrays and parse the request without changing the values of those parameters in conflict.
|
Configurations that are passed through init cannot change the parameters in a secure array at a higher level. In the event of a collision, mermaid will give priority to secure arrays and parse the request without changing the values of those parameters in conflict.
|
||||||
>
|
|
||||||
> When deployed within code, init is called before the graph/diagram description.
|
When deployed within code, init is called before the graph/diagram description.
|
||||||
|
```
|
||||||
|
|
||||||
**for example**:
|
**for example**:
|
||||||
|
|
||||||
@@ -109,18 +107,19 @@ Older versions of mermaid will not parse directives because `%%` will comment ou
|
|||||||
| --------- | ----------------------------- | --------- | -------- | ---------- |
|
| --------- | ----------------------------- | --------- | -------- | ---------- |
|
||||||
| wrap | a callable text-wrap function | Directive | Optional | %%{wrap}%% |
|
| wrap | a callable text-wrap function | Directive | Optional | %%{wrap}%% |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> Wrap is a function that is currently only deployable for sequence diagrams.
|
Wrap is a function that is currently only deployable for sequence diagrams.
|
||||||
>
|
|
||||||
> `Wrap respects a manually added <br>, so if the user wants to break up their text, they have full control over line breaks by adding <br> tags.`
|
Wrap respects a manually added <br\>, so if the user wants to break up their text, they have full control over line breaks by adding <br\> tags.
|
||||||
>
|
|
||||||
> It is a non-argument directive and can be executed thusly:
|
It is a non-argument directive and can be executed thusly:
|
||||||
>
|
|
||||||
> `%%{wrap}%%` .
|
`%%{wrap}%%` .
|
||||||
|
```
|
||||||
|
|
||||||
**An example of text wrapping in a sequence diagram**:
|
**An example of text wrapping in a sequence diagram**:
|
||||||
|
|
||||||
!\[Image showing wrapped text]\(img/wrapped text.png)
|

|
||||||
|
|
||||||
# Resetting Configurations:
|
# Resetting Configurations:
|
||||||
|
|
||||||
@@ -144,7 +143,7 @@ Example of **assignWithDepth**:
|
|||||||
|
|
||||||
Example of **object.Assign**:
|
Example of **object.Assign**:
|
||||||
|
|
||||||
!\[Image showing object.assign without depth]\(img/object.assign without depth.png)
|

|
||||||
|
|
||||||
• **calculateTextDimensions**, **calculateTextWidth**, and **calculateTextHeight** - for measuring text dimensions, width and height.
|
• **calculateTextDimensions**, **calculateTextWidth**, and **calculateTextHeight** - for measuring text dimensions, width and height.
|
||||||
|
|
||||||
@@ -158,12 +157,13 @@ Example of **object.Assign**:
|
|||||||
| --------------- | ------------------------------------- | ----------- | --------------------------------------- | ---------- | ---------- |
|
| --------------- | ------------------------------------- | ----------- | --------------------------------------- | ---------- | ---------- |
|
||||||
| `setSiteConfig` | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | conf | siteConfig |
|
| `setSiteConfig` | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | conf | siteConfig |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset
|
Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset
|
||||||
> the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig
|
the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig
|
||||||
> to the defaultConfig
|
to the defaultConfig
|
||||||
> Note: currentConfig is set in this function。
|
Note: currentConfig is set in this function。
|
||||||
> Default value: will mirror Global Config
|
Default value: will mirror Global Config
|
||||||
|
```
|
||||||
|
|
||||||
## getSiteConfig
|
## getSiteConfig
|
||||||
|
|
||||||
@@ -171,8 +171,9 @@ Example of **object.Assign**:
|
|||||||
| --------------- | --------------------------------------------------- | ----------- | ---------------------------------- |
|
| --------------- | --------------------------------------------------- | ----------- | ---------------------------------- |
|
||||||
| `getSiteConfig` | Returns the current `siteConfig` base configuration | Get Request | Returns Any Values in `siteConfig` |
|
| `getSiteConfig` | Returns the current `siteConfig` base configuration | Get Request | Returns Any Values in `siteConfig` |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> Returns any values in siteConfig.
|
Returns any values in siteConfig.
|
||||||
|
```
|
||||||
|
|
||||||
## setConfig
|
## setConfig
|
||||||
|
|
||||||
@@ -180,10 +181,11 @@ Example of **object.Assign**:
|
|||||||
| ----------- | ------------------------------------------ | ----------- | --------------------------------- | ---------- | ---------------------------------------------- |
|
| ----------- | ------------------------------------------ | ----------- | --------------------------------- | ---------- | ---------------------------------------------- |
|
||||||
| `setConfig` | Sets the `currentConfig` to desired values | Put Request | Any Values, those in secure array | conf | `currentConfig` merged with the sanitized conf |
|
| `setConfig` | Sets the `currentConfig` to desired values | Put Request | Any Values, those in secure array | conf | `currentConfig` merged with the sanitized conf |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any
|
Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any
|
||||||
> values found in conf with key found in siteConfig.secure will be replaced with the corresponding
|
values found in conf with key found in siteConfig.secure will be replaced with the corresponding
|
||||||
> siteConfig value.
|
siteConfig value.
|
||||||
|
```
|
||||||
|
|
||||||
## getConfig
|
## getConfig
|
||||||
|
|
||||||
@@ -191,8 +193,9 @@ Example of **object.Assign**:
|
|||||||
| ----------- | --------------------------- | ----------- | ------------------------------- |
|
| ----------- | --------------------------- | ----------- | ------------------------------- |
|
||||||
| `getConfig` | Obtains the `currentConfig` | Get Request | Any Values from `currentConfig` |
|
| `getConfig` | Obtains the `currentConfig` | Get Request | Any Values from `currentConfig` |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> Returns any values in currentConfig.
|
Returns any values in currentConfig.
|
||||||
|
```
|
||||||
|
|
||||||
## sanitize
|
## sanitize
|
||||||
|
|
||||||
@@ -200,9 +203,10 @@ Example of **object.Assign**:
|
|||||||
| ---------- | ---------------------------------------- | -------------- | ------ |
|
| ---------- | ---------------------------------------- | -------------- | ------ |
|
||||||
| `sanitize` | Sets the `siteConfig` to desired values. | Put Request(?) | None |
|
| `sanitize` | Sets the `siteConfig` to desired values. | Put Request(?) | None |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> modifies options in-place
|
modifies options in-place
|
||||||
> Ensures options parameter does not attempt to override siteConfig secure keys.
|
Ensures options parameter does not attempt to override siteConfig secure keys.
|
||||||
|
```
|
||||||
|
|
||||||
## reset
|
## reset
|
||||||
|
|
||||||
@@ -216,7 +220,8 @@ Example of **object.Assign**:
|
|||||||
| --------- | ------------------------------------------------------------ | ---------- | -------- | -------------------------------------------- |
|
| --------- | ------------------------------------------------------------ | ---------- | -------- | -------------------------------------------- |
|
||||||
| `conf` | base set of values, which `currentConfig` could be reset to. | Dictionary | Required | Any Values, with respect to the secure Array |
|
| `conf` | base set of values, which `currentConfig` could be reset to. | Dictionary | Required | Any Values, with respect to the secure Array |
|
||||||
|
|
||||||
> **Note**
|
```note
|
||||||
> default: current siteConfig (optional, default `getSiteConfig()`)
|
default: current siteConfig (optional, default `getSiteConfig()`)
|
||||||
|
```
|
||||||
|
|
||||||
## For more information, read [Setup](./setup/README.md).
|
## For more information, read [Setup](Setup.md).
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
> **Warning**
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
|
||||||
>
|
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
|
||||||
>
|
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/CHANGELOG.md](../packages/mermaid/src/docs/CHANGELOG.md).
|
|
||||||
|
|
||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
@@ -17,10 +13,10 @@ All changes are in descending order, beginning with the newest (latest) version.
|
|||||||
🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.7.0) |
|
🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.7.0) |
|
||||||
📜 [Full Changelog](https://github.com/mermaid-js/mermaid/compare/8.6.0...8.7.0)
|
📜 [Full Changelog](https://github.com/mermaid-js/mermaid/compare/8.6.0...8.7.0)
|
||||||
|
|
||||||
This version brings with it a system for [dynamic and integrated configuration of the diagram themes](config/theming.md).
|
This version brings with it a system for [dynamic and integrated configuration of the diagram themes](./theming.md).
|
||||||
The objective of this is to increase the customizability of mermaid and the ease of Styling, with the customization of themes through the `%%init%%` directive and `initialize` calls.
|
The objective of this is to increase the customizability of mermaid and the ease of Styling, with the customization of themes through the `%%init%%` directive and `initialize` calls.
|
||||||
|
|
||||||
Themes follow and build upon the Levels of Configuration and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](config/8.6.0_docs.md).
|
Themes follow and build upon the Levels of Configuration and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](../getting-started/8.6.0_docs.md).
|
||||||
|
|
||||||
**These Theming Configurations, similar to directives, will also be made applicable in the Live-Editor, for easier styling.**
|
**These Theming Configurations, similar to directives, will also be made applicable in the Live-Editor, for easier styling.**
|
||||||
|
|
||||||
@@ -497,7 +493,7 @@ mermaidAPI.initialize({
|
|||||||
- Clarify the need for a CSS stylesheet [#413](https://github.com/knsv/mermaid/pull/413) ([sifb](https://github.com/sifb))
|
- Clarify the need for a CSS stylesheet [#413](https://github.com/knsv/mermaid/pull/413) ([sifb](https://github.com/sifb))
|
||||||
- Added hads downstream project [#412](https://github.com/knsv/mermaid/pull/412) ([sinedied](https://github.com/sinedied))
|
- Added hads downstream project [#412](https://github.com/knsv/mermaid/pull/412) ([sinedied](https://github.com/sinedied))
|
||||||
- update usage and fix #273 [#406](https://github.com/knsv/mermaid/pull/406) ([jinntrance](https://github.com/jinntrance))
|
- update usage and fix #273 [#406](https://github.com/knsv/mermaid/pull/406) ([jinntrance](https://github.com/jinntrance))
|
||||||
- Add <https://github.com/raghur/mermaid-filter> to downstream projects docs page [#404](https://github.com/knsv/mermaid/pull/404) ([raghur](https://github.com/raghur))
|
- Add https://github.com/raghur/mermaid-filter to downstream projects docs page [#404](https://github.com/knsv/mermaid/pull/404) ([raghur](https://github.com/raghur))
|
||||||
- New neutral theme [#395](https://github.com/knsv/mermaid/pull/395) ([sinedied](https://github.com/sinedied))
|
- New neutral theme [#395](https://github.com/knsv/mermaid/pull/395) ([sinedied](https://github.com/sinedied))
|
||||||
- fix cli issues [#390](https://github.com/knsv/mermaid/pull/390) ([ben-page](https://github.com/ben-page))
|
- fix cli issues [#390](https://github.com/knsv/mermaid/pull/390) ([ben-page](https://github.com/ben-page))
|
||||||
- Add missing space for 'Labels out of bounds' section [#386](https://github.com/knsv/mermaid/pull/386) ([The-Alchemist](https://github.com/The-Alchemist))
|
- Add missing space for 'Labels out of bounds' section [#386](https://github.com/knsv/mermaid/pull/386) ([The-Alchemist](https://github.com/The-Alchemist))
|
||||||
@@ -661,7 +657,7 @@ mermaidAPI.initialize({
|
|||||||
|
|
||||||
**Closed issues:**
|
**Closed issues:**
|
||||||
|
|
||||||
- Installing “atom-mermaid\@0.1.3” failed [#218](https://github.com/knsv/mermaid/issues/218)
|
- Installing “atom-mermaid@0.1.3” failed [#218](https://github.com/knsv/mermaid/issues/218)
|
||||||
- node feature request [#211](https://github.com/knsv/mermaid/issues/211)
|
- node feature request [#211](https://github.com/knsv/mermaid/issues/211)
|
||||||
- Please add prefix for styles [#208](https://github.com/knsv/mermaid/issues/208)
|
- Please add prefix for styles [#208](https://github.com/knsv/mermaid/issues/208)
|
||||||
- Bad handling of block arguments [#207](https://github.com/knsv/mermaid/issues/207)
|
- Bad handling of block arguments [#207](https://github.com/knsv/mermaid/issues/207)
|
||||||
@@ -671,7 +667,7 @@ mermaidAPI.initialize({
|
|||||||
- Broken CLI Graphs? (v0.5.1) [#196](https://github.com/knsv/mermaid/issues/196)
|
- Broken CLI Graphs? (v0.5.1) [#196](https://github.com/knsv/mermaid/issues/196)
|
||||||
- Static site does not render under HTTPS [#194](https://github.com/knsv/mermaid/issues/194)
|
- Static site does not render under HTTPS [#194](https://github.com/knsv/mermaid/issues/194)
|
||||||
- Error on simple graph [#192](https://github.com/knsv/mermaid/issues/192)
|
- Error on simple graph [#192](https://github.com/knsv/mermaid/issues/192)
|
||||||
- Escape "\~" [#191](https://github.com/knsv/mermaid/issues/191)
|
- Escape "~" [#191](https://github.com/knsv/mermaid/issues/191)
|
||||||
- Trying to add link using 'click' to flowchart [#188](https://github.com/knsv/mermaid/issues/188)
|
- Trying to add link using 'click' to flowchart [#188](https://github.com/knsv/mermaid/issues/188)
|
||||||
- cli: no lines and arrowheads rendered / only dotted lines [#187](https://github.com/knsv/mermaid/issues/187)
|
- cli: no lines and arrowheads rendered / only dotted lines [#187](https://github.com/knsv/mermaid/issues/187)
|
||||||
- text of mermaid div displayed on page [#186](https://github.com/knsv/mermaid/issues/186)
|
- text of mermaid div displayed on page [#186](https://github.com/knsv/mermaid/issues/186)
|
||||||
@@ -793,7 +789,7 @@ mermaidAPI.initialize({
|
|||||||
**Closed issues:**
|
**Closed issues:**
|
||||||
|
|
||||||
- subgraph background is black in rendered flowchart PNG via CLI [#121](https://github.com/knsv/mermaid/issues/121)
|
- subgraph background is black in rendered flowchart PNG via CLI [#121](https://github.com/knsv/mermaid/issues/121)
|
||||||
- Integrate editor at <https://github.com/naseer/mermaid-webapp> [#110](https://github.com/knsv/mermaid/issues/110)
|
- Integrate editor at https://github.com/naseer/mermaid-webapp [#110](https://github.com/knsv/mermaid/issues/110)
|
||||||
- Internet Explorer Support [#99](https://github.com/knsv/mermaid/issues/99)
|
- Internet Explorer Support [#99](https://github.com/knsv/mermaid/issues/99)
|
||||||
|
|
||||||
## [0.3.5](https://github.com/knsv/mermaid/tree/0.3.5) (2015-02-15)
|
## [0.3.5](https://github.com/knsv/mermaid/tree/0.3.5) (2015-02-15)
|
||||||
|
|||||||
22
docs/Configuration.md
Normal file
22
docs/Configuration.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
Configuration is the second half of Mermaid, after deployment. Together Deployment and Configuration constitute the whole of Mermaid.
|
||||||
|
|
||||||
|
This section will introduce the different methods of configuring of the behaviors and appearances of Mermaid Diagrams.
|
||||||
|
The Following are the most commonly used methods, and are all tied to Mermaid [Deployment](./n00b-gettingStarted.md) methods.
|
||||||
|
|
||||||
|
## Configuration Section in the [Live Editor](https://mermaid.live/).
|
||||||
|
|
||||||
|
## The `initialize()` call, for when Mermaid is called via an API, or through a <script> tag.
|
||||||
|
|
||||||
|
## [Directives](./directives.md),
|
||||||
|
|
||||||
|
Directives allows limited reconfiguration of a diagram just before it is rendered. It can alter the font style, color and other aesthetic aspects of the diagram. You can pass a directive alongside your definition inside `%%{ }%%`, either above or below your diagram definition.
|
||||||
|
|
||||||
|
## Theme Creation:
|
||||||
|
|
||||||
|
An application of using Directives to change [Themes](./theming.md). `Theme` is an value within mermaid's configuration that dictates the color scheme for diagrams.
|
||||||
|
|
||||||
|
If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](./Setup.md) here. It includes themes
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
> **Warning**
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
|
||||||
>
|
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
|
||||||
>
|
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/intro/index.md](../../packages/mermaid/src/docs/intro/index.md).
|
|
||||||
|
|
||||||
# About Mermaid
|
# About Mermaid
|
||||||
|
|
||||||
@@ -10,11 +6,11 @@
|
|||||||
|
|
||||||
It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically.
|
It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically.
|
||||||
|
|
||||||
> If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](n00b-syntaxReference.md).
|
> If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](./n00b-syntaxReference.md).
|
||||||
|
|
||||||
<img src="/header.png" alt="" />
|
<img src="img/header.png" alt="" />
|
||||||
|
|
||||||
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [](https://www.npmjs.com/package/mermaid) [](https://bundlephobia.com/package/mermaid) [](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [](https://www.jsdelivr.com/package/npm/mermaid) [](https://www.npmjs.com/package/mermaid) [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [](https://twitter.com/mermaidjs_)
|
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [](https://www.npmjs.com/package/mermaid) [](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [](https://www.jsdelivr.com/package/npm/mermaid) [](https://www.npmjs.com/package/mermaid) [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [](https://twitter.com/mermaidjs_)
|
||||||
|
|
||||||
<!-- Mermaid book banner -->
|
<!-- Mermaid book banner -->
|
||||||
|
|
||||||
@@ -30,12 +26,12 @@ Diagramming and documentation costs precious developer time and gets outdated qu
|
|||||||
But not having diagrams or docs ruins productivity and hurts organizational learning.<br/>
|
But not having diagrams or docs ruins productivity and hurts organizational learning.<br/>
|
||||||
Mermaid addresses this problem by enabling users to create easily modifiable diagrams, it can also be made part of production scripts (and other pieces of code).<br/> <br/>
|
Mermaid addresses this problem by enabling users to create easily modifiable diagrams, it can also be made part of production scripts (and other pieces of code).<br/> <br/>
|
||||||
Mermaid allows even non-programmers to easily create detailed and diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/>
|
Mermaid allows even non-programmers to easily create detailed and diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/>
|
||||||
[Tutorials](../config/Tutorials.md) has video tutorials.
|
[Tutorials](./Tutorials.md) has video tutorials.
|
||||||
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../misc/integrations.md).
|
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./integrations.md).
|
||||||
|
|
||||||
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../community/n00b-overview.md) and [Usage](../config/usage.md).
|
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./n00b-overview.md) and [Usage](./usage.md).
|
||||||
|
|
||||||
🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/development.md) | 🔌 [Plug-Ins](../misc/integrations.md)
|
🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](https://github.com/mermaid-js/mermaid/blob/develop/docs/development.md) | 📜 [Version Log](./CHANGELOG.md) | 🔌 [Plug-Ins](./integrations.md)
|
||||||
|
|
||||||
> 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/knsv/mermaid/issues/866).
|
> 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/knsv/mermaid/issues/866).
|
||||||
|
|
||||||
@@ -51,7 +47,7 @@ In our release process we rely heavily on visual regression tests using [applito
|
|||||||
|
|
||||||
## Diagram Types
|
## Diagram Types
|
||||||
|
|
||||||
### [Flowchart](../syntax/flowchart.md?id=flowcharts-basic-syntax)
|
### [Flowchart](./flowchart.md?id=flowcharts-basic-syntax)
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
graph TD;
|
graph TD;
|
||||||
@@ -69,7 +65,9 @@ graph TD;
|
|||||||
C-->D;
|
C-->D;
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Sequence diagram](../syntax/sequenceDiagram.md)
|

|
||||||
|
|
||||||
|
### [Sequence diagram](./sequenceDiagram.md)
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
@@ -99,7 +97,9 @@ sequenceDiagram
|
|||||||
Bob-->>John: Jolly good!
|
Bob-->>John: Jolly good!
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Gantt diagram](../syntax/gantt.md)
|

|
||||||
|
|
||||||
|
### [Gantt diagram](./gantt.md)
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
gantt
|
gantt
|
||||||
@@ -127,7 +127,9 @@ Future task : des3, after des2, 5d
|
|||||||
Future task2 : des4, after des3, 5d
|
Future task2 : des4, after des3, 5d
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Class diagram](../syntax/classDiagram.md)
|

|
||||||
|
|
||||||
|
### [Class diagram](./classDiagram.md)
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
classDiagram
|
classDiagram
|
||||||
@@ -163,7 +165,9 @@ Class01 : int gorilla
|
|||||||
Class08 <--> C2: Cool label
|
Class08 <--> C2: Cool label
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Git graph](../syntax/gitgraph.md)
|

|
||||||
|
|
||||||
|
### Git graph
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
gitGraph
|
gitGraph
|
||||||
@@ -191,7 +195,7 @@ Class08 <--> C2: Cool label
|
|||||||
commit
|
commit
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Entity Relationship Diagram - :exclamation: experimental](../syntax/entityRelationshipDiagram.md)
|
### [Entity Relationship Diagram - :exclamation: experimental](./entityRelationshipDiagram.md)
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
erDiagram
|
erDiagram
|
||||||
@@ -209,7 +213,9 @@ erDiagram
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### [User Journey Diagram](../syntax/userJourney.md)
|

|
||||||
|
|
||||||
|
### [User Journey Diagram](./user-journey.md)
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
journey
|
journey
|
||||||
@@ -235,11 +241,13 @@ journey
|
|||||||
Sit down: 5: Me
|
Sit down: 5: Me
|
||||||
```
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
**In depth guides and examples can be found at [Getting Started](./n00b-gettingStarted.md) and [Usage](../config/usage.md).**
|
**In depth guides and examples can be found at [Getting Started](/n00b-gettingStarted) and [Usage](/usage).**
|
||||||
|
|
||||||
**It would also be helpful to learn more about mermaid's [Syntax](./n00b-syntaxReference.md).**
|
**It would also be helpful to learn more about mermaid's [Syntax](/n00b-syntaxReference).**
|
||||||
|
|
||||||
### CDN
|
### CDN
|
||||||
|
|
||||||
@@ -256,12 +264,12 @@ Latest Version: <https://unpkg.com/browse/mermaid@8.8.0/>
|
|||||||
To Deploy Mermaid:
|
To Deploy Mermaid:
|
||||||
|
|
||||||
1. You will need to install node v16, which would have npm
|
1. You will need to install node v16, which would have npm
|
||||||
2. Install mermaid
|
2. Download yarn using npm
|
||||||
- NPM: `npm i mermaid`
|
3. Enter the following command: `yarn add mermaid`
|
||||||
- Yarn: `yarn add mermaid`
|
4. You can then add mermaid as a dev dependency using this command:
|
||||||
- Pnpm: `pnpm add mermaid`
|
`yarn add --dev mermaid`
|
||||||
|
|
||||||
### [Mermaid API](../config/setup/README.md):
|
### [Mermaid API](./Setup.md):
|
||||||
|
|
||||||
**To deploy mermaid without a bundler, one can insert a `script` tag with an absolute address and a `mermaid.initialize` call into the HTML like so:**
|
**To deploy mermaid without a bundler, one can insert a `script` tag with an absolute address and a `mermaid.initialize` call into the HTML like so:**
|
||||||
|
|
||||||
@@ -274,7 +282,7 @@ To Deploy Mermaid:
|
|||||||
|
|
||||||
**Doing so will command the mermaid parser to look for the `<div>` or `<pre>` tags with `class="mermaid"`. From these tags mermaid will try to read the diagram/chart definitions and render them into SVG charts.**
|
**Doing so will command the mermaid parser to look for the `<div>` or `<pre>` tags with `class="mermaid"`. From these tags mermaid will try to read the diagram/chart definitions and render them into SVG charts.**
|
||||||
|
|
||||||
**Examples can be found at** [Other examples](../syntax/examples.md)
|
**Examples can be found at** [Other examples](/examples)
|
||||||
|
|
||||||
## Sibling projects
|
## Sibling projects
|
||||||
|
|
||||||
@@ -300,26 +308,22 @@ Don't hesitate to contact me if you want to get involved!
|
|||||||
|
|
||||||
## For contributors
|
## For contributors
|
||||||
|
|
||||||
### Requirements
|
### Setup
|
||||||
|
|
||||||
- [volta](https://volta.sh/) to manage node versions.
|
```sh
|
||||||
- [Node.js](https://nodejs.org/en/). `volta install node`
|
yarn install
|
||||||
- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
|
```
|
||||||
|
|
||||||
## Development Installation
|
### Build
|
||||||
|
|
||||||
```bash
|
```sh
|
||||||
git clone git@github.com:mermaid-js/mermaid.git
|
yarn build:watch
|
||||||
cd mermaid
|
|
||||||
# npx is required for first install as volta support for pnpm is not added yet.
|
|
||||||
npx pnpm install
|
|
||||||
pnpm test
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Lint
|
### Lint
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm lint
|
yarn lint
|
||||||
```
|
```
|
||||||
|
|
||||||
We use [eslint](https://eslint.org/).
|
We use [eslint](https://eslint.org/).
|
||||||
@@ -328,7 +332,7 @@ We recommend you to install [editor plugins](https://eslint.org/docs/user-guide/
|
|||||||
### Test
|
### Test
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm test
|
yarn test
|
||||||
```
|
```
|
||||||
|
|
||||||
Manual test in browser: open `dist/index.html`
|
Manual test in browser: open `dist/index.html`
|
||||||
@@ -355,7 +359,7 @@ The above command generates files into the `dist` folder and publishes them to \
|
|||||||
|
|
||||||
Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out.
|
Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out.
|
||||||
|
|
||||||
Detailed information about how to contribute can be found in the [contribution guide](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
Detailed information about how to contribute can be found in the [contribution guide](CONTRIBUTING.md)
|
||||||
|
|
||||||
## Security and safe diagrams
|
## Security and safe diagrams
|
||||||
|
|
||||||
@@ -367,39 +371,16 @@ _Unfortunately you can not have a cake and eat it at the same time which in this
|
|||||||
|
|
||||||
## Reporting vulnerabilities
|
## Reporting vulnerabilities
|
||||||
|
|
||||||
To report a vulnerability, please e-mail <security@mermaid.live> with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue.
|
To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue.
|
||||||
|
|
||||||
## Appreciation
|
## Appreciation
|
||||||
|
|
||||||
A quick note from Knut Sveidqvist:
|
A quick note from Knut Sveidqvist:
|
||||||
|
|
||||||
> _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_
|
> _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_ >_Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._ >_Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
|
||||||
>
|
|
||||||
> _Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._
|
|
||||||
>
|
|
||||||
> _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
|
|
||||||
>
|
>
|
||||||
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_
|
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
_Mermaid was created by Knut Sveidqvist for easier documentation._
|
_Mermaid was created by Knut Sveidqvist for easier documentation._
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
#contributors + p,
|
|
||||||
#about-mermaid + p + p + blockquote + img + p
|
|
||||||
{
|
|
||||||
display: flex
|
|
||||||
}
|
|
||||||
|
|
||||||
#contributors + p a,
|
|
||||||
#about-mermaid + p + p + blockquote + img + p a
|
|
||||||
{
|
|
||||||
margin: 0 0.5rem
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark #VPContent > div > div > div.content > div > main > div > div > img
|
|
||||||
{
|
|
||||||
filter: invert(1) hue-rotate(217deg) contrast(0.72);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
17
docs/SUMMARY.md
Normal file
17
docs/SUMMARY.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
|
||||||
|
- [mermaid](README.md)
|
||||||
|
- [FAQ](faq.md)
|
||||||
|
- [Breaking changes](breakingChanges.md)
|
||||||
|
- [Usage](usage.md)
|
||||||
|
- [Flowchart](flowchart.md)
|
||||||
|
- [Sequence diagram](sequenceDiagram.md)
|
||||||
|
- [Gantt diagram](gantt.md)
|
||||||
|
- [mermaid CLI](mermaidCLI.md)
|
||||||
|
- [Demos](demos.md)
|
||||||
|
- [mermaidAPI](mermaidAPI.md)
|
||||||
|
- [Development](development.md)
|
||||||
|
- [Upgrading](upgrading.md)
|
||||||
|
- [Contribute to this website](https://github.com/mermaidjs/mermaid-gitbook)
|
||||||
1629
docs/Setup.md
Normal file
1629
docs/Setup.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,4 @@
|
|||||||
> **Warning**
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
|
||||||
>
|
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
|
||||||
>
|
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/Tutorials.md](../../packages/mermaid/src/docs/config/Tutorials.md).
|
|
||||||
|
|
||||||
# Tutorials
|
# Tutorials
|
||||||
|
|
||||||
@@ -10,7 +6,7 @@ This is list of publicly available Tutorials for using Mermaid.JS . This is inte
|
|||||||
|
|
||||||
**Note that these tutorials might display an older interface, but the usage of the live-editor will largely be the same.**
|
**Note that these tutorials might display an older interface, but the usage of the live-editor will largely be the same.**
|
||||||
|
|
||||||
For most purposes, you can use the [Live Editor](https://mermaid.live), to quickly and easily render a diagram.
|
For most purposes, you can use the [Live Editor](https://mermaid-js.github.io/mermaid-live-editor), to quickly and easily render a diagram.
|
||||||
|
|
||||||
## Live-Editor Tutorials
|
## Live-Editor Tutorials
|
||||||
|
|
||||||
@@ -28,19 +24,19 @@ The definitions that can be generated the Live-Editor are also backwards-compati
|
|||||||
|
|
||||||
## Mermaid with HTML
|
## Mermaid with HTML
|
||||||
|
|
||||||
Examples are provided in [Getting Started](../intro/n00b-gettingStarted.md)
|
Examples are provided in [Getting Started](n00b-gettingStarted.md)
|
||||||
|
|
||||||
**CodePen Examples:**
|
**CodePen Examples:**
|
||||||
|
|
||||||
<https://codepen.io/CarlBoneri/pen/BQwZzq>
|
https://codepen.io/CarlBoneri/pen/BQwZzq
|
||||||
|
|
||||||
<https://codepen.io/tdkn/pen/vZxQzd>
|
https://codepen.io/tdkn/pen/vZxQzd
|
||||||
|
|
||||||
<https://codepen.io/janzeteachesit/pen/OWWZKN>
|
https://codepen.io/janzeteachesit/pen/OWWZKN
|
||||||
|
|
||||||
## Mermaid with Text Area
|
## Mermaid with Text Area
|
||||||
|
|
||||||
<https://codepen.io/Ryuno-Ki/pen/LNxwgR>
|
https://codepen.io/Ryuno-Ki/pen/LNxwgR
|
||||||
|
|
||||||
## Mermaid in open source docs
|
## Mermaid in open source docs
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user