Compare commits

...

4 Commits

Author SHA1 Message Date
2dc5c2c0d4 Filter transcriptions 2023-03-16 09:12:49 +01:00
4c45fba5f6 Fix missing tables 2023-03-16 08:58:12 +01:00
77bc2f9b41 Fix content type 2023-03-14 10:06:08 +01:00
0de83070c7 Add IPA transcription 2023-03-14 09:41:07 +01:00
4 changed files with 730 additions and 486 deletions

1191
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
#![feature(slice_group_by, path_try_exists)]
#![feature(slice_group_by, fs_try_exists)]
use std::process::exit;
use std::fs;
use std::path::Path;
//mod database;
use rocket::routes;
@@ -95,7 +95,7 @@ async fn main() {
views::get_langs,
views::frontend]);
if let Ok(_) = fs::try_exists(FRONTEND_DIR) {
if let Ok(_) = Path::new(FRONTEND_DIR).try_exists() {
app = app.mount("/static", FileServer::from(FRONTEND_DIR));
}

View File

@@ -12,15 +12,15 @@ use crate::language::Language;
use crate::FRONTEND_DIR;
#[get("/")]
pub fn frontend() -> content::Html<String> {
pub fn frontend() -> content::RawHtml<String> {
match fs::read_to_string(&format!("{}/{}", FRONTEND_DIR, "index.html")) {
Ok(file) => content::Html(file),
Err(_) => content::Html(String::from("<h1>No web frontend installed.</h1>"))
Ok(file) => content::RawHtml(file),
Err(_) => content::RawHtml(String::from("<h1>No web frontend installed.</h1>"))
}
}
#[get("/langs/<lang>/words/<word>")]
pub fn get_entries(db: &State<WordDb>, lang: &str, word: &str) -> status::Custom<content::Json<String>> {
pub fn get_entries(db: &State<WordDb>, lang: &str, word: &str) -> status::Custom<content::RawJson<String>> {
let conn = db.connect();
let mut statement = conn.prepare(&format!(
@@ -46,7 +46,7 @@ pub fn get_entries(db: &State<WordDb>, lang: &str, word: &str) -> status::Custom
}
words.push(']');
status::Custom(Status::Ok, content::Json(words))
status::Custom(Status::Ok, content::RawJson(words))
}
#[get("/langs/<lang>/words?<like>&<limit>&<offset>")]

View File

@@ -185,6 +185,11 @@ $(document).ready(() => {
} else {
data.forEach(entry => {
html += `<h1>${entry.word} <span class="pos">(${entry.pos})</span></h1>`
if('sounds' in entry) {
html += `<p>${entry.sounds.map(sound => sound.ipa).filter(sound => sound && sound.match(/\/.*\//g)).join(', ')}</p>`;
}
if('senses' in entry) {
let tags = [];
entry.senses.forEach(sense => {
@@ -228,7 +233,7 @@ $(document).ready(() => {
if('forms' in entry) {
if(entry.pos === 'verb') {
let conjugation = entry.forms.filter(form =>
'source' in form && form.source === 'Conjugation');
'source' in form && form.source === 'conjugation');
if(conjugation.length > 0) {
html += '<h2>Conjugation</h2>';
@@ -237,7 +242,7 @@ $(document).ready(() => {
}
} else {
let declension = entry.forms.filter(form =>
'source' in form && form.source === 'Declension');
'source' in form && form.source === 'declension');
if(declension.length > 0) {
html += '<h2>Declension</h2>';