Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
b0ca3ce
refactor: modernize codebase, fix bugs, add E2E tests & Docker setup
raffelino Feb 13, 2026
77a0927
feat: UI redesign — compact icon buttons, brand color, card-based set…
raffelino Mar 9, 2026
9465ce3
feat: convert popup to side panel, redesign script lines
raffelino Mar 9, 2026
33e57dd
fix: actions view not receiving recorded commands
raffelino Mar 9, 2026
3c7269d
feat: structured keyword editor with named parameters
raffelino Mar 9, 2026
a9c3afc
feat: context menu, assertions, control structures, extract keyword, …
raffelino Mar 9, 2026
b3fe685
feat: live preview — show recorded actions during recording
raffelino Mar 10, 2026
755c77c
fix: [object Object] in status bar, add real favicon, headless E2E su…
raffelino Mar 10, 2026
e5842de
fix: script line controls overflow, loading overlay
raffelino Mar 10, 2026
0ec9958
perf: remove Google Fonts dependency — instant startup
raffelino Mar 10, 2026
f462f8e
fix: side panel not opening on first click, loading spinner not visible
raffelino Mar 10, 2026
a09159e
fix: side panel blank on first click, loading overlay invisible
raffelino Mar 10, 2026
83d5651
fix: loading overlay blocks UI when init fails silently
raffelino Mar 10, 2026
6482259
fix: ensure all errors surface on console, no silent swallowing
raffelino Mar 10, 2026
5f1fb5e
fix: side panel opens instantly — restore openPanelOnActionClick
raffelino Mar 10, 2026
3baccf4
fix: CSP violation — remove inline script/styles from popup.html
raffelino Mar 10, 2026
77892f2
fix: strip popup.html to pure HTML+CSS — no JS dependencies for initi…
raffelino Mar 10, 2026
5d7255f
debug: minimal test panel to isolate blank side panel issue
raffelino Mar 10, 2026
a825861
perf: lazy-load context menus, panel config before heavy imports
raffelino Mar 10, 2026
5ad1ba7
fix: remove dynamic import() — banned in ServiceWorkerGlobalScope
raffelino Mar 10, 2026
a426425
perf: lazy init — setupStorageDefaults + loadState only on first message
raffelino Mar 10, 2026
a6c56d1
debug: minimal SW — only setPanelBehavior, no imports, no module
raffelino Mar 10, 2026
24663e2
step 1: add background.js back (message handler)
raffelino Mar 10, 2026
4b56386
step 2: add context menus back
raffelino Mar 10, 2026
22cb5b9
fix: script line controls overflow — input shrinks, controls stay inside
raffelino Mar 10, 2026
ae7f23b
fix: controls positioned absolute inside row — never overflow
raffelino Mar 10, 2026
2c369a8
fix: button icons overflow — smaller glyphs, overflow:hidden
raffelino Mar 10, 2026
792d67e
fix: center glyphs in buttons — inline-grid + place-items:center
raffelino Mar 10, 2026
d075f08
fix: glyphs invisible — simplified to text-align + line-height centering
raffelino Mar 10, 2026
20fe2ac
fix: button glyph alignment — all:unset kills browser defaults
raffelino Mar 10, 2026
a050349
fix: btn-small — kill ::before pseudo-element, override button globals
raffelino Mar 10, 2026
5010daf
fix: context menus recreated on every SW start
raffelino Mar 10, 2026
d8bb392
fix: remove leading spaces from context menu commands
raffelino Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions .eslintrc.json

This file was deleted.

15 changes: 5 additions & 10 deletions .github/workflows/on-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,9 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Start xvfb on Linux
if: matrix.os == 'ubuntu-latest'
run: |
export DISPLAY=:99.0
Xvfb -ac :99 -screen 0 1280x1024x16 > /dev/null 2>&1 &
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 12
- run: yarn
- run: xvfb-run --auto-servernum yarn test
node-version: 20
- run: npm ci
- run: xvfb-run --auto-servernum npm test
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ archive/
node_modules/
.nyc_output
test-user-data-dir
test-results/
test/e2e/.tmp-profile-*/
17 changes: 17 additions & 0 deletions Dockerfile.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM mcr.microsoft.com/playwright:v1.58.0-noble

