Compare commits

..

119 Commits

Author SHA1 Message Date
Knut Sveidqvist
646f76d343 Fix for broken test 2022-10-07 14:36:25 +02:00
Knut Sveidqvist
047e15951a Fix for issue in classdiagram-v2 from the typescript updates 2022-10-07 12:17:35 +02:00
Knut Sveidqvist
802407c8ae Merge remote-tracking branch 'origin/develop' into lazy-load-import 2022-10-07 10:46:16 +02:00
Knut Sveidqvist
439274c5ae chore: Cleanup 2022-10-07 10:40:01 +02:00
Knut Sveidqvist
931120f73c Merge pull request #3574 from mermaid-js/sidv/fixE2E
fix(tests): E2E
2022-10-07 10:25:55 +02:00
Sidharth Vinod
1fb671c561 Merge branch 'develop' into sidv/fixE2E
* develop:
  fix: pnpm not found
2022-10-07 15:06:12 +08:00
Sidharth Vinod
acd9a8aefb Merge branch 'lazy-load-import' into sidv/fixE2E
* lazy-load-import:
  chore: cleanup
  fix: dynamic import
  fix: Filename in viewer.js
  fix: Import diagram
  Updated logic for diagram loading
  WIP
2022-10-07 15:02:47 +08:00
Sidharth Vinod
66bc844cc9 chore: cleanup 2022-10-07 14:53:16 +08:00
Sidharth Vinod
3e3de72093 fix: dynamic import 2022-10-07 14:51:37 +08:00
Knut Sveidqvist
883d0d5039 Merge pull request #3592 from mermaid-js/lazy-load-import
Lazy load import
2022-10-06 18:19:19 +02:00
Knut Sveidqvist
e49825b7a3 Merge pull request #3589 from mermaid-js/sidv/fixLazyLoad
fix: Import diagram
2022-10-06 18:16:42 +02:00
Sidharth Vinod
9f286b46ff fix: Filename in viewer.js 2022-10-06 23:39:30 +08:00
Sidharth Vinod
803ea863fd fix: pnpm not found 2022-10-06 22:58:54 +08:00
Sidharth Vinod
d59f878020 fix: use async in render-after-error 2022-10-06 17:49:10 +08:00
Sidharth Vinod
646a96e5f0 Merge branch 'develop' into sidv/fixE2E
* develop:
  chore: Format COC.
2022-10-06 17:44:54 +08:00
Sidharth Vinod
77a1aea7b9 chore: Format COC. 2022-10-06 17:44:35 +08:00
Sidharth Vinod
f3f4672816 Merge branch 'develop' into sidv/fixE2E
* develop:
  Appended Contact Mail of Mermaid
  Added sttributes to CODE OF CONDUCT
  build(test): remove vitest from subpackages
  test: remove `import {it} from "vitest"`
  chore(docs): run `pnpm run docs:build`
  CODE_OF_CONDUCT Uploaded
2022-10-06 17:34:51 +08:00
Sidharth Vinod
b68a38443c Merge pull request #3587 from aloisklink/test/fix-unit-tests
Fix failing vitest unit tests
2022-10-06 17:33:57 +08:00
Sidharth Vinod
c919bef70e fix: Import diagram 2022-10-06 13:47:00 +08:00
Knut Sveidqvist
b1540d1491 Merge pull request #3578 from swoyam2609/develop
CODE_OF_CONDUCT Uploaded
2022-10-06 07:18:10 +02:00
Swoyam Siddharth Nayak
8ff40c152b Merge branch 'mermaid-js:develop' into develop 2022-10-06 10:37:22 +05:30
Swoyam Siddharth Nayak
51803f00fb Appended Contact Mail of Mermaid 2022-10-06 10:37:12 +05:30
Sidharth Vinod
fb4aefeae7 Merge pull request #3586 from aloisklink/chore/sync-docs
Sync `docs/` with `packages/mermaid/src/docs`
2022-10-06 12:58:14 +08:00
Sidharth Vinod
7d987e5877 Merge branch 'develop' into sidv/fixE2E
* develop:
  docs: Rebuild
2022-10-06 12:57:18 +08:00
Sidharth Vinod
816b6276a6 docs: Rebuild 2022-10-06 12:56:51 +08:00
Sidharth Vinod
836a026f63 Merge branch 'develop' into sidv/fixE2E
* develop:
  update demo diagrams to have lang, hr tags, src = mermaid.js where needed.
2022-10-06 12:41:58 +08:00
Swoyam Siddharth Nayak
dc9ddc77ea Merge branch 'mermaid-js:develop' into develop 2022-10-06 09:47:10 +05:30
Swoyam Siddharth Nayak
fdbd38ed5f Added sttributes to CODE OF CONDUCT 2022-10-06 09:46:57 +05:30
Alois Klink
1f39fde230 build(test): remove vitest from subpackages
Removes vitest from all subpackages so that vitest/`pnpm run test`
are only in the root mono-repo.

This is required, because otherwise the root vitest and the subpackage
vitest versions can otherwise be slightly different, which causes
issues when running unit tests:

```Snapshot cannot be used outside of test```

