feat: update tag and timeline share panel copy for clarity and conciseness
Some checks failed
docker-images / resolve-build-targets (push) Successful in 7s
ui-regression / playwright-regression (push) Failing after 13m4s
docker-images / build-and-push (admin) (push) Successful in 1m17s
docker-images / build-and-push (backend) (push) Successful in 28m13s
docker-images / build-and-push (frontend) (push) Successful in 47s
docker-images / submit-indexnow (push) Successful in 13s

style: enhance global CSS for better responsiveness of terminal chips and navigation pills

test: remove inline subscription test and add maintenance mode access code test

feat: implement media library picker dialog for selecting images from the media library

feat: add media URL controls for uploading and managing media assets

feat: add migration for music_enabled and maintenance_mode settings in site settings

feat: implement maintenance mode functionality with access control

feat: create maintenance page with access code input and error handling

chore: add TypeScript declaration for QR code module
This commit is contained in:
2026-04-02 23:05:49 +08:00
parent 6a50dd478c
commit 9665c933b5
94 changed files with 5266 additions and 1612 deletions

View File

@@ -45,6 +45,8 @@ mod m20260401_000034_add_source_markdown_to_posts;
mod m20260401_000035_add_human_verification_modes_to_site_settings;
mod m20260402_000036_create_worker_jobs;
mod m20260402_000037_add_wechat_share_qr_setting_to_site_settings;
mod m20260402_000038_add_music_enabled_to_site_settings;
mod m20260402_000039_add_maintenance_mode_to_site_settings;
pub struct Migrator;
#[async_trait::async_trait]
@@ -94,6 +96,8 @@ impl MigratorTrait for Migrator {
Box::new(m20260401_000035_add_human_verification_modes_to_site_settings::Migration),
Box::new(m20260402_000036_create_worker_jobs::Migration),
Box::new(m20260402_000037_add_wechat_share_qr_setting_to_site_settings::Migration),
Box::new(m20260402_000038_add_music_enabled_to_site_settings::Migration),
Box::new(m20260402_000039_add_maintenance_mode_to_site_settings::Migration),
// inject-above (do not remove this comment)
]
}

View File

@@ -0,0 +1,46 @@
use sea_orm_migration::prelude::*;
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
let table = Alias::new("site_settings");
if !manager.has_column("site_settings", "music_enabled").await? {
manager
.alter_table(
Table::alter()
.table(table.clone())
.add_column(
ColumnDef::new(Alias::new("music_enabled"))
.boolean()
.null()
.default(true),
)
.to_owned(),
)
.await?;
}
Ok(())
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
let table = Alias::new("site_settings");
if manager.has_column("site_settings", "music_enabled").await? {
manager
.alter_table(
Table::alter()
.table(table)
.drop_column(Alias::new("music_enabled"))
.to_owned(),
)
.await?;
}
Ok(())
}
}

View File

@@ -0,0 +1,84 @@
use sea_orm_migration::prelude::*;
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
let table = Alias::new("site_settings");
if !manager
.has_column("site_settings", "maintenance_mode_enabled")
.await?
{
manager
.alter_table(
Table::alter()
.table(table.clone())
.add_column(
ColumnDef::new(Alias::new("maintenance_mode_enabled"))
.boolean()
.null()
.default(false),
)
.to_owned(),
)
.await?;
}
if !manager
.has_column("site_settings", "maintenance_access_code")
.await?
{
manager
.alter_table(
Table::alter()
.table(table)
.add_column(
ColumnDef::new(Alias::new("maintenance_access_code"))
.text()
.null(),
)
.to_owned(),
)
.await?;
}
Ok(())
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
let table = Alias::new("site_settings");
if manager
.has_column("site_settings", "maintenance_access_code")
.await?
{
manager
.alter_table(
Table::alter()
.table(table.clone())
.drop_column(Alias::new("maintenance_access_code"))
.to_owned(),
)
.await?;
}
if manager
.has_column("site_settings", "maintenance_mode_enabled")
.await?
{
manager
.alter_table(
Table::alter()
.table(table)
.drop_column(Alias::new("maintenance_mode_enabled"))
.to_owned(),
)
.await?;
}
Ok(())
}
}