| #
86c3281a |
| 16-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Add screenshot and link in README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
| #
72d60f2d |
| 15-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Add clear-resolved to admin overview; make orphaned annotations read-only
Admin panel now shows a Resolved column alongside Normal and Orphaned, with per-page and wiki-wide "clear resolved" actions
Add clear-resolved to admin overview; make orphaned annotations read-only
Admin panel now shows a Resolved column alongside Normal and Orphaned, with per-page and wiki-wide "clear resolved" actions mirroring the existing orphan clears. The counts deliberately overlap: a resolved annotation is counted in both its anchoring facet (Normal or Orphaned) and the Resolved column, so each clear button removes exactly what its label says.
helper::pageCounts() gains the resolved key; clearResolvedAll() mirrors clearOrphanedAll(). In the front-end, orphaned annotation threads are now read-only — Resolve/Reopen and Edit are suppressed, leaving only Delete.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
show more ...
|
| #
9fd890c3 |
| 15-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Add admin overview of annotated pages with clear-orphaned actions
Adds admin.php (Admin -> Annotations): a wiki-wide table of annotated pages with Normal/Orphaned counts, per-column filter, sortable
Add admin overview of annotated pages with clear-orphaned actions
Adds admin.php (Admin -> Annotations): a wiki-wide table of annotated pages with Normal/Orphaned counts, per-column filter, sortable headers, numbered pager (entries_per_page config), and per-page and wiki-wide clear-orphaned POST actions guarded by checkSecurityToken and auth_isadmin.
Refactors the orphan rule into helper::quoteMissing() shared by findOrphaned() and the new pageCounts(); adds getAnnotatedPages() / searchAnnotations() / clearOrphanedAll() to the helper. Extends HelperTest with four new coverage cases. All four locales (en, de, ru, ja) carry the new admin strings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
show more ...
|
| #
86c7806d |
| 03-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Add config, selection guards, annotation overlap detection, and glow button
- Config: color_open / color_resolved (hex, drives CSS vars); embed_max_bytes, context_length, body_cap move from consta
Add config, selection guards, annotation overlap detection, and glow button
- Config: color_open / color_resolved (hex, drives CSS vars); embed_max_bytes, context_length, body_cap move from constants to conf/default + metadata. action.php injects --ann-open-rgb / --ann-resolved-rgb as CSS custom props; style.css escapes every rgba(var(…)) with LESS ~"…" so lesserphp doesn't bake them to #000000 at compile time. - Selection guards: Annotate button suppressed inside .ann-* UI, #dw__toc, .docInfo, .secedit; the old endpoint-only isInsideHighlight is replaced by selectionHitsHighlight (range.intersectsNode over all highlight spans) so a selection overrunning an existing annotation on either side opens it instead of offering a new overlapping one. - Glow: static amber box-shadow on .ann-tooltip .ann-btn (no animation). - Removed email line from plugin.info.txt; updated GeneralTest accordingly. - context_length fed to JS via JSINFO.annotations.contextLen so capture and PHP trimming stay in sync. - conf/ + lang/*/settings.php + README/DESIGN updated.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
show more ...
|
| #
ee9dbf15 |
| 03-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Add nested reply threading; sync docs
Replies can now be threaded under one another instead of only sitting flat under their annotation.
Backend: - helper.php: addReply() takes an optional parentId
Add nested reply threading; sync docs
Replies can now be threaded under one another instead of only sitting flat under their annotation.
Backend: - helper.php: addReply() takes an optional parentId, stored on each reply after sanitising it to hex; an empty or unknown parent simply falls back to a top-level reply. Replies remain a flat list, with the parent link carried as data. - action.php: the reply action forwards parentId and returns the full updated annotation (not just the new reply) so the client re-renders the whole thread in one round-trip. Also fix a stray-indented docblock and drop the inaccurate "and exit" wording on the JSON responders.
Docs / manifest: - DESIGN.md: document the parentId field, the flat-storage-plus-client-tree model, and the full-annotation reply response. - README.md: note that replies can nest. - plugin.info.txt: bump the date.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
show more ...
|
| #
da56206c |
| 02-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Fix highlight off-by-one, localise the UI, add tests
Anchoring (the core bug): - Replace buildNormToRaw with normalizeWithMap so the normalised search string and the normalised->raw index map are
Fix highlight off-by-one, localise the UI, add tests
Anchoring (the core bug): - Replace buildNormToRaw with normalizeWithMap so the normalised search string and the normalised->raw index map are built in one pass and share the same trimming. DokuWiki indents its content markup, so the collected text starts with a whitespace text node; the old untrimmed map shifted every highlight by a character. Verified on the live wiki: a quote now re-anchors exactly, including across element boundaries. - Locate all matches first, then wrap last-to-first, so wrapping (which splits text nodes) never disturbs a not-yet-wrapped offset. - Fix a pre-existing orphan double-count: renderAll passed an orphan total into updateCounter, which then recounted it from the _orphaned flags.
Localisation: - Move front-end strings to $lang['js'] (exposed as LANG.plugins.annotations) and read them via t()/fmt() with English fallbacks. - Add de, ru and ja translations alongside en.
Conventions / cleanup: - action.php: read request data via $INPUT; pass the CSRF token straight to checkSecurityToken($token) instead of poking $_POST/$_REQUEST; unify admin detection on auth_isadmin(). - helper.php: write annotation files with JSON_UNESCAPED_UNICODE | _SLASHES. - Drop the dead ann-highlight-orphaned constant; set panel data-status so the resolved accent in style.css applies.
Tests: - Add _test/GeneralTest.php (manifest + conf invariant) and _test/HelperTest.php (permission rules, CRUD, input cleaning, findOrphaned). 15 tests pass.
Docs: sync DESIGN.md and README.md; bump plugin.info.txt date.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
show more ...
|
| #
8d8701f5 |
| 02-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Make README user-facing; move technical detail into DESIGN
README now covers only what end users need: features, install, usage. The storage format, AJAX API, file layout, browser internals and the
Make README user-facing; move technical detail into DESIGN
README now covers only what end users need: features, install, usage. The storage format, AJAX API, file layout, browser internals and the ACL-level permission table -- all developer material that overlapped with DESIGN.md -- now live only in DESIGN.md, which gains the plugin.info.txt manifest row and a note on the repository's doc and licence files. README links to DESIGN for developers and AI agents.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
show more ...
|
| #
5fa3d185 |
| 02-Jun-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Document the shipped plugin: rewrite DESIGN.md, sync README
Replace the build-stage narrative and the claude.ai sandbox paths in DESIGN.md with a single architecture reference for the finished plugi
Document the shipped plugin: rewrite DESIGN.md, sync README
Replace the build-stage narrative and the claude.ai sandbox paths in DESIGN.md with a single architecture reference for the finished plugin: the anchoring model and re-anchoring algorithm, JSON storage and limits, the JSINFO-injection mechanism, the permission model, the CSRF flow, the AJAX endpoint, the FF78/PHP constraints, and the remaining gaps (unwired UI strings, no translations, no tests, no config).
Complete the README file tree (DESIGN.md, LICENSE) and note that action.php also performs the JSINFO injection.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
show more ...
|
| #
43d2073c |
| 23-May-2026 |
tracker-user <82045103+tracker-user@users.noreply.github.com> |
Initial annotations plugin
Word- and sentence-level annotations for DokuWiki pages: text-quote anchoring, threaded replies, open/resolved status, gutter markers, client- and server-side orphan detec
Initial annotations plugin
Word- and sentence-level annotations for DokuWiki pages: text-quote anchoring, threaded replies, open/resolved status, gutter markers, client- and server-side orphan detection, a per-user on/off toggle, and admin per-page bulk-clear. Annotations are stored out-of-band in a per-page JSON file, so the wiki changelog is never touched.
Built with Claude Opus 4.7 and Sonnet 4.6.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
show more ...
|