fix
This commit is contained in:
parent
f8bb7ffc84
commit
b60ff3ee6f
48
Chat.go
48
Chat.go
@ -748,9 +748,17 @@ func GenerateConversationPopoverHTML(isActive bool) string {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectedIsDefault := false
|
||||||
|
for _, conversation := range conversations {
|
||||||
|
if conversation.Name == "Default" && conversation.Selected {
|
||||||
|
selectedIsDefault = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
out, err := conversationPopoverTmpl.Execute(pongo2.Context{
|
out, err := conversationPopoverTmpl.Execute(pongo2.Context{
|
||||||
"Conversations": conversations,
|
"Conversations": conversations,
|
||||||
"IsActive": isActive,
|
"IsActive": isActive,
|
||||||
|
"SelectedIsDefault": selectedIsDefault,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error generating conversation popover")
|
fmt.Println("Error generating conversation popover")
|
||||||
@ -915,3 +923,39 @@ func SelectConversationHandler(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
return c.SendString(generateChatHTML())
|
return c.SendString(generateChatHTML())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ArchiveDefaultConversationHandler(c *fiber.Ctx) error {
|
||||||
|
edgeClient = edgeClient.WithoutGlobals().WithGlobals(map[string]interface{}{"ext::auth::client_token": c.Cookies("jade-edgedb-auth-token")})
|
||||||
|
name := c.FormValue("conversation-name-input")
|
||||||
|
|
||||||
|
err := edgeClient.Execute(edgeCtx, `
|
||||||
|
UPDATE Conversation
|
||||||
|
FILTER .user = global currentUser AND .name = 'Default'
|
||||||
|
SET {
|
||||||
|
name = <str>$0
|
||||||
|
};
|
||||||
|
`, name)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error archiving default conversation")
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = edgeClient.Execute(edgeCtx, `
|
||||||
|
WITH
|
||||||
|
C := (
|
||||||
|
SELECT Conversation
|
||||||
|
FILTER .user = global currentUser
|
||||||
|
)
|
||||||
|
INSERT Conversation {
|
||||||
|
name := "Default",
|
||||||
|
user := global currentUser,
|
||||||
|
position := count(C) + 1
|
||||||
|
}
|
||||||
|
`, name)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error creating conversation")
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.SendString(generateChatHTML())
|
||||||
|
}
|
||||||
|
1
main.go
1
main.go
@ -91,6 +91,7 @@ func main() {
|
|||||||
app.Post("/clearChat", ClearChatHandler)
|
app.Post("/clearChat", ClearChatHandler)
|
||||||
app.Get("/userMessage", GetUserMessageHandler)
|
app.Get("/userMessage", GetUserMessageHandler)
|
||||||
app.Post("/editMessage", EditMessageHandler)
|
app.Post("/editMessage", EditMessageHandler)
|
||||||
|
app.Post("/archiveDefaultConversation", ArchiveDefaultConversationHandler)
|
||||||
|
|
||||||
// Settings routes
|
// Settings routes
|
||||||
app.Post("/addKeys", addKeys)
|
app.Post("/addKeys", addKeys)
|
||||||
|
@ -4,26 +4,12 @@ html {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Stuff for message boxes */
|
/* Stuff for message boxes */
|
||||||
|
|
||||||
#chat-messages .message-content .code-container {
|
|
||||||
position: relative;
|
|
||||||
border-radius: 8px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
#chat-messages .message-content .code-header {
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
padding: 5px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#chat-messages .message-content pre {
|
#chat-messages .message-content pre {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
max-width: 662px;
|
max-width: 662px;
|
||||||
margin: 0;
|
position: relative;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#chat-messages .message-content pre code {
|
#chat-messages .message-content pre code {
|
||||||
@ -33,10 +19,11 @@ html {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.copy-button {
|
.copy-button {
|
||||||
margin-left: 5px;
|
position: absolute;
|
||||||
|
top: 5px;
|
||||||
|
right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
|
22
utils.go
22
utils.go
@ -6,7 +6,6 @@ package main
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"github.com/yuin/goldmark"
|
"github.com/yuin/goldmark"
|
||||||
@ -14,15 +13,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func markdownToHTML(markdownText string) string {
|
func markdownToHTML(markdownText string) string {
|
||||||
escapedText := html.EscapeString(markdownText)
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
md := goldmark.New(
|
md := goldmark.New(
|
||||||
goldmark.WithExtensions(
|
goldmark.WithExtensions(
|
||||||
highlighting.NewHighlighting(highlighting.WithStyle("monokai")),
|
highlighting.NewHighlighting(highlighting.WithStyle("monokai")),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if err := md.Convert([]byte(escapedText), &buf); err != nil {
|
if err := md.Convert([]byte(markdownText), &buf); err != nil {
|
||||||
fmt.Println("failed to convert markdown to HTML")
|
fmt.Println("failed to convert markdown to HTML")
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -31,23 +28,16 @@ func markdownToHTML(markdownText string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addCopyButtonsToCode(htmlContent string) string {
|
func addCopyButtonsToCode(htmlContent string) string {
|
||||||
buttonHTML := `<button class="copy-button button is-small is-primary is-outlined" onclick="copyToClipboardCode(this)"><i class="fa-solid fa-copy"></i></button>`
|
buttonHTML := `<button class="copy-button button is-small is-primary is-outlined" onclick="copyToClipboardCode(this)"><i class="fa-solid fa-copy"></i></button>`
|
||||||
|
|
||||||
// Regular expression pattern to match <pre> elements
|
// Regular expression pattern to match <pre> elements and insert the button right before <code>
|
||||||
pattern := `(<pre[^>]*>)`
|
pattern := `(<pre[^>]*>)`
|
||||||
|
|
||||||
// Compile the regular expression
|
// Compile the regular expression
|
||||||
re := regexp.MustCompile(pattern)
|
re := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
// Replace each matched <pre> element with the updated HTML
|
// Replace each matched <pre> element with the updated HTML
|
||||||
updatedHTML := re.ReplaceAllStringFunc(htmlContent, func(match string) string {
|
updatedHTML := re.ReplaceAllString(htmlContent, "$1"+buttonHTML)
|
||||||
return `<div class="code-container">
|
|
||||||
<div class="code-header">
|
|
||||||
` + buttonHTML + `
|
|
||||||
</div>
|
|
||||||
` + match + `
|
|
||||||
</div>`
|
|
||||||
})
|
|
||||||
|
|
||||||
return updatedHTML
|
return updatedHTML
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<input class="input is-small mt-2 is-hidden" type="text" id="conversation-name-input"
|
<input class="input is-small mt-2 is-hidden" type="text" id="conversation-name-input"
|
||||||
name="conversation-name-input" placeholder="Conversation name" autocomplete="off">
|
name="conversation-name-input" placeholder="Conversation name" autocomplete="off">
|
||||||
<div class="is-flex is-justify-content-space-between mt-4">
|
<div
|
||||||
|
class="is-flex is-justify-content-space-between mt-4 {% if not IsDefaultConversation %}is-hidden{% endif %}">
|
||||||
<button disabled class="button is-small is-danger" id="delete-conversation-button"
|
<button disabled class="button is-small is-danger" id="delete-conversation-button"
|
||||||
hx-get="/deleteConversation" hx-swap="outerHTML" hx-target="#conversation-dropdown"
|
hx-get="/deleteConversation" hx-swap="outerHTML" hx-target="#conversation-dropdown"
|
||||||
hx-vals="js:{conversationId: findSelectedConversationID()}">
|
hx-vals="js:{conversationId: findSelectedConversationID()}">
|
||||||
@ -31,6 +32,12 @@
|
|||||||
<i class="fa-solid fa-trash"></i>
|
<i class="fa-solid fa-trash"></i>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="button is-small is-info is-outlined {% if SelectedIsDefault %} is-hidden {% endif %}"
|
||||||
|
id="archive-default-conversation-button">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-box-archive"></i>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
<button class="button is-small is-danger is-outlined is-hidden" id="cancel-conversation-button">
|
<button class="button is-small is-danger is-outlined is-hidden" id="cancel-conversation-button">
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="fa-solid fa-xmark"></i>
|
<i class="fa-solid fa-xmark"></i>
|
||||||
@ -51,6 +58,14 @@
|
|||||||
<i class="fa-solid fa-check"></i>
|
<i class="fa-solid fa-check"></i>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="button is-small is-success is-outlined is-hidden"
|
||||||
|
id="confirm-archive-default-conversation-button" hx-get="/archiveDefaultConversation"
|
||||||
|
hx-include="[name='conversation-name-input']" hx-swap="outerHTML"
|
||||||
|
hx-target="#conversation-dropdown">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-check"></i>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -83,9 +98,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (name === 'Default') {
|
if (name === 'Default') {
|
||||||
document.getElementById('delete-conversation-button').disabled = true;
|
document.getElementById('delete-conversation-button').classList.add('is-hidden');
|
||||||
|
document.getElementById('archive-default-conversation-button').classList.remove('is-hidden');
|
||||||
} else {
|
} else {
|
||||||
document.getElementById('delete-conversation-button').disabled = false;
|
document.getElementById('delete-conversation-button').classList.remove('is-hidden');
|
||||||
|
document.getElementById('archive-default-conversation-button').classList.add('is-hidden');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,6 +130,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById('archive-default-conversation-button').addEventListener('click', function () {
|
||||||
|
document.getElementById('conversation-name-input').classList.remove('is-hidden');
|
||||||
|
document.getElementById('confirm-archive-default-conversation-button').classList.remove('is-hidden');
|
||||||
|
document.getElementById('create-conversation-button').classList.add('is-hidden');
|
||||||
|
document.getElementById('cancel-conversation-button').classList.remove('is-hidden');
|
||||||
|
document.getElementById('delete-conversation-button').classList.add('is-hidden');
|
||||||
|
document.getElementById('conversation-list').classList.add('is-hidden');
|
||||||
|
document.getElementById('archive-default-conversation-button').classList.add('is-hidden');
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
document.getElementById('create-conversation-button').addEventListener('click', function () {
|
document.getElementById('create-conversation-button').addEventListener('click', function () {
|
||||||
document.getElementById('conversation-name-input').classList.remove('is-hidden');
|
document.getElementById('conversation-name-input').classList.remove('is-hidden');
|
||||||
document.getElementById('confirm-conversation-button').classList.remove('is-hidden');
|
document.getElementById('confirm-conversation-button').classList.remove('is-hidden');
|
||||||
@ -129,6 +157,7 @@
|
|||||||
document.getElementById('cancel-conversation-button').classList.add('is-hidden');
|
document.getElementById('cancel-conversation-button').classList.add('is-hidden');
|
||||||
document.getElementById('delete-conversation-button').classList.remove('is-hidden');
|
document.getElementById('delete-conversation-button').classList.remove('is-hidden');
|
||||||
document.getElementById('conversation-list').classList.remove('is-hidden');
|
document.getElementById('conversation-list').classList.remove('is-hidden');
|
||||||
|
document.getElementById('archive-default-conversation-button').classList.add('is-hidden');
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
Loading…
x
Reference in New Issue
Block a user