RUN apt-get update && apt-get install -y --no-install-recommends \
xvfb \
x11-utils \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci
COPY . .

ENV DOCKER=1
ENV DISPLAY=:99
ENV PLAYWRIGHT_FORCE_TTY=0

CMD xvfb-run --auto-servernum --server-args="-screen 0 1280x720x24" npx playwright test test/e2e/ --reporter=list 2>&1
203 changes: 203 additions & 0 deletions REFACTORING_PLAN.md

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions assets/icon-template.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icon-xpath.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
128 changes: 99 additions & 29 deletions assets/options.css
Original file line number Diff line number Diff line change
@@ -1,49 +1,119 @@
/* ============================================================
options.css — Options page styles
============================================================ */

.panel-options {
padding: 0.5rem;
width: 350px;
height: 20px;
padding: 10px;
padding: var(--sp-6);
max-width: 460px;
margin: 0 auto;
}

.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-rows: repeat(3, 1fr);
grid-row-gap: 2rem;
.options-header {
display: flex;
align-items: center;
gap: var(--sp-3);
margin-bottom: var(--sp-6);
}

.options-title {
font-size: var(--text-xl);
font-weight: 700;
color: var(--text-primary);
letter-spacing: -0.02em;
margin: 0;
}

.options-card {
background: var(--bg-surface);
border: 1px solid var(--border-default);
border-radius: var(--radius-lg);
padding: var(--sp-5);
margin-bottom: var(--sp-4);
}

.heading {
grid-column: 1 / 4;
grid-row: 1;
h1 {
font-size: 1.2rem;
}
margin-bottom: var(--sp-3);
}

.heading h2 {
font-size: var(--text-lg);
font-weight: 600;
color: var(--text-primary);
margin: 0 0 var(--sp-2);
}

#hint,
#language-hint {
color: var(--text-secondary);
font-size: var(--text-sm);
line-height: 1.5;
}

#language-hint {
display: flex;
align-items: center;
gap: var(--sp-3);
margin-top: var(--sp-2);
}

#language-hint label {
cursor: pointer;
color: var(--text-primary);
font-size: var(--text-sm);
}

hr {
border: none;
border-top: 1px solid var(--border-default);
margin: var(--sp-4) 0;
}

input#custom-locators {
grid-column: 1 / 4;
grid-row: 2;
font-size: 0.9rem;
padding: 0.5rem;
width: 100%;
font-family: var(--font-mono);
font-size: var(--text-sm);
padding: var(--sp-2) var(--sp-3);
border: 1px solid var(--border-default);
border-radius: var(--radius-md);
background: var(--bg-input);
color: var(--text-primary);
height: 38px;
margin-bottom: var(--sp-3);
}

input#custom-locators:focus {
outline: 1px solid #D2D2D2;
margin: none;
outline: none;
border-color: var(--brand-500);
box-shadow: 0 0 0 3px var(--brand-glow);
}

button#reset, button#update {
min-width: 100%;
margin: 0;
.options-actions {
display: flex;
gap: var(--sp-2);
}

button#reset {
grid-column: 1;
grid-row: 3;
button#reset,
button#update {
flex: 1;
justify-content: center;
}

button#update {
grid-column: 3;
grid-row: 3;
.btn-primary-action {
background: var(--brand-500) !important;
color: white !important;
border-color: var(--brand-500) !important;
font-weight: 600;
}

.btn-primary-action:hover {
background: var(--brand-600) !important;
border-color: var(--brand-600) !important;
box-shadow: 0 2px 8px var(--brand-glow) !important;
}

/* Legacy grid compat — no longer used but kept for safety */
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-row-gap: var(--sp-5);
}
Loading
Loading