DOCX/XLSX preview: add renderDocx (docx-preview) and renderXlsx (SheetJS) to shared/preview-lib.js — the natural home alongside renderTiff/ renderZipListing, reusable by every tool. browse dispatches Office files to them in both the inline pane and the pop-out window via the existing preview.isOffice() check, and browse/build.sh now bundles the docx-preview + xlsx vendors. Renderers degrade to a friendly message if a tool doesn't bundle the vendor. Overflow fix: .md-shell used `grid-template-columns: 280px 1fr`. A bare `1fr` is `minmax(auto, 1fr)`, whose `auto` floor is the editor's min-content width (Toast UI's toolbar) — so the content track refused to shrink and the whole shell overflowed #previewBody as the window narrowed instead of the editor reflowing smaller. Switch both tracks to minmax(0, …) in the CSS and in the three JS spots that rewrite the columns on sidebar-drag, and give .md-shell__sidebar min-width: 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
128 lines
3.9 KiB
Bash
Executable file
128 lines
3.9 KiB
Bash
Executable file
#!/bin/sh
|
|
set -eu
|
|
|
|
root_dir=$(cd "$(dirname "$0")" && pwd)
|
|
. "$root_dir/../shared/build-lib.sh"
|
|
|
|
src_html="$root_dir/template.html"
|
|
output_dir="$root_dir/dist"
|
|
output_html="$output_dir/browse.html"
|
|
|
|
mkdir -p "$output_dir"
|
|
ensure_exists "$src_html"
|
|
|
|
css_temp=$(mktemp)
|
|
js_raw=$(mktemp)
|
|
js_temp=$(mktemp)
|
|
cleanup() { rm -f "$css_temp" "$js_raw" "$js_temp"; }
|
|
trap cleanup EXIT
|
|
|
|
# CSS files: shared base first, then browse-specific. Toast UI's CSS
|
|
# is bundled because the markdown plugin uses Toast UI inside the
|
|
# preview pane (.md files render as a full editor).
|
|
concat_files \
|
|
"../shared/fonts.css" \
|
|
"../shared/base.css" \
|
|
"../shared/toast.css" \
|
|
"../shared/logo.css" \
|
|
"../shared/vendor/toastui-editor.min.css" \
|
|
"../shared/vendor/codemirror-yaml.min.css" \
|
|
"../shared/context-menu.css" \
|
|
"../shared/elevation.css" \
|
|
"css/base.css" \
|
|
"css/tree.css" \
|
|
"css/preview-yaml.css" \
|
|
"css/history.css" \
|
|
> "$css_temp"
|
|
|
|
# JS files: shared canonical helpers, then browse modules.
|
|
# init.js must come first so window.app exists when later modules
|
|
# attach to it. JSZip is vendored (rather than CDN-loaded) so ZIP
|
|
# expansion in the tree works under restrictive networks / CSPs and
|
|
# without an external HTTP dependency.
|
|
concat_files \
|
|
"../shared/vendor/jszip.min.js" \
|
|
"../shared/vendor/docx-preview.min.js" \
|
|
"../shared/vendor/xlsx.full.min.js" \
|
|
"../shared/vendor/utif.min.js" \
|
|
"../shared/vendor/js-yaml.min.js" \
|
|
"../shared/vendor/codemirror-yaml.min.js" \
|
|
"../shared/vendor/toastui-editor-all.min.js" \
|
|
"../shared/zddc.js" \
|
|
"../shared/zddc-filter.js" \
|
|
"../shared/diff.js" \
|
|
"../shared/zip-source.js" \
|
|
"../shared/theme.js" \
|
|
"../shared/toast.js" \
|
|
"../shared/logo.js" \
|
|
"../shared/help.js" \
|
|
"../shared/preview-lib.js" \
|
|
"../shared/context-menu.js" \
|
|
"../shared/elevation.js" \
|
|
"../shared/cap.js" \
|
|
"../shared/icons.js" \
|
|
"../shared/zddc-source.js" \
|
|
"js/init.js" \
|
|
"js/loader.js" \
|
|
"js/tree.js" \
|
|
"js/preview.js" \
|
|
"js/preview-markdown.js" \
|
|
"js/preview-yaml.js" \
|
|
"js/hovercard.js" \
|
|
"js/grid.js" \
|
|
"js/upload.js" \
|
|
"js/download.js" \
|
|
"js/plan-review.js" \
|
|
"js/accept-transmittal.js" \
|
|
"js/stage.js" \
|
|
"js/history.js" \
|
|
"js/create-transmittal.js" \
|
|
"js/events.js" \
|
|
"js/app.js" \
|
|
> "$js_raw"
|
|
|
|
# Escape any literal `</` inside JS string/template literals so the
|
|
# inlined <script> block doesn't get terminated prematurely.
|
|
escape_js_close_tags "$js_raw" "$js_temp"
|
|
|
|
tool=browse
|
|
compute_build_label "$tool" "$@"
|
|
|
|
# Replace template placeholders with concatenated CSS/JS + label.
|
|
# Non-stable build labels (alpha/beta/dev-dirty) are wrapped in a red
|
|
# span — same convention as every other tool (compute_build_label
|
|
# sets $is_red=1 for non-stable cuts). Keeps the visual cue
|
|
# consistent across tool headers.
|
|
awk -v css_file="$css_temp" -v js_file="$js_temp" \
|
|
-v build_label="$build_label" -v is_red="$is_red" \
|
|
-v favicon="$favicon_data_uri" '
|
|
/\{\{CSS_PLACEHOLDER\}\}/ {
|
|
while ((getline line < css_file) > 0) print line
|
|
close(css_file); next
|
|
}
|
|
/\{\{JS_PLACEHOLDER\}\}/ {
|
|
while ((getline line < js_file) > 0) print line
|
|
close(js_file); next
|
|
}
|
|
/\{\{BUILD_LABEL\}\}/ {
|
|
if (is_red == "1") {
|
|
gsub(/\{\{BUILD_LABEL\}\}/, "<span style=\"color:red;font-weight:bold\">" build_label "</span>")
|
|
} else {
|
|
gsub(/\{\{BUILD_LABEL\}\}/, build_label)
|
|
}
|
|
print; next
|
|
}
|
|
{
|
|
gsub(/\{\{FAVICON\}\}/, favicon)
|
|
print
|
|
}
|
|
' "$src_html" > "$output_html"
|
|
|
|
echo "Wrote $output_html"
|
|
|
|
# Promote AFTER the dist file exists so promote_release can copy from
|
|
# $output_html. (The order matters — _promote_stable does cp $output_html ...)
|
|
# Only fires on a release cut; plain dev builds leave release-output alone.
|
|
if [ "$is_release" = "1" ]; then
|
|
promote_release "$tool"
|
|
fi
|