In the future, we may want to consider moving package specific
tests into `packages/*/test`, and instead running these tests
with `pnpm run --recursive`, so that tests are run in each package by
their own version of vitest. This is the way that most projects
do things (e.g. https://github.com/vitest-dev/vitest).
2022-10-06 00:56:54 +01:00
Alois Klink
c420224080 test: remove import {it} from "vitest"
We're getting a lot of vitest errors that say:
```Error: No test suite found in file```

I think this is because vitest is somehow
importing a different version the it/test function than the globally
inserted functions.

Removing the imports fixes this.
2022-10-06 00:48:50 +01:00
Alois Klink
b1f13cbb9a chore(docs): run pnpm run docs:build
It looks like the docs/ folder somehow got out of sync
with the packages/mermaid/src/docs folder.

Maybe it was due to a semantic merge conflict
(e.g. `git merge` didn't throw an error, but the merge was bad)
2022-10-06 00:08:00 +01:00
Knut Sveidqvist
0f2e0c2ab4 Updated logic for diagram loading 2022-10-05 22:03:05 +02:00
Alois Klink
d8af97c152 Merge pull request #3545 from weedySeaDragon/chore/update-demo-files-packages
chore: Update demo diagrams for monorepo
2022-10-05 21:03:03 +01:00
Swoyam Siddharth Nayak
528ebd8f12 CODE_OF_CONDUCT Uploaded 2022-10-05 16:47:35 +05:30
Knut Sveidqvist
c05c98c082 WIP 2022-10-05 13:14:05 +02:00
Sidharth Vinod
d8c7557ae5 fix: Docs 2022-10-05 16:05:27 +08:00
Sidharth Vinod
f9753fc621 chore: Update test URL 2022-10-05 16:04:26 +08:00
Sidharth Vinod
42b59a9e35 Merge remote-tracking branch 'upstream/develop' into sidv/fixE2E
* upstream/develop: (33 commits)
  Updated lockfile
  chore(deps-dev): update vite requirement from ^3.0.9 to ^3.1.4
  chore(deps-dev): update typescript requirement from ^4.8.3 to ^4.8.4
  chore(deps-dev): update @vitest/coverage-c8 requirement
  chore(deps-dev): update @typescript-eslint/eslint-plugin requirement
  chore(deps-dev): update esbuild requirement from ^0.15.8 to ^0.15.10
  chore(deps-dev): update @commitlint/config-conventional requirement
  chore(deps-dev): update eslint-plugin-jest requirement
  chore(deps-dev): update @applitools/eyes-cypress requirement
  chore(deps-dev): update jsdom requirement from ^20.0.0 to ^20.0.1
  chore(deps-dev): update vitest requirement from ^0.23.1 to ^0.23.4
  chore(deps-dev): update lint-staged requirement from ^13.0.0 to ^13.0.3
  chore(deps): update @types/node requirement from ^18.7.21 to ^18.8.1
  chore(deps-dev): update @typescript-eslint/parser requirement
  Fix postbuild script
  #3561 Adding cScale0-11 etc and usage of the colors from the mindmap diagram
  Fix for broken test
  Mindmap cleanup
  Using cose-bilkent layout algorithm for mindmaps
  chore(deps-dev): update husky requirement from ^8.0.0 to ^8.0.1
  ...
2022-10-05 14:58:40 +08:00
Sidharth Vinod
74bd576ebc fix(mermaid): Add await to render in init. 2022-10-05 14:52:04 +08:00
Sidharth Vinod
a017ffc3c9 fix(test): Rerender 2022-10-05 14:08:53 +08:00
Sidharth Vinod
d3a81f025a chore(tests): Interaction - cleanup 2022-10-04 16:59:05 +08:00
Sidharth Vinod
750f647b0d fix(tests): Interaction - Security strict, other 2022-10-04 16:55:46 +08:00
Sidharth Vinod
2a9e56439e fix(tests): Interaction test - Security loose. 2022-10-04 16:37:37 +08:00
Ashish Jain
e4bca33d00 Merge pull request #3562 from mermaid-js/3561_theme_color_scales
3561 theme color scales
2022-10-04 09:48:20 +02:00
Knut Sveidqvist
1528c03f85 Updated lockfile 2022-10-04 08:51:12 +02:00
Knut Sveidqvist
c73c68532a Merge pull request #3572 from mermaid-js/dependabot/npm_and_yarn/develop/commitlint/config-conventional-tw-17.1.0
chore(deps-dev): update @commitlint/config-conventional requirement from ^17.0.0 to ^17.1.0
2022-10-04 08:47:26 +02:00
Knut Sveidqvist
989c8969cb Merge pull request #3571 from mermaid-js/dependabot/npm_and_yarn/develop/eslint-plugin-jest-tw-27.1.0
chore(deps-dev): update eslint-plugin-jest requirement from ^27.0.4 to ^27.1.0
2022-10-04 08:47:12 +02:00
Knut Sveidqvist
ff2ff22d27 Merge pull request #3570 from mermaid-js/dependabot/npm_and_yarn/develop/vite-tw-3.1.4
chore(deps-dev): update vite requirement from ^3.0.9 to ^3.1.4
2022-10-04 08:46:58 +02:00
Knut Sveidqvist
5ef7bad1ce Merge pull request #3568 from mermaid-js/dependabot/npm_and_yarn/develop/applitools/eyes-cypress-tw-3.27.1
chore(deps-dev): update @applitools/eyes-cypress requirement from ^3.25.7 to ^3.27.1
2022-10-04 08:46:47 +02:00
dependabot[bot]
5e0c321510 chore(deps-dev): update vite requirement from ^3.0.9 to ^3.1.4
Updates the requirements on [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to permit the latest version.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v3.1.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v3.1.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:44:04 +00:00
Knut Sveidqvist
f19fac97d1 Merge pull request #3573 from mermaid-js/dependabot/npm_and_yarn/develop/typescript-tw-4.8.4
chore(deps-dev): update typescript requirement from ^4.8.3 to ^4.8.4
2022-10-04 08:42:59 +02:00
Knut Sveidqvist
d04f73af7e Merge pull request #3569 from mermaid-js/dependabot/npm_and_yarn/develop/esbuild-tw-0.15.10
chore(deps-dev): update esbuild requirement from ^0.15.8 to ^0.15.10
2022-10-04 08:42:37 +02:00
Knut Sveidqvist
6ef3915fcc Merge pull request #3567 from mermaid-js/dependabot/npm_and_yarn/develop/vitest/coverage-c8-tw-0.23.4
chore(deps-dev): update @vitest/coverage-c8 requirement from ^0.23.2 to ^0.23.4
2022-10-04 08:42:21 +02:00
dependabot[bot]
87257153b9 chore(deps-dev): update typescript requirement from ^4.8.3 to ^4.8.4
Updates the requirements on [typescript](https://github.com/Microsoft/TypeScript) to permit the latest version.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.8.3...v4.8.4)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:35:42 +00:00
dependabot[bot]
02207087e4 chore(deps-dev): update @vitest/coverage-c8 requirement
Updates the requirements on [@vitest/coverage-c8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-c8) to permit the latest version.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v0.23.4/packages/coverage-c8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-c8"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:35:03 +00:00
Knut Sveidqvist
b4417d47f1 Merge pull request #3566 from mermaid-js/dependabot/npm_and_yarn/develop/types/node-tw-18.8.1
chore(deps): update @types/node requirement from ^18.7.21 to ^18.8.1
2022-10-04 08:34:28 +02:00
Knut Sveidqvist
04e3674355 Merge pull request #3565 from mermaid-js/dependabot/npm_and_yarn/develop/typescript-eslint/eslint-plugin-tw-5.39.0
chore(deps-dev): update @typescript-eslint/eslint-plugin requirement from ^5.37.0 to ^5.39.0
2022-10-04 08:34:10 +02:00
dependabot[bot]
dbf8af06a4 chore(deps-dev): update @typescript-eslint/eslint-plugin requirement
Updates the requirements on [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) to permit the latest version.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.39.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:32:15 +00:00
dependabot[bot]
0bcdaa395f chore(deps-dev): update esbuild requirement from ^0.15.8 to ^0.15.10
Updates the requirements on [esbuild](https://github.com/evanw/esbuild) to permit the latest version.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.15.8...v0.15.10)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:31:45 +00:00
dependabot[bot]
7788d26ed4 chore(deps-dev): update @commitlint/config-conventional requirement
Updates the requirements on [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) to permit the latest version.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v17.1.0/@commitlint/config-conventional)

---
updated-dependencies:
- dependency-name: "@commitlint/config-conventional"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:31:24 +00:00
Knut Sveidqvist
b3002be08a Merge pull request #3564 from mermaid-js/dependabot/npm_and_yarn/develop/typescript-eslint/parser-tw-5.39.0
chore(deps-dev): update @typescript-eslint/parser requirement from ^5.37.0 to ^5.39.0
2022-10-04 08:31:19 +02:00
Knut Sveidqvist
813ceb0d96 Merge pull request #3558 from mermaid-js/dependabot/npm_and_yarn/develop/husky-tw-8.0.1
chore(deps-dev): update husky requirement from ^8.0.0 to ^8.0.1
2022-10-04 08:31:01 +02:00
dependabot[bot]
c39c3be39f chore(deps-dev): update eslint-plugin-jest requirement
Updates the requirements on [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) to permit the latest version.
- [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases)
- [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v27.0.4...v27.1.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jest
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:30:56 +00:00
Knut Sveidqvist
9eb17c6e13 Merge pull request #3557 from mermaid-js/dependabot/npm_and_yarn/develop/vitest-tw-0.23.4
chore(deps-dev): update vitest requirement from ^0.23.1 to ^0.23.4
2022-10-04 08:30:47 +02:00
dependabot[bot]
a6e26ce5bb chore(deps-dev): update @applitools/eyes-cypress requirement
Updates the requirements on [@applitools/eyes-cypress](https://github.com/applitools/eyes.sdk.javascript1/tree/HEAD/js/packages/eyes-cypress) to permit the latest version.
- [Release notes](https://github.com/applitools/eyes.sdk.javascript1/releases)
- [Changelog](https://github.com/applitools/eyes.sdk.javascript1/blob/master/js/packages/eyes-cypress/CHANGELOG.md)
- [Commits](https://github.com/applitools/eyes.sdk.javascript1/commits/@applitools/eyes-cypress@3.27.1/js/packages/eyes-cypress)

---
updated-dependencies:
- dependency-name: "@applitools/eyes-cypress"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:30:45 +00:00
Knut Sveidqvist
b735a7911a Merge pull request #3556 from mermaid-js/dependabot/npm_and_yarn/develop/types/lodash-tw-4.14.186
chore(deps-dev): update @types/lodash requirement from ^4.14.185 to ^4.14.186
2022-10-04 08:30:30 +02:00
Knut Sveidqvist
2e342dace2 Merge pull request #3555 from mermaid-js/dependabot/npm_and_yarn/develop/types/express-tw-4.17.14
chore(deps-dev): update @types/express requirement from ^4.17.13 to ^4.17.14
2022-10-04 08:30:05 +02:00
Knut Sveidqvist
14369d3143 Merge pull request #3552 from mermaid-js/dependabot/npm_and_yarn/develop/jsdom-tw-20.0.1
chore(deps-dev): update jsdom requirement from ^20.0.0 to ^20.0.1
2022-10-04 08:29:09 +02:00
dependabot[bot]
b6b5202923 chore(deps-dev): update jsdom requirement from ^20.0.0 to ^20.0.1
Updates the requirements on [jsdom](https://github.com/jsdom/jsdom) to permit the latest version.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/master/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/20.0.0...20.0.1)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:28:33 +00:00
Knut Sveidqvist
808152211c Merge pull request #3553 from mermaid-js/dependabot/npm_and_yarn/develop/start-server-and-test-tw-1.14.0
chore(deps-dev): update start-server-and-test requirement from ^1.12.6 to ^1.14.0
2022-10-04 08:28:02 +02:00
Knut Sveidqvist
408e852018 Merge pull request #3551 from mermaid-js/dependabot/npm_and_yarn/develop/lint-staged-tw-13.0.3
chore(deps-dev): update lint-staged requirement from ^13.0.0 to ^13.0.3
2022-10-04 08:27:24 +02:00
Knut Sveidqvist
ef91b4fa0e Merge pull request #3559 from mermaid-js/minmaps
Mindmaps replacing rendering algoritm with cose-bilkent
2022-10-04 08:26:11 +02:00
dependabot[bot]
46d924ffc9 chore(deps-dev): update vitest requirement from ^0.23.1 to ^0.23.4
Updates the requirements on [vitest](https://github.com/vitest-dev/vitest) to permit the latest version.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/compare/v0.23.1...v0.23.4)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:25:37 +00:00
dependabot[bot]
f965f5643a chore(deps-dev): update lint-staged requirement from ^13.0.0 to ^13.0.3
Updates the requirements on [lint-staged](https://github.com/okonet/lint-staged) to permit the latest version.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v13.0.0...v13.0.3)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 06:25:29 +00:00
Knut Sveidqvist
85f0f7d241 Merge branch 'emersonbottero-develop' into develop 2022-10-04 08:24:29 +02:00
Knut Sveidqvist
9468bffcbb Merge branch 'develop' of github.com:emersonbottero/mermaid into emersonbottero-develop 2022-10-04 08:23:36 +02:00
Knut Sveidqvist
bd44957302 Merge pull request #3544 from AndrewL-64/3304_unlabeled_exception
Fixed labelText undefined behavior
2022-10-04 07:25:14 +02:00
dependabot[bot]
7e3d57fc28 chore(deps): update @types/node requirement from ^18.7.21 to ^18.8.1
Updates the requirements on [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 05:25:01 +00:00
dependabot[bot]
4f5c707b56 chore(deps-dev): update @typescript-eslint/parser requirement
Updates the requirements on [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) to permit the latest version.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.39.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 05:24:13 +00:00
Knut Sveidqvist
2a37023a8d Merge pull request #3549 from mermaid-js/dependabot/npm_and_yarn/develop/vitest/ui-tw-0.23.4
chore(deps-dev): update @vitest/ui requirement from ^0.23.2 to ^0.23.4
2022-10-04 07:23:15 +02:00
Emerson Bottero
9901a73a2a Merge branch 'develop' of https://github.com/emersonbottero/mermaid into develop 2022-10-03 14:01:05 -03:00
Emerson Bottero
40a319fc5b Fix postbuild script 2022-10-03 12:11:00 -03:00
Knut Sveidqvist
8ee321fd7b #3561 Adding cScale0-11 etc and usage of the colors from the mindmap diagram 2022-10-03 14:51:13 +02:00
Knut Sveidqvist
05a594a492 Fix for broken test 2022-10-03 11:22:06 +02:00
Knut Sveidqvist
0a2804c641 Mindmap cleanup 2022-10-03 11:08:55 +02:00
Knut Sveidqvist
5079fa93b4 Using cose-bilkent layout algorithm for mindmaps 2022-10-03 10:05:12 +02:00
dependabot[bot]
eaf75fa149 chore(deps-dev): update husky requirement from ^8.0.0 to ^8.0.1
Updates the requirements on [husky](https://github.com/typicode/husky) to permit the latest version.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v8.0.0...v8.0.1)

---
updated-dependencies:
- dependency-name: husky
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 07:01:42 +00:00
dependabot[bot]
a6093e847e chore(deps-dev): update @types/lodash requirement
Updates the requirements on [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 07:01:30 +00:00
dependabot[bot]
0a6c7781c4 chore(deps-dev): update @types/express requirement
Updates the requirements on [@types/express](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/express)

---
updated-dependencies:
- dependency-name: "@types/express"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 07:01:26 +00:00
dependabot[bot]
0871f5c012 chore(deps-dev): update start-server-and-test requirement
Updates the requirements on [start-server-and-test](https://github.com/bahmutov/start-server-and-test) to permit the latest version.
- [Release notes](https://github.com/bahmutov/start-server-and-test/releases)
- [Commits](https://github.com/bahmutov/start-server-and-test/compare/v1.12.6...v1.14.0)

---
updated-dependencies:
- dependency-name: start-server-and-test
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 07:01:06 +00:00
dependabot[bot]
6f27c36186 chore(deps-dev): update @vitest/ui requirement from ^0.23.2 to ^0.23.4
Updates the requirements on [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) to permit the latest version.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v0.23.4/packages/ui)

---
updated-dependencies:
- dependency-name: "@vitest/ui"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 07:00:41 +00:00
Knut Sveidqvist
383cbcf3a0 Merge branch 'develop' into minmaps 2022-10-03 07:02:25 +02:00
Knut Sveidqvist
56add0756f Lazy loading fix for example-diagram and mindmaps 2022-10-03 07:01:56 +02:00
Alois Klink
02a0f87562 Merge pull request #3541 from marcastel/patch-2
Corrected theme variables reference table layout
2022-10-03 02:11:57 +01:00
Alois Klink
feb1d34c1a style(docs): fix prettier issues (extra newline)
Fix prettier issues by running `pnpm run lint:fix`
2022-10-03 02:06:49 +01:00
Ashley Engelund (weedySeaDragon @ github)
fdb81be0a0 update demo diagrams to have lang, hr tags, src = mermaid.js where needed. 2022-10-02 13:51:25 -07:00
Andrew Liu
a4d1d86d7b Fixed labelText undefined behavior 2022-10-02 14:32:50 -04:00
JM Marcastel
ffe956e27b Corrected theme variables reference table layout
In replacement of #3540 which modified the generated file and not the source file.
2022-10-02 05:31:41 +02:00
Alois Klink
03190c1dec Merge pull request #3538 from elv-nate/patch-1
Fix typos in README.md
2022-09-30 22:20:14 +01:00
Nate Armstrong
92f1f2ffb6 Fix typos in README.md 2022-09-30 11:31:53 -07:00
Knut Sveidqvist
4d8d74a50d Merge pull request #3536 from aloisklink/build/fix-pre-commit-rules
Fix husky `pre-commit` rules
2022-09-30 09:07:12 +02:00
Knut Sveidqvist
0dc0de8f1d Merge pull request #3534 from aloisklink/build/fix-docsbuild-script
Fix `docs:build` and `docs:verify` scripts
2022-09-30 09:06:13 +02:00
Knut Sveidqvist
f5dc4d991f Merge pull request #3535 from aloisklink/docs/replace-yarn-with-pnpm
docs: replace `yarn` with `pnpm` in dev guide
2022-09-30 09:05:29 +02:00
Alois Klink
1f3a02559c build: lint-staged docs in packages/mermaid/src/…
When running lint-staged during git pre-commit scripts,
search for docs in the packages/mermaid/src/docs folder instead
of the original src/docs folder.
2022-09-29 20:11:26 +01:00
Alois Klink
70f94c3e44 chore(docs): run pnpm run docs:build
Updates the auto-generated warning to tell people
to edit packages/mermaid/src/docs instead of src/docs.
2022-09-29 20:02:16 +01:00
Alois Klink
b8eab08119 build(docs): fix pnpm run docs:{build,verify}
Our docs script was searching for docs in the src/docs folder,
which no longer exists.

Instead, it should be looking at the packages/mermaid/src/docs folder.
2022-09-29 20:00:15 +01:00
Alois Klink
794b714fac docs: replace yarn with pnpm in dev guide
With the new mono-repo move (PR #3531), development must
be done with `pnpm`.

Using `memaid` can still be done with `yarn`/`npm` however.
2022-09-29 19:59:02 +01:00
Knut Sveidqvist
2f4b4ba13b Merge pull request #3533 from mermaid-js/2979_arrow_alignment
Arrow tip aligned to edge of box
2022-09-29 20:49:22 +02:00
Alois Klink
1cdb0ff72c build: re-enable prepare script for husky setup
Re-enables the `pnpm run prepare` script.

The prepare script is automatically run when running
`pnpm install` locally.

It both:
  - Sets up husky/git pre-commit scripts
  - Builds the `packages/mermaid/dist` folder.
2022-09-29 19:48:54 +01:00
Alois Klink
9513e0e2d5 build: update pre-commit rules to use pnpm
Update husky and lint-staged to use pnpm instead of yarn.
2022-09-29 19:48:02 +01:00
Emerson Bottero
6191bb5f1b Merge branch 'develop' into develop 2022-09-28 22:47:48 -03:00
Emerson Bottero
d858cd677e chore: update yarn.lock 2022-09-28 22:16:01 -03:00
Emerson Bottero
2376d38e0e docs: improved search 2022-09-28 21:46:07 -03:00
Emerson Bottero
d8ee2bb850 docs: no footer 2022-09-25 11:53:08 -03:00
Emerson Bottero
609d28c6ee docs: added edit and team page 2022-09-25 11:22:34 -03:00
Emerson Bottero
eeafa8f5aa docs: added the fixed search again 2022-09-24 23:24:48 -03:00
Emerson Bottero
5e4bcbdfa0 chore: fix Original Setup 2022-09-23 23:51:33 -03:00
Emerson Bottero
87911f4a56 docs: build working 2022-09-23 23:33:24 -03:00
Emerson Bottero
a96c5ed83a docs: migrating to vitepress 2022-09-21 19:40:49 -03:00
182 changed files with 13086 additions and 1143 deletions

View File

@@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
. "$(dirname "$0")/_/husky.sh" . "$(dirname "$0")/_/husky.sh"
yarn pre-commit pnpm run pre-commit

View File

@@ -1,6 +1,6 @@
{ {
"src/docs/**": ["yarn docs:build --git"], "packages/mermaid/src/docs/**": ["pnpm run docs:build --git"],
"src/docs.mts": ["yarn docs:build --git"], "packages/mermaid/src/docs.mts": ["pnpm run docs:build --git"],
"*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"], "*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"],
"*.jison": ["yarn lint:jison"] "*.jison": ["pnpm run lint:jison"]
} }

View File

@@ -22,22 +22,22 @@ const packageOptions = {
'mermaid-mindmap': { 'mermaid-mindmap': {
name: 'mermaid-mindmap', name: 'mermaid-mindmap',
packageName: 'mermaid-mindmap', packageName: 'mermaid-mindmap',
file: 'add-diagram.ts', file: 'diagram-definition.ts',
}, },
'mermaid-mindmap-detector': { 'mermaid-mindmap-detector': {
name: 'mermaid-mindmap-detector', name: 'mermaid-mindmap-detector',
packageName: 'mermaid-mindmap', packageName: 'mermaid-mindmap',
file: 'registry.ts', file: 'detector.ts',
}, },
'mermaid-example-diagram': { 'mermaid-example-diagram': {
name: 'mermaid-example-diagram', name: 'mermaid-example-diagram',
packageName: 'mermaid-example-diagram', packageName: 'mermaid-example-diagram',
file: 'add-diagram.ts', file: 'diagram-definition.ts',
}, },
'mermaid-example-diagram-detector': { 'mermaid-example-diagram-detector': {
name: 'mermaid-example-diagram-detector', name: 'mermaid-example-diagram-detector',
packageName: 'mermaid-example-diagram', packageName: 'mermaid-example-diagram',
file: 'registry.ts', file: 'detector.ts',
}, },
}; };

View File

@@ -12,8 +12,10 @@ async function createServer() {
appType: 'custom', // don't include Vite's default HTML handling middlewares appType: 'custom', // don't include Vite's default HTML handling middlewares
}); });
app.use(vite.middlewares);
app.use(express.static('./packages/mermaid/dist')); app.use(express.static('./packages/mermaid/dist'));
app.use(express.static('./packages/mermaid-example-diagram/dist'));
app.use(express.static('./packages/mermaid-mindmap/dist'));
app.use(vite.middlewares);
app.use(express.static('demos')); app.use(express.static('demos'));
app.use(express.static('cypress/platform')); app.use(express.static('cypress/platform'));

128
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
- Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or
advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email
address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at security@mermaid.live
.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -11,8 +11,8 @@ Here are a few things to know to get you started on the right path.
```bash ```bash
git clone git@github.com:mermaid-js/mermaid.git git clone git@github.com:mermaid-js/mermaid.git
cd mermaid cd mermaid
yarn pnpm install
yarn test pnpm test
``` ```
## Committing code ## Committing code
@@ -103,7 +103,7 @@ This is important so that, if someone else does a change to the grammar that doe
This tests the rendering and visual appearance of the diagram. This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! This tests the rendering and visual appearance of the diagram. This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks!
To start working with the e2e tests, run `yarn dev` to start the dev server, after that start cypress by running `cypress open` in the mermaid folder. (Make sure you have path to cypress in order, the binary is located in node_modules/.bin). To start working with the e2e tests, run `pnpm run dev` to start the dev server, after that start cypress by running `pnpm exec cypress open` in the mermaid folder.
The rendering tests are very straightforward to create. There is a function imgSnapshotTest. This function takes a diagram in text form, the mermaid options and renders that diagram in cypress. The rendering tests are very straightforward to create. There is a function imgSnapshotTest. This function takes a diagram in text form, the mermaid options and renders that diagram in cypress.

View File

@@ -9,13 +9,13 @@ We are transforming the Mermaid repository to a so called mono-repo. This is a p
- Make it possible to add diagrams from outside of the Mermaid repository - Make it possible to add diagrams from outside of the Mermaid repository
- Separate the release flow between different diagrams and the Mermaid core - Separate the release flow between different diagrams and the Mermaid core
As such be aware of sime changes.. As such be aware of some changes..
# We use pnpm now # We use pnpm now
# The source code has moved # The source code has moved
It is now localted in the src forunder for respoective package located as subfoders in packages. It is now located in the src folder for each respective package located as subfolders in packages.
English | [简体中文](./README.zh-CN.md) English | [简体中文](./README.zh-CN.md)

5
V10-BreakingChanges.md Normal file
View File

@@ -0,0 +1,5 @@
# A collection of updates that change the behaviour
## Lazy loading and asynchronisity
- Invalid dates are rendered as syntax error instead of returning best guess or the current date

View File

@@ -1,266 +1,180 @@
describe('Interaction', () => { describe('Interaction', () => {
describe('Interaction - security level loose', () => { describe('Security level loose', () => {
it('Graph: should handle a click on a node with a bound function', () => { beforeEach(() => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.visit('http://localhost:9000/click_security_loose.html');
cy.viewport(1440, 1024); });
cy.visit(url);
cy.get('body').find('g#flowchart-Function-4').click();
it('Graph: should handle a click on a node with a bound function', () => {
cy.contains('FunctionTest1').parents('.node').click();
cy.get('.created-by-click').should('have.text', 'Clicked By Flow'); cy.get('.created-by-click').should('have.text', 'Clicked By Flow');
}); });
it('Graph: should handle a click on a node with a bound function with args', () => { it('Graph: should handle a click on a node with a bound function with args', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.contains('FunctionArgTest2').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g#flowchart-FunctionArg-28').click();
cy.get('.created-by-click-2').should('have.text', 'Clicked By Flow: ARGUMENT'); cy.get('.created-by-click-2').should('have.text', 'Clicked By Flow: ARGUMENT');
}); });
it('Flowchart: should handle a click on a node with a bound function where the node starts with a number', () => { it('Flowchart: should handle a click on a node with a bound function where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.contains('2FunctionArg').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-FunctionArg-34"]').click();
cy.get('.created-by-click-2').should('have.text', 'Clicked By Flow: ARGUMENT'); cy.get('.created-by-click-2').should('have.text', 'Clicked By Flow: ARGUMENT');
}); });
it('Graph: should handle a click on a node with a bound url', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('#flowchart-URL-5').click();
cy.location().should((location) => { it('Graph: should handle a click on a node with a bound url', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); // When there is a URL, cy.contains selects the a tag instead of the span. The .node is a child of a, so we have to use find instead of parent.
cy.contains('URLTest1').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('Graph: should handle a click on a node with a bound url where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-2URL-11"]').click();
cy.location().should((location) => { it('Graph: should handle a click on a node with a bound url where the node starts with a number', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); cy.contains('2URL').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('Flowchart-v2: should handle a click on a node with a bound function', () => { it('Flowchart-v2: should handle a click on a node with a bound function', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.contains('FunctionTest2').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g#flowchart-Function-16').click();
cy.get('.created-by-click').should('have.text', 'Clicked By Flow'); cy.get('.created-by-click').should('have.text', 'Clicked By Flow');
}); });
it('Flowchart-v2: should handle a click on a node with a bound function where the node starts with a number', () => { it('Flowchart-v2: should handle a click on a node with a bound function where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.contains('10Function').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-1Function-22"]').click();
cy.get('.created-by-click').should('have.text', 'Clicked By Flow'); cy.get('.created-by-click').should('have.text', 'Clicked By Flow');
}); });
it('Flowchart-v2: should handle a click on a node with a bound url', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('#flowchart-URL-17').click();
cy.location().should((location) => { it('Flowchart-v2: should handle a click on a node with a bound url', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); cy.contains('URLTest2').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('Flowchart-v2: should handle a click on a node with a bound url where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-2URL-23"]').click();
cy.location().should((location) => { it('Flowchart-v2: should handle a click on a node with a bound url where the node starts with a number', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); cy.contains('20URL').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('should handle a click on a task with a bound URL clicking on the rect', () => { it('should handle a click on a task with a bound URL clicking on the rect', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.get('rect#cl1').click({ force: true });
cy.viewport(1440, 1024); cy.location().should(({ href }) => {
cy.visit(url); expect(href).to.eq('http://localhost:9000/empty.html');
cy.get('body').find('rect#cl1').click({ force: true });
cy.location().should((location) => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html');
}); });
}); });
it('should handle a click on a task with a bound URL clicking on the text', () => { it('should handle a click on a task with a bound URL clicking on the text', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.get('text#cl1-text').click({ force: true });
cy.viewport(1440, 1024); cy.location().should(({ href }) => {
cy.visit(url); expect(href).to.eq('http://localhost:9000/empty.html');
cy.get('body').find('text#cl1-text').click({ force: true });
cy.location().should((location) => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html');
}); });
}); });
it('should handle a click on a task with a bound function without args', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('rect#cl2').click({ force: true });
it('should handle a click on a task with a bound function without args', () => {
cy.get('rect#cl2').click({ force: true });
cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant cl2'); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant cl2');
}); });
it('should handle a click on a task with a bound function with args', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('rect#cl3').click({ force: true });
it('should handle a click on a task with a bound function with args', () => {
cy.get('rect#cl3').click({ force: true });
cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant test1 test2 test3'); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant test1 test2 test3');
}); });
it('should handle a click on a task with a bound function without args', () => { it('should handle a click on a task with a bound function without args', () => {
const url = 'http://localhost:9000/click_security_loose.html'; cy.get('text#cl2-text').click({ force: true });
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('text#cl2-text').click({ force: true });
cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant cl2'); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant cl2');
}); });
it('should handle a click on a task with a bound function with args ', () => {
const url = 'http://localhost:9000/click_security_loose.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('text#cl3-text').click({ force: true });
it('should handle a click on a task with a bound function with args ', () => {
cy.get('text#cl3-text').click({ force: true });
cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant test1 test2 test3'); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant test1 test2 test3');
}); });
}); });
describe('Interaction - security level tight', () => { describe('Interaction - security level tight', () => {
beforeEach(() => {
cy.visit('http://localhost:9000/click_security_strict.html');
});
it('should handle a click on a node without a bound function', () => { it('should handle a click on a node without a bound function', () => {
const url = 'http://localhost:9000/click_security_strict.html'; cy.contains('Function1').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g#flowchart-Function-4').click();
cy.get('.created-by-click').should('not.exist'); cy.get('.created-by-click').should('not.exist');
// cy.get('.created-by-click').should('not.have.text', 'Clicked By Flow');
}); });
it('should handle a click on a node with a bound function where the node starts with a number', () => { it('should handle a click on a node with a bound function where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_strict.html'; cy.contains('1Function').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-1Function-10"]').click();
// cy.get('.created-by-click').should('not.have.text', 'Clicked By Flow');
cy.get('.created-by-click').should('not.exist'); cy.get('.created-by-click').should('not.exist');
}); });
it('should handle a click on a node with a bound url', () => {
const url = 'http://localhost:9000/click_security_strict.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g#flowchart-URL-5').click();
cy.location().should((location) => { it('should handle a click on a node with a bound url', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); cy.contains('URL1').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('should handle a click on a node with a bound url where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_strict.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-2URL-11"]').click();
cy.location().should((location) => { it('should handle a click on a node with a bound url where the node starts with a number', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); cy.contains('2URL').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('should handle a click on a task with a bound URL clicking on the rect', () => { it('should handle a click on a task with a bound URL clicking on the rect', () => {
const url = 'http://localhost:9000/click_security_strict.html'; cy.get('rect#cl1').click({ force: true });
cy.viewport(1440, 1024); cy.location().should(({ href }) => {
cy.visit(url); expect(href).to.eq('http://localhost:9000/empty.html');
cy.get('body').find('rect#cl1').click({ force: true });
cy.location().should((location) => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html');
}); });
}); });
it('should handle a click on a task with a bound URL clicking on the text', () => { it('should handle a click on a task with a bound URL clicking on the text', () => {
const url = 'http://localhost:9000/click_security_strict.html'; cy.get('text#cl1-text').click({ force: true });
cy.viewport(1440, 1024); cy.location().should(({ href }) => {
cy.visit(url); expect(href).to.eq('http://localhost:9000/empty.html');
cy.get('body').find('text#cl1-text').click({ force: true });
cy.location().should((location) => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html');
}); });
}); });
it('should handle a click on a task with a bound function', () => {
const url = 'http://localhost:9000/click_security_strict.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('rect#cl2').click({ force: true });
// cy.get('.created-by-gant-click').should('not.have.text', 'Clicked By Gant cl2'); it('should handle a click on a task with a bound function', () => {
cy.get('rect#cl2').click({ force: true });
cy.get('.created-by-gant-click').should('not.exist'); cy.get('.created-by-gant-click').should('not.exist');
}); });
it('should handle a click on a task with a bound function', () => {
const url = 'http://localhost:9000/click_security_strict.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('text#cl2-text').click({ force: true });
// cy.get('.created-by-gant-click').should('not.have.text', 'Clicked By Gant cl2'); it('should handle a click on a task with a bound function', () => {
cy.get('text#cl2-text').click({ force: true });
cy.get('.created-by-gant-click').should('not.exist'); cy.get('.created-by-gant-click').should('not.exist');
}); });
}); });
describe('Interaction - security level other, missspelling', () => { describe('Interaction - security level other, missspelling', () => {
beforeEach(() => {
cy.visit('http://localhost:9000/click_security_other.html');
});
it('should handle a click on a node with a bound function', () => { it('should handle a click on a node with a bound function', () => {
const url = 'http://localhost:9000/click_security_other.html'; cy.contains('Function1').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g#flowchart-Function-4').click();
// cy.get('.created-by-click').should('not.have.text', 'Clicked By Flow');
cy.get('.created-by-click').should('not.exist'); cy.get('.created-by-click').should('not.exist');
}); });
it('should handle a click on a node with a bound function where the node starts with a number', () => { it('should handle a click on a node with a bound function where the node starts with a number', () => {
const url = 'http://localhost:9000/click_security_other.html'; cy.contains('1Function').parents('.node').click();
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g[id="flowchart-1Function-10"]').click();
cy.get('.created-by-click').should('not.exist');
cy.get('.created-by-click').should('not.exist'); cy.get('.created-by-click').should('not.exist');
}); });
it('should handle a click on a node with a bound url', () => {
const url = 'http://localhost:9000/click_security_other.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('g#flowchart-URL-5').click();
cy.location().should((location) => { it('should handle a click on a node with a bound url', () => {
expect(location.href).to.eq('http://localhost:9000/webpackUsage.html'); cy.contains('URL1').find('.node').click();
cy.location().should(({ href }) => {
expect(href).to.eq('http://localhost:9000/empty.html');
}); });
}); });
it('should handle a click on a task with a bound function', () => { it('should handle a click on a task with a bound function', () => {
const url = 'http://localhost:9000/click_security_other.html'; cy.get('rect#cl2').click({ force: true });
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('rect#cl2').click({ force: true });
cy.get('.created-by-gant-click').should('not.exist'); cy.get('.created-by-gant-click').should('not.exist');
}); });
it('should handle a click on a task with a bound function', () => {
const url = 'http://localhost:9000/click_security_other.html';
cy.viewport(1440, 1024);
cy.visit(url);
cy.get('body').find('text#cl2-text').click({ force: true });
it('should handle a click on a task with a bound function', () => {
cy.get('text#cl2-text').click({ force: true });
cy.get('.created-by-gant-click').should('not.exist'); cy.get('.created-by-gant-click').should('not.exist');
}); });
}); });

View File

@@ -92,7 +92,7 @@ describe('Gantt diagram', () => {
{} {}
); );
}); });
it('should render a gantt chart for issue #1060', () => { it('should FAIL redering a gantt chart for issue #1060 with invalid date', () => {
imgSnapshotTest( imgSnapshotTest(
` `
gantt gantt

View File

@@ -13,42 +13,42 @@
</head> </head>
<body> <body>
<div style="display: flex"> <div style="display: flex">
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
graph TB graph TB
Function-->URL FunctionTest1-->URLTest1
click Function clickByFlow "Add a div" click FunctionTest1 clickByFlow "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URLTest1 "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
graph TB graph TB
1Function--->2URL 1Function--->2URL
click 1Function clickByFlow "Add a div" click 1Function clickByFlow "Add a div"
click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click 2URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
flowchart TB flowchart TB
Function-->URL FunctionTest2-->URLTest2
click Function clickByFlow "Add a div" click FunctionTest2 clickByFlow "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" _self click URLTest2 "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>" _self
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
flowchart TB flowchart TB
1Function--->2URL 10Function--->20URL
click 1Function clickByFlow "Add a div" click 10Function clickByFlow "Add a div"
click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" _self click 20URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>" _self
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
class ShapeLink class ShapeLink
link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback class ShapeCallback
callback ShapeCallback "clickByClass" "This is a tooltip for a callback" callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
classDiagram-v2 classDiagram-v2
class ShapeLink2 class ShapeLink2
link ShapeLink2 "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback2 class ShapeCallback2
callback ShapeCallback2 "clickByClass" "This is a tooltip for a callback" callback ShapeCallback2 "clickByClass" "This is a tooltip for a callback"
</pre> </pre>
@@ -85,7 +85,7 @@
Calling a Callback (look at the console log) :cl2, after cl1, 3d Calling a Callback (look at the console log) :cl2, after cl1, 3d
Calling a Callback with args :cl3, after cl1, 3d Calling a Callback with args :cl3, after cl1, 3d
click cl1 href "http://localhost:9000/webpackUsage.html" click cl1 href "http://localhost:9000/empty.html"
click cl2 call clickByGantt() click cl2 call clickByGantt()
click cl3 call clickByGantt("test1", test2, test3) click cl3 call clickByGantt("test1", test2, test3)
@@ -95,31 +95,31 @@
Add another diagram to demo page : 48h Add another diagram to demo page : 48h
</pre> </pre>
<div style="display: flex"> <div style="display: flex">
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
graph TB graph TB
FunctionArg-->URL FunctionArgTest2-->URL
click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div" click FunctionArgTest2 call clickByFlowArg(ARGUMENT) "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
flowchart TB flowchart TB
FunctionArg-->URL 2FunctionArg-->URL
click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div" click 2FunctionArg call clickByFlowArg(ARGUMENT) "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
class ShapeLink class ShapeLink
link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback class ShapeCallback
click ShapeCallback call clickByClass(123) "This is a tooltip for a callback" click ShapeCallback call clickByClass(123) "This is a tooltip for a callback"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre class="mermaid">
classDiagram-v2 classDiagram-v2
class ShapeLink2 class ShapeLink2
link ShapeLink2 "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback2 class ShapeCallback2
click ShapeCallback2 call clickByClass(123) "This is a tooltip for a callback" click ShapeCallback2 call clickByClass(123) "This is a tooltip for a callback"
</pre> </pre>

View File

@@ -9,15 +9,15 @@
<body> <body>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
graph TB graph TB
Function-->URL Function1-->URL1
click Function clickByFlow "Add a div" click Function1 clickByFlow "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL1 "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
graph TB graph TB
1Function-->2URL 1Function-->2URL
click 1Function clickByFlow "Add a div" click 1Function clickByFlow "Add a div"
click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click 2URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre class="mermaid"> <pre class="mermaid">
@@ -50,7 +50,7 @@
Visit mermaidjs :active, cl1, 2014-01-07,2014-01-10 Visit mermaidjs :active, cl1, 2014-01-07,2014-01-10
Calling a Callback (look at the console log) :cl2, after cl1, 3d Calling a Callback (look at the console log) :cl2, after cl1, 3d
click cl1 href "http://localhost:9000/webpackUsage.html" click cl1 href "http://localhost:9000/empty.html"
click cl2 call clickByGantt("test", test, test) click cl2 call clickByGantt("test", test, test)
section Last section section Last section

View File

@@ -17,38 +17,38 @@
graph TB graph TB
Function-->URL Function-->URL
click Function clickByFlow "Add a div" click Function clickByFlow "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
graph TB graph TB
1Function--->2URL 1Function--->2URL
click 1Function clickByFlow "Add a div" click 1Function clickByFlow "Add a div"
click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click 2URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
flowchart TB flowchart TB
Function-->URL Function-->URL
click Function clickByFlow "Add a div" click Function clickByFlow "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" _self click URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>" _self
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
flowchart TB flowchart TB
1Function--->2URL 1Function--->2URL
click 1Function clickByFlow "Add a div" click 1Function clickByFlow "Add a div"
click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" _self click 2URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>" _self
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
classDiagram classDiagram
class ShapeLink class ShapeLink
link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback class ShapeCallback
callback ShapeCallback "clickByClass" "This is a tooltip for a callback" callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
classDiagram-v2 classDiagram-v2
class ShapeLink2 class ShapeLink2
link ShapeLink2 "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback2 class ShapeCallback2
callback ShapeCallback2 "clickByClass" "This is a tooltip for a callback" callback ShapeCallback2 "clickByClass" "This is a tooltip for a callback"
</pre> </pre>
@@ -85,7 +85,7 @@
Calling a Callback (look at the console log) :cl2, after cl1, 3d Calling a Callback (look at the console log) :cl2, after cl1, 3d
Calling a Callback with args :cl3, after cl1, 3d Calling a Callback with args :cl3, after cl1, 3d
click cl1 href "http://localhost:9000/webpackUsage.html" click cl1 href "http://localhost:9000/empty.html"
click cl2 call clickByGantt() click cl2 call clickByGantt()
click cl3 call clickByGantt("test1", test2, test3) click cl3 call clickByGantt("test1", test2, test3)
@@ -99,19 +99,19 @@
graph TB graph TB
FunctionArg-->URL FunctionArg-->URL
click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div" click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
flowchart TB flowchart TB
FunctionArg-->URL FunctionArg-->URL
click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div" click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
classDiagram classDiagram
class ShapeLink class ShapeLink
link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback class ShapeCallback
click ShapeCallback call clickByClass(123) "This is a tooltip for a callback" click ShapeCallback call clickByClass(123) "This is a tooltip for a callback"
</pre> </pre>
@@ -119,7 +119,7 @@
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
classDiagram-v2 classDiagram-v2
class ShapeLink2 class ShapeLink2
link ShapeLink2 "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
class ShapeCallback2 class ShapeCallback2
click ShapeCallback2 call clickByClass(123) "This is a tooltip for a callback" click ShapeCallback2 call clickByClass(123) "This is a tooltip for a callback"
</pre> </pre>

View File

@@ -9,15 +9,15 @@
<body> <body>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
graph TB graph TB
Function-->URL Function1-->URL1
click Function clickByFlow "Add a div" click Function1 clickByFlow "Add a div"
click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click URL1 "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre id="FirstLine" class="mermaid"> <pre id="FirstLine" class="mermaid">
graph TB graph TB
1Function-->2URL 1Function-->2URL
click 1Function clickByFlow "Add a div" click 1Function clickByFlow "Add a div"
click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" click 2URL "http://localhost:9000/empty.html" "Visit <strong>mermaid docs</strong>"
</pre> </pre>
<pre class="mermaid"> <pre class="mermaid">
@@ -51,7 +51,7 @@
Calling a Callback (look at the console log) :cl2, after cl1, 3d Calling a Callback (look at the console log) :cl2, after cl1, 3d
Calling a Callback with args :cl3, after cl1, 3d Calling a Callback with args :cl3, after cl1, 3d
click cl1 href "http://localhost:9000/webpackUsage.html" click cl1 href "http://localhost:9000/empty.html"
click cl2 call clickByGantt() click cl2 call clickByGantt()
click cl3 call clickByGantt("test1", test2, test3) click cl3 call clickByGantt("test1", test2, test3)

View File

@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Empty</title>
</head>
<body></body>
</html>

View File

@@ -6,6 +6,10 @@
rel="stylesheet" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
/> />
<link
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
rel="stylesheet"
/>
<link <link
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
rel="stylesheet" rel="stylesheet"
@@ -38,7 +42,7 @@
</style> </style>
</head> </head>
<body> <body>
<pre class="mermaid" style="width: 50%"> <pre class="mermaid2" style="width: 50%">
flowchart LR flowchart LR
subgraph one subgraph one
direction LR direction LR
@@ -364,8 +368,7 @@ flowchart TD
</pre> </pre>
<!-- <script src="./mermaid.js"></script> --> <!-- <script src="./mermaid.js"></script> -->
<script src="./packages/mermaid-mindmap/dist/mermaid-mindmap.js"></script> <script src="./mermaid.js"></script>
<script src="./packages/mermaid/dist/mermaid.js"></script>
<script> <script>
mermaid.parseError = function (err, hash) { mermaid.parseError = function (err, hash) {
// console.error('Mermaid error: ', err); // console.error('Mermaid error: ', err);
@@ -382,6 +385,7 @@ flowchart TD
htmlLabels: false, htmlLabels: false,
fontFamily: 'courier', fontFamily: 'courier',
}, },
lazyLoadedDiagrams: ['./mermaid-mindmap-detector.js'],
}); });
function callback() { function callback() {
alert('It worked'); alert('It worked');

View File

@@ -6,6 +6,10 @@
rel="stylesheet" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
/> />
<link
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
rel="stylesheet"
/>
<link <link
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
rel="stylesheet" rel="stylesheet"
@@ -25,6 +29,12 @@
} }
.mermaid svg { .mermaid svg {
/* font-size: 18px !important; */ /* font-size: 18px !important; */
background-color: #eee;
background-image: radial-gradient(#fff 1%, transparent 11%),
radial-gradient(#fff 1%, transparent 11%);
background-size: 20px 20px;
background-position: 0 0, 10px 10px;
background-repeat: repeat;
} }
.malware { .malware {
position: fixed; position: fixed;
@@ -46,28 +56,73 @@
<body> <body>
<div>Security check</div> <div>Security check</div>
<pre id="diagram" class="mermaid"> <pre id="diagram" class="mermaid">
info classDiagram
</pre 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
</pre>
<pre id="diagram" class="mermaid2"> <pre id="diagram" class="mermaid2">
mindmap mindmap
root root
ch1 A
ch2 B
</pre C
> D
<script src="./packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> E
<script src="./packages/mermaid-mindmap/dist/mermaid-example-diagram-detector.js"></script> A2
<script src="./packages/mermaid/dist/mermaid.js"></script> B2
C2
D2
E2
child1((Circle))
grandchild 1
grandchild 2
child2(Round rectangle)
grandchild 3
grandchild 4
child3[Square]
grandchild 5
::icon(mdi mdi-fire)
gc6((grand<br/>child 6))
::icon(mdi mdi-fire)
gc7((grand<br/>grand<br/>child 8))
</pre>
<pre id="diagram" class="mermaid2">
example-diagram
</pre>
<!-- <div id="cy"></div> -->
<!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> -->
<!-- <script src="./mermaid-example-diagram-detector.js"></script> -->
<!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
<script src="./mermaid.js"></script>
<script> <script>
mermaid.parseError = function (err, hash) { mermaid.parseError = function (err, hash) {
// console.error('Mermaid error: ', err); // console.error('Mermaid error: ', err);
}; };
mermaid.initialize({ mermaid.initialize({
theme: 'forest',
startOnLoad: true, startOnLoad: true,
logLevel: 0, logLevel: 0,
basePath: './packages/', // basePath: './packages/',
// themeVariables: {relationLabelColor: 'red'} // themeVariables: { darkMode: true },
lazyLoadedDiagrams: [
'./mermaid-mindmap-detector.esm.mjs',
'./mermaid-example-diagram-detector.esm.mjs',
],
// lazyLoadedDiagrams: ['../../mermaid-mindmap/registry.ts'],
}); });
function callback() { function callback() {
alert('It worked'); alert('It worked');

View File

@@ -14,15 +14,16 @@
mermaid.init({ startOnLoad: false }); mermaid.init({ startOnLoad: false });
mermaid.mermaidAPI.initialize({ securityLevel: 'strict' }); mermaid.mermaidAPI.initialize({ securityLevel: 'strict' });
(async () => {
try {
console.log('rendering');
await mermaid.mermaidAPI.render('graphDiv', `>`);
} catch (e) {}
try { await mermaid.mermaidAPI.render('graphDiv', `graph LR\n a --> b`, (html) => {
console.log('rendering'); document.getElementById('graph').innerHTML = html;
mermaid.mermaidAPI.render('graphDiv', `>`); });
} catch (e) {} })();
mermaid.mermaidAPI.render('graphDiv', `graph LR\n a --> b`, (html) => {
document.getElementById('graph').innerHTML = html;
});
</script> </script>
</body> </body>
</html> </html>

View File

@@ -17,11 +17,12 @@
rerender('XMas'); rerender('XMas');
function rerender(text) { function rerender(text) {
var graphText = `graph TD const graphText = `graph TD
A[${text}] -->|Get money| B(Go shopping)`; A[${text}] -->|Get money| B(Go shopping)`;
var graph = mermaid.mermaidAPI.render('id', graphText); mermaid.mermaidAPI.render('id', graphText).then((svg) => {
console.log('\x1b[35m%s\x1b[0m', '>> graph', graph); console.log('\x1b[35m%s\x1b[0m', '>> graph', svg);
document.getElementById('graph').innerHTML = graph; document.getElementById('graph').innerHTML = svg;
});
} }
</script> </script>
<button id="rerender" onclick="rerender('Saturday')">Rerender</button> <button id="rerender" onclick="rerender('Saturday')">Rerender</button>

View File

@@ -36,6 +36,8 @@ const contentLoaded = function () {
document.getElementsByTagName('body')[0].appendChild(div); document.getElementsByTagName('body')[0].appendChild(div);
} }
graphObj.mermaid.lazyLoadedDiagrams = ['/mermaid-mindmap-detector.esm.mjs'];
mermaid2.initialize(graphObj.mermaid); mermaid2.initialize(graphObj.mermaid);
mermaid2.init(); mermaid2.init();
} }

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>C4 context diagram demos</h1>
<pre class="mermaid"> <pre class="mermaid">
C4Context C4Context
accTitle: C4 context demo accTitle: C4 context demo
@@ -62,6 +63,7 @@
UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
C4Container C4Container
@@ -101,6 +103,7 @@
Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS") Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140") UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140")
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
C4Component C4Component
@@ -140,6 +143,7 @@
UpdateRelStyle(security, db, $offsetY="-40") UpdateRelStyle(security, db, $offsetY="-40")
UpdateRelStyle(mbsfacade, mbs, $offsetY="-40") UpdateRelStyle(mbsfacade, mbs, $offsetY="-40")
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
C4Dynamic C4Dynamic
@@ -159,6 +163,7 @@
UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60")
UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10")
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
C4Deployment C4Deployment
@@ -210,7 +215,6 @@
UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20")
UpdateRelStyle(db, db2, $offsetY="-10") UpdateRelStyle(db, db2, $offsetY="-10")
</pre> </pre>
<hr /> <hr />
<script src="./mermaid.js"></script> <script src="./mermaid.js"></script>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,8 @@
</head> </head>
<body> <body>
<h1>Class diagram demos</h1>
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
accTitle: Demo Class Diagram accTitle: Demo Class Diagram
@@ -42,8 +44,8 @@
} }
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
Class01 <|-- AveryLongClass : Cool Class01 <|-- AveryLongClass : Cool
@@ -68,6 +70,7 @@
} }
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
class Class01~T~ class Class01~T~
@@ -81,6 +84,7 @@
} }
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
Class01~T~ <|-- AveryLongClass : Cool Class01~T~ <|-- AveryLongClass : Cool
@@ -104,11 +108,13 @@
} }
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
Interface1 ()-- Interface1Impl Interface1 ()-- Interface1Impl
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
direction LR direction LR
@@ -117,6 +123,7 @@
Dog : species() Dog : species()
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
classDiagram classDiagram
direction RL direction RL

