diff --git a/build.ps1 b/build.ps1 index cffe97d..951123d 100644 --- a/build.ps1 +++ b/build.ps1 @@ -112,9 +112,14 @@ if ($Standalone) { $exeName = "hpl-toolbox-$version.exe" $exeOut = Join-Path $distDir $exeName - go build -ldflags="-s -w -H windowsgui -X main.AppVersion=$version" -trimpath -o $exeOut . - if ($LASTEXITCODE -ne 0) { Write-Error "go build failed"; exit 1 } - Copy-Item -Path (Join-Path $repoRoot "README.md") -Destination (Join-Path $distDir "README.md") -Force + $embeddedReadme = Join-Path (Get-Location) "README.md" + Copy-Item -Path (Join-Path $repoRoot "README.md") -Destination $embeddedReadme -Force + try { + go build -tags release -ldflags="-s -w -H windowsgui -X main.AppVersion=$version" -trimpath -o $exeOut . + if ($LASTEXITCODE -ne 0) { Write-Error "go build failed"; exit 1 } + } finally { + Remove-Item -Path $embeddedReadme -Force -ErrorAction SilentlyContinue + } $summary += [pscustomobject]@{ Artifact = $exeName diff --git a/dist/README.md b/dist/README.md deleted file mode 100644 index 59c1382..0000000 --- a/dist/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# HPL Toolbox - -Bundled VS Code extension and standalone tools for playable ad workflows. - -# Changelog - -**v0.1.2** -``` -Added - - Added local hosting for HTML files. - - Added the standalone app. -``` - -**v0.1.3** -``` -Added - - Added QR regeneration for AppLovin previews that fail to render. - - Added Save QR and Save All QRs actions. - -Changed - - Updated AppLovin Demo Upload. - - Improved the file selection workflow. -``` - -**v0.1.5** -``` -Added - - Added multi-file selection for PLEC Upload. - - Added automatic iteration name detection. - -Changed - - Improved PLEC Upload file selection. - - Moved standalone temporary files into the user temp folder. -``` - -**v0.1.6** -``` -Added - - Added beta tools for further testing: - - Playworks Converter for converting Playworks UnityAds HTML into other network variants. - - MRAID Checker for scanning HTML files against MRAID requirements and best practices. - -Changed - - Simplified the UI. -``` - -**v0.1.7** -``` -Added - - Added standalone drag-and-drop file/folder selection for HTML inputs across supported tools. - - Added status throbber/progress updates for batch scans, uploads, sharing, and conversions. - - Added streamed standalone progress updates so long-running actions update the status bar before completion. - -Changed - - MRAID Checker is no longer marked as beta in extension or standalone. - - Playworks Converter source selection now matches the other file-selection UIs more closely. - - Playworks Converter default output folder now resolves to the input file location's Output folder. - - Progress text now follows the format: [throbber] Verb count file. - -Fixed - - Fixed standalone drag-and-drop handling for multiple files and multiple folders. - - Fixed cleanup behavior for temporary dropped files when clearing or removing rows. - - Fixed standalone PLEC Upload Open button using an incorrect/mangled URL by switching to the Windows URL protocol handler. -``` diff --git a/dist/hpl-toolbox-0.1.7.exe b/dist/hpl-toolbox-0.1.7.exe index 7268b18..3ca27a5 100644 Binary files a/dist/hpl-toolbox-0.1.7.exe and b/dist/hpl-toolbox-0.1.7.exe differ diff --git a/dist/hpl-toolbox-0.1.7.vsix b/dist/hpl-toolbox-0.1.7.vsix index d6a6cfa..bc8aaba 100644 Binary files a/dist/hpl-toolbox-0.1.7.vsix and b/dist/hpl-toolbox-0.1.7.vsix differ diff --git a/src/changelogView.ts b/src/changelogView.ts index 4d461f0..f1ae250 100644 --- a/src/changelogView.ts +++ b/src/changelogView.ts @@ -50,6 +50,14 @@ function getHtml(content: string): string { font-size: 15px; line-height: 1.3; } + h3 { + margin: 14px 0 6px; + font-size: 13px; + line-height: 1.3; + } + strong { + font-weight: 600; + } ul { margin: 6px 0 12px; padding-left: 20px; @@ -62,6 +70,30 @@ function getHtml(content: string): string { margin: 8px 0; line-height: 1.5; } + code { + font-family: var(--vscode-editor-font-family, monospace); + font-size: 0.95em; + background: var(--vscode-textCodeBlock-background); + padding: 1px 4px; + border-radius: 3px; + } + .changelog-block { + margin: 8px 0 18px; + padding: 10px 12px; + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + background: var(--vscode-textCodeBlock-background); + } + .change-section { + margin: 8px 0 4px; + font-weight: 600; + } + .changelog-block ul { + margin: 4px 0 10px; + } + .changelog-block li.nested { + margin-left: 18px; + }
@@ -74,6 +106,73 @@ function renderMarkdown(markdown: string): string { const lines = markdown.replace(/\r\n/g, '\n').split('\n'); const html: string[] = []; let inList = false; + let inCodeBlock = false; + let codeLines: string[] = []; + + const closeList = () => { + if (inList) { + html.push(''); + inList = false; + } + }; + + for (const rawLine of lines) { + if (rawLine.trim() === '```') { + closeList(); + if (inCodeBlock) { + html.push(renderChangelogBlock(codeLines)); + codeLines = []; + inCodeBlock = false; + } else { + inCodeBlock = true; + } + continue; + } + if (inCodeBlock) { + codeLines.push(rawLine); + continue; + } + + const line = rawLine.trim(); + if (!line) { + closeList(); + continue; + } + const heading = line.match(/^(#{1,3})\s+(.+)$/); + if (heading) { + closeList(); + const level = Math.min(heading[1].length, 2); + html.push(`${renderInlineMarkdown(line)}
`); + } + if (inCodeBlock) { + html.push(renderChangelogBlock(codeLines)); + } + closeList(); + return html.join('\n'); +} + +function renderChangelogBlock(lines: string[]): string { + const html: string[] = ['${escapeHtml(line)}
`); + html.push(`$1');
+}
+
function escapeHtml(value: string): string {
return value.replace(/[&<>"']/g, ch => ({
'&': '&',
diff --git a/standalone/changelog.go b/standalone/changelog.go
index 02ded0a..2778284 100644
--- a/standalone/changelog.go
+++ b/standalone/changelog.go
@@ -24,9 +24,15 @@ func ChangelogPage(w http.ResponseWriter, r *http.Request) {
.changelog-panel { max-width: 840px; }
.changelog-content h1 { margin: 0 0 14px; font-size: 20px; line-height: 1.25; }
.changelog-content h2 { margin: 18px 0 8px; padding-top: 12px; border-top: 1px solid #333; font-size: 15px; line-height: 1.3; }
+ .changelog-content h3 { margin: 14px 0 6px; font-size: 13px; line-height: 1.3; }
.changelog-content ul { margin: 6px 0 12px; padding-left: 20px; }
.changelog-content li { margin: 4px 0; line-height: 1.45; }
+ .changelog-content li.nested { margin-left: 18px; }
.changelog-content p { margin: 8px 0; line-height: 1.5; }
+ .changelog-content code { font-family: Consolas, monospace; font-size: 0.95em; background: rgba(128,128,128,0.12); padding: 1px 4px; border-radius: 3px; }
+ .changelog-block { margin: 8px 0 18px; padding: 10px 12px; border: 1px solid #333; border-radius: 4px; background: rgba(128,128,128,0.08); }
+ .change-section { margin: 8px 0 4px; font-weight: 600; }
+ .changelog-block ul { margin: 4px 0 10px; }
`
w.Header().Set("Content-Type", "text/html; charset=utf-8")
@@ -34,6 +40,9 @@ func ChangelogPage(w http.ResponseWriter, r *http.Request) {
}
func readChangelog() string {
+ if embeddedReadme != "" {
+ return embeddedReadme
+ }
for _, start := range changelogSearchRoots() {
for _, candidate := range changelogCandidates(start) {
data, err := os.ReadFile(candidate)
@@ -72,6 +81,8 @@ func renderChangelogMarkdown(markdown string) string {
lines := strings.Split(strings.ReplaceAll(markdown, "\r\n", "\n"), "\n")
var out strings.Builder
inList := false
+ inCodeBlock := false
+ codeLines := []string{}
closeList := func() {
if inList {
out.WriteString("" + html.EscapeString(line) + "
") + out.WriteString("" + renderInlineMarkdown(line) + "
") + } + if inCodeBlock { + out.WriteString(renderChangelogBlock(codeLines)) } closeList() return out.String() } + +func renderChangelogBlock(lines []string) string { + var out strings.Builder + inList := false + closeList := func() { + if inList { + out.WriteString("