Skip to content

Commit 7737fed

Browse files
paulo-valimPaulo Valimericmj
authored
Diff UI update (#152)
* wip * small ui fixes * esbuild, fixing tests, fixing diff contrast * addressing feedbacks * adding esbuild with mix * fix contrast * icon fix * hosting fonts for privacy * Address review feedback - Restore Plausible plausible.init({endpoint}) inline script - Fix Tailwind v4 placeholder utility (placeholder:text-grey-300) - Use grey-200 instead of slate-200 in footer social link - Render copyright year dynamically - Live-reload also watches lib/diff_web/components/ * Restore whitespace toggle in redesigned diff header The branch was rebased over #160 ("Support ignoring whitespace in diffs") which added the diff_options/ignore_whitespace? helpers and the whitespace_toggle_label/whitespace_toggle_url view helpers. Wire the toggle into the new Tailwind stats header so ?w=1 retains the visible UI it had on the legacy template. The pluralize/3 helper turns the singular case (1 file) into "file", so test assertions for "files changed" can't match for total=1. Loosen the matcher to "changed" and switch the lingering :timer.sleep spot to assert_eventually. * Copy lib before assets.deploy so Tailwind sees templates Tailwind v4 in assets/css/app.css declares @source "../../lib" to scan HEEx templates for class usage. The previous order ran mix assets.deploy before COPY lib lib, so Tailwind produced a stylesheet missing nearly all template classes — visible as broken styling on diff.staging.hex.pm. preview/Dockerfile already copies lib first; mirror that here. * Bold only "hex" in the wordmark The header and footer wordmarks rendered the full "hexdiff" string in bold. Move font-bold to just the "hex" prefix so the brand half pops and the product name renders in normal weight. * Highlight diff hunks with Makeup Wire in the same Makeup stack used by hexpm (makeup 1.2, makeup_elixir, makeup_erlang, makeup_gleam, makeup_syntect) and run each diff line through Makeup.highlight_inner_html/2. The lexer is picked once per file via Makeup.Registry.fetch_lexer_by_extension/1, with the special cases for rebar.config / *.app.src that match hexpm/preview. Bundle hexpm's GitHub Dark makeup.css verbatim and neutralize its wrapper rules on .ghd-text-user.highlight so only the token color classes apply — diff line layout and add/remove backgrounds are kept. * Add GitHub Light variant to Makeup theme The bundled theme was hexpm's GitHub Dark colors (designed for hexpm's forced dark .highlight background). On diff pages the .highlight wrapper is transparent so add/remove line backgrounds show through, which left light-mode users staring at #a5d6ff strings on white. Add GitHub Light token colors as the default and gate the dark palette behind [data-theme=dark]. --------- Co-authored-by: Paulo Valim <valim@paulos-mbp.lan> Co-authored-by: Eric Meadows-Jönsson <eric.meadows.jonsson@gmail.com>
1 parent 016ce01 commit 7737fed

57 files changed

Lines changed: 1533 additions & 3216 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,15 @@ npm-debug.log
2828
# The directory NPM downloads your dependencies sources to.
2929
/assets/node_modules/
3030

31-
# Since we are building assets from assets/,
32-
# we ignore priv/static. You may want to comment
33-
# this depending on your deployment strategy.
34-
/priv/static/
31+
# esbuild/tailwind bundles and phx.digest artifacts are generated at build time.
32+
# Keep only source static files (favicon, robots.txt, images/) under priv/static.
33+
/priv/static/assets/
34+
/priv/static/cache_manifest.json
35+
/priv/static/**/*.gz
36+
/priv/static/**/*-????????????????????????????????.*
3537

3638
/.elixir_ls/
3739
/.vscode/
3840
/tmp/
41+
.claude/settings.local.json
42+
.tool-versions

Dockerfile

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,8 @@ ENV LANG=C.UTF-8
99
# install build dependencies
1010
RUN apt update && \
1111
apt upgrade -y && \
12-
apt install -y --no-install-recommends git build-essential curl ca-certificates gnupg && \
13-
mkdir -p /etc/apt/keyrings && \
14-
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
15-
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \
16-
apt update && \
17-
apt install -y --no-install-recommends nodejs && \
18-
apt clean -y && rm -rf /var/lib/apt/lists/* && \
19-
npm install -g yarn
12+
apt install -y --no-install-recommends git build-essential ca-certificates && \
13+
apt clean -y && rm -rf /var/lib/apt/lists/*
2014

2115
# prepare build dir
2216
RUN mkdir /app
@@ -36,13 +30,14 @@ RUN mix deps.get
3630
RUN mix deps.compile
3731

3832
# build assets
33+
COPY priv priv
3934
COPY assets assets
40-
RUN cd assets && yarn install && yarn run webpack --mode production
41-
RUN mix phx.digest
35+
COPY lib lib
36+
RUN mix esbuild.install --if-missing
37+
RUN mix tailwind.install --if-missing
38+
RUN mix assets.deploy
4239

4340
# build project
44-
COPY priv priv
45-
COPY lib lib
4641
RUN mix compile
4742

4843
# build release

assets/.babelrc

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)