Включение диаграмм Mermaid в Blazor WebAssembly и dotnet 7.

RedDeveloper
02.01.2023 01:12
Включение диаграмм Mermaid в Blazor WebAssembly и dotnet 7.

Русалочьи диаграммы - это фантастика. MermaidJS предлагает все: диаграммы Ганнта, блок-схемы, круговые диаграммы и многое другое для вашего веб-приложения, и все это с использованием простой, похожей на маркдаун формулы для описания ваших диаграмм.

В этом посте я расскажу, как включить последнюю версию MermaidJS в ваше приложение Blazor WebAssembly.

Для этого мы воспользуемся новой функцией в dotnet 7 - возможностью импортировать модуль javascript во время выполнения, именно тогда, когда он вам нужен.

Мы построим одну из простых схем из собственной документации MermaidJS.

```mermaid
journey
    title My working day
    section Go to work
      Make tea: 5: Me
      Go upstairs: 3: Me
      Do work: 1: Me, Cat
    section Go home
      Go downstairs: 5: Me
      Sit down: 5: Me
```

При визуализации вы должны увидеть схему, показанную ниже:

User Flow diagram from mermaidJS

Чтобы это работало, мы создадим новое приложение Blazor Web Assembly, напишем несколько простых Javascript, склеим все вместе и начнем.

Во-первых, создайте новую папку, войдите в нее и создайте новое приложение Blazor WebAssembly App.

dotnet new blazorwasm

Далее перейдите в каталог wwwroot, создайте папку modules и создайте приведенный ниже файл. Назовите его mermaidmodule.js

import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@9/dist/mermaid.esm.min.mjs';

export function Initialize() {
 mermaid.initialize({ startOnLoad: true, flowchart: { useMaxWidth: true } });
}

export function Render(componentId, definition) {
 const cb = function (svgGraph) {
  //console.logg(svgGraph);
 };
 var elements = document.getElementsByClassName(componentId);
 for(const element of elements)
 {
  const diagramdefinition = htmlDecode(element.innerHTML);
  const id = "mmd" + Math.round(Math.random() * 10000);
  mermaid.render(`${id}-mermaid-svg`, diagramdefinition, (svg, bind) => {
   const host = element;
   host.innerHTML = svg
   //bind(host);

  });
 }
}

function htmlDecode(input) {
 var doc = new DOMParser().parseFromString(input, "text/html");
 return doc.documentElement.textContent;
}

Он будет искать каждый элемент с выбранным вами классом (мы будем использовать mermaid) и заменять его содержимое SVG диаграммой.

Далее перейдите в папку ./Pages вашего приложения и измените файл index.razor следующим образом:

@page "/"
@inject IJSRuntime JSRuntime
<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<div class="mermaid">
    journey
    title My working day
    section Go to work
      Make tea: 5: Me
      Go upstairs: 3: Me
      Do work: 1: Me, Cat
    section Go home
      Go downstairs: 5: Me
      Sit down: 5: Me
    </div>

@code {
IJSObjectReference mermaidmodule;
    protected override async Task OnAfterRenderAsync(bool firstRender)
 {
  if(firstRender)
  {
   mermaidmodule = await JSRuntime.InvokeAsync<IJSObjectReference>("import", "./modules/mermaidmodule.js");
   await mermaidmodule.InvokeVoidAsync("Initialize");
   await mermaidmodule.InvokeVoidAsync("Render", "mermaid");
  }
  else
  {
   await mermaidmodule.InvokeVoidAsync("Render", "mermaid");
  }
 }
}

Наконец, вам нужно будет избавиться от IJSObjectReference на этой странице, чтобы сделать ее более готовой к производству. На выходе мы получим следующее:

Наконец вам нужно будет избавиться от IJSObjectReference на этой странице чтобы сделатьFinal Working App

Как видите, заставить MermaidJS и Blazor работать вместе в dotnet 7 очень просто!

Правда, есть некоторые нюансы:

  • Я использовал имя класса mermaid, но это может быть что угодно.
  • Это поддерживает все диаграммы русалок. Обратите внимание, что я использовал новую функцию в Javascript для декодирования HTML, который не может быть правильно разобран.

Наконец, надеюсь, вам понравится, диаграммы MermaidJS действительно классные и теперь невероятно просто работают с Blazor.

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg

26.01.2023 14:14

Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной функции ngTemplateOutlet.

Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript

26.01.2023 13:19

Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего следующего сайта послужил начальный эпизод "Звездных войн"? 😁

Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot

26.01.2023 09:43

В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .

Начала с розового дизайна
Начала с розового дизайна

25.01.2023 11:01

Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских интерфейсов.

Шлюз в PHP
Шлюз в PHP

25.01.2023 10:51

API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.

14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps

25.01.2023 09:17

проверить тип данных используемой переменной, мы можем просто написать: your_variable=100