Forráskód Böngészése

SVI Переделка кода

SVI 1 hete
szülő
commit
b02e329527

+ 2 - 1
lev1/arch_doc/arch_doc.go

@@ -5,7 +5,8 @@ import "sync"
 
 // ArchDoc -- документ архитектуры
 type ArchDoc struct {
-	Author    string `yaml:"author"`
+	Author_   string `yaml:"author"`
+	Email_    string `yaml:"email"`
 	Code_     string `yaml:"code"`
 	Name_     string `yaml:"name"`
 	Desc_     string `yaml:"desc"`

+ 7 - 43
lev2/engine_http/engine_http.go

@@ -3,7 +3,6 @@ package engine_http
 
 import (
 	_ "embed"
-	"fmt"
 	"time"
 
 	"github.com/gofiber/fiber/v2"
@@ -11,39 +10,26 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
 
-	"gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
 	"gitp78su.ipnodns.ru/svi/goarch/lev0/cons"
 	"gitp78su.ipnodns.ru/svi/goarch/lev0/types"
 	"gitp78su.ipnodns.ru/svi/goarch/lev1/arch_doc"
 	"gitp78su.ipnodns.ru/svi/goarch/lev1/view_coord"
-	"gitp78su.ipnodns.ru/svi/goarch/lev1/view_size"
 	"gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http/http_api"
 )
 
 //go:embed index.html
 var indexHtml []byte
 
-// CanvasSize -- размер хоста
-type CanvasSize struct {
-	SizeX_ int `form:"w"`
-	SizeY_ int `form:"h"`
-}
-
-func (sf *CanvasSize) String() string {
-	return fmt.Sprintf("w:%v; h:%v", sf.SizeX_, sf.SizeY_)
-}
-
 // EngineHttp -- http-движок для архитектуры
 type EngineHttp struct {
 	// fibApp     *fiber.App
-	kCtx     ktypes.IKernelCtx
-	log      ktypes.ILogBuf
-	diaMode  string            // Режим диаграммы
-	canvSize CanvasSize        // Размер холста
-	size     types.IViewSize   // Размер холста в его координатах
-	pos      types.IViewCoord  // Координаты холста
-	archDoc  *arch_doc.ArchDoc // Документ архитектуры
-	httpApi  *http_api.HttpApi
+	kCtx    ktypes.IKernelCtx
+	log     ktypes.ILogBuf
+	diaMode string // Режим диаграммы
+
+	pos     types.IViewCoord  // Координаты холста
+	archDoc *arch_doc.ArchDoc // Документ архитектуры
+	httpApi *http_api.HttpApi
 }
 
 // NewEngineHttp -- возвращает новый движок HTTP
@@ -55,7 +41,6 @@ func NewEngineHttp() *EngineHttp {
 		kCtx:    kern.GetKernelCtx(),
 		log:     log,
 		diaMode: cons.ModeUseCase,
-		size:    view_size.NewViewSize(800, 600),
 		pos:     view_coord.NewViewCoord(0, 0),
 		archDoc: arch_doc.GetArchDoc(),
 		httpApi: http_api.NewHttpApi(),
@@ -69,30 +54,9 @@ func NewEngineHttp() *EngineHttp {
 	})
 	fibApp.Get("/", sf.getIndex)
 	fibApp.Get("/api/use_case", sf.postSetModeUseCase)
-	fibApp.Post("/api/canvas/size/set", sf.postSetCanvasSize)
 	return sf
 }
 
