bkindler_imagefull/MEMORY.md
Björn Kindler a331cf0eec Initial commit: ImageFull v1.0.0
Obsidian plugin for fullscreen image viewing:
- Double-click / double-tap to open overlay
- Two-finger pinch or trackpad pinch to zoom (up to 10x)
- Two-finger swipe or trackpad swipe to pan
- Mouse drag to pan when zoomed
- ESC closes, 0 resets zoom
2026-04-17 11:28:39 +02:00

2.3 KiB
Raw Blame History

plugin-imagefull — Hot Summary

Dev

type: obsidian-plugin
id: imagefull
version: 1.0.0
stack: vanilla JS (CommonJS) + CSS
build: none (main.js direkt, kein Bundler)
files:
  - manifest.json
  - main.js      # Plugin-Klasse + Overlay-Logik
  - styles.css   # Overlay-Styles + Transform
  - README.md
target: desktop + mobile (iPad, iPhone)
minAppVersion: 1.4.0

Feature-Set

Eingabe Verhalten
Doppelklick / Doppeltipp auf eingebettetes Bild Öffnet Fullscreen-Overlay
Doppelklick / Doppeltipp auf Overlay Schließt (außer während Pinch/Pan)
Two-Finger-Pinch (Touch) Zoom 1× 10× um Pinch-Zentrum
Two-Finger-Drag (Touch) Pan / Bildausschnitt verschieben
Trackpad-Pinch / Wheel Zoom um Cursor-Position
Maus-Drag Pan im gezoomten Zustand (Desktop)
ESC Schließt
0 Reset Zoom

Architektur

  • Globaler dblclick-Handler (capture) auf document + touchend-Handler mit 350ms-Doppeltipp-Fenster für Mobile
  • Einfacher Klick bleibt unangetastet → keine Konflikte mit anderen Image-Interaktionen
  • Embed-Erkennung via .markdown-preview-view, .markdown-rendered, .markdown-source-view, .cm-editor, .internal-embed
  • Transform: translate3d(tx, ty, 0) scale(s) · will-change: transform
  • clampPan() begrenzt Pan auf sichtbaren Bereich + 40px Puffer
  • suppressClick verhindert Close-Klick direkt nach Geste

Deployment

installed_at: "<Vault>/.obsidian/plugins/imagefull/"
active_vaults:
  - Sprecherakademie  # /Users/bjoernkindler/Library/Mobile Documents/iCloud~md~obsidian/Documents/Sprecherakademie
replaces: obsidian-image-toolkit  # vom User in Sprecherakademie ersetzt

Rules

  • Kein Build-Schritt — Änderungen an main.js direkt wirksam (Plugin reload)
  • Bei Konflikt mit anderen Image-Plugins: eins deaktivieren
  • passive: false bei touchmove + wheel notwendig für preventDefault

L2

  • Obsidian Plugin API: https://docs.obsidian.md/Home
  • Embed-DOM-Klassen variieren zwischen Reading/Live-Preview — beide Root-Selektoren abdecken