Bläddra i källkod

SVI Добавление компонентов WUI; 100.0%

SVI 1 år sedan
förälder
incheckning
b8898feded

+ 54 - 0
wui/wtext/wtext.go

@@ -0,0 +1,54 @@
+// package wtext -- WUI текст
+package wtext
+
+import (
+	"strings"
+	"sync"
+
+	. "gitp78su.ipnodns.ru/svi/kern/wui/wtypes"
+	"gitp78su.ipnodns.ru/svi/kern/wui/wwidget"
+)
+
+// WuiText -- текст для WUI
+type WuiText struct {
+	IWuiWidget
+	sync.RWMutex
+	val string
+}
+
+// NewWuiText -- возвращает новый текст WUI
+func NewWuiText(val string) *WuiText {
+	sf := &WuiText{
+		IWuiWidget: wwidget.NewWuiWidget(),
+		val:        val,
+	}
+	_ = IWuiText(sf)
+	return sf
+}
+
+const (
+	strBeg = `<span id="{.id}">{.txt}</span>`
+)
+
+// Html -- возвращает HTML-представление текста
+func (sf *WuiText) Html() string {
+	sf.RLock()
+	defer sf.RUnlock()
+	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id())
+	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.val)
+	return strRes
+}
+
+// Set -- устанавливает хранимое значение
+func (sf *WuiText) Set(val string) {
+	sf.Lock()
+	defer sf.Unlock()
+	sf.val = val
+}
+
+// Get -- возвращает хранимое значение
+func (sf *WuiText) Get() string {
+	sf.RLock()
+	defer sf.RUnlock()
+	return sf.val
+}

+ 45 - 0
wui/wtext/wtext_test.go

@@ -0,0 +1,45 @@
+package wtext
+
+import (
+	"testing"
+)
+
+type tester struct {
+	t   *testing.T
+	txt *WuiText
+}
+
+func TestWuiText(t *testing.T) {
+	sf := &tester{
+		t: t,
+	}
+	sf.new()
+	sf.set()
+	sf.html()
+}
+
+// Получает HTML
+func (sf *tester) html() {
+	sf.t.Log("html")
+	if txt := sf.txt.Html(); txt == "" {
+		sf.t.Fatalf("set(): html is empty")
+	}
+}
+
+// Устанавливает новый текст
+func (sf *tester) set() {
+	sf.t.Log("set")
+	sf.txt.Set("test_val2")
+	if txt := sf.txt.Get(); txt != "test_val2" {
+		sf.t.Fatalf("set(): text is bad")
+	}
+}
+
+// Получение нового WuiText
+func (sf *tester) new() {
+	sf.t.Log("new")
+	sf.txt = NewWuiText("test_text")
+	if txt := sf.txt.Get(); txt != "test_text" {
+		sf.t.Fatalf("new(): text is bad")
+	}
+}

+ 7 - 0
wui/wtypes/iwui_label.go

@@ -0,0 +1,7 @@
+package wtypes
+
+// IWuiLabel -- текстовая метка
+type IWuiLabel interface {
+	// Text -- возвращает текст метки
+	Text() IWuiText
+}

+ 10 - 0
wui/wtypes/iwui_text.go

@@ -0,0 +1,10 @@
+package wtypes
+
+// IWuiText -- текст WUI
+type IWuiText interface {
+	IWuiWidget
+	// Get -- возвращает текст
+	Get() string
+	// Set -- устанавливает текст
+	Set(string)
+}

+ 9 - 0
wui/wtypes/iwui_widget.go

@@ -0,0 +1,9 @@
+package wtypes
+
+// IWuiWidget -- WUI виджет
+type IWuiWidget interface {
+	// Id -- возвращает Id виджета
+	Id() string
+	// Html -- возвращает HTML-представление виджета
+	Html() string
+}

+ 38 - 0
wui/wwidget/wui_widget.go

@@ -0,0 +1,38 @@
+// package wwidget -- базовый виджет WUI
+package wwidget
+
+import (
+	"crypto/rand"
+	"strings"
+
+	. "gitp78su.ipnodns.ru/svi/kern/wui/wtypes"
+)
+
+// WuiWidget -- базовый виджет WUI
+type WuiWidget struct {
+	id string
+}
+
+// NewWuiWidget -- возвращает новый базовый виджет WUI
+func NewWuiWidget() *WuiWidget {
+	sf := &WuiWidget{
+		id: "wui_" + rand.Text(),
+	}
+	_ = IWuiWidget(sf)
+	return sf
+}
+
+// Id - возвращает ID виджета
+func (sf *WuiWidget) Id() string {
+	return sf.id
+}
+
+const (
+	strBeg = `<div id="{.id}"> WuiWidget.Html(): id={.id}, not implemented </div>`
+)
+
+// Html -- возвращает HTML представление виджета
+func (sf *WuiWidget) Html() string {
+	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.id)
+	return strRes
+}

+ 15 - 0
wui/wwidget/wui_widget_test.go

@@ -0,0 +1,15 @@
+package wwidget
+
+import (
+	"testing"
+)
+
+func TestWuiWidget(t *testing.T) {
+	w := NewWuiWidget()
+	if id := w.Id(); id == "" {
+		t.Fatalf("ID is empty")
+	}
+	if strHtml := w.Html(); strHtml == "" {
+		t.Fatalf("strHtml is empty")
+	}
+}