fix(ui): enable website links for all Craft apps

PR #198.
This commit is contained in:
Dylan M. Taylor authored and GitHub committed 2026-10-11 23:22:17 -06:00
1 parent 257e16c325
commit 6124cf0693
9 files changed
+18 -29

No files matched your search

+4 -4
View File
@@ -232,10 +232,10 @@ stand on its own.
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) |
| <img src="https://raw.githubusercontent.com/storytold/gridcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.gridcraft.png" alt="" width="32" height="32"> | **GridCraft** | Spreadsheets and data | [GitHub](https://github.com/storytold/gridcraft) | [Website](https://getartcraft.com/apps/gridcraft) |
| <img src="https://raw.githubusercontent.com/storytold/wordcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.wordcraft.png" alt="" width="32" height="32"> | **WordCraft** | Word processing and documents | [GitHub](https://github.com/storytold/wordcraft) | [Releases](https://github.com/storytold/wordcraft/releases) |
| <img src="https://raw.githubusercontent.com/storytold/deckcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.deckcraft.png" alt="" width="32" height="32"> | **DeckCraft** | Presentations and slide decks | [GitHub](https://github.com/storytold/deckcraft) | [Releases](https://github.com/storytold/deckcraft/releases) |
| <img src="https://raw.githubusercontent.com/storytold/cadcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.cadcraft.png" alt="" width="32" height="32"> | **CADCraft** | Computer-aided design | [GitHub](https://github.com/storytold/cadcraft) | [Releases](https://github.com/storytold/cadcraft/releases) |
| <img src="https://raw.githubusercontent.com/storytold/soundcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.soundcraft.png" alt="" width="32" height="32"> | **SoundCraft** | Audio recording and editing | [GitHub](https://github.com/storytold/soundcraft) | [Releases](https://github.com/storytold/soundcraft/releases) |
| <img src="https://raw.githubusercontent.com/storytold/wordcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.wordcraft.png" alt="" width="32" height="32"> | **WordCraft** | Word processing and documents | [GitHub](https://github.com/storytold/wordcraft) | [Website](https://getartcraft.com/apps/wordcraft) |
| <img src="https://raw.githubusercontent.com/storytold/deckcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.deckcraft.png" alt="" width="32" height="32"> | **DeckCraft** | Presentations and slide decks | [GitHub](https://github.com/storytold/deckcraft) | [Website](https://getartcraft.com/apps/deckcraft) |
| <img src="https://raw.githubusercontent.com/storytold/cadcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.cadcraft.png" alt="" width="32" height="32"> | **CADCraft** | Computer-aided design | [GitHub](https://github.com/storytold/cadcraft) | [Website](https://getartcraft.com/apps/cadcraft) |
| <img src="https://raw.githubusercontent.com/storytold/soundcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.soundcraft.png" alt="" width="32" height="32"> | **SoundCraft** | Audio recording and editing | [GitHub](https://github.com/storytold/soundcraft) | [Website](https://getartcraft.com/apps/soundcraft) |
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
+6 -6
View File
@@ -10,7 +10,7 @@ use serde::{Deserialize, Serialize};
/// Which generation of the suite an app belongs to.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum AppGroup {
/// The seven original apps, each with a page on getartcraft.com.
/// The seven original apps.
Classic,
/// The five apps added after them.
New,
@@ -68,9 +68,9 @@ impl CraftApp {
format!("https://github.com/{}", self.repo)
}
/// The app's page on getartcraft.com (classic apps only).
pub fn website(&self) -> Option<String> {
(self.group == AppGroup::Classic).then(|| format!("https://getartcraft.com/apps/{}", self.id))
/// The app's page on getartcraft.com.
pub fn website(&self) -> String {
format!("https://getartcraft.com/apps/{}", self.id)
}
/// Asset stems this app's releases may use, current first.
@@ -285,7 +285,7 @@ mod tests {
fn pdfcraft_also_answers_to_printcraft() {
let pdf = CraftApp::by_id("pdfcraft").unwrap();
assert_eq!(pdf.stems().collect::<Vec<_>>(), ["pdfcraft", "printcraft"]);
assert_eq!(pdf.website().as_deref(), Some("https://getartcraft.com/apps/pdfcraft"));
assert_eq!(CraftApp::by_id("wordcraft").unwrap().website(), None);
assert_eq!(pdf.website(), "https://getartcraft.com/apps/pdfcraft");
assert_eq!(CraftApp::by_id("wordcraft").unwrap().website(), "https://getartcraft.com/apps/wordcraft");
}
}
-1
View File
@@ -226,7 +226,6 @@ month Dec Dez.
Checking for updates… Suche nach Updates…
Downloads the new version, replaces this one and opens it again Lädt die neue Version herunter, ersetzt diese und öffnet sie erneut
Couldn't check for updates: {f} Updates konnten nicht geprüft werden: {f}
Website (coming soon) Website (demnächst)
GitHub repository GitHub-Repository
ArtCraft ArtCraft
Update 1 app 1 App aktualisieren
Can't render this file because it contains an unexpected character in line 11 and column 16.
-1
View File
@@ -224,7 +224,6 @@ month Dec déc.
Checking for updates… Recherche de mises à jour…
Downloads the new version, replaces this one and opens it again Télécharge la nouvelle version, remplace celle-ci et la rouvre
Couldn't check for updates: {f} Impossible de rechercher les mises à jour : {f}
Website (coming soon) Site web (bientôt disponible)
GitHub repository Dépôt GitHub
ArtCraft ArtCraft
Update 1 app Mettre à jour 1 application
Can't render this file because it contains an unexpected character in line 5 and column 50.
-1
View File
@@ -214,7 +214,6 @@ month Dec dez.
Checking for updates… Verificando atualizações…
Downloads the new version, replaces this one and opens it again Baixa a nova versão, substitui a atual e abre novamente
Couldn't check for updates: {f} Não foi possível verificar atualizações: {f}
Website (coming soon) Site (em breve)
GitHub repository Repositório no GitHub
ArtCraft ArtCraft
Update 1 app Atualizar 1 aplicativo
1 # Brazilian Portuguese (pt-BR) catalog for ArtCraft Launcher.
214
215
216
217
218
219
-1
View File
@@ -225,7 +225,6 @@ month Dec дек.
Checking for updates… Проверка обновлений…
Downloads the new version, replaces this one and opens it again Скачивает новую версию, заменяет текущую и открывает её заново
Couldn't check for updates: {f} Не удалось проверить обновления: {f}
Website (coming soon) Веб-сайт (скоро)
GitHub repository Репозиторий GitHub
ArtCraft ArtCraft
Update 1 app Обновить 1 приложение
Can't render this file because it contains an unexpected character in line 13 and column 44.
-1
View File
@@ -150,7 +150,6 @@ month Dec 12月
Checking for updates… 正在检查更新…
Downloads the new version, replaces this one and opens it again 下载新版本,替换当前版本并重新打开
Couldn't check for updates: {f} 无法检查更新:{f}
Website (coming soon) 网站(即将上线)
GitHub repository GitHub 仓库
ArtCraft ArtCraft
Update 1 app 更新 1 个应用
Can't render this file because it contains an unexpected character in line 4 and column 3.
+2 -9
View File
@@ -445,9 +445,7 @@ impl LauncherUi {
strip_ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
ui.spacing_mut().item_spacing.x = 16.0;
widgets::hud_link(ui, tl!("GitHub"), &app.repo_url());
if let Some(site) = app.website() {
widgets::hud_link(ui, tl!("Website"), &site);
}
widgets::hud_link(ui, tl!("Website"), &app.website());
});
}
@@ -884,12 +882,7 @@ impl LauncherUi {
ui.close();
}
};
match entry.app.website() {
Some(site) => link(ui, tl!("Website"), site),
None => {
ui.add_enabled(false, egui::Button::new(tl!("Website (coming soon)")));
}
}
link(ui, tl!("Website"), entry.app.website());
link(ui, tl!("GitHub repository"), entry.app.repo_url());
link(ui, tl!("All releases"), entry.app.releases_url());
});
+6 -5
View File
@@ -493,18 +493,19 @@ fn links_to_the_website_github_and_each_apps_pages() {
for label in ["Website", "GitHub", "Discord"] {
assert!(h.query_all_by_label(label).count() >= 1, "{label}");
}
// Cards: every app links to its repo; only the seven classic apps have a website (plus the footer's).
// Cards: every app links to its repo and to its own page on getartcraft.com (plus the footer's).
let shown_cards = h.query_all_by_label("GitHub").count() - 1;
let shown_sites = h.query_all_by_label("Website").count() - 1;
assert!(shown_cards >= 7, "{shown_cards}");
assert_eq!(shown_sites, 7, "only classic apps have website pages");
// The table's … menu has the app's GitHub repo and, for a new app, no website yet.
assert!(shown_cards >= 12, "{shown_cards}");
assert_eq!(shown_sites, 12, "every app has a website page");
// The table's … menu has the app's website and GitHub repo.
let (mut h, _) = harness(ViewMode::Table, egui::Theme::Dark, true);
h.run_steps(6);
h.get_all_by_label("…").nth(7).unwrap().click(); // WordCraft
h.run_steps(3);
h.get_by_label("GitHub repository");
h.get_by_label("Website (coming soon)");
// The footer's Website link and WordCraft's now-live one in the menu.
assert!(h.query_all_by_label_contains("Website").count() >= 2);
}
/// Clicks the `n`th widget labelled `label` and returns the URL the app asked to open.