Mercurial Hosting > lang
changeset 41:2a4c83ce3deb
public chat
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 11 Aug 2025 07:58:32 +0900 |
parents | 6cdb2c761e08 |
children | 1d9d9786d76f |
files | src/chat.css src/chat.html.luan src/chat.js src/lib/Chat.luan src/lib/ai/claude/Ai_chat.luan src/save_chat.js.luan |
diffstat | 6 files changed, 32 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
diff -r 6cdb2c761e08 -r 2a4c83ce3deb src/chat.css --- a/src/chat.css Sun Aug 10 11:29:02 2025 +0900 +++ b/src/chat.css Mon Aug 11 07:58:32 2025 +0900 @@ -40,6 +40,9 @@ width: 100%; } -div[role=assistant]:not(:has([name=show_text]:checked)) div[message] { +div[role=assistant] div[message] { filter: blur(5px); } +div[role=assistant]:has([name=show_text]:checked) div[message] { + filter: none; +}
diff -r 6cdb2c761e08 -r 2a4c83ce3deb src/chat.html.luan --- a/src/chat.html.luan Sun Aug 10 11:29:02 2025 +0900 +++ b/src/chat.html.luan Mon Aug 11 07:58:32 2025 +0900 @@ -13,17 +13,18 @@ local started = Shared.started or error() local voices = Shared.voices or error() local User = require "site:/lib/User.luan" -local current_user = User.current_required or error() +local current_user = User.current or error() local Chat = require "site:/lib/Chat.luan" local get_chat_by_id = Chat.get_by_id or error() local languages = require "site:/lib/languages.luan" return function() - local user = current_user() - if user == nil then return end local chat_id = Http.request.parameters.chat or error() local chat = get_chat_by_id(chat_id) or error() + local user = current_user() + local is_owner = user ~= nil and user.id == chat.user_id + is_owner or not chat.is_private or error "private" local init_text = chat.init_text() Io.stdout = Http.response.text_writer() %> @@ -44,8 +45,10 @@ <span pulldown> <img onclick="clickMenu(this)" src="/images/menu.svg"> <div> +<% if is_owner then %> <span onclick="editChat()">Edit Chat</span> <span onclick="deleteChat()">Delete Chat</span> +<% end %> <span onclick="systemPrompt()">System Prompt</span> </div> </span> @@ -53,6 +56,7 @@ <div messages> <% chat.output_messages_html() %> </div> +<% if is_owner then %> <div ask> <textarea autofocus oninput="fixTextarea(event.target)" onkeydown="textareaKey(event)"><%= html_encode(init_text) %></textarea> <div buttons> @@ -61,6 +65,7 @@ <button onclick="askAi()" title="Send"><img src="/images/send.svg"></button> </div> </div> +<% end %> </div> <img waiting-ai-icon src="/images/spinner_green.gif"> <dialog edit> @@ -95,6 +100,9 @@ <p> <label clickable><input type=checkbox name=show_text>Show text</label> </p> + <p> + <label clickable><input type=checkbox name=is_private>Private chat</label> + </p> <div buttons> <button type=button onclick="closeModal(this)">Cancel</button> <button type=submit>Save</button> @@ -121,8 +129,14 @@ </dialog> <input name=initialized style="display:none"> <script> + 'use strict'; +//let test = 'a'; +//alert(test); +//test = 'b'; setChat(<%= json_string(chat.info()) %>); handleChatMarkdown(); + scrollToEnd(); +/* setTimeout(function(){ let initialized = document.querySelector('[name=initialized]'); if( !initialized.value ) { @@ -131,6 +145,7 @@ scrollToEnd(); } },10); +*/ </script> </body> </html>
diff -r 6cdb2c761e08 -r 2a4c83ce3deb src/chat.js --- a/src/chat.js Sun Aug 10 11:29:02 2025 +0900 +++ b/src/chat.js Mon Aug 11 07:58:32 2025 +0900 @@ -26,6 +26,7 @@ dialog.querySelector('select[name=voice]').value = chat.voice; dialog.querySelector('input[name=show_text]').checked = chat.show_text; dialog.querySelector('input[name=autoplay]').checked = chat.autoplay; + dialog.querySelector('input[name=is_private]').checked = chat.is_private; dialog.showModal(); }
diff -r 6cdb2c761e08 -r 2a4c83ce3deb src/lib/Chat.luan --- a/src/lib/Chat.luan Sun Aug 10 11:29:02 2025 +0900 +++ b/src/lib/Chat.luan Mon Aug 11 07:58:32 2025 +0900 @@ -33,6 +33,7 @@ voice = doc.voice show_text = doc.show_text == "true" autoplay = doc.autoplay == "true" + is_private = doc.is_private == "true" } end @@ -50,6 +51,7 @@ voice = chat.voice or error() show_text = chat.show_text and "true" or "false" autoplay = chat.autoplay and "true" or "false" + is_private = chat.is_private and "true" or nil } end @@ -86,6 +88,7 @@ name = chat.name show_text = chat.show_text autoplay = chat.autoplay + is_private = chat.is_private } end
diff -r 6cdb2c761e08 -r 2a4c83ce3deb src/lib/ai/claude/Ai_chat.luan --- a/src/lib/ai/claude/Ai_chat.luan Sun Aug 10 11:29:02 2025 +0900 +++ b/src/lib/ai/claude/Ai_chat.luan Mon Aug 11 07:58:32 2025 +0900 @@ -93,8 +93,12 @@ } fn = function(input) local Chat = require "site:/lib/Chat.luan" + local User = require "site:/lib/User.luan" local thread_id = input.thread_id or error() local chat = Chat.get_by_id(thread_id) or error + local user = User.current_user() + local is_owner = user ~= nil and user.id == chat.user_id + is_owner or not chat.is_private or error "private" return chat.ai_thread or error() end }
diff -r 6cdb2c761e08 -r 2a4c83ce3deb src/save_chat.js.luan --- a/src/save_chat.js.luan Sun Aug 10 11:29:02 2025 +0900 +++ b/src/save_chat.js.luan Mon Aug 11 07:58:32 2025 +0900 @@ -21,6 +21,7 @@ local voice = Http.request.parameters.voice or error() local show_text = Http.request.parameters.show_text local autoplay = Http.request.parameters.autoplay + local is_private = Http.request.parameters.is_private run_in_transaction( function() chat = get_chat_by_id(chat) or error() chat.user_id == current_user().id or error() @@ -29,6 +30,7 @@ chat.voice = voice chat.show_text = show_text ~= nil chat.autoplay = autoplay ~= nil + chat.is_private = is_private ~= nil chat.save() end ) Io.stdout = Http.response.text_writer()