View File

@@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Mermaid Quick Test Page</title> <title>Data Flow Mermaid Quick Test Page</title>
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" /> <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
<style> <style>
div.mermaid { div.mermaid {
@@ -13,7 +13,7 @@
</style> </style>
</head> </head>
<body> <body>
<h2>Data Flow Diagram Example</h2> <h1>Data Flow Diagram demos</h1>
<pre class="mermaid"> <pre class="mermaid">
flowchart LR flowchart LR
accTitle: A simple linear flowchart. accTitle: A simple linear flowchart.
@@ -21,6 +21,8 @@
DataStore[|borders:tb|Database] -->|input| Process((System)) -->|output| Entity[Customer]; DataStore[|borders:tb|Database] -->|input| Process((System)) -->|output| Entity[Customer];
</pre> </pre>
<hr />
<h2>Borders Example</h2> <h2>Borders Example</h2>
<pre class="mermaid"> <pre class="mermaid">
flowchart TD flowchart TD

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -10,6 +10,10 @@
/* font-family: 'trebuchet ms', verdana, arial; */ /* font-family: 'trebuchet ms', verdana, arial; */
font-family: 'Courier New', Courier, monospace !important; font-family: 'Courier New', Courier, monospace !important;
} }
.diagram-title {
fill: red;
font-size: 24pt;
}
</style> </style>
</head> </head>
@@ -51,8 +55,8 @@ erDiagram
} }
</pre> </pre>
<script src="./mermaid.js"></script>
<script type="module"> <script type="module">
import mermaid from '../src/mermaid';
mermaid.initialize({ mermaid.initialize({
theme: 'default', theme: 'default',

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -15,7 +15,6 @@
<body> <body>
<h1>Comparison "graph vs. flowchart"</h1> <h1>Comparison "graph vs. flowchart"</h1>
<h2>Sample 1</h2> <h2>Sample 1</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -117,6 +116,7 @@
sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -216,10 +216,9 @@
sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
</pre> </pre>
<hr /> <hr />
<h2>Sample 2</h2> <h2>Sample 2</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
@@ -231,6 +230,7 @@
C -->|Two| E[iPhone] C -->|Two| E[iPhone]
C -->|Three| F[Car] C -->|Three| F[Car]
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -243,10 +243,9 @@
C -->|Two| E[iPhone] C -->|Two| E[iPhone]
C -->|Three| F[Car] C -->|Three| F[Car]
</pre> </pre>
<hr /> <hr />
<h2>Sample 3</h2> <h2>Sample 3</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
@@ -257,6 +256,7 @@
C -->|Two| E[\iPhone\] C -->|Two| E[\iPhone\]
C -->|Three| F[Car] C -->|Three| F[Car]
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -268,10 +268,9 @@
C -->|Two| E[\iPhone\] C -->|Two| E[\iPhone\]
C -->|Three| F[Car] C -->|Three| F[Car]
</pre> </pre>
<hr /> <hr />
<h2>Sample 4</h2> <h2>Sample 4</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -296,6 +295,7 @@
35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails) 35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails) 36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -321,10 +321,9 @@
35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails) 35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails) 36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
</pre> </pre>
<hr /> <hr />
<h2>Sample 5</h2> <h2>Sample 5</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
@@ -391,6 +390,7 @@
9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -458,10 +458,9 @@
9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
</pre> </pre>
<hr /> <hr />
<h2>Sample 6</h2> <h2>Sample 6</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
@@ -469,6 +468,7 @@
a1-->a2 a1-->a2
end end
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -477,10 +477,9 @@
a1-->a2 a1-->a2
end end
</pre> </pre>
<hr /> <hr />
<h2>Sample 7</h2> <h2>Sample 7</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
@@ -511,6 +510,7 @@
style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -542,10 +542,9 @@
style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
</pre> </pre>
<hr /> <hr />
<h2>Sample 8</h2> <h2>Sample 8</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -562,6 +561,7 @@
3000" 3000"
style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -579,10 +579,9 @@
3000" 3000"
style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px
</pre> </pre>
<hr /> <hr />
<h2>Sample 9</h2> <h2>Sample 9</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
@@ -597,6 +596,7 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -612,10 +612,9 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr /> <hr />
<h2>Sample 10</h2> <h2>Sample 10</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
@@ -631,6 +630,7 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -647,10 +647,9 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr /> <hr />
<h2>Sample 11</h2> <h2>Sample 11</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -666,6 +665,7 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -682,10 +682,9 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr /> <hr />
<h2>Sample 12</h2> <h2>Sample 12</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -705,6 +704,7 @@
classDef someclass fill:#f96; classDef someclass fill:#f96;
class A someclass; class A someclass;
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -725,10 +725,9 @@
classDef someclass fill:#f96; classDef someclass fill:#f96;
class A someclass; class A someclass;
</pre> </pre>
<hr /> <hr />
<h2>Sample 13</h2> <h2>Sample 13</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -742,6 +741,7 @@
linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px
linkStyle 2 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -756,10 +756,9 @@
linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px
linkStyle 2 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px
</pre> </pre>
<hr /> <hr />
<h2>Sample 14</h2> <h2>Sample 14</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -769,6 +768,7 @@
linkStyle 1 stroke:greenyellow,stroke-width:2px linkStyle 1 stroke:greenyellow,stroke-width:2px
style C fill:greenyellow,stroke:green,stroke-width:4px style C fill:greenyellow,stroke:green,stroke-width:4px
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -779,10 +779,9 @@
linkStyle 1 stroke:greenyellow,stroke-width:2px linkStyle 1 stroke:greenyellow,stroke-width:2px
style C fill:greenyellow,stroke:green,stroke-width:4px style C fill:greenyellow,stroke:green,stroke-width:4px
</pre> </pre>
<hr /> <hr />
<h2>Sample 15</h2>
<h2>Sample 15</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
@@ -801,6 +800,7 @@
click E "notes://do-your-thing/id" "other protocol test" click E "notes://do-your-thing/id" "other protocol test"
click F "javascript:alert('test')" "script test" click F "javascript:alert('test')" "script test"
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -820,10 +820,9 @@
click E "notes://do-your-thing/id" "other protocol test" click E "notes://do-your-thing/id" "other protocol test"
click F "javascript:alert('test')" "script test" click F "javascript:alert('test')" "script test"
</pre> </pre>
<hr /> <hr />
<h2>Sample 16</h2>
<h2>Sample 16</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -840,6 +839,7 @@
click B "flowchart.html#link-clicked" "link test" click B "flowchart.html#link-clicked" "link test"
click D testClick "click test" click D testClick "click test"
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -857,10 +857,9 @@
click B "flowchart.html#link-clicked" "link test" click B "flowchart.html#link-clicked" "link test"
click D testClick "click test" click D testClick "click test"
</pre> </pre>
<hr /> <hr />
<h2>Sample 17</h2>
<h2>Sample 17</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
@@ -873,6 +872,7 @@
class A myClass1 class A myClass1
class D myClass2 class D myClass2
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -886,10 +886,9 @@
class A myClass1 class A myClass1
class D myClass2 class D myClass2
</pre> </pre>
<hr /> <hr />
<h2>Sample 18</h2>
<h2>Sample 18</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
@@ -937,6 +936,7 @@
style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -985,10 +985,9 @@
style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
</pre> </pre>
<hr /> <hr />
<h2>Sample 19</h2>
<h2>Sample 19</h2>
<h3>graph</h3> <h3>graph</h3>
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
@@ -1036,6 +1035,7 @@
style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
</pre> </pre>
<hr />
<h3>flowchart</h3> <h3>flowchart</h3>
<pre class="mermaid"> <pre class="mermaid">
@@ -1087,7 +1087,6 @@
style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
style O2 stroke:#0000ff,fill:#ccccff,color:#0000ff style O2 stroke:#0000ff,fill:#ccccff,color:#0000ff
</pre> </pre>
<hr /> <hr />
<hr /> <hr />
@@ -1189,6 +1188,8 @@
sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
A[Christmas] -->|Get money| B(Go shopping) A[Christmas] -->|Get money| B(Go shopping)
@@ -1197,6 +1198,8 @@
C -->|Two| E[iPhone] C -->|Two| E[iPhone]
C -->|Three| F[Car] C -->|Three| F[Car]
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
A[/Christmas\] A[/Christmas\]
@@ -1206,6 +1209,8 @@
C -->|Two| E[\iPhone\] C -->|Two| E[\iPhone\]
C -->|Three| F[Car] C -->|Three| F[Car]
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
47(SAM.CommonFA.FMESummary)-->48(SAM.CommonFA.CommonFAFinanceBudget) 47(SAM.CommonFA.FMESummary)-->48(SAM.CommonFA.CommonFAFinanceBudget)
@@ -1229,6 +1234,8 @@
35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails) 35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails) 36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
9e122290_1ec3_e711_8c5a_005056ad0002("fa:fa-creative-commons My System | Test Environment") 9e122290_1ec3_e711_8c5a_005056ad0002("fa:fa-creative-commons My System | Test Environment")
@@ -1294,12 +1301,16 @@
9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
subgraph One subgraph One
a1-->a2 a1-->a2
end end
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
A A
@@ -1329,6 +1340,8 @@
style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
456ac9b0d15a8b7f1e71073221059886[1051 AAA fa:fa-check] 456ac9b0d15a8b7f1e71073221059886[1051 AAA fa:fa-check]
@@ -1344,6 +1357,8 @@
3000" 3000"
style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
A[Christmas] -->|Get money| B(Go shopping) A[Christmas] -->|Get money| B(Go shopping)
@@ -1357,6 +1372,8 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
A([stadium shape test]) A([stadium shape test])
@@ -1371,6 +1388,8 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
A[[subroutine shape test]] A[[subroutine shape test]]
@@ -1385,6 +1404,8 @@
class A someclass; class A someclass;
class C someclass; class C someclass;
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
A[(cylindrical<br />shape<br />test)] A[(cylindrical<br />shape<br />test)]
@@ -1403,6 +1424,8 @@
classDef someclass fill:#f96; classDef someclass fill:#f96;
class A someclass; class A someclass;
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
A1[Multi<br>Line] -->|Multi<br>Line| B1(Multi<br>Line) A1[Multi<br>Line] -->|Multi<br>Line| B1(Multi<br>Line)
@@ -1415,6 +1438,8 @@
linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px
linkStyle 2 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
A(( )) -->|step 1| B(( )) A(( )) -->|step 1| B(( ))
@@ -1423,6 +1448,8 @@
linkStyle 1 stroke:greenyellow,stroke-width:2px linkStyle 1 stroke:greenyellow,stroke-width:2px
style C fill:greenyellow,stroke:green,stroke-width:4px style C fill:greenyellow,stroke:green,stroke-width:4px
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TB graph TB
TITLE["Link Click Events<br>(click the nodes below)"] TITLE["Link Click Events<br>(click the nodes below)"]
@@ -1441,6 +1468,7 @@
click F "javascript:alert('test')" "script test" click F "javascript:alert('test')" "script test"
</pre> </pre>
<hr /> <hr />
<pre class="mermaid"> <pre class="mermaid">
graph LR graph LR
A[red<br>text] -->|red<br>text| B(blue<br>text) A[red<br>text] -->|red<br>text| B(blue<br>text)
@@ -1456,6 +1484,8 @@
click B "index.html#link-clicked" "link test" click B "index.html#link-clicked" "link test"
click D testClick "click test" click D testClick "click test"
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
graph TD graph TD
A[myClass1] --> B[default] & C[default] A[myClass1] --> B[default] & C[default]
@@ -1467,6 +1497,7 @@
class A myClass1 class A myClass1
class D myClass2 class D myClass2
</pre> </pre>
<hr />
<h1 id="link-clicked">Anchor for "link-clicked" test</h1> <h1 id="link-clicked">Anchor for "link-clicked" test</h1>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -13,6 +13,7 @@
</head> </head>
<body> <body>
<h1>Gantt chart diagram demos</h1>
<!-- accDescription Tasks for Q4 --> <!-- accDescription Tasks for Q4 -->
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
@@ -27,6 +28,7 @@
Task in sec :2014-01-12 , 12d Task in sec :2014-01-12 , 12d
another task : 24d another task : 24d
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
@@ -44,6 +46,8 @@
开发 :a, 2021-10-09, 4d 开发 :a, 2021-10-09, 4d
测试 :after a, 4d 测试 :after a, 4d
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
title Exclusive end dates (Manual date should end on 3d) title Exclusive end dates (Manual date should end on 3d)
@@ -53,6 +57,8 @@
2 Days: 1, 2019-01-01,2d 2 Days: 1, 2019-01-01,2d
Manual Date: 2, 2019-01-01,2019-01-03 Manual Date: 2, 2019-01-01,2019-01-03
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
title Inclusive end dates (Manual date should end on 4th) title Inclusive end dates (Manual date should end on 4th)
@@ -63,6 +69,8 @@
2 Days: 1, 2019-01-01,2d 2 Days: 1, 2019-01-01,2d
Manual Date: 2, 2019-01-01,2019-01-03 Manual Date: 2, 2019-01-01,2019-01-03
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
title Hide today marker (vertical line should not be visible) title Hide today marker (vertical line should not be visible)
@@ -72,6 +80,8 @@
section Section1 section Section1
Today: 1, -1h Today: 1, -1h
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
title Style today marker (vertical line should be 5px wide and half-transparent blue) title Style today marker (vertical line should be 5px wide and half-transparent blue)
@@ -81,6 +91,7 @@
section Section1 section Section1
Today: 1, -1h Today: 1, -1h
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
@@ -120,6 +131,8 @@
Add gantt diagram to demo page : 20h Add gantt diagram to demo page : 20h
Add another diagram to demo page : 48h Add another diagram to demo page : 48h
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
gantt gantt
dateFormat YYYY-MM-DD dateFormat YYYY-MM-DD
@@ -151,6 +164,7 @@
Add gantt diagram to demo page : 20h Add gantt diagram to demo page : 20h
Add another diagram to demo page : 48h Add another diagram to demo page : 48h
</pre> </pre>
<hr />
<script> <script>
function ganttTestClick(a, b, c) { function ganttTestClick(a, b, c) {
@@ -167,6 +181,7 @@
}, 100); }, 100);
} }
</script> </script>
<script src="./mermaid.js"></script> <script src="./mermaid.js"></script>
<script> <script>
mermaid.initialize({ mermaid.initialize({

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>Git diagram demo</h1>
<pre class="mermaid"> <pre class="mermaid">
gitGraph: gitGraph:
options options

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -15,6 +15,13 @@
<body> <body>
<h1>Mermaid quick test and demo pages</h1> <h1>Mermaid quick test and demo pages</h1>
<p>
Some of these pages have duplicates; some are slow to load because they have so many graphs.
</p>
<p>
If you'd like to clean up one of the pages, please feel free to
<a href="https://github.com/mermaid-js/mermaid/pulls">submit a pull request (PR).</a>
</p>
<ul> <ul>
<li> <li>
@@ -26,6 +33,9 @@
<li> <li>
<h2><a href="./dataflowchart.html">Data flow charts</a></h2> <h2><a href="./dataflowchart.html">Data flow charts</a></h2>
</li> </li>
<li>
<h2><a href="./er.html">Entity Relation diagram</a></h2>
</li>
<li> <li>
<h2><a href="./flowchart.html">Flow charts</a></h2> <h2><a href="./flowchart.html">Flow charts</a></h2>
</li> </li>
@@ -51,93 +61,5 @@
<h2><a href="./state.html">State</a></h2> <h2><a href="./state.html">State</a></h2>
</li> </li>
</ul> </ul>
<script src="./mermaid.js"></script>
<script>
const ALLOWED_TAGS = [
'a',
'b',
'blockquote',
'br',
'dd',
'div',
'dl',
'dt',
'em',
'foreignObject',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'h7',
'h8',
'hr',
'i',
'li',
'ul',
'ol',
'p',
'pre',
'span',
'strike',
'strong',
'table',
'tbody',
'td',
'tfoot',
'th',
'thead',
'tr',
];
mermaid.initialize({
theme: 'forest',
// themeCSS: '.node rect { fill: red; }',
logLevel: 3,
securityLevel: 'loose',
flowchart: { curve: 'basis' },
gantt: { axisFormat: '%m/%d/%Y' },
sequence: { actorMargin: 50 },
dompurifyConfig: {
USE_PROFILES: {
svg: true,
},
ADD_TAGS: ALLOWED_TAGS,
ADD_ATTR: ['transform-origin'],
},
// sequenceDiagram: { actorMargin: 300 } // deprecated
});
</script>
<script>
function ganttTestClick(a, b, c) {
console.log('a:', a);
console.log('b:', b);
console.log('c:', c);
}
function testClick(nodeId) {
console.log('clicked', nodeId);
var originalBgColor = document.querySelector('body').style.backgroundColor;
document.querySelector('body').style.backgroundColor = 'yellow';
setTimeout(function () {
document.querySelector('body').style.backgroundColor = originalBgColor;
}, 100);
}
</script>
<script>
const testLineEndings = (test, input) => {
try {
mermaid.render(test, input, () => {
//no-op
});
} catch (err) {
console.error('Error in %s:\n\n%s', test, err);
}
};
testLineEndings('CR', 'graph LR\rsubgraph CR\rA --> B\rend');
testLineEndings('LF', 'graph LR\nsubgraph LF\nA --> B\nend');
testLineEndings('CRLF', 'graph LR\r\nsubgraph CRLF\r\nA --> B\r\nend');
</script>
</body> </body>
</html> </html>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>Journey diagram demo</h1>
<pre class="mermaid"> <pre class="mermaid">
journey journey
title My working day title My working day

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>Pie chart demos</h1>
<pre class="mermaid"> <pre class="mermaid">
pie title Pets adopted by volunteers pie title Pets adopted by volunteers
accTitle: simple pie char demo accTitle: simple pie char demo
@@ -23,6 +24,7 @@
"Rats" : 15 "Rats" : 15
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
pie pie
title Key elements in Product X title Key elements in Product X
@@ -35,7 +37,7 @@
</pre> </pre>
<script type="module"> <script type="module">
import mermaid from '../src/mermaid'; import mermaid from '../packages/mermaid';
mermaid.initialize({ mermaid.initialize({
theme: 'forest', theme: 'forest',
// themeCSS: '.node rect { fill: red; }', // themeCSS: '.node rect { fill: red; }',

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>Requirement diagram demos</h1>
<pre class="mermaid"> <pre class="mermaid">
requirementDiagram requirementDiagram
accTitle: Requirments demo in black and white accTitle: Requirments demo in black and white

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>Sequence diagram demos</h1>
<pre class="mermaid"> <pre class="mermaid">
sequenceDiagram sequenceDiagram
accTitle: test the accTitle accTitle: test the accTitle
@@ -59,7 +60,7 @@
Alice -->> John: Parallel message 2 Alice -->> John: Parallel message 2
end end
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
sequenceDiagram sequenceDiagram
accTitle: Sequence diagram title is here accTitle: Sequence diagram title is here
@@ -96,6 +97,8 @@
Alice -->> John: Parallel message 2 Alice -->> John: Parallel message 2
end end
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
sequenceDiagram sequenceDiagram
participant 1 as multiline<br>using #lt;br#gt; participant 1 as multiline<br>using #lt;br#gt;
@@ -111,6 +114,8 @@
4->>1: multiline<br />using #lt;br /#gt; 4->>1: multiline<br />using #lt;br /#gt;
note right of 1: multiline<br />using #lt;br /#gt; note right of 1: multiline<br />using #lt;br /#gt;
</pre> </pre>
<hr />
<pre class="mermaid"> <pre class="mermaid">
sequenceDiagram sequenceDiagram
autonumber autonumber
@@ -121,6 +126,7 @@
autonumber off autonumber off
John-->>Alice: I feel great! John-->>Alice: I feel great!
</pre> </pre>
<hr />
<script src="./mermaid.js"></script> <script src="./mermaid.js"></script>
<script> <script>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -14,6 +14,7 @@
</head> </head>
<body> <body>
<h1>State diagram demos</h1>
<pre class="mermaid"> <pre class="mermaid">
stateDiagram stateDiagram
accTitle: This is the accessible title accTitle: This is the accessible title

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Version 8.6.0 Changes # Version 8.6.0 Changes

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Change Log # Change Log

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Configuration # Configuration

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# About Mermaid # About Mermaid

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Summary # Summary

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
<!-- Generated by documentation.js. Update this documentation by updating the source code. --> <!-- Generated by documentation.js. Update this documentation by updating the source code. -->

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Tutorials # Tutorials

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
- Getting started - Getting started

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
- 📔 Introduction - 📔 Introduction

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Accessibility Options # Accessibility Options

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Breaking changes # Breaking changes

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# C4 Diagrams # C4 Diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Class diagrams # Class diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Configuration # Configuration

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Development and Contribution 🙌 # Development and Contribution 🙌
@@ -72,9 +72,8 @@ This tests the rendering and visual appearance of the diagrams. This ensures tha
To start working with the e2e tests: To start working with the e2e tests:
1. Run `yarn dev` to start the dev server 1. Run `pnpm run dev` to start the dev server
2. Start **Cypress** by running `cypress open` in the **mermaid** folder. 2. Start **Cypress** by running `pnpm exec cypress open` in the **mermaid** folder.
(Make sure you have path to Cypress in order, the binary is located in `node_modules/.bin`).
The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress.

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
--- ---

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Directives # Directives

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Entity Relationship Diagrams # Entity Relationship Diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Examples # Examples

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Frequently Asked Questions # Frequently Asked Questions

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Flowcharts - Basic Syntax # Flowcharts - Basic Syntax

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Gantt diagrams # Gantt diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Gitgraph Diagrams # Gitgraph Diagrams

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<!--# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs.--><head> <!--# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.--><head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title> <title>
mermaid - Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, mermaid - Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams,

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Integrations # Integrations

View File

@@ -1 +1 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<!--# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs.--><head> <!--# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.--><head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" />

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# mermaid CLI # mermaid CLI

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Mindmap # Mindmap

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Advanced n00b mermaid (Coming soon..) # Advanced n00b mermaid (Coming soon..)

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# A Mermaid User-Guide for Beginners # A Mermaid User-Guide for Beginners

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Overview for Beginners # Overview for Beginners

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Diagram Syntax # Diagram Syntax

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Adding a New Diagram/Chart 📊 # Adding a New Diagram/Chart 📊

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Pie chart diagrams # Pie chart diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Requirement Diagram # Requirement Diagram

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Security # Security

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Sequence diagrams # Sequence diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# State diagrams # State diagrams

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Theme Configuration # Theme Configuration
@@ -157,7 +157,7 @@ Variables that are unique to some diagrams can be affected by changes in Theme V
``` ```
| Variable | Default/Base/Factor value | Calc | Description | | Variable | Default/Base/Factor value | Calc | Description |
| -------------------- | ------------------------------ | ---- | -------------------------------------------------------------------------------------------------------------------------------- | --- | --- | | -------------------- | ------------------------------ | ---- | -------------------------------------------------------------------------------------------------------------------------------- |
| darkMode | false | | Boolean Value that dictates how to calculate colors. "true" will activate darkmode. | | darkMode | false | | Boolean Value that dictates how to calculate colors. "true" will activate darkmode. |
| background | #f4f4f4 | | Used to calculate color for items that should either be background colored or contrasting to the background. | | background | #f4f4f4 | | Used to calculate color for items that should either be background colored or contrasting to the background. |
| fontFamily | "trebuchet ms", verdana, arial | | | | fontFamily | "trebuchet ms", verdana, arial | | |
@@ -168,7 +168,7 @@ Variables that are unique to some diagrams can be affected by changes in Theme V
| secondaryColor | based on primaryColor | \* | | | secondaryColor | based on primaryColor | \* | |
| secondaryBorderColor | based on secondaryColor | \* | Color to be used as border in nodes using secondaryColor | | secondaryBorderColor | based on secondaryColor | \* | Color to be used as border in nodes using secondaryColor |
| secondaryTextColor | based on secondaryColor | \* | Color to be used as text color in nodes using secondaryColor | | secondaryTextColor | based on secondaryColor | \* | Color to be used as text color in nodes using secondaryColor |
| tertiaryColor | based on primaryColor | \* | | | | | tertiaryColor | based on primaryColor | \* | |
| tertiaryBorderColor | based on tertiaryColor | \* | Color to be used as border in nodes using tertiaryColor | | tertiaryBorderColor | based on tertiaryColor | \* | Color to be used as border in nodes using tertiaryColor |
| tertiaryTextColor | based on tertiaryColor | \* | Color to be used as text color in nodes using tertiaryColor | | tertiaryTextColor | based on tertiaryColor | \* | Color to be used as text color in nodes using tertiaryColor |
| noteBkgColor | #fff5ad | | Color used as background in notes | | noteBkgColor | #fff5ad | | Color used as background in notes |

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Upgrading # Upgrading

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# Usage # Usage

View File

@@ -1,4 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in src/docs. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.
# User Journey Diagram # User Journey Diagram

View File

@@ -7,7 +7,7 @@
"module": "dist/mermaid.core.mjs", "module": "dist/mermaid.core.mjs",
"types": "dist/mermaid.d.ts", "types": "dist/mermaid.d.ts",
"type": "module", "type": "module",
"packageManager": "pnpm@7.12.2", "packageManager": "pnpm@7.13.2",
"exports": { "exports": {
".": { ".": {
"require": "./dist/mermaid.min.js", "require": "./dist/mermaid.min.js",
@@ -37,6 +37,10 @@
"todo-postbuild": "documentation build src/mermaidAPI.ts src/config.ts src/defaultConfig.ts --shallow -f md --markdown-toc false > src/docs/Setup.md && prettier --write src/docs/Setup.md", "todo-postbuild": "documentation build src/mermaidAPI.ts src/config.ts src/defaultConfig.ts --shallow -f md --markdown-toc false > src/docs/Setup.md && prettier --write src/docs/Setup.md",
"release": "pnpm build", "release": "pnpm build",
"lint": "eslint --cache --ignore-path .gitignore . && pnpm lint:jison && prettier --check .", "lint": "eslint --cache --ignore-path .gitignore . && pnpm lint:jison && prettier --check .",
"vdocs:dev": "vitepress dev vdocs",
"vdocs:build": "vitepress build vdocs",
"vdocs:serve": "vitepress serve vdocs",
"postbuild": "echo 'building docs from code here soon'",
"lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .",
"lint:jison": "ts-node-esm --transpileOnly packages/mermaid/src/jison/lint.mts", "lint:jison": "ts-node-esm --transpileOnly packages/mermaid/src/jison/lint.mts",
"cypress": "cypress run", "cypress": "cypress run",
@@ -46,7 +50,7 @@
"test": "pnpm lint && vitest run", "test": "pnpm lint && vitest run",
"test:watch": "vitest --coverage --watch", "test:watch": "vitest --coverage --watch",
"prepublishOnly": "pnpm build && pnpm test", "prepublishOnly": "pnpm build && pnpm test",
"todo-prepare": "concurrently \"husky install\" \"pnpm build\"", "prepare": "concurrently \"husky install\" \"pnpm build\"",
"pre-commit": "lint-staged" "pre-commit": "lint-staged"
}, },
"repository": { "repository": {
@@ -67,8 +71,8 @@
}, },
"dependencies": { "dependencies": {
"@braintree/sanitize-url": "^6.0.0", "@braintree/sanitize-url": "^6.0.0",
"@types/node": "^18.8.1",
"@types/uuid": "^8.3.4", "@types/uuid": "^8.3.4",
"@types/node": "^18.7.21",
"d3": "^7.0.0", "d3": "^7.0.0",
"dagre": "^0.8.5", "dagre": "^0.8.5",
"dagre-d3": "^0.6.4", "dagre-d3": "^0.6.4",
@@ -84,54 +88,59 @@
"uuid": "^9.0.0" "uuid": "^9.0.0"
}, },
"devDependencies": { "devDependencies": {
"@applitools/eyes-cypress": "^3.25.7", "@applitools/eyes-cypress": "^3.27.1",
"@commitlint/cli": "^17.1.2", "@commitlint/cli": "^17.1.2",
"@commitlint/config-conventional": "^17.0.0", "@commitlint/config-conventional": "^17.1.0",
"@types/d3": "^7.4.0", "@types/d3": "^7.4.0",
"@types/dompurify": "^2.3.4", "@types/dompurify": "^2.3.4",
"@types/eslint": "^8.4.6", "@types/eslint": "^8.4.6",
"@types/express": "^4.17.13", "@types/express": "^4.17.14",
"@types/jsdom": "^20.0.0", "@types/jsdom": "^20.0.0",
"@types/lodash": "^4.14.185", "@types/lodash": "^4.14.186",
"@types/prettier": "^2.7.1", "@types/prettier": "^2.7.1",
"@types/stylis": "^4.0.2", "@types/stylis": "^4.0.2",
"@typescript-eslint/eslint-plugin": "^5.37.0", "@typescript-eslint/eslint-plugin": "^5.39.0",
"@typescript-eslint/parser": "^5.37.0", "@typescript-eslint/parser": "^5.39.0",
"@vitest/coverage-c8": "^0.23.2", "@vitest/coverage-c8": "^0.23.4",
"@vitest/ui": "^0.23.2", "@vitest/ui": "^0.23.4",
"concurrently": "^7.4.0", "concurrently": "^7.4.0",
"coveralls": "^3.1.1", "coveralls": "^3.1.1",
"cypress": "^10.0.0", "cypress": "^10.0.0",
"cypress-image-snapshot": "^4.0.1", "cypress-image-snapshot": "^4.0.1",
"documentation": "13.2.0", "documentation": "13.2.0",
"esbuild": "^0.15.10",
"eslint": "^8.24.0", "eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.5.0",
"eslint-plugin-cypress": "^2.12.1", "eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-html": "^7.1.0", "eslint-plugin-html": "^7.1.0",
"eslint-plugin-jest": "^27.0.4", "eslint-plugin-jest": "^27.1.0",
"eslint-plugin-jsdoc": "^39.3.6", "eslint-plugin-jsdoc": "^39.3.6",
"eslint-plugin-json": "^3.1.0", "eslint-plugin-json": "^3.1.0",
"eslint-plugin-markdown": "^3.0.0", "eslint-plugin-markdown": "^3.0.0",
"express": "^4.18.1", "express": "^4.18.1",
"globby": "^13.1.2", "globby": "^13.1.2",
"husky": "^8.0.0", "husky": "^8.0.1",
"identity-obj-proxy": "^3.0.0", "identity-obj-proxy": "^3.0.0",
"jest": "29.x", "jest": "29.x",
"jison": "^0.4.18", "jison": "^0.4.18",
"jsdom": "^20.0.0", "jsdom": "^20.0.1",
"lint-staged": "^13.0.0", "lint-staged": "^13.0.3",
"moment": "^2.23.0", "markdown-it": "^13.0.1",
"path-browserify": "^1.0.1", "path-browserify": "^1.0.1",
"pnpm": "^7.13.2",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"prettier-plugin-jsdoc": "^0.4.2", "prettier-plugin-jsdoc": "^0.4.2",
"remark": "^14.0.2", "remark": "^14.0.2",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"start-server-and-test": "^1.12.6", "start-server-and-test": "^1.14.0",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typescript": "^4.8.3", "typescript": "^4.8.4",
"unist-util-flatmap": "^1.0.0", "unist-util-flatmap": "^1.0.0",
"vite": "^3.0.9", "vite": "^3.1.4",
"vitest": "^0.23.1" "vitepress": "^1.0.0-alpha.19",
"vitepress-plugin-mermaid": "^2.0.8",
"vitepress-plugin-search": "^1.0.4-alpha.11",
"vitest": "^0.23.4"
}, },
"resolutions": { "resolutions": {
"d3": "^7.0.0" "d3": "^7.0.0"

View File

@@ -29,10 +29,6 @@
"lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .", "lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .",
"lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .",
"lint:jison": "ts-node-esm src/jison/lint.mts", "lint:jison": "ts-node-esm src/jison/lint.mts",
"ci": "vitest run",
"test": "yarn lint && vitest run",
"test:watch": "vitest --coverage --watch",
"todo-prepublishOnly": "yarn build && yarn test",
"todo-prepare": "concurrently \"husky install ../../.husky\" \"yarn build\"", "todo-prepare": "concurrently \"husky install ../../.husky\" \"yarn build\"",
"todo-pre-commit": "lint-staged" "todo-pre-commit": "lint-staged"
}, },

View File

@@ -0,0 +1,18 @@
// @ts-ignore: TODO Fix ts errors
export const id = 'example-diagram';
/**
* Detector function that will be called by mermaid to determine if the diagram is this type of digram.
*
* @param txt The diagram text will be passed to the detector
* @returns True if the diagram text matches a diagram of this type
*/
export const detector = (txt: string) => {
return txt.match(/^\s*example-diagram/) !== null;
};
export const loadDiagram = async () => {
const { diagram } = await import('./diagram-definition');
return { id, diagram };
};

View File

@@ -5,13 +5,10 @@ import renderer from './exampleDiagramRenderer';
import styles from './styles'; import styles from './styles';
import { injectUtils } from './mermaidUtils'; import { injectUtils } from './mermaidUtils';
window.mermaid.connectDiagram( export const diagram = {
'example-diagram', db,
{ renderer,
db, parser,
renderer, styles,
parser, injectUtils,
styles, };
},
injectUtils
);

View File

@@ -1,3 +0,0 @@
export const detector = (txt: string) => {
return txt.match(/^\s*example-diagram/) !== null;
};

View File

@@ -7,8 +7,8 @@ describe('when parsing an info graph it', function () {
ex.yy = db; ex.yy = db;
}); });
it('should handle an info definition', function () { it('should handle an example-diagram definition', function () {
let str = `info let str = `example-diagram
showInfo`; showInfo`;
ex.parse(str); ex.parse(str);

View File

@@ -13,21 +13,29 @@ export const getMessage = () => {
return message; return message;
}; };
/**
* Sets the info flag
*
* @param {boolean} inf
*/
export const setInfo = (inf) => { export const setInfo = (inf) => {
info = inf; info = inf;
}; };
/** @returns Returns the info flag */
export const getInfo = () => { export const getInfo = () => {
return info; return info;
}; };
export const clear = () => {
message = '';
info = false;
};
export default { export default {
setMessage, setMessage,
getMessage, getMessage,
setInfo, setInfo,
getInfo, getInfo,
clear: () => { clear,
message = '';
info = false;
},
}; };

View File

@@ -1,6 +1,6 @@
/** Created by knut on 14-12-11. */ /** Created by knut on 14-12-11. */
import { select } from 'd3'; import { select } from 'd3';
import { log, getConfig } from './mermaidUtils'; import { log, getConfig, setupGraphViewbox } from './mermaidUtils';
/** /**
* Draws a an info picture in the tag with id: id based on the graph definition in text. * Draws a an info picture in the tag with id: id based on the graph definition in text.
@@ -10,10 +10,11 @@ import { log, getConfig } from './mermaidUtils';
* @param {any} version * @param {any} version
* @param diagObj * @param diagObj
*/ */
export const draw = (text, id, version, diagObj) => { export const draw = (text, id, version) => {
try { try {
log.debug('Rendering info diagram\n' + text); const conf = getConfig();
log.debug('Rendering example diagram\n' + text, 'Conf: ');
const THEME_COLOR_LIMIT = getConfig().themeVariables.THEME_COLOR_LIMIT;
const securityLevel = getConfig().securityLevel; const securityLevel = getConfig().securityLevel;
// Handle root and Document for when rendering in sanbox mode // Handle root and Document for when rendering in sanbox mode
let sandboxElement; let sandboxElement;
@@ -25,14 +26,34 @@ export const draw = (text, id, version, diagObj) => {
? select(sandboxElement.nodes()[0].contentDocument.body) ? select(sandboxElement.nodes()[0].contentDocument.body)
: select('body'); : select('body');
// Parse the graph definition
// parser.parse(text);
// log.debug('Parsed info diagram');
// Fetch the default direction, use TD if none was found
const svg = root.select('#' + id); const svg = root.select('#' + id);
const g = svg.append('g'); const g = svg.append('g');
let i;
for (i = 0; i < THEME_COLOR_LIMIT; i++) {
const section = g.append('g').attr('class', 'section-' + i);
section
.append('rect')
.attr('x', (i % 5) * 110)
.attr('y', Math.floor(i / 5) * 90 + 60)
.attr('width', 100)
.attr('height', 60);
section
.append('rect')
.attr('x', (i % 5) * 110)
.attr('y', Math.floor(i / 5) * 90 + 120)
.attr('class', 'inverted')
.attr('width', 100)
.attr('height', 20);
section
.append('text', 'section-' + i)
.text('Section ' + i)
.attr('x', (i % 5) * 110 + 15)
.attr('y', Math.floor(i / 5) * 90 + 95)
.attr('class', 'section-text-' + i);
}
g.append('text') // text label for the x axis g.append('text') // text label for the x axis
.attr('x', 100) .attr('x', 100)
.attr('y', 40) .attr('y', 40)
@@ -41,9 +62,8 @@ export const draw = (text, id, version, diagObj) => {
.style('text-anchor', 'middle') .style('text-anchor', 'middle')
.text('v ' + version); .text('v ' + version);
svg.attr('height', 100); // Setup the view box and size of the svg element
svg.attr('width', 400); setupGraphViewbox(undefined, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth);
// svg.attr('viewBox', '0 0 300 150');
} catch (e) { } catch (e) {
log.error('Error while rendering info diagram'); log.error('Error while rendering info diagram');
log.error(e.message); log.error(e.message);

View File

@@ -19,7 +19,6 @@ export const log: Record<keyof typeof LEVELS, typeof console.log> = {
error: warning, error: warning,
fatal: warning, fatal: warning,
}; };
export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void; export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void;
export let getConfig: () => object; export let getConfig: () => object;
export let sanitizeText: (str: string) => string; export let sanitizeText: (str: string) => string;

View File

@@ -8,7 +8,7 @@
%% %%
"info" return 'info' ; "example-diagram" return 'example-diagram' ;
[\s\n\r]+ return 'NL' ; [\s\n\r]+ return 'NL' ;
[\s]+ return 'space'; [\s]+ return 'space';
"showInfo" return 'showInfo'; "showInfo" return 'showInfo';
@@ -22,8 +22,8 @@
%% /* language grammar */ %% /* language grammar */
start start
// %{ : info document 'EOF' { return yy; } } // %{ : example-diagram document 'EOF' { return yy; } }
: info document 'EOF' { return yy; } : example-diagram document 'EOF' { return yy; }
; ;
document document

View File

@@ -1,33 +0,0 @@
// @ts-ignore: TODO Fix ts errors
import { detector } from './exampleDetector';
const scriptElement = document.currentScript as HTMLScriptElement;
const path = scriptElement.src;
const lastSlash = path.lastIndexOf('/');
const baseFolder = lastSlash < 0 ? path : path.substring(0, lastSlash + 1);
if (typeof document !== 'undefined') {
if (window.mermaid && typeof window.mermaid.detectors === 'object') {
window.mermaid.detectors.push({ id: 'example-diagram', detector });
} else {
window.mermaid = {};
window.mermaid.detectors = [{ id: 'example-diagram', detector }];
}
/*
* Wait for document loaded before starting the execution.
*/
window.addEventListener(
'load',
() => {
if (window.mermaid && typeof window.mermaid.detectors === 'object') {
window.mermaid.detectors.push({
id: 'example-diagram',
detector,
path: baseFolder,
});
}
},
false
);
}

View File

@@ -1,3 +1,29 @@
const getStyles = () => ``; import { darken, lighten, isDark } from 'khroma';
const genSections = (options) => {
let sections = '';
for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {
sections += `
.section-${i} rect {
fill: ${options['cScale' + i]};
stroke: ${options['cScalePeer' + i]};
stroke-width: 4;
}
.section-${i} rect.inverted {
fill: ${options['cScaleInv' + i]};
}
.section-${i} text {
fill: ${options['cScaleLabel' + i]};
}
`;
}
return sections;
};
const getStyles = (options) =>
`
${genSections(options)}
`;
export default getStyles; export default getStyles;

View File

@@ -29,10 +29,6 @@
"lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .", "lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .",
"lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .",
"lint:jison": "ts-node-esm src/jison/lint.mts", "lint:jison": "ts-node-esm src/jison/lint.mts",
"ci": "vitest run",
"test": "yarn lint && vitest run",
"test:watch": "vitest --coverage --watch",
"todo-prepublishOnly": "yarn build && yarn test",
"todo-prepare": "concurrently \"husky install ../../.husky\" \"yarn build\"", "todo-prepare": "concurrently \"husky install ../../.husky\" \"yarn build\"",
"todo-pre-commit": "lint-staged" "todo-pre-commit": "lint-staged"
}, },
@@ -54,8 +50,10 @@
}, },
"dependencies": { "dependencies": {
"@braintree/sanitize-url": "^6.0.0", "@braintree/sanitize-url": "^6.0.0",
"cytoscape": "^3.23.0",
"cytoscape-cose-bilkent": "^4.1.0",
"cytoscape-fcose": "^2.1.0",
"d3": "^7.0.0", "d3": "^7.0.0",
"mermaid": "workspace:*",
"non-layered-tidy-tree-layout": "^2.0.2" "non-layered-tidy-tree-layout": "^2.0.2"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -1,23 +0,0 @@
// @ts-ignore: TODO Fix ts errors
import mindmapParser from './parser/mindmap';
import * as mindmapDb from './mindmapDb';
import mindmapRenderer from './mindmapRenderer';
import mindmapStyles from './styles';
import { injectUtils } from './mermaidUtils';
// const getBaseFolder = (path: string) => {
// const parts = path.split('/');
// parts.pop();
// return parts.join('/');
// };
window.mermaid.connectDiagram(
'mindmap',
{
db: mindmapDb,
renderer: mindmapRenderer,
parser: mindmapParser,
styles: mindmapStyles,
},
injectUtils
);

View File

@@ -0,0 +1,10 @@
export const id = 'mindmap';
export const detector = (txt: string) => {
return txt.match(/^\s*mindmap/) !== null;
};
export const loadDiagram = async () => {
const { diagram } = await import('./diagram-definition');
return { id, diagram };
};

View File

@@ -0,0 +1,14 @@
// @ts-ignore: TODO Fix ts errors
import mindmapParser from './parser/mindmap';
import * as mindmapDb from './mindmapDb';
import mindmapRenderer from './mindmapRenderer';
import mindmapStyles from './styles';
import { injectUtils } from './mermaidUtils';
export const diagram = {
db: mindmapDb,
renderer: mindmapRenderer,
parser: mindmapParser,
styles: mindmapStyles,
injectUtils,
};

View File

@@ -53,29 +53,3 @@ export const injectUtils = (
sanitizeText = _sanitizeText; sanitizeText = _sanitizeText;
setupGraphViewbox = _setupGraphViewbox; setupGraphViewbox = _setupGraphViewbox;
}; };
/*
const warning = (..._args: any[]) => {
console.error('Log function was called before initialization');
};
export let log = {
trace: warning,
debug: warning,
info: warning,
warn: warning,
error: warning,
fatal: warning,
};
export let setLogLevel;
export let getConfig;
export let sanitizeText;
export let setupGraphViewbox;
export const injectUtils = (_log, _setLogLevel, _getConfig, _sanitizeText, _setupGraphViewbox) => {
log = _log;
setLogLevel = _setLogLevel;
getConfig = _getConfig;
sanitizeText = _sanitizeText;
setupGraphViewbox = _setupGraphViewbox;
};
*/

View File

@@ -132,11 +132,7 @@ export const type2Str = (type) => {
} }
}; };
export let parseError; // = (str, hash) export let parseError;
// => {
// const error = { str, hash };
// throw error;
// };
export const setErrorHandler = (handler) => { export const setErrorHandler = (handler) => {
parseError = handler; parseError = handler;
}; };
@@ -146,17 +142,3 @@ export const getLogger = () => log;
export const getNodeById = (id) => nodes[id]; export const getNodeById = (id) => nodes[id];
export const getElementById = (id) => elements[id]; export const getElementById = (id) => elements[id];
// export default {
// // getMindmap,
// // addNode,
// // clear,
// // nodeType,
// // getType,
// // decorateNode,
// // setElementForId,
// getElementById: (id) => elements[id],
// // getNodeById: (id) => nodes.find((node) => node.id === id),
// getNodeById: (id) => nodes[id],
// // type2Str,
// // parseError
// };

View File

@@ -1,8 +0,0 @@
const detector = function detect(txt) {
if (txt.match(/^\s*mindmap/)) {
return 'mindmap';
}
return null;
};
export default detector;

View File

@@ -1,3 +0,0 @@
export const mindmapDetector = (txt: string) => {
return txt.match(/^\s*mindmap/) !== null;
};

View File

@@ -2,10 +2,13 @@
import { select } from 'd3'; import { select } from 'd3';
import { log, getConfig, setupGraphViewbox } from './mermaidUtils'; import { log, getConfig, setupGraphViewbox } from './mermaidUtils';
import svgDraw from './svgDraw'; import svgDraw from './svgDraw';
import { BoundingBox, Layout } from 'non-layered-tidy-tree-layout'; import cytoscape from 'cytoscape';
import clone from 'fast-clone'; import coseBilkent from 'cytoscape-cose-bilkent';
import * as db from './mindmapDb'; import * as db from './mindmapDb';
// Inject the layout algorithm into cytoscape
cytoscape.use(coseBilkent);
/** /**
* @param {any} svg The svg element to draw the diagram onto * @param {any} svg The svg element to draw the diagram onto
* @param {object} mindmap The maindmap data and hierarchy * @param {object} mindmap The maindmap data and hierarchy
@@ -27,184 +30,138 @@ function drawNodes(svg, mindmap, section, conf) {
* @param parent * @param parent
* @param depth * @param depth
* @param section * @param section
* @param conf * @param edgesEl
* @param cy
*/ */
function drawEdges(edgesElem, mindmap, parent, depth, section, conf) { function drawEdges(edgesEl, cy) {
if (parent) { cy.edges().map((edge, id) => {
svgDraw.drawEdge(edgesElem, mindmap, parent, depth, section, conf); const data = edge.data();
} if (edge[0]._private.bodyBounds) {
if (mindmap.children) { const bounds = edge[0]._private.rscratch;
mindmap.children.forEach((child, index) => { log.trace('Edge: ', id, data);
drawEdges(edgesElem, child, mindmap, depth + 1, section < 0 ? index : section, conf); edgesEl
}); .insert('path')
} .attr(
'd',
`M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} `
)
.attr('class', 'edge section-edge-' + data.section + ' edge-depth-' + data.depth);
}
});
} }
/** /**
* @param mindmap * @param {any} svg The svg element to draw the diagram onto
* @param callback * @param {object} mindmap The maindmap data and hierarchy
* @param section
* @param cy
* @param {object} conf The configuration object
* @param level
*/ */
function eachNode(mindmap, callback) { function addNodes(mindmap, cy, conf, level) {
callback(mindmap); cy.add({
group: 'nodes',
data: {
id: mindmap.id,
labelText: mindmap.descr,
height: mindmap.height,
width: mindmap.width,
level: level,
nodeId: mindmap.id,
padding: mindmap.padding,
type: mindmap.type,
},
position: {
x: mindmap.x,
y: mindmap.y,
},
});
if (mindmap.children) { if (mindmap.children) {
mindmap.children.forEach((child) => { mindmap.children.forEach((child) => {
eachNode(child, callback); addNodes(child, cy, conf, level + 1);
}); cy.add({
} group: 'edges',
} data: {
/** @param {object} mindmap */ id: `${mindmap.id}_${child.id}`,
function transpose(mindmap) { source: mindmap.id,
eachNode(mindmap, (node) => { target: child.id,
const orgWidth = node.width; depth: level,
const orgX = node.x; section: child.section,
node.width = node.height; },
node.height = orgWidth;
node.x = node.y;
node.y = orgX;
});
return mindmap;
}
/** @param {object} mindmap */
function bottomToUp(mindmap) {
log.debug('bottomToUp', mindmap);
eachNode(mindmap.result, (node) => {
// node.y = node.y - (node.y - bb.top) * 2 - node.height;
node.y = node.y - (node.y - 0) * 2 - node.height;
});
return mindmap;
}
/** @param {object} mindmap The mindmap hierarchy */
function rightToLeft(mindmap) {
eachNode(mindmap.result, (node) => {
// node.y = node.y - (node.y - bb.top) * 2 - node.height;
node.x = node.x - (node.x - 0) * 2 - node.width;
});
return mindmap;
}
/**
* @param mindmap
* @param dir
*/
function layout(mindmap, dir) {
const bb = new BoundingBox(30, 60);
const layout = new Layout(bb);
switch (dir) {
case 'TB':
return layout.layout(mindmap);
case 'BT':
return bottomToUp(layout.layout(mindmap));
case 'RL': {
transpose(mindmap);
let newRes = layout.layout(mindmap);
transpose(newRes.result);
return rightToLeft(newRes);
}
case 'LR': {
transpose(mindmap);
let newRes = layout.layout(mindmap);
transpose(newRes.result);
return newRes;
}
default:
}
}
const dirFromIndex = (index) => {
const dirNum = (index + 2) % 4;
switch (dirNum) {
case 0:
return 'LR';
case 1:
return 'RL';
case 2:
return 'TB';
case 3:
return 'BT';
default:
return 'TB';
}
};
const mergeTrees = (node, trees) => {
node.x = trees[0].result.x;
node.y = trees[0].result.y;
trees.forEach((tree) => {
tree.result.children.forEach((child) => {
const dx = node.x - tree.result.x;
const dy = node.y - tree.result.y;
eachNode(child, (childNode) => {
const orgNode = db.getNodeById(childNode.id);
if (orgNode) {
orgNode.x = childNode.x + dx;
orgNode.y = childNode.y + dy;
}
}); });
}); });
}); }
return node; }
};
/** /**
* @param node * @param node
* @param conf * @param conf
* @param cy
*/ */
function layoutMindmap(node, conf) { function layoutMindmap(node, conf) {
// BoundingBox(gap, bottomPadding) return new Promise((resolve) => {
// const bb = new BoundingBox(10, 10); if (node.children.length === 0) {
// const layout = new Layout(bb); return node;
// // const layout = new HorizontalLayout(bb); }
if (node.children.length === 0) {
return node;
}
const trees = [];
// node.children.forEach((child, index) => {
// const tree = clone(node);
// tree.children = [tree.children[index]];
// trees.push(layout(tree, dirFromIndex(index), conf));
// });
let cnt = 0; // Add temporary render element
// For each direction, create a new tree with the same root, and add a ubset of the children to it. const renderEl = select('body').append('div').attr('id', 'cy').attr('style', 'display:none');
for (let i = 0; i < 4; i++) { const cy = cytoscape({
// Calculate the number of the children of the root node that will be used in this direction container: document.getElementById('cy'), // container to render in
const numChildren = style: [
Math.floor(node.children.length / 4) + (node.children.length % 4 > i ? 1 : 0); {
// Copy the original root node selector: 'edge',
const tree = clone(node); style: {
// Setup the new copy with the children to be rendered in this direction 'curve-style': 'bezier',
tree.children = []; },
for (let j = 0; j < numChildren; j++) { },
tree.children.push(node.children[cnt]); ],
cnt++; });
} // Remove element after layout
if (tree.children.length > 0) { renderEl.remove();
trees.push(layout(tree, dirFromIndex(i), conf)); addNodes(node, cy, conf, 0);
}
} // Make cytoscape care about the dimensisions of the nodes
// Let each node know the direct of its tree for when we draw the branches. cy.nodes().forEach(function (n) {
trees.forEach((tree, index) => { n.layoutDimensions = () => {
tree.result.direction = dirFromIndex(index); const data = n.data();
eachNode(tree.result, (node) => { return { w: data.width, h: data.height };
node.direction = dirFromIndex(index); };
});
cy.layout({
name: 'cose-bilkent',
quality: 'proof',
// headless: true,
styleEnabled: false,
animate: false,
}).run();
cy.ready((e) => {
log.info('Ready', e);
resolve(cy);
}); });
}); });
// Merge the trees into a single tree
mergeTrees(node, trees);
return node;
} }
/** /**
* @param node * @param node
* @param cy
* @param positionedMindmap
* @param conf * @param conf
*/ */
function positionNodes(node, conf) { function positionNodes(cy) {
svgDraw.positionNode(node, conf); cy.nodes().map((node, id) => {
if (node.children) { const data = node.data();
node.children.forEach((child) => { data.x = node.position().x;
positionNodes(child, conf); data.y = node.position().y;
}); svgDraw.positionNode(data);
} const el = db.getElementById(data.nodeId);
log.info('Id:', id, 'Position: (', node.position().x, ', ', node.position().y, ')', data);
el.attr(
'transform',
`translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})`
);
el.attr('attr', `apa-${id})`);
});
} }
/** /**
@@ -216,7 +173,7 @@ function positionNodes(node, conf) {
* @param diagObj * @param diagObj
*/ */
export const draw = (text, id, version, diagObj) => { export const draw = async (text, id, version, diagObj) => {
const conf = getConfig(); const conf = getConfig();
// This is done only for throwing the error if the text is not valid. // This is done only for throwing the error if the text is not valid.
@@ -254,11 +211,11 @@ export const draw = (text, id, version, diagObj) => {
// Next step is to layout the mindmap, giving each node a position // Next step is to layout the mindmap, giving each node a position
const positionedMindmap = layoutMindmap(mm, conf); const cy = await layoutMindmap(mm, conf);
// After this we can draw, first the edges and the then nodes with the correct position // // After this we can draw, first the edges and the then nodes with the correct position
drawEdges(edgesElem, positionedMindmap, null, 0, -1, conf); drawEdges(edgesElem, cy, conf);
positionNodes(positionedMindmap, conf); positionNodes(cy, conf);
// Setup the view box and size of the svg element // Setup the view box and size of the svg element
setupGraphViewbox(undefined, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); setupGraphViewbox(undefined, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth);

View File

@@ -1,41 +0,0 @@
// @ts-ignore: TODO Fix ts errors
import { mindmapDetector } from './mindmapDetector';
// const getBaseFolder = () => {
const scriptElement = document.currentScript as HTMLScriptElement;
const path = scriptElement.src;
const lastSlash = path.lastIndexOf('/');
const baseFolder = lastSlash < 0 ? path : path.substring(0, lastSlash + 1);
// };
// console.log('Current script', getBaseFolder(scriptElement !== null ? scriptElement.src : '')); // eslint-disable-line no-console
if (typeof document !== 'undefined') {
if (window.mermaid && typeof window.mermaid.detectors === 'object') {
window.mermaid.detectors.push({ id: 'mindmap', detector: mindmapDetector });
} else {
// console.error('window.mermaid.detectors was not found!'); // eslint-disable-line no-console
window.mermaid = {};
window.mermaid.detectors = [{ id: 'mindmap', detector: mindmapDetector }];
// console.error('Detectors now:', window.mermaid.detectors); // eslint-disable-line no-console
}
/*!
* Wait for document loaded before starting the execution.
*/
window.addEventListener(
'load',
() => {
if (window.mermaid && typeof window.mermaid.detectors === 'object') {
window.mermaid.detectors.push({
id: 'mindmap',
detector: mindmapDetector,
path: baseFolder,
});
// console.error(window.mermaid.detectors); // eslint-disable-line no-console
}
},
false
);
}

View File

@@ -3,8 +3,8 @@ import { darken, lighten, isDark } from 'khroma';
const genSections = (options) => { const genSections = (options) => {
let sections = ''; let sections = '';
for (let i = 0; i < 8; i++) { for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {
options['lineColor' + i] = options['lineColor' + i] || options['gitInv' + i]; options['lineColor' + i] = options['lineColor' + i] || options['cScaleInv' + i];
if (isDark(options['lineColor' + i])) { if (isDark(options['lineColor' + i])) {
options['lineColor' + i] = lighten(options['lineColor' + i], 20); options['lineColor' + i] = lighten(options['lineColor' + i], 20);
} else { } else {
@@ -12,25 +12,25 @@ const genSections = (options) => {
} }
} }
for (let i = 0; i < 8; i++) { for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {
const sw = '' + (17 - 3 * i); const sw = '' + (17 - 3 * i);
sections += ` sections += `
.section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${ .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${
i - 1 i - 1
} path { } path {
fill: ${options['git' + i]}; fill: ${options['cScale' + i]};
} }
.section-${i - 1} text { .section-${i - 1} text {
fill: ${options['gitBranchLabel' + i]}; fill: ${options['cScaleLabel' + i]};
// fill: ${options['gitInv' + i]}; // fill: ${options['gitInv' + i]};
} }
.node-icon-${i - 1} { .node-icon-${i - 1} {
font-size: 40px; font-size: 40px;
color: ${options['gitBranchLabel' + i]}; color: ${options['cScaleLabel' + i]};
// color: ${options['gitInv' + i]}; // color: ${options['gitInv' + i]};
} }
.section-edge-${i - 1}{ .section-edge-${i - 1}{
stroke: ${options['git' + i]}; stroke: ${options['cScale' + i]};
} }
.edge-depth-${i - 1}{ .edge-depth-${i - 1}{
stroke-width: ${sw}; stroke-width: ${sw};

View File

@@ -1,5 +1,6 @@
import { select } from 'd3'; import { select } from 'd3';
import * as db from './mindmapDb'; import * as db from './mindmapDb';
const MAX_SECTIONS = 12;
/** /**
* @param {string} text The text to be wrapped * @param {string} text The text to be wrapped
@@ -159,16 +160,19 @@ const roundedRectBkg = function (elem, node) {
* @param {object} elem The D3 dom element in which the node is to be added * @param {object} elem The D3 dom element in which the node is to be added
* @param {object} node The node to be added * @param {object} node The node to be added
* @param section * @param section
* @param fullSection
* @param {object} conf The configuration object * @param {object} conf The configuration object
* @returns {number} The height nodes dom element * @returns {number} The height nodes dom element
*/ */
export const drawNode = function (elem, node, section, conf) { export const drawNode = function (elem, node, fullSection, conf) {
const section = (fullSection % MAX_SECTIONS) - 1;
const nodeElem = elem.append('g'); const nodeElem = elem.append('g');
node.section = section;
nodeElem.attr( nodeElem.attr(
'class', 'class',
(node.class ? node.class + ' ' : '') + (node.class ? node.class + ' ' : '') +
'mindmap-node ' + 'mindmap-node ' +
(section === -1 ? 'section-root' : 'section-' + section) (section < 0 ? 'section-root' : 'section-' + section)
); );
const bkgElem = nodeElem.append('g'); const bkgElem = nodeElem.append('g');
@@ -252,14 +256,15 @@ export const drawNode = function (elem, node, section, conf) {
} }
// Position the node to its coordinate // Position the node to its coordinate
if (typeof node.x !== 'undefined' && typeof node.y !== 'undefined') { // if (typeof node.x !== 'undefined' && typeof node.y !== 'undefined') {
nodeElem.attr('transform', 'translate(' + node.x + ',' + node.y + ')'); // nodeElem.attr('transform', 'translate(' + node.x + ',' + node.y + ')');
} // }
db.setElementForId(node.id, nodeElem); db.setElementForId(node.id, nodeElem);
return node.height; return node.height;
}; };
export const drawEdge = function drawEdge(edgesElem, mindmap, parent, depth, section) { export const drawEdge = function drawEdge(edgesElem, mindmap, parent, depth, fullSection) {
const section = (fullSection % MAX_SECTIONS) - 1;
const sx = parent.x + parent.width / 2; const sx = parent.x + parent.width / 2;
const sy = parent.y + parent.height / 2; const sy = parent.y + parent.height / 2;
const ex = mindmap.x + mindmap.width / 2; const ex = mindmap.x + mindmap.width / 2;

Some files were not shown because too many files have changed in this diff Show More