mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-03 20:34:20 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			300 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!doctype html>
 | 
						|
<html lang="en">
 | 
						|
  <head>
 | 
						|
    <meta charset="utf-8" />
 | 
						|
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 | 
						|
    <title>C4 Mermaid Quick Test Page</title>
 | 
						|
    <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
 | 
						|
    <style>
 | 
						|
      div.mermaid {
 | 
						|
        /* font-family: 'trebuchet ms', verdana, arial; */
 | 
						|
        /*font-family: 'Courier New', Courier, monospace !important;*/
 | 
						|
      }
 | 
						|
    </style>
 | 
						|
  </head>
 | 
						|
 | 
						|
  <body>
 | 
						|
    <h1>C4 context diagram demos</h1>
 | 
						|
    <pre class="mermaid">
 | 
						|
    C4Context
 | 
						|
      accTitle: C4 context demo
 | 
						|
      accDescr: Many large C4 diagrams
 | 
						|
 | 
						|
      title System Context diagram for Internet Banking System
 | 
						|
 | 
						|
      Enterprise_Boundary(b0, "BankBoundary0") {
 | 
						|
          Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
 | 
						|
          Person(customerB, "Banking Customer B")
 | 
						|
          Person_Ext(customerC, "Banking Customer C", "desc")
 | 
						|
 | 
						|
          Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.")
 | 
						|
 | 
						|
          System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
 | 
						|
 | 
						|
          Enterprise_Boundary(b1, "BankBoundary") {
 | 
						|
 | 
						|
            SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
 | 
						|
 | 
						|
            System_Boundary(b2, "BankBoundary2") {
 | 
						|
              System(SystemA, "Banking System A")
 | 
						|
              System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.")
 | 
						|
            }
 | 
						|
 | 
						|
            System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")
 | 
						|
            SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")
 | 
						|
 | 
						|
            Boundary(b3, "BankBoundary3", "boundary") {
 | 
						|
              SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.")
 | 
						|
              SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      
 | 
						|
      BiRel(customerA, SystemAA, "Uses")
 | 
						|
      BiRel(SystemAA, SystemE, "Uses")
 | 
						|
      Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")
 | 
						|
      Rel(SystemC, customerA, "Sends e-mails to")
 | 
						|
 | 
						|
      UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red")
 | 
						|
      UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5")
 | 
						|
      UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10")
 | 
						|
      UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50")
 | 
						|
      UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20")
 | 
						|
      
 | 
						|
      UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
 | 
						|
    </pre>
 | 
						|
    <hr />
 | 
						|
 | 
						|
    <pre class="mermaid">
 | 
						|
    C4Container
 | 
						|
    title Container diagram for Internet Banking System
 | 
						|
 | 
						|
    System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0")
 | 
						|
    Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0")
 | 
						|
 | 
						|
    Container_Boundary(c1, "Internet Banking") {
 | 
						|
        Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser")
 | 
						|
        Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
 | 
						|
        Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA")
 | 
						|
        ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.")
 | 
						|
        ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API")
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
 | 
						|
 | 
						|
    Rel(customer, web_app, "Uses", "HTTPS")
 | 
						|
    UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90")     
 | 
						|
    Rel(customer, spa, "Uses", "HTTPS")
 | 
						|
    UpdateRelStyle(customer, spa, $offsetY="-40")    
 | 
						|
    Rel(customer, mobile_app, "Uses")
 | 
						|
    UpdateRelStyle(customer, mobile_app, $offsetY="-30") 
 | 
						|
 | 
						|
    Rel(web_app, spa, "Delivers")
 | 
						|
    UpdateRelStyle(web_app, spa, $offsetX="130") 
 | 
						|
    Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
 | 
						|
    Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
 | 
						|
    Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC")
 | 
						|
 | 
						|
    Rel(email_system, customer, "Sends e-mails to")
 | 
						|
    UpdateRelStyle(email_system, customer, $offsetX="-45")    
 | 
						|
    Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP")
 | 
						|
    UpdateRelStyle(backend_api, email_system, $offsetY="-60")    
 | 
						|
    Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
 | 
						|
    UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140")
 | 
						|
    </pre>
 | 
						|
    <hr />
 | 
						|
 | 
						|
    <pre class="mermaid">
 | 
						|
    C4Component
 | 
						|
    title Component diagram for Internet Banking System - API Application
 | 
						|
 | 
						|
    Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
 | 
						|
    Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
 | 
						|
    ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
 | 
						|
    System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
 | 
						|
 | 
						|
    Container_Boundary(api, "API Application") {
 | 
						|
        Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system")
 | 
						|
        Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts")
 | 
						|
        Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.")
 | 
						|
        Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.")
 | 
						|
 | 
						|
        Rel(sign, security, "Uses")
 | 
						|
        Rel(accounts, mbsfacade, "Uses")
 | 
						|
        Rel(security, db, "Read & write to", "JDBC")
 | 
						|
        Rel(mbsfacade, mbs, "Uses", "XML/HTTPS")
 | 
						|
    }
 | 
						|
 | 
						|
    Rel_Back(spa, sign, "Uses", "JSON/HTTPS")
 | 
						|
    Rel(spa, accounts, "Uses", "JSON/HTTPS")
 | 
						|
 | 
						|
    Rel(ma, sign, "Uses", "JSON/HTTPS")
 | 
						|
    Rel(ma, accounts, "Uses", "JSON/HTTPS")
 | 
						|
 | 
						|
    UpdateRelStyle(spa, sign, $offsetY="-40") 
 | 
						|
    UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40")
 | 
						|
 | 
						|
    UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40")
 | 
						|
    UpdateRelStyle(ma, accounts, $offsetY="-40")
 | 
						|
 | 
						|
        UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10")
 | 
						|
        UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10")
 | 
						|
        UpdateRelStyle(security, db, $offsetY="-40")
 | 
						|
        UpdateRelStyle(mbsfacade, mbs, $offsetY="-40")
 | 
						|
    </pre>
 | 
						|
    <hr />
 | 
						|
 | 
						|
    <pre class="mermaid">
 | 
						|
    C4Dynamic
 | 
						|
    title Dynamic diagram for Internet Banking System - API Application
 | 
						|
 | 
						|
    ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
 | 
						|
    Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
 | 
						|
    Container_Boundary(b, "API Application") {
 | 
						|
      Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
 | 
						|
      Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
 | 
						|
    }
 | 
						|
    Rel(c1, c2, "Submits credentials to", "JSON/HTTPS")
 | 
						|
    Rel(c2, c3, "Calls isAuthenticated() on")
 | 
						|
    Rel(c3, c4, "select * from users where username = ?", "JDBC")
 | 
						|
 | 
						|
    UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40")
 | 
						|
    UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60")
 | 
						|
    UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10")
 | 
						|
    </pre>
 | 
						|
    <hr />
 | 
						|
 | 
						|
    <pre class="mermaid">
 | 
						|
    C4Deployment
 | 
						|
    title Deployment Diagram for Internet Banking System - Live
 | 
						|
 | 
						|
    Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
 | 
						|
        Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
 | 
						|
    }
 | 
						|
 | 
						|
    Deployment_Node(comp, "Customer's computer", "Microsoft Windows or Apple macOS"){
 | 
						|
        Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){
 | 
						|
            Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){
 | 
						|
        Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){
 | 
						|
            Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){
 | 
						|
                Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
 | 
						|
            }
 | 
						|
        }
 | 
						|
        Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){
 | 
						|
            Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){
 | 
						|
                Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
 | 
						|
            }
 | 
						|
        }
 | 
						|
        Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){
 | 
						|
            Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){
 | 
						|
                ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
 | 
						|
            }
 | 
						|
        }
 | 
						|
        Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") {
 | 
						|
            Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") {
 | 
						|
                ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    Rel(mobile, api, "Makes API calls to", "json/HTTPS")
 | 
						|
    Rel(spa, api, "Makes API calls to", "json/HTTPS")
 | 
						|
    Rel_U(web, spa, "Delivers to the customer's web browser")
 | 
						|
    Rel(api, db, "Reads from and writes to", "JDBC")
 | 
						|
    Rel(api, db2, "Reads from and writes to", "JDBC")
 | 
						|
    Rel_R(db, db2, "Replicates data to")
 | 
						|
 | 
						|
    UpdateRelStyle(spa, api, $offsetY="-40")
 | 
						|
    UpdateRelStyle(web, spa, $offsetY="-40")
 | 
						|
    UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5")
 | 
						|
    UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20")
 | 
						|
    UpdateRelStyle(db, db2, $offsetY="-10")
 | 
						|
     </pre>
 | 
						|
    <hr />
 | 
						|
 | 
						|
    <script type="module">
 | 
						|
      import mermaid from './mermaid.esm.mjs';
 | 
						|
      const ALLOWED_TAGS = [
 | 
						|
        'a',
 | 
						|
        'b',
 | 
						|
        'blockquote',
 | 
						|
        'br',
 | 
						|
        'dd',
 | 
						|
        'div',
 | 
						|
        'dl',
 | 
						|
        'dt',
 | 
						|
        'em',
 | 
						|
        'foreignObject',
 | 
						|
        'h1',
 | 
						|
        'h2',
 | 
						|
        'h3',
 | 
						|
        'h4',
 | 
						|
        'h5',
 | 
						|
        'h6',
 | 
						|
        'h7',
 | 
						|
        'h8',
 | 
						|
        'hr',
 | 
						|
        'i',
 | 
						|
        'li',
 | 
						|
        'ul',
 | 
						|
        'ol',
 | 
						|
        'p',
 | 
						|
        'pre',
 | 
						|
        'span',
 | 
						|
        'strike',
 | 
						|
        'strong',
 | 
						|
        'table',
 | 
						|
        'tbody',
 | 
						|
        'td',
 | 
						|
        'tfoot',
 | 
						|
        'th',
 | 
						|
        'thead',
 | 
						|
        'tr',
 | 
						|
      ];
 | 
						|
      mermaid.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
 | 
						|
      });
 | 
						|
 | 
						|
      function testClick(nodeId) {
 | 
						|
        console.log('clicked', nodeId);
 | 
						|
        let originalBgColor = document.querySelector('body').style.backgroundColor;
 | 
						|
        document.querySelector('body').style.backgroundColor = 'yellow';
 | 
						|
        setTimeout(function () {
 | 
						|
          document.querySelector('body').style.backgroundColor = originalBgColor;
 | 
						|
        }, 100);
 | 
						|
      }
 | 
						|
 | 
						|
      const testLineEndings = async (test, input) => {
 | 
						|
        try {
 | 
						|
          await mermaid.render(test, input);
 | 
						|
        } catch (err) {
 | 
						|
          console.error('Error in %s:\n\n%s', test, err);
 | 
						|
        }
 | 
						|
      };
 | 
						|
 | 
						|
      await testLineEndings('CR', 'graph LR\rsubgraph CR\rA --> B\rend');
 | 
						|
      await testLineEndings('LF', 'graph LR\nsubgraph LF\nA --> B\nend');
 | 
						|
      await testLineEndings('CRLF', 'graph LR\r\nsubgraph CRLF\r\nA --> B\r\nend');
 | 
						|
    </script>
 | 
						|
  </body>
 | 
						|
</html>
 |