mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-27 04:06:39 +02:00
Compare commits
1 Commits
add-flowch
...
sidv/liveE
Author | SHA1 | Date | |
---|---|---|---|
![]() |
08fe25a79e |
@@ -49,10 +49,8 @@ module.exports = {
|
|||||||
'no-unused-vars': 'off',
|
'no-unused-vars': 'off',
|
||||||
'cypress/no-async-tests': 'off',
|
'cypress/no-async-tests': 'off',
|
||||||
'@typescript-eslint/consistent-type-imports': 'error',
|
'@typescript-eslint/consistent-type-imports': 'error',
|
||||||
'@typescript-eslint/no-explicit-any': 'warn',
|
|
||||||
'@typescript-eslint/no-floating-promises': 'error',
|
'@typescript-eslint/no-floating-promises': 'error',
|
||||||
'@typescript-eslint/no-misused-promises': 'error',
|
'@typescript-eslint/no-misused-promises': 'error',
|
||||||
'@typescript-eslint/no-unused-vars': 'warn',
|
|
||||||
'@typescript-eslint/ban-ts-comment': [
|
'@typescript-eslint/ban-ts-comment': [
|
||||||
'error',
|
'error',
|
||||||
{
|
{
|
||||||
@@ -63,17 +61,6 @@ module.exports = {
|
|||||||
minimumDescriptionLength: 10,
|
minimumDescriptionLength: 10,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'@typescript-eslint/naming-convention': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
selector: 'typeLike',
|
|
||||||
format: ['PascalCase'],
|
|
||||||
custom: {
|
|
||||||
regex: '^I[A-Z]',
|
|
||||||
match: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'json/*': ['error', 'allowComments'],
|
'json/*': ['error', 'allowComments'],
|
||||||
'@cspell/spellchecker': [
|
'@cspell/spellchecker': [
|
||||||
'error',
|
'error',
|
||||||
|
5
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
5
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -17,9 +17,6 @@ body:
|
|||||||
- Use a clear and concise title
|
- Use a clear and concise title
|
||||||
- Fill out the text fields with as much detail as possible.
|
- 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!
|
- Never be shy to give us screenshots and/or code samples. It will help!
|
||||||
|
|
||||||
There is a chance that the bug is already fixed in the git `develop` branch, but is not released yet.
|
|
||||||
So please check in [Live Editor - Develop](https://develop.git.mermaid.live) before raising an issue.
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Description
|
label: Description
|
||||||
@@ -46,7 +43,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: Code Sample
|
label: Code Sample
|
||||||
description: |-
|
description: |-
|
||||||
If applicable, add the code sample or a link to the [Live Editor - Develop](https://develop.git.mermaid.live).
|
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.
|
Any text pasted here will be rendered as a Code block.
|
||||||
render: text
|
render: text
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
14
.github/ISSUE_TEMPLATE/config.yml
vendored
14
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -3,18 +3,12 @@ contact_links:
|
|||||||
- name: GitHub Discussions
|
- name: GitHub Discussions
|
||||||
url: https://github.com/mermaid-js/mermaid/discussions
|
url: https://github.com/mermaid-js/mermaid/discussions
|
||||||
about: Ask the Community questions or share your own graphs in our discussions.
|
about: Ask the Community questions or share your own graphs in our discussions.
|
||||||
- name: Discord
|
- name: Slack
|
||||||
url: https://discord.gg/AgrbSrBer3
|
url: https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE
|
||||||
about: Join our Community on Discord for Help and a casual chat.
|
about: Join our Community on Slack for Help and a casual chat.
|
||||||
- name: Documentation
|
- name: Documentation
|
||||||
url: https://mermaid.js.org
|
url: https://mermaid-js.github.io
|
||||||
about: Read our documentation for all that Mermaid.js can offer.
|
about: Read our documentation for all that Mermaid.js can offer.
|
||||||
- name: Live Editor
|
- name: Live Editor
|
||||||
url: https://mermaid.live
|
url: https://mermaid.live
|
||||||
about: Try the live editor to preview graphs in no time.
|
about: Try the live editor to preview graphs in no time.
|
||||||
- name: Live Editor - Develop
|
|
||||||
url: https://develop.git.mermaid.live
|
|
||||||
about: Try unreleased changes in the develop branch.
|
|
||||||
- name: Live Editor - Next
|
|
||||||
url: https://next.git.mermaid.live
|
|
||||||
about: Try unreleased changes in the next branch.
|
|
||||||
|
4
.github/lychee.toml
vendored
4
.github/lychee.toml
vendored
@@ -34,8 +34,8 @@ exclude = [
|
|||||||
# Don't check files that are generated during the build via `pnpm docs:code`
|
# Don't check files that are generated during the build via `pnpm docs:code`
|
||||||
'packages/mermaid/src/docs/config/setup/*',
|
'packages/mermaid/src/docs/config/setup/*',
|
||||||
|
|
||||||
# Ignore Discord invite
|
# Ignore slack invite
|
||||||
"https://discord.gg"
|
"https://join.slack.com/"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Exclude all private IPs from checking.
|
# Exclude all private IPs from checking.
|
||||||
|
26
.github/pr-labeler.yml
vendored
26
.github/pr-labeler.yml
vendored
@@ -1,22 +1,4 @@
|
|||||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/release-drafter/release-drafter/master/schema.json
|
'Type: Bug / Error': ['bug/*', fix/*]
|
||||||
autolabeler:
|
'Type: Enhancement': ['feature/*', 'feat/*']
|
||||||
- label: 'Type: Bug / Error'
|
'Type: Other': ['other/*', 'chore/*', 'test/*', 'refactor/*']
|
||||||
branch:
|
'Area: Documentation': ['docs/*']
|
||||||
- '/bug\/.+/'
|
|
||||||
- '/fix\/.+/'
|
|
||||||
- label: 'Type: Enhancement'
|
|
||||||
branch:
|
|
||||||
- '/feature\/.+/'
|
|
||||||
- '/feat\/.+/'
|
|
||||||
- label: 'Type: Other'
|
|
||||||
branch:
|
|
||||||
- '/other\/.+/'
|
|
||||||
- '/chore\/.+/'
|
|
||||||
- '/test\/.+/'
|
|
||||||
- '/refactor\/.+/'
|
|
||||||
- label: 'Area: Documentation'
|
|
||||||
branch:
|
|
||||||
- '/docs\/.+/'
|
|
||||||
|
|
||||||
template: |
|
|
||||||
This field is unused, as we only use this config file for labeling PRs.
|
|
||||||
|
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
@@ -14,5 +14,5 @@ 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 necessary unit/e2e tests.
|
- [ ] :computer: have added necessary unit/e2e tests.
|
||||||
- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/docs/community/contributing.md#update-documentation) is used for all new features.
|
- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/docs/community/development.md#3-update-documentation) is used for all new features.
|
||||||
- [ ] :bookmark: targeted `develop` branch
|
- [ ] :bookmark: targeted `develop` branch
|
||||||
|
2
.github/release-drafter.yml
vendored
2
.github/release-drafter.yml
vendored
@@ -25,6 +25,8 @@ categories:
|
|||||||
change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
|
change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
|
||||||
sort-by: title
|
sort-by: title
|
||||||
sort-direction: ascending
|
sort-direction: ascending
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
exclude-labels:
|
exclude-labels:
|
||||||
- 'Skip changelog'
|
- 'Skip changelog'
|
||||||
no-changes-template: 'This release contains minor changes and bugfixes.'
|
no-changes-template: 'This release contains minor changes and bugfixes.'
|
||||||
|
8
.github/workflows/build-docs.yml
vendored
8
.github/workflows/build-docs.yml
vendored
@@ -16,20 +16,20 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: 18
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Verify release version
|
- name: Verify release verion
|
||||||
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }}
|
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }}
|
||||||
run: pnpm --filter mermaid run docs:verify-version
|
run: pnpm --filter mermaid run docs:verify-version
|
||||||
|
|
||||||
|
11
.github/workflows/build.yml
vendored
11
.github/workflows/build.yml
vendored
@@ -15,17 +15,20 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
build-mermaid:
|
build-mermaid:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
# uses version from "packageManager" field in package.json
|
# uses version from "packageManager" field in package.json
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
|
2
.github/workflows/check-readme-in-sync.yml
vendored
2
.github/workflows/check-readme-in-sync.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Check for difference in README.md and docs/README.md
|
- name: Check for difference in README.md and docs/README.md
|
||||||
run: |
|
run: |
|
||||||
|
2
.github/workflows/checks.yml
vendored
2
.github/workflows/checks.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
name: check tests
|
name: check tests
|
||||||
if: github.repository_owner == 'mermaid-js'
|
if: github.repository_owner == 'mermaid-js'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: testomatio/check-tests@stable
|
- uses: testomatio/check-tests@stable
|
||||||
|
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
|
4
.github/workflows/dependency-review.yml
vendored
4
.github/workflows/dependency-review.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
# Dependency Review Action
|
# Dependency Review Action
|
||||||
#
|
#
|
||||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
# This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||||
#
|
#
|
||||||
# Source repository: https://github.com/actions/dependency-review-action
|
# Source repository: https://github.com/actions/dependency-review-action
|
||||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||||
@@ -15,6 +15,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
|
16
.github/workflows/e2e-applitools.yml
vendored
16
.github/workflows/e2e-applitools.yml
vendored
@@ -21,24 +21,24 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
e2e-applitools:
|
e2e-applitools:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
strategy:
|
||||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
matrix:
|
||||||
options: --user 1001
|
node-version: [18.x]
|
||||||
steps:
|
steps:
|
||||||
- if: ${{ ! env.USE_APPLI }}
|
- if: ${{ ! env.USE_APPLI }}
|
||||||
name: Warn if not using Applitools
|
name: Warn if not using Applitools
|
||||||
run: |
|
run: |
|
||||||
echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
|
echo "::error,title=Not using Applitols::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
# uses version from "packageManager" field in package.json
|
# uses version from "packageManager" field in package.json
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
- if: ${{ env.USE_APPLI }}
|
- if: ${{ env.USE_APPLI }}
|
||||||
name: Notify applitools of new batch
|
name: Notify applitools of new batch
|
||||||
|
123
.github/workflows/e2e.yml
vendored
123
.github/workflows/e2e.yml
vendored
@@ -1,90 +1,31 @@
|
|||||||
# We use github cache to save snapshots between runs.
|
|
||||||
# For PRs and MergeQueues, the target commit is used, and for push events, github.event.previous is used.
|
|
||||||
# If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
|
|
||||||
# These are then downloaded before running the E2E, providing the reference snapshots.
|
|
||||||
# If there are any errors, the diff image is uploaded to artifacts, and the user is notified.
|
|
||||||
|
|
||||||
name: E2E
|
name: E2E
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
|
||||||
- 'gh-readonly-queue/**'
|
|
||||||
pull_request:
|
pull_request:
|
||||||
merge_group:
|
merge_group:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
env:
|
|
||||||
# For PRs and MergeQueues, the target commit is used, and for push events, github.event.previous is used.
|
|
||||||
targetHash: ${{ github.event.pull_request.base.sha || github.event.merge_group.base_sha || (github.event.before == '0000000000000000000000000000000000000000' && 'develop' || github.event.before) }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
cache:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
|
||||||
options: --user 1001
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: pnpm/action-setup@v2
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
- name: Cache snapshots
|
|
||||||
id: cache-snapshot
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
save-always: true
|
|
||||||
path: ./cypress/snapshots
|
|
||||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
|
||||||
|
|
||||||
# If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
|
|
||||||
- name: Switch to base branch
|
|
||||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: ${{ env.targetHash }}
|
|
||||||
|
|
||||||
- name: Cypress run
|
|
||||||
uses: cypress-io/github-action@v4
|
|
||||||
id: cypress-snapshot-gen
|
|
||||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
|
||||||
with:
|
|
||||||
start: pnpm run dev
|
|
||||||
wait-on: 'http://localhost:9000'
|
|
||||||
browser: chrome
|
|
||||||
|
|
||||||
e2e:
|
e2e:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
|
||||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
|
||||||
options: --user 1001
|
|
||||||
needs: cache
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
containers: [1, 2, 3, 4]
|
containers: [1, 2, 3, 4]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
# uses version from "packageManager" field in package.json
|
# uses version from "packageManager" field in package.json
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
# These cached snapshots are downloaded, providing the reference snapshots.
|
|
||||||
- name: Cache snapshots
|
|
||||||
id: cache-snapshot
|
|
||||||
uses: actions/cache/restore@v3
|
|
||||||
with:
|
|
||||||
path: ./cypress/snapshots
|
|
||||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
|
||||||
|
|
||||||
# Install NPM dependencies, cache them correctly
|
# Install NPM dependencies, cache them correctly
|
||||||
# and run all Cypress tests
|
# and run all Cypress tests
|
||||||
@@ -97,7 +38,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
start: pnpm run dev:coverage
|
start: pnpm run dev:coverage
|
||||||
wait-on: 'http://localhost:9000'
|
wait-on: 'http://localhost:9000'
|
||||||
browser: chrome
|
|
||||||
# Disable recording if we don't have an API key
|
# Disable recording if we don't have an API key
|
||||||
# e.g. if this action was run from a fork
|
# e.g. if this action was run from a fork
|
||||||
record: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
record: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
||||||
@@ -106,7 +46,6 @@ jobs:
|
|||||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||||
VITEST_COVERAGE: true
|
VITEST_COVERAGE: true
|
||||||
CYPRESS_COMMIT: ${{ github.sha }}
|
CYPRESS_COMMIT: ${{ github.sha }}
|
||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
- name: Upload Coverage to Codecov
|
||||||
uses: codecov/codecov-action@v3
|
uses: codecov/codecov-action@v3
|
||||||
# Run step only pushes to develop and pull_requests
|
# Run step only pushes to develop and pull_requests
|
||||||
@@ -118,55 +57,9 @@ jobs:
|
|||||||
fail_ci_if_error: false
|
fail_ci_if_error: false
|
||||||
verbose: true
|
verbose: true
|
||||||
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
||||||
|
|
||||||
# We upload the artifacts into numbered archives to prevent overwriting
|
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
if: ${{ always() }}
|
if: ${{ failure() && steps.cypress.conclusion == 'failure' }}
|
||||||
with:
|
|
||||||
name: snapshots-${{ matrix.containers }}
|
|
||||||
retention-days: 1
|
|
||||||
path: ./cypress/snapshots
|
|
||||||
|
|
||||||
combineArtifacts:
|
|
||||||
needs: e2e
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ always() }}
|
|
||||||
steps:
|
|
||||||
# Download all snapshot artifacts and merge them into a single folder
|
|
||||||
- name: Download All Artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: snapshots
|
|
||||||
pattern: snapshots-*
|
|
||||||
merge-multiple: true
|
|
||||||
|
|
||||||
# For successful push events, we save the snapshots cache
|
|
||||||
- name: Save snapshots cache
|
|
||||||
id: cache-upload
|
|
||||||
if: ${{ github.event_name == 'push' && needs.e2e.result != 'failure' }}
|
|
||||||
uses: actions/cache/save@v3
|
|
||||||
with:
|
|
||||||
path: ./snapshots
|
|
||||||
key: ${{ runner.os }}-snapshots-${{ github.event.after }}
|
|
||||||
|
|
||||||
- name: Flatten images to a folder
|
|
||||||
if: ${{ needs.e2e.result == 'failure' }}
|
|
||||||
run: |
|
|
||||||
mkdir errors
|
|
||||||
cd snapshots
|
|
||||||
find . -mindepth 2 -type d -name "*__diff_output__*" -exec sh -c 'mv "$0"/*.png ../errors/' {} \;
|
|
||||||
|
|
||||||
- name: Upload Error snapshots
|
|
||||||
if: ${{ needs.e2e.result == 'failure' }}
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
id: upload-artifacts
|
|
||||||
with:
|
with:
|
||||||
name: error-snapshots
|
name: error-snapshots
|
||||||
retention-days: 10
|
path: cypress/snapshots/**/__diff_output__/*
|
||||||
path: errors/
|
|
||||||
|
|
||||||
- name: Notify Users
|
|
||||||
if: ${{ needs.e2e.result == 'failure' }}
|
|
||||||
run: |
|
|
||||||
echo "::error title=Visual tests failed::You can view images that failed by downloading the error-snapshots artifact: ${{ steps.upload-artifacts.outputs.artifact-url }}"
|
|
||||||
|
4
.github/workflows/link-checker.yml
vendored
4
.github/workflows/link-checker.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
|||||||
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Restore lychee cache
|
- name: Restore lychee cache
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
restore-keys: cache-lychee-
|
restore-keys: cache-lychee-
|
||||||
|
|
||||||
- name: Link Checker
|
- name: Link Checker
|
||||||
uses: lycheeverse/lychee-action@v1.9.1
|
uses: lycheeverse/lychee-action@v1.8.0
|
||||||
with:
|
with:
|
||||||
args: >-
|
args: >-
|
||||||
--config .github/lychee.toml
|
--config .github/lychee.toml
|
||||||
|
11
.github/workflows/lint.yml
vendored
11
.github/workflows/lint.yml
vendored
@@ -16,17 +16,20 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
# uses version from "packageManager" field in package.json
|
# uses version from "packageManager" field in package.json
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
|
23
.github/workflows/pr-labeler-config-validator.yml
vendored
Normal file
23
.github/workflows/pr-labeler-config-validator.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
name: Validate PR Labeler Configuration
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- .github/workflows/pr-labeler-config-validator.yml
|
||||||
|
- .github/workflows/pr-labeler.yml
|
||||||
|
- .github/pr-labeler.yml
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- .github/workflows/pr-labeler-config-validator.yml
|
||||||
|
- .github/workflows/pr-labeler.yml
|
||||||
|
- .github/pr-labeler.yml
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pr-labeler:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Validate Configuration
|
||||||
|
uses: Yash-Singh1/pr-labeler-config-validator@releases/v0.0.3
|
||||||
|
with:
|
||||||
|
configuration-path: .github/pr-labeler.yml
|
22
.github/workflows/pr-labeler.yml
vendored
22
.github/workflows/pr-labeler.yml
vendored
@@ -1,31 +1,13 @@
|
|||||||
name: Apply labels to PR
|
name: Apply labels to PR
|
||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
# required for pr-labeler to support PRs from forks
|
types: [opened]
|
||||||
# ===================== ⛔ ☢️ 🚫 ⚠️ Warning ⚠️ 🚫 ☢️ ⛔ =======================
|
|
||||||
# Be very careful what you put in this GitHub Action workflow file to avoid
|
|
||||||
# malicious PRs from getting access to the Mermaid-js repo.
|
|
||||||
#
|
|
||||||
# Please read the following first before reviewing/merging:
|
|
||||||
# - https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
|
|
||||||
# - https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
|
|
||||||
types: [opened, reopened, synchronize]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pr-labeler:
|
pr-labeler:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read # read permission is required to read config file
|
|
||||||
pull-requests: write # write permission is required to label PRs
|
|
||||||
steps:
|
steps:
|
||||||
- name: Label PR
|
- name: Label PR
|
||||||
uses: release-drafter/release-drafter@v5
|
uses: TimonVS/pr-labeler-action@v4
|
||||||
with:
|
|
||||||
config-name: pr-labeler.yml
|
|
||||||
disable-autolabeler: false
|
|
||||||
disable-releaser: true
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
6
.github/workflows/publish-docs.yml
vendored
6
.github/workflows/publish-docs.yml
vendored
@@ -23,15 +23,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: 18
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
12
.github/workflows/release-draft.yml
vendored
12
.github/workflows/release-draft.yml
vendored
@@ -3,21 +3,13 @@ name: Draft Release
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- develop
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
draft-release:
|
draft-release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: write # write permission is required to create a github release
|
|
||||||
pull-requests: read # required to read PR titles/labels
|
|
||||||
steps:
|
steps:
|
||||||
- name: Draft Release
|
- name: Draft Release
|
||||||
uses: release-drafter/release-drafter@v5
|
uses: toolmantim/release-drafter@v5
|
||||||
with:
|
|
||||||
disable-autolabeler: true
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
@@ -9,17 +9,17 @@ jobs:
|
|||||||
publish-preview:
|
publish-preview:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: 18.x
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
|
8
.github/workflows/release-publish.yml
vendored
8
.github/workflows/release-publish.yml
vendored
@@ -8,17 +8,17 @@ jobs:
|
|||||||
publish:
|
publish:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- uses: fregante/setup-git-user@v2
|
- uses: fregante/setup-git-user@v2
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
# uses version from "packageManager" field in package.json
|
# uses version from "packageManager" field in package.json
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js v18
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: 18.x
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
|
11
.github/workflows/test.yml
vendored
11
.github/workflows/test.yml
vendored
@@ -8,17 +8,20 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
unit-test:
|
unit-test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v2
|
||||||
# uses version from "packageManager" field in package.json
|
# uses version from "packageManager" field in package.json
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
|
11
.github/workflows/update-browserlist.yml
vendored
11
.github/workflows/update-browserlist.yml
vendored
@@ -8,18 +8,11 @@ jobs:
|
|||||||
update-browser-list:
|
update-browser-list:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- uses: pnpm/action-setup@v2
|
- run: npx browserslist@latest --update-db
|
||||||
- run: npx update-browserslist-db@latest
|
|
||||||
- name: Commit changes
|
- name: Commit changes
|
||||||
uses: EndBug/add-and-commit@v9
|
uses: EndBug/add-and-commit@v9
|
||||||
with:
|
with:
|
||||||
author_name: ${{ github.actor }}
|
author_name: ${{ github.actor }}
|
||||||
author_email: ${{ github.actor }}@users.noreply.github.com
|
author_email: ${{ github.actor }}@users.noreply.github.com
|
||||||
message: 'chore: update browsers list'
|
message: 'chore: update browsers list'
|
||||||
push: false
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v5
|
|
||||||
with:
|
|
||||||
branch: update-browserslist
|
|
||||||
title: Update Browserslist
|
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -46,4 +46,3 @@ stats/
|
|||||||
|
|
||||||
demos/dev/**
|
demos/dev/**
|
||||||
!/demos/dev/example.html
|
!/demos/dev/example.html
|
||||||
tsx-0/**
|
|
||||||
|
@@ -6,6 +6,6 @@ export default {
|
|||||||
// https://prettier.io/docs/en/cli.html#--cache
|
// https://prettier.io/docs/en/cli.html#--cache
|
||||||
'prettier --write',
|
'prettier --write',
|
||||||
],
|
],
|
||||||
'cSpell.json': ['tsx scripts/fixCSpell.ts'],
|
'cSpell.json': ['ts-node-esm scripts/fixCSpell.ts'],
|
||||||
'**/*.jison': ['pnpm -w run lint:jison'],
|
'**/*.jison': ['pnpm -w run lint:jison'],
|
||||||
};
|
};
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
v20.11.0
|
|
1
.npmrc
1
.npmrc
@@ -1,3 +1,2 @@
|
|||||||
registry=https://registry.npmjs.org
|
|
||||||
auto-install-peers=true
|
auto-install-peers=true
|
||||||
strict-peer-dependencies=false
|
strict-peer-dependencies=false
|
||||||
|
@@ -10,6 +10,3 @@ stats
|
|||||||
.nyc_output
|
.nyc_output
|
||||||
# Autogenerated by `pnpm run --filter mermaid types:build-config`
|
# Autogenerated by `pnpm run --filter mermaid types:build-config`
|
||||||
packages/mermaid/src/config.type.ts
|
packages/mermaid/src/config.type.ts
|
||||||
# Ignore the files creates in /demos/dev except for example.html
|
|
||||||
demos/dev/**
|
|
||||||
!/demos/dev/example.html
|
|
@@ -117,9 +117,6 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
|||||||
output,
|
output,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
define: {
|
|
||||||
'import.meta.vitest': 'undefined',
|
|
||||||
},
|
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: [],
|
extensions: [],
|
||||||
},
|
},
|
||||||
|
@@ -18,14 +18,12 @@ const MERMAID_CONFIG_DIAGRAM_KEYS = [
|
|||||||
'er',
|
'er',
|
||||||
'pie',
|
'pie',
|
||||||
'quadrantChart',
|
'quadrantChart',
|
||||||
'xyChart',
|
|
||||||
'requirement',
|
'requirement',
|
||||||
'mindmap',
|
'mindmap',
|
||||||
'timeline',
|
'timeline',
|
||||||
'gitGraph',
|
'gitGraph',
|
||||||
'c4',
|
'c4',
|
||||||
'sankey',
|
'sankey',
|
||||||
'block',
|
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
3
.vscode/launch.json
vendored
3
.vscode/launch.json
vendored
@@ -18,8 +18,7 @@
|
|||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"args": ["scripts/docs.cli.mts"],
|
"args": ["scripts/docs.cli.mts"],
|
||||||
// we'll need to change this to --import in Node.JS v20.6.0 and up
|
"runtimeArgs": ["--loader", "ts-node/esm"],
|
||||||
"runtimeArgs": ["--loader", "tsx/esm"],
|
|
||||||
"cwd": "${workspaceRoot}/packages/mermaid",
|
"cwd": "${workspaceRoot}/packages/mermaid",
|
||||||
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
||||||
"smartStep": true,
|
"smartStep": true,
|
||||||
|
14
CHANGELOG.md
14
CHANGELOG.md
@@ -68,7 +68,7 @@ try {
|
|||||||
|
|
||||||
### Init deprecated and InitThrowsErrors removed
|
### Init deprecated and InitThrowsErrors removed
|
||||||
|
|
||||||
The config passed to `init` was not being used earlier.
|
The config passed to `init` was not being used eariler.
|
||||||
It will now be used.
|
It will now be used.
|
||||||
The `init` function is deprecated and will be removed in the next major release.
|
The `init` function is deprecated and will be removed in the next major release.
|
||||||
init currently works as a wrapper to `initialize` and `run`.
|
init currently works as a wrapper to `initialize` and `run`.
|
||||||
@@ -195,7 +195,7 @@ mermaid.run({
|
|||||||
- "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647)
|
- "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647)
|
||||||
- Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646)
|
- Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646)
|
||||||
- How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639)
|
- How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639)
|
||||||
- The live editor can't show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638)
|
- The live editor cant show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638)
|
||||||
- import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634)
|
- import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634)
|
||||||
- Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633)
|
- Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633)
|
||||||
- Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630)
|
- Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630)
|
||||||
@@ -504,7 +504,7 @@ mermaid.run({
|
|||||||
|
|
||||||
- Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324)
|
- Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324)
|
||||||
- About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323)
|
- About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323)
|
||||||
- How to link backwards in flowchat? [\#321](https://github.com/knsv/mermaid/issues/321)
|
- How to link backwords in flowchat? [\#321](https://github.com/knsv/mermaid/issues/321)
|
||||||
- Help with editor [\#310](https://github.com/knsv/mermaid/issues/310)
|
- Help with editor [\#310](https://github.com/knsv/mermaid/issues/310)
|
||||||
- +1 [\#293](https://github.com/knsv/mermaid/issues/293)
|
- +1 [\#293](https://github.com/knsv/mermaid/issues/293)
|
||||||
- Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290)
|
- Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290)
|
||||||
@@ -619,7 +619,7 @@ mermaid.run({
|
|||||||
- render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181)
|
- render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181)
|
||||||
- Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159)
|
- Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159)
|
||||||
- comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141)
|
- comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141)
|
||||||
- Add a reversed asymmetric shape [\#124](https://github.com/knsv/mermaid/issues/124)
|
- Add a reversed assymetric shape [\#124](https://github.com/knsv/mermaid/issues/124)
|
||||||
- Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123)
|
- Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123)
|
||||||
- Support for font-awesome [\#49](https://github.com/knsv/mermaid/issues/49)
|
- Support for font-awesome [\#49](https://github.com/knsv/mermaid/issues/49)
|
||||||
|
|
||||||
@@ -659,7 +659,7 @@ mermaid.run({
|
|||||||
- Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178)
|
- Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178)
|
||||||
- Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176)
|
- Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176)
|
||||||
- Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175)
|
- Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175)
|
||||||
- Problem with click event callback [\#174](https://github.com/knsv/mermaid/issues/174)
|
- Problem wit click event callback [\#174](https://github.com/knsv/mermaid/issues/174)
|
||||||
- How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170)
|
- How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170)
|
||||||
- it can not work [\#167](https://github.com/knsv/mermaid/issues/167)
|
- it can not work [\#167](https://github.com/knsv/mermaid/issues/167)
|
||||||
- UML Class diagram [\#154](https://github.com/knsv/mermaid/issues/154)
|
- UML Class diagram [\#154](https://github.com/knsv/mermaid/issues/154)
|
||||||
@@ -762,7 +762,7 @@ mermaid.run({
|
|||||||
- 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)
|
||||||
- Asymmetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82)
|
- Assymetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82)
|
||||||
- NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23)
|
- NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23)
|
||||||
- Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3)
|
- Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3)
|
||||||
|
|
||||||
@@ -908,7 +908,7 @@ mermaid.run({
|
|||||||
|
|
||||||
- Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30)
|
- Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30)
|
||||||
- Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25)
|
- Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25)
|
||||||
- Provide parse function in browser without `require`? [\#21](https://github.com/knsv/mermaid/issues/21)
|
- Provide parse function in browser widthout `require`? [\#21](https://github.com/knsv/mermaid/issues/21)
|
||||||
- Better label text support [\#18](https://github.com/knsv/mermaid/issues/18)
|
- Better label text support [\#18](https://github.com/knsv/mermaid/issues/18)
|
||||||
- Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8)
|
- Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8)
|
||||||
|
|
||||||
|
@@ -59,8 +59,8 @@ representative at an online or offline event.
|
|||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported to the community leaders responsible for enforcement at <security@mermaid.live>.
|
reported to the community leaders responsible for enforcement at security@mermaid.live
|
||||||
|
.
|
||||||
All complaints will be reviewed and investigated promptly and fairly.
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
./packages/mermaid/src/docs/community/contributing.md
|
|
76
CONTRIBUTING.md
Normal file
76
CONTRIBUTING.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Please read in detail about how to contribute documentation and code on the [Mermaid documentation site.](https://mermaid-js.github.io/mermaid/#/development)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Mermaid contribution cheat-sheet
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- [volta](https://volta.sh/) to manage node versions.
|
||||||
|
- [Node.js](https://nodejs.org/en/). `volta install node`
|
||||||
|
- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
|
||||||
|
|
||||||
|
## Development Installation
|
||||||
|
|
||||||
|
If you don't have direct access to push to mermaid repositories, make a fork first. Then clone. Or clone directly from mermaid-js:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone git@github.com:mermaid-js/mermaid.git
|
||||||
|
cd mermaid
|
||||||
|
```
|
||||||
|
|
||||||
|
Install required packages:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# npx is required for first install as volta support for pnpm is not added yet.
|
||||||
|
npx pnpm install
|
||||||
|
pnpm test # run unit tests
|
||||||
|
pnpm dev # starts a dev server
|
||||||
|
```
|
||||||
|
|
||||||
|
Open <http://localhost:9000> in your browser after starting the dev server.
|
||||||
|
You can also duplicate the `example.html` file in `demos/dev`, rename it and add your own mermaid code to it.
|
||||||
|
That will be served at <http://localhost:9000/dev/your-file-name.html>.
|
||||||
|
|
||||||
|
### Docker
|
||||||
|
|
||||||
|
If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./run install # npx pnpm install
|
||||||
|
./run test # pnpm test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run unit test
|
||||||
|
pnpm test
|
||||||
|
# Run unit test in watch mode
|
||||||
|
pnpm test:watch
|
||||||
|
# Run E2E test
|
||||||
|
pnpm e2e
|
||||||
|
# Debug E2E tests
|
||||||
|
pnpm dev
|
||||||
|
pnpm cypress:open # in another terminal
|
||||||
|
```
|
||||||
|
|
||||||
|
## Branch name format:
|
||||||
|
|
||||||
|
```text
|
||||||
|
[feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces]
|
||||||
|
```
|
||||||
|
|
||||||
|
eg: `feature/2945_state-diagram-new-arrow-florbs`, `bug/1123_fix_random_ugly_red_text`
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
Documentation is necessary for all non bugfix/refactoring changes.
|
||||||
|
|
||||||
|
Only make changes to files that are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs)
|
||||||
|
|
||||||
|
**_DO NOT CHANGE FILES IN `/docs`_**
|
||||||
|
|
||||||
|
[Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
@@ -1,2 +0,0 @@
|
|||||||
FROM node:20.11.0-alpine3.19 AS base
|
|
||||||
RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh -
|
|
49
README.md
49
README.md
@@ -15,14 +15,11 @@ Generate diagrams from markdown-like text.
|
|||||||
<a href="https://mermaid.live/"><b>Live Editor!</b></a>
|
<a href="https://mermaid.live/"><b>Live Editor!</b></a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/AgrbSrBer3" title="Discord invite">🙌 Join Us</a>
|
<a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE" title="Slack invite">🙌 Join Us</a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="./README.zh-CN.md">简体中文</a>
|
<a href="./README.zh-CN.md">简体中文</a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
|
||||||
Try Live Editor previews of future releases: <a href="https://develop.git.mermaid.live/" title="Try the mermaid version from the develop branch.">Develop</a> | <a href="https://next.git.mermaid.live/" title="Try the mermaid version from the next branch.">Next</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
@@ -33,8 +30,8 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai
|
|||||||
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
|
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
|
||||||
[](https://www.jsdelivr.com/package/npm/mermaid)
|
[](https://www.jsdelivr.com/package/npm/mermaid)
|
||||||
[](https://www.npmjs.com/package/mermaid)
|
[](https://www.npmjs.com/package/mermaid)
|
||||||
[](https://discord.gg/AgrbSrBer3)
|
[](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
||||||
[](https://twitter.com/mermaidjs_)
|
[](https://twitter.com/mermaidjs_)
|
||||||
|
|
||||||
<img src="./img/header.png" alt="" />
|
<img src="./img/header.png" alt="" />
|
||||||
|
|
||||||
@@ -44,22 +41,6 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai
|
|||||||
|
|
||||||
<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/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>
|
||||||
|
|
||||||
## Table of content
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Expand contents</summary>
|
|
||||||
|
|
||||||
- [About](#about)
|
|
||||||
- [Examples](#examples)
|
|
||||||
- [Release](#release)
|
|
||||||
- [Related projects](#related-projects)
|
|
||||||
- [Contributors](#contributors)
|
|
||||||
- [Security and safe diagrams](#security-and-safe-diagrams)
|
|
||||||
- [Reporting vulnerabilities](#reporting-vulnerabilities)
|
|
||||||
- [Appreciation](#appreciation)
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
## About
|
## About
|
||||||
|
|
||||||
<!-- <Main description> -->
|
<!-- <Main description> -->
|
||||||
@@ -74,12 +55,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/>
|
||||||
For video tutorials, visit our [Tutorials](./docs/ecosystem/tutorials.md) page.
|
[Tutorials](./docs/config/Tutorials.md) has video tutorials.
|
||||||
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations-community.md).
|
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/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/ecosystem/integrations-community.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/ecosystem/integrations.md).
|
||||||
|
|
||||||
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/intro/getting-started.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/ecosystem/tutorials.md).
|
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/intro/n00b-gettingStarted.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md).
|
||||||
|
|
||||||
In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests.
|
In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests.
|
||||||
|
|
||||||
@@ -184,7 +165,13 @@ class Class10 {
|
|||||||
int id
|
int id
|
||||||
size()
|
size()
|
||||||
}
|
}
|
||||||
|
namespace Namespace01 {
|
||||||
|
class Class11
|
||||||
|
class Class12 {
|
||||||
|
int id
|
||||||
|
size()
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
@@ -204,7 +191,13 @@ class Class10 {
|
|||||||
int id
|
int id
|
||||||
size()
|
size()
|
||||||
}
|
}
|
||||||
|
namespace Namespace01 {
|
||||||
|
class Class11
|
||||||
|
class Class12 {
|
||||||
|
int id
|
||||||
|
size()
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### State diagram [<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkEFvgzAMhf8K8nEqpYSNthx22Xbcqcexg0sCiZQQlDhIFeK_L8A6TfXp6fOz9ewJGssFVOAJSbwr7ByadGR1n8T6evpO0vQ1uZDSekOrXGFsPqJPO6q-2-imH8f_0TeHXm50lfelsAMjnEHFY6xpMdRAUhhRQxUlFy0GTTXU_RytYeAx-AdXZB1ULWovdoCB7OXWN1CRC-Ju-r3uz6UtchGHJqDbsPygU57iysb2reoWHpyOWBINvsqypb3vFMlw3TfWZF5xiY7keC6zkpUnZIUojwW-FAVvrvn51LLnvOXHQ84Q5nn-AVtLcwk">live editor</a>]
|
### State diagram [<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkEFvgzAMhf8K8nEqpYSNthx22Xbcqcexg0sCiZQQlDhIFeK_L8A6TfXp6fOz9ewJGssFVOAJSbwr7ByadGR1n8T6evpO0vQ1uZDSekOrXGFsPqJPO6q-2-imH8f_0TeHXm50lfelsAMjnEHFY6xpMdRAUhhRQxUlFy0GTTXU_RytYeAx-AdXZB1ULWovdoCB7OXWN1CRC-Ju-r3uz6UtchGHJqDbsPygU57iysb2reoWHpyOWBINvsqypb3vFMlw3TfWZF5xiY7keC6zkpUnZIUojwW-FAVvrvn51LLnvOXHQ84Q5nn-AVtLcwk">live editor</a>]
|
||||||
|
@@ -12,19 +12,15 @@ Mermaid
|
|||||||
<p>
|
<p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://mermaid.live/"><b>实时编辑器!</b></a>
|
<a href="https://mermaid.live/"><b>Live Editor!</b></a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/AgrbSrBer3" title="Discord invite">🙌 加入我们</a>
|
<a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE" title="Slack invite">🙌 加入我们</a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="./README.md">English</a>
|
<a href="./README.md">English</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
尝试未来版本的实时编辑器预览: <a href="https://develop.git.mermaid.live/" title="尝试来自develop分支的mermaid版本。">Develop</a> | <a href="https://next.git.mermaid.live/" title="尝试来自next分支的mermaid版本。">Next</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
@@ -34,8 +30,8 @@ Mermaid
|
|||||||
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
|
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
|
||||||
[](https://www.jsdelivr.com/package/npm/mermaid)
|
[](https://www.jsdelivr.com/package/npm/mermaid)
|
||||||
[](https://www.npmjs.com/package/mermaid)
|
[](https://www.npmjs.com/package/mermaid)
|
||||||
[](https://discord.gg/AgrbSrBer3)
|
[](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
||||||
[](https://twitter.com/mermaidjs_)
|
[](https://twitter.com/mermaidjs_)
|
||||||
|
|
||||||
<img src="./img/header.png" alt="" />
|
<img src="./img/header.png" alt="" />
|
||||||
|
|
||||||
@@ -57,9 +53,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/ecosystem/tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations-community.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。
|
你可以访问 [教程](./docs/config/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。
|
||||||
|
|
||||||
如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/intro/getting-started.md), [用法](./docs/config/usage.md) 和 [教程](./docs/ecosystem/tutorials.md).
|
如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/intro/n00b-gettingStarted.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md).
|
||||||
|
|
||||||
<!-- </Main description> -->
|
<!-- </Main description> -->
|
||||||
|
|
||||||
|
19
applitools.config.js
Normal file
19
applitools.config.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||||
|
const { defineConfig } = require('cypress');
|
||||||
|
|
||||||
|
module.exports = defineConfig({
|
||||||
|
testConcurrency: 1,
|
||||||
|
browser: [
|
||||||
|
// Add browsers with different viewports
|
||||||
|
// { width: 800, height: 600, name: 'chrome' },
|
||||||
|
// { width: 700, height: 500, name: 'firefox' },
|
||||||
|
// { width: 1600, height: 1200, name: 'ie11' },
|
||||||
|
// { width: 1024, height: 768, name: 'edgechromium' },
|
||||||
|
// { width: 800, height: 600, name: 'safari' },
|
||||||
|
// // Add mobile emulation devices in Portrait mode
|
||||||
|
// { deviceName: 'iPhone X', screenOrientation: 'portrait' },
|
||||||
|
// { deviceName: 'Pixel 2', screenOrientation: 'portrait' },
|
||||||
|
],
|
||||||
|
// set batch name to the configuration
|
||||||
|
// batchName: `Mermaid ${process.env.APPLI_BRANCH ?? "'no APPLI_BRANCH set'"}`,
|
||||||
|
});
|
12
cSpell.json
12
cSpell.json
@@ -22,13 +22,10 @@
|
|||||||
"brkt",
|
"brkt",
|
||||||
"brolin",
|
"brolin",
|
||||||
"brotli",
|
"brotli",
|
||||||
"catmull",
|
|
||||||
"città",
|
"città",
|
||||||
"classdef",
|
"classdef",
|
||||||
"codedoc",
|
"codedoc",
|
||||||
"codemia",
|
|
||||||
"colour",
|
"colour",
|
||||||
"colours",
|
|
||||||
"commitlint",
|
"commitlint",
|
||||||
"cpettitt",
|
"cpettitt",
|
||||||
"customizability",
|
"customizability",
|
||||||
@@ -41,10 +38,7 @@
|
|||||||
"docsy",
|
"docsy",
|
||||||
"doku",
|
"doku",
|
||||||
"dompurify",
|
"dompurify",
|
||||||
"dont",
|
|
||||||
"doublecircle",
|
|
||||||
"edgechromium",
|
"edgechromium",
|
||||||
"elems",
|
|
||||||
"elkjs",
|
"elkjs",
|
||||||
"elle",
|
"elle",
|
||||||
"faber",
|
"faber",
|
||||||
@@ -103,7 +97,6 @@
|
|||||||
"pathe",
|
"pathe",
|
||||||
"pbrolin",
|
"pbrolin",
|
||||||
"phpbb",
|
"phpbb",
|
||||||
"pixelmatch",
|
|
||||||
"plantuml",
|
"plantuml",
|
||||||
"playfair",
|
"playfair",
|
||||||
"pnpm",
|
"pnpm",
|
||||||
@@ -126,7 +119,6 @@
|
|||||||
"sidharth",
|
"sidharth",
|
||||||
"sidharthv",
|
"sidharthv",
|
||||||
"sphinxcontrib",
|
"sphinxcontrib",
|
||||||
"ssim",
|
|
||||||
"startx",
|
"startx",
|
||||||
"starty",
|
"starty",
|
||||||
"statediagram",
|
"statediagram",
|
||||||
@@ -160,11 +152,9 @@
|
|||||||
"vitepress",
|
"vitepress",
|
||||||
"vueuse",
|
"vueuse",
|
||||||
"xlink",
|
"xlink",
|
||||||
"xychart",
|
|
||||||
"yash",
|
"yash",
|
||||||
"yokozuna",
|
"yokozuna",
|
||||||
"zenuml",
|
"zenuml"
|
||||||
"zune"
|
|
||||||
],
|
],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{ "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" },
|
{ "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" },
|
||||||
|
24
cypress.config.cjs
Normal file
24
cypress.config.cjs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||||
|
|
||||||
|
const { defineConfig } = require('cypress');
|
||||||
|
const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin');
|
||||||
|
const coverage = require('@cypress/code-coverage/task');
|
||||||
|
|
||||||
|
module.exports = defineConfig({
|
||||||
|
projectId: 'n2sma2',
|
||||||
|
e2e: {
|
||||||
|
specPattern: 'cypress/integration/**/*.{js,jsx,ts,tsx}',
|
||||||
|
setupNodeEvents(on, config) {
|
||||||
|
coverage(on, config);
|
||||||
|
addMatchImageSnapshotPlugin(on, config);
|
||||||
|
// copy any needed variables from process.env to config.env
|
||||||
|
config.env.useAppli = process.env.USE_APPLI ? true : false;
|
||||||
|
|
||||||
|
// do not forget to return the changed config object!
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
video: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
require('@applitools/eyes-cypress')(module);
|
@@ -1,30 +0,0 @@
|
|||||||
import { defineConfig } from 'cypress';
|
|
||||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin';
|
|
||||||
import coverage from '@cypress/code-coverage/task';
|
|
||||||
import eyesPlugin from '@applitools/eyes-cypress';
|
|
||||||
export default eyesPlugin(
|
|
||||||
defineConfig({
|
|
||||||
projectId: 'n2sma2',
|
|
||||||
viewportWidth: 1440,
|
|
||||||
viewportHeight: 1024,
|
|
||||||
e2e: {
|
|
||||||
specPattern: 'cypress/integration/**/*.{js,ts}',
|
|
||||||
setupNodeEvents(on, config) {
|
|
||||||
coverage(on, config);
|
|
||||||
on('before:browser:launch', (browser, launchOptions) => {
|
|
||||||
if (browser.name === 'chrome' && browser.isHeadless) {
|
|
||||||
launchOptions.args.push('--window-size=1440,1024', '--force-device-scale-factor=1');
|
|
||||||
}
|
|
||||||
return launchOptions;
|
|
||||||
});
|
|
||||||
addMatchImageSnapshotPlugin(on, config);
|
|
||||||
// copy any needed variables from process.env to config.env
|
|
||||||
config.env.useAppli = process.env.USE_APPLI ? true : false;
|
|
||||||
|
|
||||||
// do not forget to return the changed config object!
|
|
||||||
return config;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
video: false,
|
|
||||||
})
|
|
||||||
);
|
|
@@ -10,7 +10,7 @@ interface CypressConfig {
|
|||||||
type CypressMermaidConfig = MermaidConfig & CypressConfig;
|
type CypressMermaidConfig = MermaidConfig & CypressConfig;
|
||||||
|
|
||||||
interface CodeObject {
|
interface CodeObject {
|
||||||
code: string | string[];
|
code: string;
|
||||||
mermaid: CypressMermaidConfig;
|
mermaid: CypressMermaidConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18,14 +18,10 @@ const utf8ToB64 = (str: string): string => {
|
|||||||
return Buffer.from(decodeURIComponent(encodeURIComponent(str))).toString('base64');
|
return Buffer.from(decodeURIComponent(encodeURIComponent(str))).toString('base64');
|
||||||
};
|
};
|
||||||
|
|
||||||
const batchId: string =
|
const batchId: string = 'mermaid-batch-' + Cypress.env('CYPRESS_COMMIT') || Date.now().toString();
|
||||||
'mermaid-batch-' +
|
|
||||||
(Cypress.env('useAppli')
|
|
||||||
? Date.now().toString()
|
|
||||||
: Cypress.env('CYPRESS_COMMIT') || Date.now().toString());
|
|
||||||
|
|
||||||
export const mermaidUrl = (
|
export const mermaidUrl = (
|
||||||
graphStr: string | string[],
|
graphStr: string,
|
||||||
options: CypressMermaidConfig,
|
options: CypressMermaidConfig,
|
||||||
api: boolean
|
api: boolean
|
||||||
): string => {
|
): string => {
|
||||||
@@ -52,21 +48,29 @@ export const imgSnapshotTest = (
|
|||||||
api = false,
|
api = false,
|
||||||
validation?: any
|
validation?: any
|
||||||
): void => {
|
): void => {
|
||||||
const options: CypressMermaidConfig = {
|
cy.log(JSON.stringify(_options));
|
||||||
..._options,
|
const options: CypressMermaidConfig = Object.assign(_options);
|
||||||
fontFamily: _options.fontFamily || 'courier',
|
if (!options.fontFamily) {
|
||||||
// @ts-ignore TODO: Fix type of fontSize
|
options.fontFamily = 'courier';
|
||||||
fontSize: _options.fontSize || '16px',
|
}
|
||||||
sequence: {
|
if (!options.sequence) {
|
||||||
...(_options.sequence || {}),
|
options.sequence = {};
|
||||||
actorFontFamily: 'courier',
|
}
|
||||||
noteFontFamily:
|
if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) {
|
||||||
_options.sequence && _options.sequence.noteFontFamily
|
options.sequence.actorFontFamily = 'courier';
|
||||||
? _options.sequence.noteFontFamily
|
}
|
||||||
: 'courier',
|
if (options.sequence && !options.sequence.noteFontFamily) {
|
||||||
messageFontFamily: 'courier',
|
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 = 16;
|
||||||
|
}
|
||||||
|
|
||||||
const url: string = mermaidUrl(graphStr, options, api);
|
const url: string = mermaidUrl(graphStr, options, api);
|
||||||
openURLAndVerifyRendering(url, options, validation);
|
openURLAndVerifyRendering(url, options, validation);
|
||||||
@@ -74,15 +78,16 @@ export const imgSnapshotTest = (
|
|||||||
|
|
||||||
export const urlSnapshotTest = (
|
export const urlSnapshotTest = (
|
||||||
url: string,
|
url: string,
|
||||||
options: CypressMermaidConfig,
|
_options: CypressMermaidConfig,
|
||||||
_api = false,
|
_api = false,
|
||||||
validation?: any
|
validation?: any
|
||||||
): void => {
|
): void => {
|
||||||
|
const options: CypressMermaidConfig = Object.assign(_options);
|
||||||
openURLAndVerifyRendering(url, options, validation);
|
openURLAndVerifyRendering(url, options, validation);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const renderGraph = (
|
export const renderGraph = (
|
||||||
graphStr: string | string[],
|
graphStr: string,
|
||||||
options: CypressMermaidConfig = {},
|
options: CypressMermaidConfig = {},
|
||||||
api = false
|
api = false
|
||||||
): void => {
|
): void => {
|
||||||
|
@@ -117,6 +117,7 @@ describe('Configuration', () => {
|
|||||||
});
|
});
|
||||||
it('should not taint the initial configuration when using multiple directives', () => {
|
it('should not taint the initial configuration when using multiple directives', () => {
|
||||||
const url = 'http://localhost:9000/regression/issue-1874.html';
|
const url = 'http://localhost:9000/regression/issue-1874.html';
|
||||||
|
cy.viewport(1440, 1024);
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
|
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
|
@@ -1,12 +1,14 @@
|
|||||||
describe('Rerendering', () => {
|
describe('Rerendering', () => {
|
||||||
it('should be able to render after an error has occurred', () => {
|
it('should be able to render after an error has occurred', () => {
|
||||||
const url = 'http://localhost:9000/render-after-error.html';
|
const url = 'http://localhost:9000/render-after-error.html';
|
||||||
|
cy.viewport(1440, 1024);
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
cy.get('#graphDiv').should('exist');
|
cy.get('#graphDiv').should('exist');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to render and rerender a graph via API', () => {
|
it('should be able to render and rerender a graph via API', () => {
|
||||||
const url = 'http://localhost:9000/rerender.html';
|
const url = 'http://localhost:9000/rerender.html';
|
||||||
|
cy.viewport(1440, 1024);
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
cy.get('#graph [id^=flowchart-A]').should('have.text', 'XMas');
|
cy.get('#graph [id^=flowchart-A]').should('have.text', 'XMas');
|
||||||
|
|
||||||
|
@@ -132,9 +132,4 @@ describe('XSS', () => {
|
|||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
cy.get('#the-malware').should('not.exist');
|
cy.get('#the-malware').should('not.exist');
|
||||||
});
|
});
|
||||||
it('should sanitize backticks in class names properly', () => {
|
|
||||||
cy.visit('http://localhost:9000/xss24.html');
|
|
||||||
cy.wait(1000);
|
|
||||||
cy.get('#the-malware').should('not.exist');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -1,386 +0,0 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util';
|
|
||||||
/* eslint-disable no-useless-escape */
|
|
||||||
describe('Block diagram', () => {
|
|
||||||
it('BL1: should calculate the block widths', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 2
|
|
||||||
block
|
|
||||||
id2["I am a wide one"]
|
|
||||||
id1
|
|
||||||
end
|
|
||||||
id["Next row"]
|
|
||||||
`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL2: should handle colums statement in sub-blocks', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
id1["Hello"]
|
|
||||||
block
|
|
||||||
columns 3
|
|
||||||
id2["to"]
|
|
||||||
id3["the"]
|
|
||||||
id4["World"]
|
|
||||||
id5["World"]
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL3: should align block widths and handle colums statement in sub-blocks', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
block
|
|
||||||
columns 1
|
|
||||||
id1
|
|
||||||
id2
|
|
||||||
id2.1
|
|
||||||
end
|
|
||||||
id3
|
|
||||||
id4
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL4: should align block widths and handle colums statements in deeper sub-blocks then 1 level', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 1
|
|
||||||
block
|
|
||||||
columns 1
|
|
||||||
block
|
|
||||||
columns 3
|
|
||||||
id1
|
|
||||||
id2
|
|
||||||
id2.1(("XYZ"))
|
|
||||||
end
|
|
||||||
id48
|
|
||||||
end
|
|
||||||
id3
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL5: should align block widths and handle colums statements in deeper sub-blocks then 1 level (alt)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 1
|
|
||||||
block
|
|
||||||
id1
|
|
||||||
id2
|
|
||||||
block
|
|
||||||
columns 1
|
|
||||||
id3("Wider then")
|
|
||||||
id5(("id5"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
id4
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL6: should handle block arrows and spece statements', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
space:3
|
|
||||||
ida idb idc
|
|
||||||
id1 id2
|
|
||||||
blockArrowId<["Label"]>(right)
|
|
||||||
blockArrowId2<["Label"]>(left)
|
|
||||||
blockArrowId3<["Label"]>(up)
|
|
||||||
blockArrowId4<["Label"]>(down)
|
|
||||||
blockArrowId5<["Label"]>(x)
|
|
||||||
blockArrowId6<["Label"]>(y)
|
|
||||||
blockArrowId6<["Label"]>(x, down)
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL7: should handle different types of edges', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
A space:5
|
|
||||||
A --o B
|
|
||||||
A --> C
|
|
||||||
A --x D
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL8: should handle sub-blocks without columns statements', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 2
|
|
||||||
C A B
|
|
||||||
block
|
|
||||||
D
|
|
||||||
E
|
|
||||||
end
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL9: should handle edges from blocks in sub blocks to other blocks', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
B space
|
|
||||||
block
|
|
||||||
D
|
|
||||||
end
|
|
||||||
D --> B
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL10: should handle edges from composite blocks', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
B space
|
|
||||||
block BL
|
|
||||||
D
|
|
||||||
end
|
|
||||||
BL --> B
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL11: should handle edges to composite blocks', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
B space
|
|
||||||
block BL
|
|
||||||
D
|
|
||||||
end
|
|
||||||
B --> BL
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL12: edges should handle labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A
|
|
||||||
space
|
|
||||||
A -- "apa" --> E
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL13: should handle block arrows in different directions', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
space blockArrowId1<["down"]>(down) space
|
|
||||||
blockArrowId2<["right"]>(right) blockArrowId3<["Sync"]>(x, y) blockArrowId4<["left"]>(left)
|
|
||||||
space blockArrowId5<["up"]>(up) space
|
|
||||||
blockArrowId6<["x"]>(x) space blockArrowId7<["y"]>(y)
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL14: should style statements and class statements', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A
|
|
||||||
B
|
|
||||||
classDef blue fill:#66f,stroke:#333,stroke-width:2px;
|
|
||||||
class A blue
|
|
||||||
style B fill:#f9F,stroke:#333,stroke-width:4px
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL15: width alignment - D and E should share available space', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
block
|
|
||||||
D
|
|
||||||
E
|
|
||||||
end
|
|
||||||
db("This is the text in the box")
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL16: width alignment - C should be as wide as the composite block', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
block
|
|
||||||
A("This is the text")
|
|
||||||
B
|
|
||||||
end
|
|
||||||
C
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL16: width alignment - blocks shold be equal in width', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A("This is the text")
|
|
||||||
B
|
|
||||||
C
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL17: block types 1 - square, rounded and circle', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A["square"]
|
|
||||||
B("rounded")
|
|
||||||
C(("circle"))
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL18: block types 2 - odd, diamond and hexagon', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A>"rect_left_inv_arrow"]
|
|
||||||
B{"diamond"}
|
|
||||||
C{{"hexagon"}}
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL19: block types 3 - stadium', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A(["stadium"])
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL20: block types 4 - lean right, lean left, trapezoid and inv trapezoid', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A[/"lean right"/]
|
|
||||||
B[\"lean left"\]
|
|
||||||
C[/"trapezoid"\]
|
|
||||||
D[\"trapezoid alt"/]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL21: block types 1 - square, rounded and circle', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A["square"]
|
|
||||||
B("rounded")
|
|
||||||
C(("circle"))
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL22: sizing - it should be possible to make a block wider', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
A("rounded"):2
|
|
||||||
B:2
|
|
||||||
C
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL23: sizing - it should be possible to make a composite block wider', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
block:2
|
|
||||||
A
|
|
||||||
end
|
|
||||||
B
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('BL24: block in the middle with space on each side', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
space
|
|
||||||
middle["In the middle"]
|
|
||||||
space
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('BL25: space and an edge', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 5
|
|
||||||
A space B
|
|
||||||
A --x B
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('BL26: block sizes for regular blocks', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
a["A wide one"] b:2 c:2 d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('BL27: composite block with a set width - f should use the available space', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
a:3
|
|
||||||
block:e:3
|
|
||||||
f
|
|
||||||
end
|
|
||||||
g
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('BL23: composite block with a set width - f and g should split the available space', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`block-beta
|
|
||||||
columns 3
|
|
||||||
a:3
|
|
||||||
block:e:3
|
|
||||||
f
|
|
||||||
g
|
|
||||||
end
|
|
||||||
h
|
|
||||||
i
|
|
||||||
j
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@@ -386,6 +386,30 @@ describe('Class diagram V2', () => {
|
|||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('18: should handle the direction statement with LR', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
classDiagram
|
||||||
|
direction LR
|
||||||
|
class Student {
|
||||||
|
-idCard : IdCard
|
||||||
|
}
|
||||||
|
class IdCard{
|
||||||
|
-id : int
|
||||||
|
-name : string
|
||||||
|
}
|
||||||
|
class Bike{
|
||||||
|
-id : int
|
||||||
|
-name : string
|
||||||
|
}
|
||||||
|
Student "1" --o "1" IdCard : carries
|
||||||
|
Student "1" --o "1" Bike : rides
|
||||||
|
|
||||||
|
`,
|
||||||
|
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
||||||
|
);
|
||||||
|
});
|
||||||
it('17a: should handle the direction statement with BT', () => {
|
it('17a: should handle the direction statement with BT', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@@ -433,31 +457,7 @@ describe('Class diagram V2', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('18a: should handle the direction statement with LR', () => {
|
it('18: should render a simple class diagram with notes', () => {
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
classDiagram
|
|
||||||
direction LR
|
|
||||||
class Student {
|
|
||||||
-idCard : IdCard
|
|
||||||
}
|
|
||||||
class IdCard{
|
|
||||||
-id : int
|
|
||||||
-name : string
|
|
||||||
}
|
|
||||||
class Bike{
|
|
||||||
-id : int
|
|
||||||
-name : string
|
|
||||||
}
|
|
||||||
Student "1" --o "1" IdCard : carries
|
|
||||||
Student "1" --o "1" Bike : rides
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('18b: should render a simple class diagram with notes', () => {
|
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
classDiagram-v2
|
classDiagram-v2
|
||||||
@@ -562,23 +562,4 @@ class C13["With Città foreign language"]
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should render a simple class diagram with no members', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
classDiagram-v2
|
|
||||||
class Class10
|
|
||||||
`,
|
|
||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('should render a simple class diagram with style definition', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
classDiagram-v2
|
|
||||||
class Class10
|
|
||||||
style Class10 fill:#f9f,stroke:#333,stroke-width:4px
|
|
||||||
`,
|
|
||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -501,16 +501,4 @@ describe('Class diagram', () => {
|
|||||||
B : -methods()
|
B : -methods()
|
||||||
`);
|
`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle notes with anchor tag having target attribute', () => {
|
|
||||||
renderGraph(
|
|
||||||
`classDiagram
|
|
||||||
class test { }
|
|
||||||
note for test "<a href='https://mermaid.js.org/' target="_blank"><code>note about mermaid</code></a>"`
|
|
||||||
);
|
|
||||||
|
|
||||||
cy.get('svg').then((svg) => {
|
|
||||||
cy.get('a').should('have.attr', 'target', '_blank').should('have.attr', 'rel', 'noopener');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, urlSnapshotTest } from '../../helpers/util.ts';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Configuration and directives - nodes should be light blue', () => {
|
describe('Configuration and directives - nodes should be light blue', () => {
|
||||||
it('No config - use default', () => {
|
it('No config - use default', () => {
|
||||||
@@ -206,7 +206,8 @@ graph TD
|
|||||||
describe('when rendering several diagrams', () => {
|
describe('when rendering several diagrams', () => {
|
||||||
it('diagrams should not taint later diagrams', () => {
|
it('diagrams should not taint later diagrams', () => {
|
||||||
const url = 'http://localhost:9000/theme-directives.html';
|
const url = 'http://localhost:9000/theme-directives.html';
|
||||||
urlSnapshotTest(url, {});
|
cy.visit(url);
|
||||||
|
cy.matchImageSnapshot('conf-and-directives.spec-when-rendering-several-diagrams-diagram-1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
12
cypress/integration/rendering/debug.spec.js
Normal file
12
cypress/integration/rendering/debug.spec.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
|
describe('Flowchart', () => {
|
||||||
|
it('34: testing the label width in percy', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`graph TD
|
||||||
|
A[Christmas]
|
||||||
|
`,
|
||||||
|
{ theme: 'forest', fontFamily: '"Noto Sans SC", sans-serif' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
@@ -305,21 +305,4 @@ ORDER ||--|{ LINE-ITEM : contains
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render entities with entity name aliases', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
erDiagram
|
|
||||||
p[Person] {
|
|
||||||
varchar(64) firstName
|
|
||||||
varchar(64) lastName
|
|
||||||
}
|
|
||||||
c["Customer Account"] {
|
|
||||||
varchar(128) email
|
|
||||||
}
|
|
||||||
p ||--o| c : has
|
|
||||||
`,
|
|
||||||
{ logLevel: 1 }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -729,37 +729,6 @@ A ~~~ B
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('5064: Should render when subgraph child has links to outside node and subgraph', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart TB
|
|
||||||
Out --> In
|
|
||||||
subgraph Sub
|
|
||||||
In
|
|
||||||
end
|
|
||||||
Sub --> In`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('5059: Should render when subgraph contains only subgraphs, has link to outside and itself is part of a link', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart
|
|
||||||
|
|
||||||
subgraph Main
|
|
||||||
subgraph Child1
|
|
||||||
Node1
|
|
||||||
Node2
|
|
||||||
end
|
|
||||||
subgraph Child2
|
|
||||||
Node3
|
|
||||||
Node4
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Main --> Out1
|
|
||||||
Child2 --> Out2`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Markdown strings flowchart (#4220)', () => {
|
describe('Markdown strings flowchart (#4220)', () => {
|
||||||
describe('html labels', () => {
|
describe('html labels', () => {
|
||||||
it('With styling and classes', () => {
|
it('With styling and classes', () => {
|
||||||
@@ -905,93 +874,4 @@ end
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('Subgraph title margins', () => {
|
|
||||||
it('Should render subgraphs with title margins set (LR)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart 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
|
|
||||||
`,
|
|
||||||
{ flowchart: { subGraphTitleMargin: { top: 10, bottom: 5 } } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('Should render subgraphs with title margins set (TD)', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart TD
|
|
||||||
|
|
||||||
subgraph TOP
|
|
||||||
direction LR
|
|
||||||
subgraph B1
|
|
||||||
direction RL
|
|
||||||
i1 -->f1
|
|
||||||
end
|
|
||||||
subgraph B2
|
|
||||||
direction BT
|
|
||||||
i2 -->f2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
A --> TOP --> B
|
|
||||||
B1 --> B2
|
|
||||||
`,
|
|
||||||
{ flowchart: { subGraphTitleMargin: { top: 8, bottom: 16 } } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('Should render subgraphs with title margins set (LR) and htmlLabels set to false', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart 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: false,
|
|
||||||
flowchart: { htmlLabels: false, subGraphTitleMargin: { top: 10, bottom: 5 } },
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('Should render subgraphs with title margins and edge labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`flowchart LR
|
|
||||||
|
|
||||||
subgraph TOP
|
|
||||||
direction TB
|
|
||||||
subgraph B1
|
|
||||||
direction RL
|
|
||||||
i1 --lb1-->f1
|
|
||||||
end
|
|
||||||
subgraph B2
|
|
||||||
direction BT
|
|
||||||
i2 --lb2-->f2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
A --lb3--> TOP --lb4--> B
|
|
||||||
B1 --lb5--> B2
|
|
||||||
`,
|
|
||||||
{ flowchart: { subGraphTitleMargin: { top: 10, bottom: 5 } } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -245,10 +245,7 @@ describe('Gantt diagram', () => {
|
|||||||
const style = svg.attr('style');
|
const style = svg.attr('style');
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
||||||
expect(maxWidthValue).to.be.within(
|
expect(maxWidthValue).to.be.within(984 * 0.95, 984 * 1.05);
|
||||||
Cypress.config().viewportWidth * 0.95,
|
|
||||||
Cypress.config().viewportWidth * 1.05
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -288,11 +285,11 @@ describe('Gantt diagram', () => {
|
|||||||
{ gantt: { useMaxWidth: false } }
|
{ gantt: { useMaxWidth: false } }
|
||||||
);
|
);
|
||||||
cy.get('svg').should((svg) => {
|
cy.get('svg').should((svg) => {
|
||||||
|
// const height = parseFloat(svg.attr('height'));
|
||||||
const width = parseFloat(svg.attr('width'));
|
const width = parseFloat(svg.attr('width'));
|
||||||
expect(width).to.be.within(
|
// use within because the absolute value can be slightly different depending on the environment ±5%
|
||||||
Cypress.config().viewportWidth * 0.95,
|
// expect(height).to.be.within(484 * 0.95, 484 * 1.05);
|
||||||
Cypress.config().viewportWidth * 1.05
|
expect(width).to.be.within(984 * 0.95, 984 * 1.05);
|
||||||
);
|
|
||||||
expect(svg).to.not.have.attr('style');
|
expect(svg).to.not.have.attr('style');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -333,48 +330,6 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 2 milliseconds', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat SSS
|
|
||||||
axisFormat %Lms
|
|
||||||
tickInterval 2millisecond
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 000, 6ms
|
|
||||||
Another task : after a1, 6ms
|
|
||||||
section Another
|
|
||||||
Task in sec : a2, 006, 3ms
|
|
||||||
another task : 3ms
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 2 seconds', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title A Gantt Diagram
|
|
||||||
dateFormat ss
|
|
||||||
axisFormat %Ss
|
|
||||||
tickInterval 2second
|
|
||||||
excludes weekends
|
|
||||||
|
|
||||||
section Section
|
|
||||||
A task : a1, 00, 6s
|
|
||||||
Another task : after a1, 6s
|
|
||||||
section Another
|
|
||||||
Task in sec : 06, 3s
|
|
||||||
another task : 3s
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 15 minutes', () => {
|
it('should render a gantt diagram with tick is 15 minutes', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@@ -523,32 +478,6 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: fix it
|
|
||||||
//
|
|
||||||
// This test is skipped deliberately
|
|
||||||
// because it fails and blocks our development pipeline
|
|
||||||
// It was added as an attempt to fix gantt performance issues
|
|
||||||
//
|
|
||||||
// https://github.com/mermaid-js/mermaid/issues/3274
|
|
||||||
//
|
|
||||||
it.skip('should render a gantt diagram with very large intervals, skipping excludes if interval > 5 years', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gantt
|
|
||||||
title A long Gantt Diagram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
axisFormat %m-%d
|
|
||||||
tickInterval 1day
|
|
||||||
excludes weekends
|
|
||||||
section Section
|
|
||||||
A task : a1, 9999-10-01, 30d
|
|
||||||
Another task : after a1, 20d
|
|
||||||
section Another
|
|
||||||
Task in sec : 2022-10-20, 12d
|
|
||||||
another task : 24d
|
|
||||||
`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render when compact is true', () => {
|
it('should render when compact is true', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@@ -583,106 +512,4 @@ describe('Gantt diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should render when there's a semicolon in the title", () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title ;Gantt With a Semicolon in the Title
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section Section
|
|
||||||
A task :a1, 2014-01-01, 30d
|
|
||||||
Another task :after a1 , 20d
|
|
||||||
section Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should render when there's a semicolon in a section is true", () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title Gantt Digram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section ;Section With a Semicolon
|
|
||||||
A task :a1, 2014-01-01, 30d
|
|
||||||
Another task :after a1 , 20d
|
|
||||||
section Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should render when there's a semicolon in the task data", () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title Gantt Digram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section Section
|
|
||||||
;A task with a semiclon :a1, 2014-01-01, 30d
|
|
||||||
Another task :after a1 , 20d
|
|
||||||
section Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should render when there's a hashtag in the title", () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title #Gantt With a Hashtag in the Title
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section Section
|
|
||||||
A task :a1, 2014-01-01, 30d
|
|
||||||
Another task :after a1 , 20d
|
|
||||||
section Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should render when there's a hashtag in a section is true", () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title Gantt Digram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section #Section With a Hashtag
|
|
||||||
A task :a1, 2014-01-01, 30d
|
|
||||||
Another task :after a1 , 20d
|
|
||||||
section Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should render when there's a hashtag in the task data", () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
title Gantt Digram
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section Section
|
|
||||||
#A task with a hashtag :a1, 2014-01-01, 30d
|
|
||||||
Another task :after a1 , 20d
|
|
||||||
section Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -26,7 +26,7 @@ describe('Git Graph diagram', () => {
|
|||||||
`gitGraph
|
`gitGraph
|
||||||
commit id: "Normal Commit"
|
commit id: "Normal Commit"
|
||||||
commit id: "Reverse Commit" type: REVERSE
|
commit id: "Reverse Commit" type: REVERSE
|
||||||
commit id: "Highlight Commit" type: HIGHLIGHT
|
commit id: "Hightlight Commit" type: HIGHLIGHT
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -36,7 +36,7 @@ describe('Git Graph diagram', () => {
|
|||||||
`gitGraph
|
`gitGraph
|
||||||
commit id: "Normal Commit with tag" tag: "v1.0.0"
|
commit id: "Normal Commit with tag" tag: "v1.0.0"
|
||||||
commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1"
|
commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1"
|
||||||
commit id: "Highlight Commit" type: HIGHLIGHT tag: "8.8.4"
|
commit id: "Hightlight Commit" type: HIGHLIGHT tag: "8.8.4"
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -102,7 +102,7 @@ describe('Git Graph diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('8: should render a simple gitgraph with more than 8 branches & overriding variables', () => {
|
it('8: should render a simple gitgraph with more than 8 branchs & overriding variables', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
||||||
'gitBranchLabel0': '#ffffff',
|
'gitBranchLabel0': '#ffffff',
|
||||||
@@ -358,7 +358,7 @@ gitGraph
|
|||||||
`gitGraph TB:
|
`gitGraph TB:
|
||||||
commit id: "Normal Commit"
|
commit id: "Normal Commit"
|
||||||
commit id: "Reverse Commit" type: REVERSE
|
commit id: "Reverse Commit" type: REVERSE
|
||||||
commit id: "Highlight Commit" type: HIGHLIGHT
|
commit id: "Hightlight Commit" type: HIGHLIGHT
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -368,7 +368,7 @@ gitGraph
|
|||||||
`gitGraph TB:
|
`gitGraph TB:
|
||||||
commit id: "Normal Commit with tag" tag: "v1.0.0"
|
commit id: "Normal Commit with tag" tag: "v1.0.0"
|
||||||
commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1"
|
commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1"
|
||||||
commit id: "Highlight Commit" type: HIGHLIGHT tag: "8.8.4"
|
commit id: "Hightlight Commit" type: HIGHLIGHT tag: "8.8.4"
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -434,7 +434,7 @@ gitGraph
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('22: should render a simple gitgraph with more than 8 branches & overriding variables | Vertical Branch', () => {
|
it('22: should render a simple gitgraph with more than 8 branchs & overriding variables | Vertical Branch', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
||||||
'gitBranchLabel0': '#ffffff',
|
'gitBranchLabel0': '#ffffff',
|
||||||
@@ -701,246 +701,4 @@ gitGraph TB:
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('34: should render a simple gitgraph with two branches from same commit', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
branch feature-001
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout main
|
|
||||||
branch feature-002
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout feature-001
|
|
||||||
merge feature-002
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('35: should render a simple gitgraph with two branches from same commit | Vertical Branch', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph TB:
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
branch feature-001
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout main
|
|
||||||
branch feature-002
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout feature-001
|
|
||||||
merge feature-002
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('36: should render GitGraph with branch that is not used immediately', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph LR:
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
branch x
|
|
||||||
checkout main
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout x
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout main
|
|
||||||
merge x
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('37: should render GitGraph with branch that is not used immediately | Vertical Branch', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph TB:
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
branch x
|
|
||||||
checkout main
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout x
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout main
|
|
||||||
merge x
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('38: should render GitGraph with branch and sub-branch neither of which used immediately', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph LR:
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
branch x
|
|
||||||
checkout main
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout x
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout main
|
|
||||||
merge x
|
|
||||||
checkout x
|
|
||||||
branch y
|
|
||||||
checkout x
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout y
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout x
|
|
||||||
merge y
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('39: should render GitGraph with branch and sub-branch neither of which used immediately | Vertical Branch', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph TB:
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
branch x
|
|
||||||
checkout main
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout x
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout main
|
|
||||||
merge x
|
|
||||||
checkout x
|
|
||||||
branch y
|
|
||||||
checkout x
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout y
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout x
|
|
||||||
merge y
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('40: should render a simple gitgraph with cherry pick merge commit', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph
|
|
||||||
commit id: "ZERO"
|
|
||||||
branch feature
|
|
||||||
branch release
|
|
||||||
checkout feature
|
|
||||||
commit id: "A"
|
|
||||||
commit id: "B"
|
|
||||||
checkout main
|
|
||||||
merge feature id: "M"
|
|
||||||
checkout release
|
|
||||||
cherry-pick id: "M" parent:"B"`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('41: should render default GitGraph with parallelCommits set to false', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
branch develop
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout main
|
|
||||||
branch feature
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
commit id:"6-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"7-abcdefg"
|
|
||||||
commit id:"8-abcdefg"
|
|
||||||
`,
|
|
||||||
{ gitGraph: { parallelCommits: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('42: should render GitGraph with parallel commits', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
branch develop
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout main
|
|
||||||
branch feature
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
commit id:"6-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"7-abcdefg"
|
|
||||||
commit id:"8-abcdefg"
|
|
||||||
`,
|
|
||||||
{ gitGraph: { parallelCommits: true } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('43: should render GitGraph with parallel commits | Vertical Branch', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph TB:
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
branch develop
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout main
|
|
||||||
branch feature
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
commit id:"6-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"7-abcdefg"
|
|
||||||
commit id:"8-abcdefg"
|
|
||||||
`,
|
|
||||||
{ gitGraph: { parallelCommits: true } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('44: should render GitGraph with unconnected branches and no parallel commits', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph
|
|
||||||
branch dev
|
|
||||||
branch v2
|
|
||||||
branch feat
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout dev
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout v2
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"6-abcdefg"
|
|
||||||
`,
|
|
||||||
{ gitGraph: { parallelCommits: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('45: should render GitGraph with unconnected branches and parallel commits', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph
|
|
||||||
branch dev
|
|
||||||
branch v2
|
|
||||||
branch feat
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout dev
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout v2
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"6-abcdefg"
|
|
||||||
`,
|
|
||||||
{ gitGraph: { parallelCommits: true } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('46: should render GitGraph with unconnected branches and parallel commits | Vertical Branch', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`gitGraph TB:
|
|
||||||
branch dev
|
|
||||||
branch v2
|
|
||||||
branch feat
|
|
||||||
commit id:"1-abcdefg"
|
|
||||||
commit id:"2-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"3-abcdefg"
|
|
||||||
checkout dev
|
|
||||||
commit id:"4-abcdefg"
|
|
||||||
checkout v2
|
|
||||||
commit id:"5-abcdefg"
|
|
||||||
checkout main
|
|
||||||
commit id:"6-abcdefg"
|
|
||||||
`,
|
|
||||||
{ gitGraph: { parallelCommits: true } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
import { urlSnapshotTest } from '../../helpers/util.ts';
|
|
||||||
|
|
||||||
describe('Marker Unique IDs Per Diagram', () => {
|
|
||||||
it('should render a blue arrow tip in second digram', () => {
|
|
||||||
urlSnapshotTest('http://localhost:9000/marker_unique_id.html', {
|
|
||||||
logLevel: 1,
|
|
||||||
flowchart: { htmlLabels: false },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -44,7 +44,7 @@ describe('pie chart', () => {
|
|||||||
const style = svg.attr('style');
|
const style = svg.attr('style');
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
||||||
expect(maxWidthValue).to.be.within(590, 600); // depends on installed fonts: 596.2 on my PC, 597.5 on CI
|
expect(maxWidthValue).to.eq(984);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ describe('pie chart', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg').should((svg) => {
|
cy.get('svg').should((svg) => {
|
||||||
const width = parseFloat(svg.attr('width'));
|
const width = parseFloat(svg.attr('width'));
|
||||||
expect(width).to.be.within(590, 600); // depends on installed fonts: 596.2 on my PC, 597.5 on CI
|
expect(width).to.eq(984);
|
||||||
expect(svg).to.not.have.attr('style');
|
expect(svg).to.not.have.attr('style');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -160,70 +160,4 @@ describe('Quadrant Chart', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
it('should render x-axis labels in the center, if x-axis has two labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
quadrantChart
|
|
||||||
title Reach and engagement of campaigns
|
|
||||||
x-axis Low Reach --> High Reach
|
|
||||||
y-axis Low Engagement
|
|
||||||
quadrant-1 We should expand
|
|
||||||
quadrant-2 Need to promote
|
|
||||||
quadrant-3 Re-evaluate
|
|
||||||
quadrant-4 May be improved
|
|
||||||
Campaign A: [0.3, 0.6]
|
|
||||||
Campaign B: [0.45, 0.23]
|
|
||||||
Campaign C: [0.57, 0.69]
|
|
||||||
Campaign D: [0.78, 0.34]
|
|
||||||
Campaign E: [0.40, 0.34]
|
|
||||||
Campaign F: [0.35, 0.78]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('should render y-axis labels in the center, if y-axis has two labels', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
quadrantChart
|
|
||||||
title Reach and engagement of campaigns
|
|
||||||
x-axis Low Reach
|
|
||||||
y-axis Low Engagement --> High Engagement
|
|
||||||
quadrant-1 We should expand
|
|
||||||
quadrant-2 Need to promote
|
|
||||||
quadrant-3 Re-evaluate
|
|
||||||
quadrant-4 May be improved
|
|
||||||
Campaign A: [0.3, 0.6]
|
|
||||||
Campaign B: [0.45, 0.23]
|
|
||||||
Campaign C: [0.57, 0.69]
|
|
||||||
Campaign D: [0.78, 0.34]
|
|
||||||
Campaign E: [0.40, 0.34]
|
|
||||||
Campaign F: [0.35, 0.78]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('should render both axes labels on the left and bottom, if both axes have only one label', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
quadrantChart
|
|
||||||
title Reach and engagement of campaigns
|
|
||||||
x-axis Reach -->
|
|
||||||
y-axis Engagement -->
|
|
||||||
quadrant-1 We should expand
|
|
||||||
quadrant-2 Need to promote
|
|
||||||
quadrant-3 Re-evaluate
|
|
||||||
quadrant-4 May be improved
|
|
||||||
Campaign A: [0.3, 0.6]
|
|
||||||
Campaign B: [0.45, 0.23]
|
|
||||||
Campaign C: [0.57, 0.69]
|
|
||||||
Campaign D: [0.78, 0.34]
|
|
||||||
Campaign E: [0.40, 0.34]
|
|
||||||
Campaign F: [0.35, 0.78]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -375,26 +375,6 @@ context('Sequence diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should have actor-top and actor-bottom classes on top and bottom actor box and symbol', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
sequenceDiagram
|
|
||||||
actor Bob
|
|
||||||
Alice->>Bob: Hi Bob
|
|
||||||
Bob->>Alice: Hi Alice
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('.actor').should('have.class', 'actor-top');
|
|
||||||
cy.get('.actor-man').should('have.class', 'actor-top');
|
|
||||||
cy.get('.actor.actor-top').should('not.have.class', 'actor-bottom');
|
|
||||||
cy.get('.actor-man.actor-top').should('not.have.class', 'actor-bottom');
|
|
||||||
|
|
||||||
cy.get('.actor').should('have.class', 'actor-bottom');
|
|
||||||
cy.get('.actor-man').should('have.class', 'actor-bottom');
|
|
||||||
cy.get('.actor.actor-bottom').should('not.have.class', 'actor-top');
|
|
||||||
cy.get('.actor-man.actor-bottom').should('not.have.class', 'actor-top');
|
|
||||||
});
|
|
||||||
it('should render long notes left of actor', () => {
|
it('should render long notes left of actor', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@@ -812,34 +792,6 @@ context('Sequence diagram', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
context('links', () => {
|
context('links', () => {
|
||||||
it('should support actor links', () => {
|
|
||||||
renderGraph(
|
|
||||||
`
|
|
||||||
sequenceDiagram
|
|
||||||
link Alice: Dashboard @ https://dashboard.contoso.com/alice
|
|
||||||
link Alice: Wiki @ https://wiki.contoso.com/alice
|
|
||||||
link John: Dashboard @ https://dashboard.contoso.com/john
|
|
||||||
link John: Wiki @ https://wiki.contoso.com/john
|
|
||||||
Alice->>John: Hello John<br/>
|
|
||||||
John-->>Alice: Great<br/><br/>day!
|
|
||||||
`,
|
|
||||||
{ securityLevel: 'loose' }
|
|
||||||
);
|
|
||||||
cy.get('#actor0_popup').should((popupMenu) => {
|
|
||||||
const style = popupMenu.attr('style');
|
|
||||||
expect(style).to.undefined;
|
|
||||||
});
|
|
||||||
cy.get('#root-0').click();
|
|
||||||
cy.get('#actor0_popup').should((popupMenu) => {
|
|
||||||
const style = popupMenu.attr('style');
|
|
||||||
expect(style).to.match(/^display: block;$/);
|
|
||||||
});
|
|
||||||
cy.get('#root-0').click();
|
|
||||||
cy.get('#actor0_popup').should((popupMenu) => {
|
|
||||||
const style = popupMenu.attr('style');
|
|
||||||
expect(style).to.match(/^display: none;$/);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
it('should support actor links and properties EXPERIMENTAL: USE WITH CAUTION', () => {
|
it('should support actor links and properties EXPERIMENTAL: USE WITH CAUTION', () => {
|
||||||
//Be aware that the syntax for "properties" is likely to be changed.
|
//Be aware that the syntax for "properties" is likely to be changed.
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@@ -978,36 +930,4 @@ context('Sequence diagram', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
context('render after error', () => {
|
|
||||||
it('should render diagram after fixing destroy participant error', () => {
|
|
||||||
cy.on('uncaught:exception', (err) => {
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
renderGraph([
|
|
||||||
`sequenceDiagram
|
|
||||||
Alice->>Bob: Hello Bob, how are you ?
|
|
||||||
Bob->>Alice: Fine, thank you. And you?
|
|
||||||
create participant Carl
|
|
||||||
Alice->>Carl: Hi Carl!
|
|
||||||
create actor D as Donald
|
|
||||||
Carl->>D: Hi!
|
|
||||||
destroy Carl
|
|
||||||
Alice-xCarl: We are too many
|
|
||||||
destroy Bo
|
|
||||||
Bob->>Alice: I agree`,
|
|
||||||
`sequenceDiagram
|
|
||||||
Alice->>Bob: Hello Bob, how are you ?
|
|
||||||
Bob->>Alice: Fine, thank you. And you?
|
|
||||||
create participant Carl
|
|
||||||
Alice->>Carl: Hi Carl!
|
|
||||||
create actor D as Donald
|
|
||||||
Carl->>D: Hi!
|
|
||||||
destroy Carl
|
|
||||||
Alice-xCarl: We are too many
|
|
||||||
destroy Bob
|
|
||||||
Bob->>Alice: I agree`,
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -57,7 +57,7 @@ describe('Timeline diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('5: should render a simple timeline with directive overridden colors', () => {
|
it('5: should render a simple timeline with directive overriden colors', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
` %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
` %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
||||||
'cScale0': '#ff0000',
|
'cScale0': '#ff0000',
|
||||||
|
@@ -1,322 +0,0 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
|
||||||
|
|
||||||
describe('XY Chart', () => {
|
|
||||||
it('should render the simplest possible chart', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
line [10, 30, 20]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Should render a complete chart', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('Should render a chart without title', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('y-axis title not required', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Should render a chart without y-axis with different range', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
|
|
||||||
line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('x axis title not required', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
|
|
||||||
line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Multiple plots can be rendered', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
line [23, 46, 77, 34]
|
|
||||||
line [45, 32, 33, 12]
|
|
||||||
bar [87, 54, 99, 85]
|
|
||||||
line [78, 88, 22, 4]
|
|
||||||
line [22, 29, 75, 33]
|
|
||||||
bar [52, 96, 35, 10]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Decimals and negative numbers are supported', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
xychart-beta
|
|
||||||
y-axis -2.4 --> 3.5
|
|
||||||
line [+1.3, .6, 2.4, -.34]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render spark line with "plotReservedSpacePercent"', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: dark
|
|
||||||
xyChart:
|
|
||||||
width: 200
|
|
||||||
height: 20
|
|
||||||
plotReservedSpacePercent: 100
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render spark bar without displaying other property', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: dark
|
|
||||||
xyChart:
|
|
||||||
width: 200
|
|
||||||
height: 20
|
|
||||||
xAxis:
|
|
||||||
showLabel: false
|
|
||||||
showTitle: false
|
|
||||||
showTick: false
|
|
||||||
showAxisLine: false
|
|
||||||
yAxis:
|
|
||||||
showLabel: false
|
|
||||||
showTitle: false
|
|
||||||
showTick: false
|
|
||||||
showAxisLine: false
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Should use all the config from directive', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
%%{init: {"xyChart": {"width": 1000, "height": 600, "titlePadding": 5, "titleFontSize": 10, "xAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "yAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "plotBorderWidth": 5, "chartOrientation": "horizontal", "plotReservedSpacePercent": 60 }}}%%
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Should use all the config from yaml', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: forest
|
|
||||||
xyChart:
|
|
||||||
width: 1000
|
|
||||||
height: 600
|
|
||||||
titlePadding: 5
|
|
||||||
titleFontSize: 10
|
|
||||||
xAxis:
|
|
||||||
labelFontSize: 20
|
|
||||||
labelPadding: 10
|
|
||||||
titleFontSize: 30
|
|
||||||
titlePadding: 20
|
|
||||||
tickLength: 10
|
|
||||||
tickWidth: 5
|
|
||||||
axisLineWidth: 5
|
|
||||||
yAxis:
|
|
||||||
labelFontSize: 20
|
|
||||||
labelPadding: 10
|
|
||||||
titleFontSize: 30
|
|
||||||
titlePadding: 20
|
|
||||||
tickLength: 10
|
|
||||||
tickWidth: 5
|
|
||||||
axisLineWidth: 5
|
|
||||||
chartOrientation: horizontal
|
|
||||||
plotReservedSpacePercent: 60
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render with show axis title false', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
xyChart:
|
|
||||||
xAxis:
|
|
||||||
showTitle: false
|
|
||||||
yAxis:
|
|
||||||
showTitle: false
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render with show axis label false', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
xyChart:
|
|
||||||
xAxis:
|
|
||||||
showLabel: false
|
|
||||||
yAxis:
|
|
||||||
showLabel: false
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render with show axis tick false', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
xyChart:
|
|
||||||
xAxis:
|
|
||||||
showTick: false
|
|
||||||
yAxis:
|
|
||||||
showTick: false
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render with show axis line false', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
xyChart:
|
|
||||||
xAxis:
|
|
||||||
showAxisLine: false
|
|
||||||
yAxis:
|
|
||||||
showAxisLine: false
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
it('Render all the theme color', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
themeVariables:
|
|
||||||
xyChart:
|
|
||||||
titleColor: "#ff0000"
|
|
||||||
backgroundColor: "#f0f8ff"
|
|
||||||
yAxisLabelColor: "#ee82ee"
|
|
||||||
yAxisTitleColor: "#7fffd4"
|
|
||||||
yAxisTickColor: "#87ceeb"
|
|
||||||
yAxisLineColor: "#ff6347"
|
|
||||||
xAxisLabelColor: "#7fffd4"
|
|
||||||
xAxisTitleColor: "#ee82ee"
|
|
||||||
xAxisTickColor: "#ff6347"
|
|
||||||
xAxisLineColor: "#87ceeb"
|
|
||||||
plotColorPalette: "#008000, #faba63"
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
});
|
|
File diff suppressed because one or more lines are too long
@@ -17,30 +17,24 @@
|
|||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
/* background: rgb(221, 208, 208); */
|
/* background: rgb(221, 208, 208); */
|
||||||
background: #333;
|
/* background:#333; */
|
||||||
font-family: 'Arial';
|
font-family: 'Arial';
|
||||||
/* font-size: 18px !important; */
|
/* font-size: 18px !important; */
|
||||||
}
|
}
|
||||||
h1 {
|
h1 {
|
||||||
color: grey;
|
color: grey;
|
||||||
}
|
}
|
||||||
.mermaid {
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
.mermaid2 {
|
.mermaid2 {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.mermaid svg {
|
.mermaid svg {
|
||||||
/* font-size: 18px !important; */
|
/* font-size: 18px !important; */
|
||||||
/* background-color: #efefef; */
|
background-color: #efefef;
|
||||||
background-color: #333;
|
background-image: radial-gradient(#fff 51%, transparent 91%),
|
||||||
background-image: radial-gradient(#333 51%, transparent 91%),
|
radial-gradient(#fff 51%, transparent 91%);
|
||||||
radial-gradient(#333 51%, transparent 91%);
|
|
||||||
background-size: 20px 20px;
|
background-size: 20px 20px;
|
||||||
background-position: 0 0, 10px 10px;
|
background-position: 0 0, 10px 10px;
|
||||||
background-repeat: repeat;
|
background-repeat: repeat;
|
||||||
border: 2px solid rgb(131, 142, 205);
|
|
||||||
}
|
}
|
||||||
.malware {
|
.malware {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@@ -64,192 +58,37 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
flowchart
|
||||||
blockArrowId<["Label"]>(right)
|
classDef mainCategories fill:#f9d5e5, stroke:#233d4d,stroke-width:2px, font-weight:bold;
|
||||||
blockArrowId2<["Label"]>(left)
|
CS(Customer Awareness Journey):::mainCategories
|
||||||
blockArrowId3<["Label"]>(up)
|
</pre
|
||||||
blockArrowId4<["Label"]>(down)
|
>
|
||||||
blockArrowId5<["Label"]>(x)
|
|
||||||
blockArrowId6<["Label"]>(y)
|
|
||||||
blockArrowId6<["Label"]>(x, down)
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
|
||||||
block:e:4
|
|
||||||
columns 2
|
|
||||||
f
|
|
||||||
g
|
|
||||||
end
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
block:e:4
|
|
||||||
columns 2
|
|
||||||
f
|
|
||||||
g
|
|
||||||
h
|
|
||||||
end
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 4
|
|
||||||
a b c d
|
|
||||||
block:e:4
|
|
||||||
columns 2
|
|
||||||
f
|
|
||||||
g
|
|
||||||
h
|
|
||||||
end
|
|
||||||
i:4
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
flowchart LR
|
|
||||||
X-- "y" -->z
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
columns 5
|
|
||||||
A space B
|
|
||||||
A --x B
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a["A wide one"] b:2 c:2 d
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
block:e
|
|
||||||
f
|
|
||||||
end
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a:3
|
|
||||||
block:e:3
|
|
||||||
f
|
|
||||||
end
|
|
||||||
g
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a:3
|
|
||||||
block:e:3
|
|
||||||
f
|
|
||||||
g
|
|
||||||
end
|
|
||||||
h
|
|
||||||
i
|
|
||||||
j
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a b:2
|
|
||||||
block:e:3
|
|
||||||
f
|
|
||||||
end
|
|
||||||
g h i
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a b c
|
|
||||||
e:3
|
|
||||||
f g h
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 1
|
|
||||||
db(("DB"))
|
|
||||||
blockArrowId6<[" "]>(down)
|
|
||||||
block:ID
|
|
||||||
A
|
|
||||||
B["A wide one in the middle"]
|
|
||||||
C
|
|
||||||
end
|
|
||||||
space
|
|
||||||
D
|
|
||||||
ID --> D
|
|
||||||
C --> D
|
|
||||||
style B fill:#f9F,stroke:#333,stroke-width:4px
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 5
|
|
||||||
A1:3
|
|
||||||
A2:1
|
|
||||||
A3
|
|
||||||
B1 B2 B3:3
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
block
|
|
||||||
D
|
|
||||||
E
|
|
||||||
end
|
|
||||||
db("This is the text in the box")
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
|
|
||||||
block
|
|
||||||
D
|
|
||||||
end
|
|
||||||
A["A: I am a wide one"]
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
A["square"]
|
|
||||||
B("rounded")
|
|
||||||
C(("circle"))
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
A>"rect_left_inv_arrow"]
|
|
||||||
B{"diamond"}
|
|
||||||
C{{"hexagon"}}
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
A(["stadium"])
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
%% A[["subroutine"]]
|
|
||||||
%% B[("cylinder")]
|
|
||||||
C>"surprise"]
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
block-beta
|
|
||||||
A[/"lean right"/]
|
|
||||||
B[\"lean left"\]
|
|
||||||
C[/"trapezoid"\]
|
|
||||||
D[\"trapezoid"/]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid2">
|
|
||||||
flowchart
|
flowchart
|
||||||
B
|
Node1:::class1 --> Node2:::class2
|
||||||
style B fill:#f9F,stroke:#333,stroke-width:4px
|
Node1:::class1 --> Node3:::class2
|
||||||
</pre>
|
Node3 --> Node4((I am a circle)):::larger
|
||||||
|
|
||||||
|
classDef class1 fill:lightblue
|
||||||
|
classDef class2 fill:pink
|
||||||
|
classDef larger font-size:30px,fill:yellow
|
||||||
|
</pre
|
||||||
|
>
|
||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
flowchart LR
|
stateDiagram-v2
|
||||||
a1 -- apa --> b1
|
[*] --> Still
|
||||||
</pre>
|
Still --> [*]
|
||||||
|
Still --> Moving
|
||||||
|
Moving --> Still
|
||||||
|
Moving --> Crash
|
||||||
|
Crash --> [*] </pre
|
||||||
|
>
|
||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
flowchart RL
|
flowchart RL
|
||||||
subgraph "`one`"
|
subgraph "`one`"
|
||||||
id
|
a1 -- l1 --> a2
|
||||||
end
|
a1 -- l2 --> a2
|
||||||
|
end
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
flowchart RL
|
flowchart RL
|
||||||
@@ -594,9 +433,14 @@ mindmap
|
|||||||
// useMaxWidth: false,
|
// useMaxWidth: false,
|
||||||
// });
|
// });
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
theme: 'dark',
|
flowchart: { titleTopMargin: 10 },
|
||||||
startOnLoad: true,
|
fontFamily: 'courier',
|
||||||
logLevel: 0,
|
sequence: {
|
||||||
|
actorFontFamily: 'courier',
|
||||||
|
noteFontFamily: 'courier',
|
||||||
|
messageFontFamily: 'courier',
|
||||||
|
},
|
||||||
|
fontSize: 16,
|
||||||
});
|
});
|
||||||
function callback() {
|
function callback() {
|
||||||
alert('It worked');
|
alert('It worked');
|
||||||
|
@@ -1,53 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head> </head>
|
|
||||||
<body>
|
|
||||||
<h1>Example</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
%%{init:{"theme":"base", "themeVariables": {"lineColor":"red"}}}%%
|
|
||||||
flowchart LR
|
|
||||||
subgraph red
|
|
||||||
A --> B
|
|
||||||
end
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
%%{init:{"theme":"base", "themeVariables": {"lineColor":"blue"}}}%%
|
|
||||||
flowchart LR
|
|
||||||
subgraph black
|
|
||||||
A --> B
|
|
||||||
end
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: base
|
|
||||||
themeVariables:
|
|
||||||
lineColor: yellow
|
|
||||||
---
|
|
||||||
flowchart LR
|
|
||||||
subgraph red
|
|
||||||
A --> B
|
|
||||||
end
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: base
|
|
||||||
themeVariables:
|
|
||||||
lineColor: green
|
|
||||||
---
|
|
||||||
flowchart LR
|
|
||||||
subgraph black
|
|
||||||
A --> B
|
|
||||||
end
|
|
||||||
</pre>
|
|
||||||
<script type="module">
|
|
||||||
import mermaid from './mermaid.esm.mjs';
|
|
||||||
mermaid.initialize({ startOnLoad: false, logLevel: 0 });
|
|
||||||
await mermaid.run();
|
|
||||||
|
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,6 +1,15 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<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 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>
|
<style>
|
||||||
body {
|
body {
|
||||||
/* background: rgb(221, 208, 208); */
|
/* background: rgb(221, 208, 208); */
|
||||||
@@ -113,21 +122,26 @@
|
|||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
mermaid.parseError = function (err, hash) {
|
||||||
|
// console.error('Mermaid error: ', err);
|
||||||
|
};
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
|
// theme: 'dark',
|
||||||
|
// theme: 'dark',
|
||||||
|
// arrowMarkerAbsolute: true,
|
||||||
|
// themeCSS: '.edgePath .path {stroke: red;} .arrowheadPath {fill: red;}',
|
||||||
logLevel: 0,
|
logLevel: 0,
|
||||||
|
// flowchart: { useMaxWidth: true },
|
||||||
graph: { curve: 'cardinal', htmlLabels: false },
|
graph: { curve: 'cardinal', htmlLabels: false },
|
||||||
|
// gantt: { axisFormat: '%m/%d/%Y' },
|
||||||
sequence: { actorMargin: 50, showSequenceNumbers: true },
|
sequence: { actorMargin: 50, showSequenceNumbers: true },
|
||||||
|
// sequenceDiagram: { actorMargin: 300 } // deprecated
|
||||||
fontFamily: '"arial", sans-serif',
|
fontFamily: '"arial", sans-serif',
|
||||||
curve: 'cardinal',
|
curve: 'cardinal',
|
||||||
securityLevel: 'strict',
|
securityLevel: 'strict',
|
||||||
startOnLoad: false,
|
|
||||||
});
|
});
|
||||||
|
function callback() {
|
||||||
await mermaid.run();
|
alert('It worked');
|
||||||
|
|
||||||
if (window.Cypress) {
|
|
||||||
window.rendered = true;
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -1,109 +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>
|
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div>Security check</div>
|
|
||||||
<div class="flex">
|
|
||||||
<div id="diagram" class="mermaid"></div>
|
|
||||||
<div id="res" class=""></div>
|
|
||||||
</div>
|
|
||||||
<script type="module">
|
|
||||||
import mermaid from './mermaid.esm.mjs';
|
|
||||||
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: false,
|
|
||||||
// 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 = 'classDiagram\n';
|
|
||||||
diagram += '`Class<img src=x on';
|
|
||||||
diagram += 'error=xssAttack()>` <|-- `Class2<img src=x on';
|
|
||||||
diagram += 'error=xssAttack()>`';
|
|
||||||
|
|
||||||
console.log(diagram);
|
|
||||||
// document.querySelector('#diagram').innerHTML = diagram;
|
|
||||||
const { svg } = await mermaid.render('diagram', diagram);
|
|
||||||
document.querySelector('#res').innerHTML = svg;
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
@@ -94,6 +84,14 @@
|
|||||||
function callback() {
|
function callback() {
|
||||||
alert('It worked');
|
alert('It worked');
|
||||||
}
|
}
|
||||||
|
function xssAttack() {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.id = 'the-malware';
|
||||||
|
div.className = 'malware';
|
||||||
|
div.innerHTML = 'XSS Succeeded';
|
||||||
|
document.getElementsByTagName('body')[0].appendChild(div);
|
||||||
|
throw new Error('XSS Succeeded');
|
||||||
|
}
|
||||||
let diagram = 'graph LR\n';
|
let diagram = 'graph LR\n';
|
||||||
diagram += 'B-->D("<img onerror=location=`java';
|
diagram += 'B-->D("<img onerror=location=`java';
|
||||||
// diagram += "script\u003aalert\u0028document.domain\u0029\` src=x>\"\);\n";
|
// diagram += "script\u003aalert\u0028document.domain\u0029\` src=x>\"\);\n";
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -42,16 +42,6 @@
|
|||||||
font-size: 72px;
|
font-size: 72px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
function xssAttack() {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.id = 'the-malware';
|
|
||||||
div.className = 'malware';
|
|
||||||
div.innerHTML = 'XSS Succeeded';
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
|
||||||
throw new Error('XSS Succeeded');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
|
@@ -24,18 +24,8 @@
|
|||||||
// -- This is will overwrite an existing command --
|
// -- This is will overwrite an existing command --
|
||||||
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
|
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
|
||||||
|
|
||||||
|
// import '@percy/cypress';
|
||||||
|
|
||||||
import { addMatchImageSnapshotCommand } from 'cypress-image-snapshot/command';
|
import { addMatchImageSnapshotCommand } from 'cypress-image-snapshot/command';
|
||||||
|
|
||||||
// The SSIM comparison method can be used if the pixelmatch is throwing lots of false positives.
|
|
||||||
// SSIM actually does not catch minute changes in the image, so it is not as accurate as pixelmatch.
|
|
||||||
// addMatchImageSnapshotCommand({
|
|
||||||
// comparisonMethod: 'ssim',
|
|
||||||
// failureThreshold: 0.01,
|
|
||||||
// failureThresholdType: 'percent',
|
|
||||||
// customDiffConfig: {
|
|
||||||
// ssim: 'fast',
|
|
||||||
// },
|
|
||||||
// blur: 1,
|
|
||||||
// });
|
|
||||||
|
|
||||||
addMatchImageSnapshotCommand();
|
addMatchImageSnapshotCommand();
|
||||||
|
139
demos/block.html
139
demos/block.html
@@ -1,139 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<title>Mermaid Block diagram demo page</title>
|
|
||||||
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<h1>Block diagram demos</h1>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 1
|
|
||||||
db(("DB"))
|
|
||||||
blockArrowId6<[" "]>(down)
|
|
||||||
block:ID
|
|
||||||
A
|
|
||||||
B["A wide one in the middle"]
|
|
||||||
C
|
|
||||||
end
|
|
||||||
space
|
|
||||||
D
|
|
||||||
ID --> D
|
|
||||||
C --> D
|
|
||||||
style B fill:#f9F,stroke:#333,stroke-width:4px
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
A1["square"]
|
|
||||||
B1("rounded")
|
|
||||||
C1(("circle"))
|
|
||||||
A2>"rect_left_inv_arrow"]
|
|
||||||
B2{"diamond"}
|
|
||||||
C2{{"hexagon"}}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
A1(["stadium"])
|
|
||||||
A2[["subroutine"]]
|
|
||||||
B1[("cylinder")]
|
|
||||||
C1>"surprise"]
|
|
||||||
A3[/"lean right"/]
|
|
||||||
B2[\"lean left"\]
|
|
||||||
C2[/"trapezoid"\]
|
|
||||||
D2[\"trapezoid"/]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
block:e:4
|
|
||||||
columns 2
|
|
||||||
f
|
|
||||||
g
|
|
||||||
end
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
block:e:4
|
|
||||||
columns 2
|
|
||||||
f
|
|
||||||
g
|
|
||||||
h
|
|
||||||
end
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a:3
|
|
||||||
block:e:3
|
|
||||||
f
|
|
||||||
g
|
|
||||||
end
|
|
||||||
h
|
|
||||||
i
|
|
||||||
j
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 4
|
|
||||||
a b c d
|
|
||||||
block:e:4
|
|
||||||
columns 2
|
|
||||||
f
|
|
||||||
g
|
|
||||||
h
|
|
||||||
end
|
|
||||||
i:4
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
flowchart LR
|
|
||||||
X-- "a label" -->z
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 5
|
|
||||||
A space B
|
|
||||||
A --x B
|
|
||||||
</pre>
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a["A wide one"] b:2 c:2 d
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
columns 3
|
|
||||||
a b c
|
|
||||||
e:3
|
|
||||||
f g h
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
|
||||||
block-beta
|
|
||||||
|
|
||||||
A1:3
|
|
||||||
A2:1
|
|
||||||
A3
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
import mermaid from './mermaid.esm.mjs';
|
|
||||||
mermaid.initialize({
|
|
||||||
theme: 'default',
|
|
||||||
logLevel: 3,
|
|
||||||
securityLevel: 'loose',
|
|
||||||
block: {
|
|
||||||
padding: 10,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -173,7 +173,7 @@
|
|||||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
||||||
}
|
}
|
||||||
|
|
||||||
Deployment_Node(comp, "Customer's computer", "Microsoft Windows or Apple macOS"){
|
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){
|
||||||
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){
|
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){
|
||||||
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
||||||
}
|
}
|
||||||
|
@@ -38,14 +38,12 @@
|
|||||||
+quack()
|
+quack()
|
||||||
}
|
}
|
||||||
class Fish{
|
class Fish{
|
||||||
-Listint sizeInFeet
|
-int sizeInFeet
|
||||||
-canEat()
|
-canEat()
|
||||||
}
|
}
|
||||||
class Zebra{
|
class Zebra{
|
||||||
+bool is_wild
|
+bool is_wild
|
||||||
+run(List~T~, List~OT~)
|
+run()
|
||||||
%% +run-composite(List~T, K~)
|
|
||||||
+run-nested(List~List~OT~~)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
@@ -82,7 +80,6 @@
|
|||||||
Class01 : #size()
|
Class01 : #size()
|
||||||
Class01 : -int chimp
|
Class01 : -int chimp
|
||||||
Class01 : +int gorilla
|
Class01 : +int gorilla
|
||||||
Class01 : +abstractAttribute string*
|
|
||||||
class Class10~T~ {
|
class Class10~T~ {
|
||||||
<<service>>
|
<<service>>
|
||||||
int id
|
int id
|
||||||
@@ -125,8 +122,6 @@
|
|||||||
classDiagram
|
classDiagram
|
||||||
direction LR
|
direction LR
|
||||||
Animal ()-- Dog
|
Animal ()-- Dog
|
||||||
Animal ()-- Cat
|
|
||||||
note for Cat "should have no members area"
|
|
||||||
Dog : bark()
|
Dog : bark()
|
||||||
Dog : species()
|
Dog : species()
|
||||||
</pre>
|
</pre>
|
||||||
@@ -156,7 +151,6 @@
|
|||||||
~InternalProperty : string
|
~InternalProperty : string
|
||||||
~AnotherInternalProperty : List~List~string~~
|
~AnotherInternalProperty : List~List~string~~
|
||||||
}
|
}
|
||||||
class People List~List~Person~~
|
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
@@ -110,35 +110,6 @@
|
|||||||
}
|
}
|
||||||
MANUFACTURER only one to zero or more CAR : makes
|
MANUFACTURER only one to zero or more CAR : makes
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
erDiagram
|
|
||||||
p[Person] {
|
|
||||||
string firstName
|
|
||||||
string lastName
|
|
||||||
}
|
|
||||||
a["Customer Account"] {
|
|
||||||
string email
|
|
||||||
}
|
|
||||||
p ||--o| a : has
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
erDiagram
|
|
||||||
_customer_order {
|
|
||||||
bigint id PK
|
|
||||||
bigint customer_id FK
|
|
||||||
text shipping_address
|
|
||||||
text delivery_method
|
|
||||||
timestamp_with_time_zone ordered_at
|
|
||||||
numeric total_tax_amount
|
|
||||||
numeric total_price
|
|
||||||
text payment_method
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
---
|
---
|
||||||
graph LR
|
graph LR
|
||||||
accTitle: This is a complicated flow
|
accTitle: This is a complicated flow
|
||||||
accDescr: This is the description for the complicated flow.
|
accDescr: This is the descriptoin for the complicated flow.
|
||||||
|
|
||||||
sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
|
sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
|
||||||
|
|
||||||
|
@@ -30,21 +30,6 @@
|
|||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
gantt
|
|
||||||
title #; Gantt Diagrams Allow Semicolons and Hashtags #;!
|
|
||||||
accTitle: A simple sample gantt diagram
|
|
||||||
accDescr: 2 sections with 2 tasks each, from 2014
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section #;Section
|
|
||||||
#;A task :a1, 2014-01-01, 30d
|
|
||||||
#;Another task :after a1 , 20d
|
|
||||||
section #;Another
|
|
||||||
Task in sec :2014-01-12 , 12d
|
|
||||||
another task : 24d
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
gantt
|
gantt
|
||||||
title Airworks roadmap
|
title Airworks roadmap
|
||||||
|
358
demos/git.html
358
demos/git.html
@@ -14,364 +14,30 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>Git graph demo</h1>
|
<h1>Git diagram demo</h1>
|
||||||
<h2>Simple "branch and merge" graph</h2>
|
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
---
|
||||||
title: Simple "branch and merge" (left-to-right)
|
title: Simple Git diagram
|
||||||
---
|
---
|
||||||
gitGraph LR:
|
gitGraph:
|
||||||
|
options
|
||||||
|
{
|
||||||
|
"nodeSpacing": 50,
|
||||||
|
"nodeRadius": 5
|
||||||
|
}
|
||||||
|
end
|
||||||
|
branch master
|
||||||
commit
|
commit
|
||||||
branch newbranch
|
branch newbranch
|
||||||
checkout newbranch
|
checkout newbranch
|
||||||
commit
|
commit
|
||||||
checkout main
|
|
||||||
merge newbranch
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Simple "branch and merge" (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
commit
|
||||||
branch newbranch
|
checkout master
|
||||||
checkout newbranch
|
|
||||||
commit
|
commit
|
||||||
checkout main
|
|
||||||
merge newbranch
|
|
||||||
</pre>
|
|
||||||
<h2>Continuous development graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Continuous development (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Continuous development (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
</pre>
|
|
||||||
<h2>Merge feature to advanced main graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Merge feature to advanced main (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch newbranch
|
|
||||||
checkout newbranch
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit
|
commit
|
||||||
merge newbranch
|
merge newbranch
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Merge feature to advanced main (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch newbranch
|
|
||||||
checkout newbranch
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
merge newbranch
|
|
||||||
</pre>
|
|
||||||
<h2>Two-way merges</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Two-way merges (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
commit
|
|
||||||
checkout develop
|
|
||||||
merge main
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Two-way merges (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
commit
|
|
||||||
checkout develop
|
|
||||||
merge main
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
merge develop
|
|
||||||
</pre>
|
|
||||||
<h2>Cherry-pick from branch graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Cherry-pick from branch (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch newbranch
|
|
||||||
checkout newbranch
|
|
||||||
commit id: "Pick me"
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout newbranch
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
cherry-pick id: "Pick me"
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Cherry-pick from branch (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch newbranch
|
|
||||||
checkout newbranch
|
|
||||||
commit id: "Pick me"
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout newbranch
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
cherry-pick id: "Pick me"
|
|
||||||
</pre>
|
|
||||||
<h2>Cherry-pick from main graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Cherry-pick from main (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit id:"A"
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
cherry-pick id: "A"
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Cherry-pick from main (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit id:"A"
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
cherry-pick id: "A"
|
|
||||||
</pre>
|
|
||||||
<h2>Cherry-pick then merge graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Cherry-pick then merge (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch newbranch
|
|
||||||
checkout newbranch
|
|
||||||
commit id: "Pick me"
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout newbranch
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
cherry-pick id: "Pick me"
|
|
||||||
merge newbranch
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Cherry-pick then merge (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch newbranch
|
|
||||||
checkout newbranch
|
|
||||||
commit id: "Pick me"
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout newbranch
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
cherry-pick id: "Pick me"
|
|
||||||
merge newbranch
|
|
||||||
</pre>
|
|
||||||
<h2>Merge from main onto undeveloped branch graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Merge from main onto undeveloped branch (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout develop
|
|
||||||
merge main
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Merge from main onto undeveloped branch (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout develop
|
|
||||||
merge main
|
|
||||||
</pre>
|
|
||||||
<h2>Merge from main onto developed branch graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Merge from main onto developed branch (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
merge main
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Merge from main onto developed branch (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
branch develop
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
commit
|
|
||||||
checkout develop
|
|
||||||
commit
|
|
||||||
merge main
|
|
||||||
</pre>
|
|
||||||
<h2>Two branches from same commit graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Two branches from same commit (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit
|
|
||||||
commit
|
|
||||||
branch feature-001
|
|
||||||
commit
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
branch feature-002
|
|
||||||
commit
|
|
||||||
checkout feature-001
|
|
||||||
merge feature-002
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Two branches from same commit (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit
|
|
||||||
commit
|
|
||||||
branch feature-001
|
|
||||||
commit
|
|
||||||
commit
|
|
||||||
checkout main
|
|
||||||
branch feature-002
|
|
||||||
commit
|
|
||||||
checkout feature-001
|
|
||||||
merge feature-002
|
|
||||||
</pre>
|
|
||||||
<h2>Three branches and a cherry-pick from each graph</h2>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Three branches and a cherry-pick from each (left-to-right)
|
|
||||||
---
|
|
||||||
gitGraph LR:
|
|
||||||
commit id: "ZERO"
|
|
||||||
branch develop
|
|
||||||
commit id:"A"
|
|
||||||
checkout main
|
|
||||||
commit id:"ONE"
|
|
||||||
checkout develop
|
|
||||||
commit id:"B"
|
|
||||||
branch featureA
|
|
||||||
commit id:"FIX"
|
|
||||||
commit id: "FIX-2"
|
|
||||||
checkout main
|
|
||||||
commit id:"TWO"
|
|
||||||
cherry-pick id:"A"
|
|
||||||
commit id:"THREE"
|
|
||||||
cherry-pick id:"FIX"
|
|
||||||
checkout develop
|
|
||||||
commit id:"C"
|
|
||||||
merge featureA
|
|
||||||
</pre>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
title: Three branches and a cherry-pick from each (top-to-bottom)
|
|
||||||
---
|
|
||||||
gitGraph TB:
|
|
||||||
commit id: "ZERO"
|
|
||||||
branch develop
|
|
||||||
commit id:"A"
|
|
||||||
checkout main
|
|
||||||
commit id:"ONE"
|
|
||||||
checkout develop
|
|
||||||
commit id:"B"
|
|
||||||
branch featureA
|
|
||||||
commit id:"FIX"
|
|
||||||
commit id: "FIX-2"
|
|
||||||
checkout main
|
|
||||||
commit id:"TWO"
|
|
||||||
cherry-pick id:"A"
|
|
||||||
commit id:"THREE"
|
|
||||||
cherry-pick id:"FIX"
|
|
||||||
checkout develop
|
|
||||||
commit id:"C"
|
|
||||||
merge featureA
|
|
||||||
</pre>
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
const ALLOWED_TAGS = [
|
const ALLOWED_TAGS = [
|
||||||
|
@@ -60,9 +60,6 @@
|
|||||||
<li>
|
<li>
|
||||||
<h2><a href="./quadrantchart.html">Quadrant charts</a></h2>
|
<h2><a href="./quadrantchart.html">Quadrant charts</a></h2>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<h2><a href="./xychart.html">XY charts</a></h2>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<h2><a href="./requirements.html">Requirements</a></h2>
|
<h2><a href="./requirements.html">Requirements</a></h2>
|
||||||
</li>
|
</li>
|
||||||
@@ -81,9 +78,6 @@
|
|||||||
<li>
|
<li>
|
||||||
<h2><a href="./sankey.html">Sankey</a></h2>
|
<h2><a href="./sankey.html">Sankey</a></h2>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<h2><a href="./block.html">Layered Blocks</a></h2>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>Pie chart demos</h1>
|
<h1>Pie chart demos</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
pie title Default text position: Animal adoption
|
pie title Pets adopted by volunteers
|
||||||
accTitle: simple pie char demo
|
accTitle: simple pie char demo
|
||||||
accDescr: pie chart with 3 sections: dogs, cats, rats. Most are dogs.
|
accDescr: pie chart with 3 sections: dogs, cats, rats. Most are dogs.
|
||||||
"Dogs": 386
|
"Dogs": 386
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
%%{init: {"pie": {"textPosition": 0.9}, "themeVariables": {"pieOuterStrokeWidth": "5px"}}}%%
|
%%{init: {"pie": {"textPosition": 0.9}, "themeVariables": {"pieOuterStrokeWidth": "5px"}}}%%
|
||||||
pie
|
pie
|
||||||
title Offset labels close to border: Product X
|
title Key elements in Product X
|
||||||
accTitle: Key elements in Product X
|
accTitle: Key elements in Product X
|
||||||
accDescr: This is a pie chart showing the key elements in Product X.
|
accDescr: This is a pie chart showing the key elements in Product X.
|
||||||
"Calcium": 42.96
|
"Calcium": 42.96
|
||||||
@@ -36,19 +36,6 @@
|
|||||||
"Iron": 5
|
"Iron": 5
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<pre class="mermaid">
|
|
||||||
%%{init: {"pie": {"textPosition": 0.45}, "themeVariables": {"pieOuterStrokeWidth": "5px"}}}%%
|
|
||||||
pie
|
|
||||||
title Centralized labels: Languages
|
|
||||||
accTitle: Key elements in Product X
|
|
||||||
accDescr: This is a pie chart showing the key elements in Product X.
|
|
||||||
"JavaScript": 30
|
|
||||||
"Python": 25
|
|
||||||
"Java": 20
|
|
||||||
"C#": 15
|
|
||||||
"Others": 10
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
<h1>Requirement diagram demos</h1>
|
<h1>Requirement diagram demos</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
requirementDiagram
|
requirementDiagram
|
||||||
accTitle: Requirements demo in black and white
|
accTitle: Requirments demo in black and white
|
||||||
accDescr: A series of requirement boxes showing relationships among them. Has meaningless task names
|
accDescr: A series of requirement boxes showing relationships among them. Has meaningless task names
|
||||||
|
|
||||||
requirement test_req {
|
requirement test_req {
|
||||||
|
@@ -33,7 +33,6 @@
|
|||||||
---
|
---
|
||||||
config:
|
config:
|
||||||
sankey:
|
sankey:
|
||||||
useMaxWidth: true
|
|
||||||
showValues: false
|
showValues: false
|
||||||
width: 1200
|
width: 1200
|
||||||
height: 600
|
height: 600
|
||||||
|
@@ -23,10 +23,6 @@
|
|||||||
participant Alice
|
participant Alice
|
||||||
participant Bob
|
participant Bob
|
||||||
participant John as John<br />Second Line
|
participant John as John<br />Second Line
|
||||||
link Alice: Dashboard @ https://dashboard.contoso.com/alice
|
|
||||||
link Alice: Wiki @ https://wiki.contoso.com/alice
|
|
||||||
link John: Dashboard @ https://dashboard.contoso.com/john
|
|
||||||
link John: Wiki @ https://wiki.contoso.com/john
|
|
||||||
autonumber 10 10
|
autonumber 10 10
|
||||||
rect rgb(200, 220, 100)
|
rect rgb(200, 220, 100)
|
||||||
rect rgb(200, 255, 200)
|
rect rgb(200, 255, 200)
|
||||||
@@ -66,26 +62,6 @@
|
|||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
|
||||||
title: With forced menus
|
|
||||||
config:
|
|
||||||
sequence:
|
|
||||||
forceMenus: true
|
|
||||||
---
|
|
||||||
sequenceDiagram
|
|
||||||
participant Alice
|
|
||||||
participant John
|
|
||||||
link Alice: Dashboard @ https://dashboard.contoso.com/alice
|
|
||||||
link Alice: Wiki @ https://wiki.contoso.com/alice
|
|
||||||
link John: Dashboard @ https://dashboard.contoso.com/john
|
|
||||||
link John: Wiki @ https://wiki.contoso.com/john
|
|
||||||
Alice->>John: Hello John, how are you?
|
|
||||||
John-->>Alice: Great!
|
|
||||||
Alice-)John: See you later!
|
|
||||||
</pre
|
|
||||||
>
|
|
||||||
<hr />
|
|
||||||
<pre class="mermaid">
|
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
accTitle: Sequence diagram title is here
|
accTitle: Sequence diagram title is here
|
||||||
accDescr: Hello friends
|
accDescr: Hello friends
|
||||||
|
@@ -183,7 +183,7 @@
|
|||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<h2>Composite states can link to themselves</h2>
|
<h2>Compsite states can link to themselves</h2>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
state Active {
|
state Active {
|
||||||
@@ -199,7 +199,7 @@
|
|||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
[*] --> S1
|
[*] --> S1
|
||||||
S1 --> S2: This long line uses a br tag<br />to create multiple<br />lines.
|
S1 --> S2: This long line uses a br tag<br />to create multiple<br />lines.
|
||||||
S1 --> S3: This transition description uses \na newline character\nto create multiple\nlines.
|
S1 --> S3: This transition descripton uses \na newline character\nto create multiple\nlines.
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
@@ -1,184 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<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>
|
|
||||||
<h1>XY Charts demos</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revenue (in $)"
|
|
||||||
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
<h1>XY Charts horizontal</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta horizontal
|
|
||||||
title "Basic xychart"
|
|
||||||
x-axis "this is x axis" [category1, "category 2", category3, category4]
|
|
||||||
y-axis yaxisText 10 --> 150
|
|
||||||
bar "sample bat" [52, 96, 35, 10]
|
|
||||||
line [23, 46, 75, 43]
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
<h1>XY Charts only lines and bar</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta
|
|
||||||
line [23, 46, 77, 34]
|
|
||||||
line [45, 32, 33, 12]
|
|
||||||
line [87, 54, 99, 85]
|
|
||||||
line [78, 88, 22, 4]
|
|
||||||
line [22, 29, 75, 33]
|
|
||||||
bar [52, 96, 35, 10]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
<h1>XY Charts with +ve and -ve numbers</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta
|
|
||||||
line [+1.3, .6, 2.4, -.34]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h1>XY Charts Bar with multiple category</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta
|
|
||||||
title "Basic xychart with many categories"
|
|
||||||
x-axis "this is x axis" [category1, "category 2", category3, category4, category5, category6, category7]
|
|
||||||
y-axis yaxisText 10 --> 150
|
|
||||||
bar "sample bar" [52, 96, 35, 10, 87, 34, 67, 99]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h1>XY Charts line with multiple category</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta
|
|
||||||
title "Line chart with many category"
|
|
||||||
x-axis "this is x axis" [category1, "category 2", category3, category4, category5, category6, category7]
|
|
||||||
y-axis yaxisText 10 --> 150
|
|
||||||
line "sample line" [52, 96, 35, 10, 87, 34, 67, 99]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h1>XY Charts category with large text</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
xychart-beta
|
|
||||||
title "Basic xychart with many categories with category overlap"
|
|
||||||
x-axis "this is x axis" [category1, "Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", category3, category4, category5, category6, category7]
|
|
||||||
y-axis yaxisText 10 --> 150
|
|
||||||
bar "sample bar" [52, 96, 35, 10, 87, 34, 67, 99]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h1>sparkline demo</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: dark
|
|
||||||
xyChart:
|
|
||||||
width: 200
|
|
||||||
height: 20
|
|
||||||
plotReservedSpacePercent: 100
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h1>sparkBar demo</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: dark
|
|
||||||
xyChart:
|
|
||||||
width: 200
|
|
||||||
height: 20
|
|
||||||
plotReservedSpacePercent: 100
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<h1>XY Charts demos with all configs</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
theme: forest
|
|
||||||
xyChart:
|
|
||||||
width: 1000
|
|
||||||
height: 600
|
|
||||||
titlePadding: 5
|
|
||||||
titleFontSize: 10
|
|
||||||
xAxis:
|
|
||||||
labelFontSize: 20
|
|
||||||
labelPadding: 10
|
|
||||||
titleFontSize: 30
|
|
||||||
titlePadding: 20
|
|
||||||
tickLength: 10
|
|
||||||
tickWidth: 5
|
|
||||||
axisLineWidth: 5
|
|
||||||
yAxis:
|
|
||||||
labelFontSize: 20
|
|
||||||
labelPadding: 10
|
|
||||||
titleFontSize: 30
|
|
||||||
titlePadding: 20
|
|
||||||
tickLength: 10
|
|
||||||
tickWidth: 5
|
|
||||||
axisLineWidth: 5
|
|
||||||
chartOrientation: horizontal
|
|
||||||
plotReservedSpacePercent: 60
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revene"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<h1>XY Charts demos with all theme config</h1>
|
|
||||||
<pre class="mermaid">
|
|
||||||
---
|
|
||||||
config:
|
|
||||||
themeVariables:
|
|
||||||
xyChart:
|
|
||||||
titleColor: "#ff0000"
|
|
||||||
backgroundColor: "#f0f8ff"
|
|
||||||
yAxisLabelColor: "#ee82ee"
|
|
||||||
yAxisTitleColor: "#7fffd4"
|
|
||||||
yAxisTickColor: "#87ceeb"
|
|
||||||
yAxisLineColor: "#ff6347"
|
|
||||||
xAxisLabelColor: "#7fffd4"
|
|
||||||
xAxisTitleColor: "#ee82ee"
|
|
||||||
xAxisTickColor: "#ff6347"
|
|
||||||
xAxisLineColor: "#87ceeb"
|
|
||||||
plotColorPalette: "#008000, #faba63"
|
|
||||||
---
|
|
||||||
xychart-beta
|
|
||||||
title "Sales Revene"
|
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
import mermaid from './mermaid.esm.mjs';
|
|
||||||
mermaid.initialize({
|
|
||||||
theme: 'default',
|
|
||||||
logLevel: 3,
|
|
||||||
securityLevel: 'loose',
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user