-// Устанавливает размер холста
-func (sf *EngineHttp) postSetCanvasSize(ctx *fiber.Ctx) error {
-	err := ctx.BodyParser(&sf.canvSize)
-	if err != nil {
-		sf.log.Err("postSetCanvasSize(): on body parser, err=\n\t%v", err)
-	}
-	var (
-		w alias.SizeX
-		h alias.SizeY
-	)
-	if sf.canvSize.SizeX_ > 0 {
-		w = alias.SizeX(sf.canvSize.SizeX_ - 10)
-	}
-	if sf.canvSize.SizeY_ > 0 {
-		h = alias.SizeY(sf.canvSize.SizeY_ - 10)
-	}
-	sf.size = view_size.NewViewSize(w, h)
-	return ctx.SendString(sf.size.String())
-}
-
 // Возвращает картинку архитектуры
 func (sf *EngineHttp) postSetModeUseCase(ctx *fiber.Ctx) error {
 	sf.diaMode = cons.ModeUseCase

+ 3 - 0
lev2/engine_http/http_api/http_api.go

@@ -3,16 +3,19 @@ package http_api
 
 import (
 	"gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http/http_api/http_arch_doc"
+	"gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http/http_api/http_canvas"
 )
 
 // HttpApi -- API для HTTP
 type HttpApi struct {
 	httpArchDoc *http_arch_doc.HttpArchDoc
+	httpCanvas  *http_canvas.HttpCanvas
 }
 
 // NewHttpApi -- создание нового экземпляра API для HTTP
 func NewHttpApi() *HttpApi {
 	return &HttpApi{
 		httpArchDoc: http_arch_doc.NewHttpArchDoc(),
+		httpCanvas:  http_canvas.NewHttpCanvas(),
 	}
 }

+ 28 - 0
lev2/engine_http/http_api/http_arch_doc/arch_doc_attrib.html

@@ -0,0 +1,28 @@
+<!-- m-0 убирает лишний горизонтальный скролл от row -->
+<!-- А этот контент автоматически заменит элемент с id="sidebar" в другом месте страницы -->
+<div id="block-center" class="row g-4 m-0 h-100" id="sidebar" hx-swap-oob="true">
+  <form action="/api/arch_doc/attrib" method="post" class="container">
+    <div class="container fs-2">
+      Атрибуты документа
+    </div>
+    <div class="mb-3">
+      <label for="inputAuthor" class="form-label">Фамилия И.О.</label>
+      <input type="text" class="form-control" id="inputAuthor" aria-describedby="authorHelp">
+      <div id="authorHelp" class="form-text">Автор документа.</div>
+    </div>
+    <div class="mb-3">
+      <label for="inputEmail" class="form-label">Адрес электронной почты</label>
+      <input type="email" class="form-control" id="inputEmail" aria-describedby="emailHelp">
+      <div id="emailHelp" class="form-text">E-mail автора.</div>
+    </div>
+    <div class="mb-3">
+      <label for="codeDoc" class="form-label">Код</label>
+      <input type="text" class="form-control" id="codeDoc" aria-describedby="codeHelp" value="{{.codeDoc}}" disabled>
+      <div id="codeHelp" class="form-text">Уникальный код документа.</div>
+    </div>
+    <label for="nameDoc" class="form-label">Название</label>
+    <input type="text" class="form-control" id="nameDoc" aria-describedby="nameHelp" value="{{.codeDoc}}">
+    <div id="nameHelp" class="form-text">Название архитектурного документа.</div>
+</div>
+</form>
+</div>

+ 9 - 0
lev2/engine_http/http_api/http_arch_doc/http_arch_doc.go

@@ -33,9 +33,18 @@ func NewHttpArchDoc() *HttpArchDoc {
 	sHttp := kern.GetKernelServerHttp()
 	fibApp := sHttp.Fiber()
 	fibApp.Post("/api/arch_doc/parse", sf.postArchDocParse)
+	fibApp.Get("/api/arch_doc/attrib", sf.getArchDocAttribute)
 	return sf
 }
 
+//go:embed arch_doc_attrib.html
+var archDocAttrib string
+
+// getArchDocAttribute -- отдаёт форму аттрибутов архитектурного документа
+func (sf *HttpArchDoc) getArchDocAttribute(ctx *fiber.Ctx) error {
+	return ctx.SendString(archDocAttrib)
+}
+
 // FormArch -- извлекает данные из текстового поля для обновления
 type FormArch struct {
 	StrData string `form:"text"`

+ 67 - 0
lev2/engine_http/http_api/http_canvas/http_canvas.go

@@ -0,0 +1,67 @@
+// package http_canvas -- управление холстом
+package http_canvas
+
+import (
+	"fmt"
+
+	"github.com/gofiber/fiber/v2"
+	"gitp78su.ipnodns.ru/svi/kern/v3"
+	"gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
+
+	"gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
+	"gitp78su.ipnodns.ru/svi/goarch/lev0/types"
+	"gitp78su.ipnodns.ru/svi/goarch/lev1/view_size"
+)
+
+// CanvasSize -- размер хоста
+type CanvasSize struct {
+	SizeX_ int `form:"w"`
+	SizeY_ int `form:"h"`
+}
+
+func (sf *CanvasSize) String() string {
+	return fmt.Sprintf("w:%v; h:%v", sf.SizeX_, sf.SizeY_)
+}
+
+// HttpCanvas -- управление холстом
+type HttpCanvas struct {
+	log      ktypes.ILogBuf
+	canvSize CanvasSize      // Размер холста
+	size     types.IViewSize // Размер холста в его координатах
+}
+
+// NewHttpCanvas -- создание нового холста
+func NewHttpCanvas() *HttpCanvas {
+	optTerm := log_buf.OptIsTerm(true)
+	optPref := log_buf.OptPrefix("EngineHttp")
+	log := log_buf.NewLogBuf(optTerm, optPref)
+	sf := &HttpCanvas{
+		log:  log,
+		size: view_size.NewViewSize(800, 600),
+	}
+	sHttp := kern.GetKernelServerHttp()
+	fibApp := sHttp.Fiber()
+	fibApp.Post("/api/canvas/size/set", sf.postCanvasSizeSet)
+	return sf
+}
+
+// Устанавливает размер холста
+func (sf *HttpCanvas) postCanvasSizeSet(ctx *fiber.Ctx) error {
+	err := ctx.BodyParser(&sf.canvSize)
+	if err != nil {
+		sf.log.Err("HttpCanvas.postCanvasSizeSet(): on body parser, err=\n\t%v", err)
+	}
+	var (
+		w alias.SizeX
+		h alias.SizeY
+	)
+	if sf.canvSize.SizeX_ > 0 {
+		w = alias.SizeX(sf.canvSize.SizeX_ - 10)
+	}
+	if sf.canvSize.SizeY_ > 0 {
+		h = alias.SizeY(sf.canvSize.SizeY_ - 10)
+	}
+	sf.size = view_size.NewViewSize(w, h)
+	return ctx.SendString(sf.size.String())
+}

+ 12 - 27
lev2/engine_http/index.html

@@ -16,7 +16,11 @@
                 <div id="header" class="col-2">
                     <b>GoArch</b><br><strong id="mode"></strong>
                 </div>
-                <div id="link" class="col-2">
+                <div id="doc-attrib" class="col-2">
+                    <button class="btn btn-primary" hx-get="/api/arch_doc/attrib" hx-target="#debug-log"
+                        hx-trigger="click">Атрибуты документа</button>
+                </div>
+                <div id="use_case" class="col-2">
                     <button class="btn btn-primary" hx-get="/api/use_case" hx-target="#mode"
                         hx-trigger="load click">Варианты использования</button>
                 </div>
@@ -26,40 +30,21 @@
             </div>
         </header>
 
-        <!--
-        <div id="content" class="container-fluid sticky-top">
-
-        </div>
-        -->
-
-        <!-- 2. ОСНОВНОЙ КОНТЕНТ (Скроллится)
-
-        <div class="container-fluid px-0 mt-5">
-            <div class="row g-1">
-                <div class="col-2">
-                    <textarea name="text" class="text-start w-100" rows="40" hx-post="/arch" hx-target="#picture"
-                        hx-trigger="keyup change delay:0.5s">[]</textarea>
-                </div>
-                <div class="col-10">
-                    <div id="picture"></div>
-                </div>
-            </div>
-        </div>
-
-        -->
+        <!-- 2. ОСНОВНОЙ КОНТЕНТ (Скроллится) -->
         <main class="flex-grow-1 overflow-auto px-0">
             <div class="container-fluid px-0 h-100">
-                <div class="row g-4 m-0 h-100"> <!-- m-0 убирает лишний горизонтальный скролл от row -->
+                <div id="block-center" class="row g-4 m-0 h-100"> <!-- m-0 убирает лишний горизонтальный скролл от row -->
                     <div class="col-2 d-flex">
                         <!-- rows="20" чтобы точно появился скролл для теста -->
-                        <textarea name="text" class="form-control w-100 flex-grow-1" rows="20" hx-post="/api/arch"
-                            hx-target="#picture" hx-trigger="keyup change delay:0.5s" placeholder="YAML"
-                            style="resize: none;"></textarea>
+                        <textarea name="text" class="form-control w-100 flex-grow-1" rows="20"
+                            hx-post="/api/arch_doc/parse" hx-target="#picture" hx-trigger="keyup change delay:0.5s"
+                            placeholder="YAML" style="resize: none;"></textarea>
                     </div>
                     <div class="col-10">
+                        <!-- место для картинки -->
                         <div id="picture" class="w-100 h-100" hx-vals='js:{
                                 "w": document.getElementById("picture").offsetWidth,
-                                "h": document.getElementById("picture").offsetHeight}' hx-post="/api/canvas_size"
+                                "h": document.getElementById("picture").offsetHeight}' hx-post="/api/canvas/size/set"
                             hx-trigger="every 250ms" hx-target="#debug-log">
                         </div>
                     </div>