Mercurial Hosting > lang
changeset 32:d34d709a7a8e
region
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 03 Aug 2025 18:43:17 -0600 |
parents | 1e7d855afde3 |
children | 7d9462ea03e3 |
files | src/chat.css src/chat.html.luan src/chat.js src/edit_course.html.luan src/lib/Chat.luan src/lib/Utils.luan src/lib/languages.luan src/save_chat.js.luan |
diffstat | 8 files changed, 36 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
diff -r 1e7d855afde3 -r d34d709a7a8e src/chat.css --- a/src/chat.css Sun Aug 03 17:05:38 2025 -0600 +++ b/src/chat.css Sun Aug 03 18:43:17 2025 -0600 @@ -33,8 +33,12 @@ gap: 8px; } -dialog[rename] input { - width: 300px; +dialog[edit] { + width: 600px; + max-width: 90%; +} +dialog[edit] input { + width: 100%; } div[buttons] audio {
diff -r 1e7d855afde3 -r d34d709a7a8e src/chat.html.luan --- a/src/chat.html.luan Sun Aug 03 17:05:38 2025 -0600 +++ b/src/chat.html.luan Sun Aug 03 18:43:17 2025 -0600 @@ -14,6 +14,7 @@ local current_user = User.current_required 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() @@ -69,6 +70,15 @@ <input name=name required><br> <span error></span> </p> + <p><%= chat.language_name() %></p> + <p> + <label>Region</label><br> + <select name=language_region> +<% for _, region in ipairs(languages[chat.language].regions) do %> + <option value="<%=region.code%>"><%=region.name%></option> +<% end %> + <select> + </p> <p> <label>Voice</label><br> <select name=voice>
diff -r 1e7d855afde3 -r d34d709a7a8e src/chat.js --- a/src/chat.js Sun Aug 03 17:05:38 2025 -0600 +++ b/src/chat.js Sun Aug 03 18:43:17 2025 -0600 @@ -3,14 +3,18 @@ let chat; function setChat(newChat) { - let audioChanged = chat && chat.voice != newChat.voice; + let audioChanged = chat && (chat.language_region != newChat.language_region || chat.voice != newChat.voice); chat = newChat; document.querySelector('[content] [name]').textContent = chat.name; if(audioChanged) { - let s = `voice=${chat.voice}&`; + let lang = `lang=${chat.language_region}&`; + let voice = `voice=${chat.voice}&`; let audios = document.querySelectorAll('audio[src]'); for( let audio of audios ) { - audio.src = audio.src.replace(/voice=[^&]+&/,s); + let src = audio.src; + src = src.replace(/lang=[^&]+&/,lang); + src = src.replace(/voice=[^&]+&/,voice); + audio.src = src; } } } @@ -18,6 +22,7 @@ function editChat(name) { let dialog = document.querySelector('dialog[edit]'); dialog.querySelector('input[name=name]').value = chat.name; + dialog.querySelector('select[name=language_region]').value = chat.language_region; dialog.querySelector('select[name=voice]').value = chat.voice; dialog.showModal(); } @@ -51,7 +56,7 @@ } function playLastMessage() { - let audios = document.querySelectorAll('audio'); + let audios = document.querySelectorAll('[messages] audio'); if( audios.length >= 1 ) { let audio = audios[audios.length-1]; audio.play();
diff -r 1e7d855afde3 -r d34d709a7a8e src/edit_course.html.luan --- a/src/edit_course.html.luan Sun Aug 03 17:05:38 2025 -0600 +++ b/src/edit_course.html.luan Sun Aug 03 18:43:17 2025 -0600 @@ -70,7 +70,7 @@ <textarea required name=ai_system_prompt rows=10><%=html_encode(course.ai_system_prompt)%></textarea> <h4>AI first message (optional)</h4> - <textarea required name=ai_first_message><%=html_encode(course.ai_first_message or "")%></textarea> + <textarea name=ai_first_message><%=html_encode(course.ai_first_message or "")%></textarea> <input type=submit>
diff -r 1e7d855afde3 -r d34d709a7a8e src/lib/Chat.luan --- a/src/lib/Chat.luan Sun Aug 03 17:05:38 2025 -0600 +++ b/src/lib/Chat.luan Sun Aug 03 18:43:17 2025 -0600 @@ -11,8 +11,6 @@ local run_in_transaction = Db.run_in_transaction or error() local Ai_chat = require "site:/lib/ai/claude/Ai_chat.luan" local languages = require "site:/lib/languages.luan" -local Utils = require "site:/lib/Utils.luan" -local get_first = Utils.get_first or error() local Course = require "site:/lib/Course.luan" local get_course_by_id = Course.get_by_id or error() local Shared = require "site:/lib/Shared.luan" @@ -52,7 +50,7 @@ end local function first_region(language) - return get_first(languages[language].regions) + return languages[language].regions[1].code end function Chat.new(chat)
diff -r 1e7d855afde3 -r d34d709a7a8e src/lib/Utils.luan --- a/src/lib/Utils.luan Sun Aug 03 17:05:38 2025 -0600 +++ b/src/lib/Utils.luan Sun Aug 03 18:43:17 2025 -0600 @@ -19,8 +19,10 @@ return rtn end +--[[ function Utils.get_first(t) return pairs(t)() end +]] return Utils
diff -r 1e7d855afde3 -r d34d709a7a8e src/lib/languages.luan --- a/src/lib/languages.luan Sun Aug 03 17:05:38 2025 -0600 +++ b/src/lib/languages.luan Sun Aug 03 18:43:17 2025 -0600 @@ -7,6 +7,7 @@ -- https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=tts local regions = { + GB = "United Kingdom" JP = "Japan" US = "United States" } @@ -14,7 +15,7 @@ local languages = { en = { name = "English" - regions = {"US"} + regions = {"US","GB"} } jp = { name = "Japanese" @@ -24,11 +25,10 @@ for code, info in pairs(languages) do info.code = code - local t = {} + local t = {nil} for _, region in ipairs(info.regions) do - local region_code = code.."-"..region - t[region_code] = { - code = region_code + t[#t+1] = { + code = code.."-"..region name = regions[region] or error(region) } end
diff -r 1e7d855afde3 -r d34d709a7a8e src/save_chat.js.luan --- a/src/save_chat.js.luan Sun Aug 03 17:05:38 2025 -0600 +++ b/src/save_chat.js.luan Sun Aug 03 18:43:17 2025 -0600 @@ -15,11 +15,13 @@ return function() local chat = Http.request.parameters.chat or error() local name = Http.request.parameters.name or error() + local language_region = Http.request.parameters.language_region or error() local voice = Http.request.parameters.voice or error() run_in_transaction( function() chat = get_chat_by_id(chat) or error() chat.user_id == current_user().id or error() chat.name = name + chat.language_region = language_region chat.voice = voice chat.save() end )