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 )