Files
taxbaik/TaxBaik.Web/Components/Admin/App.razor
T
kjh2064 abad1630b6
TaxBaik CI/CD / build-and-deploy (push) Failing after 41s
feat: add EasyMDE markdown editor for blog creation/editing
- Add EasyMDE 2.18.0 CDN to App.razor
- Add Marked.js for markdown preview rendering
- Replace MudTextField with EasyMDE editor in BlogCreate.razor
- Replace MudTextField with EasyMDE editor in BlogEdit.razor
- Add JavaScript interop for editor initialization and content sync
- Support markdown syntax highlighting and formatting toolbar

Features:
 Bold, italic, strikethrough
 Headings (H1-H6)
 Code blocks and inline code
 Lists (ordered/unordered)
 Links and images
 Tables
 Quotes
 Horizontal rules
 Real-time preview (side-by-side mode)
 Full-screen editing
 Markdown guide

The editor syncs content with Blazor form on save.
Markdown syntax is preserved in database and rendered as HTML on blog pages.
2026-07-01 16:37:30 +09:00

137 lines
4.9 KiB
Plaintext

@using Microsoft.AspNetCore.Components.Web
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>백원숙 세무회계 - 관리자</title>
<base href="/taxbaik/" />
<link rel="icon" type="image/svg+xml" href="/taxbaik/favicon.svg" />
<link rel="alternate icon" href="/taxbaik/favicon.ico" />
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap" rel="stylesheet" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
<!-- EasyMDE 마크다운 에디터 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/easymde@2.18.0/dist/easymde.min.css" />
<script src="https://cdn.jsdelivr.net/npm/easymde@2.18.0/dist/easymde.min.js"></script>
<!-- Marked 라이브러리 (EasyMDE 미리보기용) -->
<script src="https://cdn.jsdelivr.net/npm/marked@11.1.1/marked.min.js"></script>
<script>
document.documentElement.classList.toggle(
'admin-login-route',
window.location.pathname.toLowerCase().endsWith('/admin/login'));
</script>
<link rel="stylesheet" href="css/admin.css" />
<component type="typeof(HeadOutlet)" render-mode="InteractiveServer" />
</head>
<body>
<div id="components-reconnect-modal" class="admin-reconnect-modal">
<div class="admin-reconnect-card">
<strong>연결 재설정 중...</strong>
<span>새로운 버전으로 업데이트되었습니다.</span>
<span style="font-size: 0.85rem; margin-top: 0.5rem; opacity: 0.8;">자동으로 페이지를 새로고침합니다. 잠시만 기다려주세요.</span>
</div>
</div>
<div id="blazor-loading" class="blazor-loading-overlay show">
<div class="blazor-loading-spinner">
<div class="spinner"></div>
<p>로드 중...</p>
</div>
</div>
<MudThemeProvider @bind-IsDarkMode="isDarkMode" Theme="mudTheme" />
<Routes @rendermode="new InteractiveServerRenderMode(prerender: true)" />
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script src="js/admin-session.js"></script>
<script src="_framework/blazor.web.js"></script>
<script>window.taxbaikAdminSession?.bindLoginForm();</script>
<script>window.taxbaikAdminSession?.watchReconnect();</script>
</body>
</html>
@code {
private bool isDarkMode = false;
private MudTheme mudTheme = new()
{
Palette = new PaletteLight()
{
Primary = "#1976D2",
PrimaryContrastText = "#FFFFFF",
Secondary = "#2D9F7E",
SecondaryContrastText = "#FFFFFF",
Tertiary = "#FF8A50",
TertiaryContrastText = "#FFFFFF",
Surface = "#F5F7FA",
Background = "#FFFFFF",
BackgroundGrey = "#F8F9FB",
DrawerBackground = "#FFFFFF",
DrawerText = "#424242",
AppbarBackground = "#FFFFFF",
AppbarText = "#424242",
TextPrimary = "#1A1A1A",
TextSecondary = "#64748B",
TextDisabled = "#94A3B8",
ActionDefault = "#1976D2",
ActionDisabled = "#BDBDBD",
Divider = "#E2E8F0",
DividerLight = "#F1F5F9",
Error = "#DC2626",
ErrorContrastText = "#FFFFFF",
Warning = "#F59E0B",
WarningContrastText = "#FFFFFF",
Info = "#06B6D4",
InfoContrastText = "#FFFFFF",
Success = "#16A34A",
SuccessContrastText = "#FFFFFF",
},
LayoutProperties = new LayoutProperties()
{
DefaultBorderRadius = "6px"
},
Typography = new Typography()
{
Default = new Default()
{
FontSize = ".8125rem",
FontWeight = 400,
LineHeight = 1.5
},
H1 = new H1()
{
FontSize = "1.75rem",
FontWeight = 600,
LineHeight = 1.2
},
H2 = new H2()
{
FontSize = "1.5rem",
FontWeight = 600,
LineHeight = 1.3
},
H3 = new H3()
{
FontSize = "1.25rem",
FontWeight = 600,
LineHeight = 1.3
},
H4 = new H4()
{
FontSize = "1.1rem",
FontWeight = 600,
LineHeight = 1.4
},
H5 = new H5()
{
FontSize = "0.95rem",
FontWeight = 500,
LineHeight = 1.4
},
H6 = new H6()
{
FontSize = "0.85rem",
FontWeight = 500,
LineHeight = 1.5
}
}
};
}