From c75a4df5dc204d0df543fa6d91d32688072d8279 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Fri, 23 May 2025 10:15:53 +0200 Subject: [PATCH] initial commit --- .gitignore | 2 + LICENSE | 36 ++++++ README.md | 1 + animeCat.js | 158 +++++++++++++++++++++++++ assets/cat/default.png | Bin 0 -> 42930 bytes assets/cat/eyes_closed.png | Bin 0 -> 40041 bytes assets/cat/mouth_open.png | Bin 0 -> 43449 bytes index.html | 121 +++++++++++++++++++ main.js | 194 +++++++++++++++++++++++++++++++ package.json | 16 +++ preload.js | 19 +++ renderer.js | 230 +++++++++++++++++++++++++++++++++++++ 12 files changed, 777 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 animeCat.js create mode 100644 assets/cat/default.png create mode 100644 assets/cat/eyes_closed.png create mode 100644 assets/cat/mouth_open.png create mode 100644 index.html create mode 100644 main.js create mode 100644 package.json create mode 100644 preload.js create mode 100644 renderer.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25c8fdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7f46a5f --- /dev/null +++ b/LICENSE @@ -0,0 +1,36 @@ + +CC0 1.0 Universal + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. +1. Copyright and Related Rights. + +A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: + + the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; + moral rights retained by the original author(s) and/or performer(s); + publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; + rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; + rights protecting the extraction, dissemination, use and reuse of data in a Work; + database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and + other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. + +To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. +3. Public License Fallback. + +Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. +4. Limitations and Disclaimers. + + No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. + Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. + Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. + Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..8b73483 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Projekt in auto-git-gui-initial diff --git a/animeCat.js b/animeCat.js new file mode 100644 index 0000000..7ff8199 --- /dev/null +++ b/animeCat.js @@ -0,0 +1,158 @@ +// animeCat.js +export class AnimeCat { + /** + * @param {HTMLElement} container + * @param {Object} [options] + */ + constructor(container, options = {}) { + this.container = container; + this.images = Object.assign({ + default: 'default.png', + eyesClosed: 'eyes_closed.png', + mouthOpen: 'mouth_open.png' + }, options.images); + this.blinkMin = options.blinkMin ?? 5000; + this.blinkMax = options.blinkMax ?? 15000; + this.blinkDuration = options.blinkDuration?? 175; + this.talkInterval = options.talkInterval ?? 300; + + this._isSpeaking = false; + this._blinkTimeout = null; + this._talkIntervalId = null; + this._speechTimeout = null; + this._mouthOpen = false; + + this._createElements(); + this._bindMouseHold(); + this._startBlinking(); + } + + _createElements() { + this.wrapper = document.createElement('div'); + this.wrapper.style.position = 'relative'; + this.wrapper.style.display = 'inline-block'; + + // cat image + this.img = document.createElement('img'); + this.img.src = this.images.default; + // disable drag & selection + this.img.draggable = false; + this.img.style.userSelect = 'none'; + this.img.style.webkitUserSelect = 'none'; + this.img.style.MozUserSelect = 'none'; + this.img.style.msUserSelect = 'none'; + // some browsers need this to stop the default drag ghost + this.img.style.webkitUserDrag = 'none'; + + this.wrapper.appendChild(this.img); + + // speech bubble + this.bubble = document.createElement('div'); + Object.assign(this.bubble.style, { + position: 'absolute', + bottom: '100%', + left: '50%', + transform: 'translateX(-50%)', + padding: '8px 12px', + background: 'white', + border: '1px solid #ccc', + borderRadius: '4px', + boxShadow: '0 2px 6px rgba(0,0,0,0.2)', + opacity: '0', + transition: 'opacity 0.3s', + maxWidth: '200px', + wordWrap: 'break-word', + fontFamily: 'sans-serif', + fontSize: '14px', + color: '#333', + pointerEvents: 'none' + }); + this.wrapper.appendChild(this.bubble); + + this.container.appendChild(this.wrapper); + } + + _startBlinking() { + const delay = this.blinkMin + Math.random() * (this.blinkMax - this.blinkMin); + this._blinkTimeout = setTimeout(() => { + if (!this._isSpeaking) { + this.img.src = this.images.eyesClosed; + setTimeout(() => { + this.img.src = this.images.default; + this._startBlinking(); + }, this.blinkDuration); + } else { + this._startBlinking(); + } + }, delay); + } + + _bindMouseHold() { + let holdTimer = null; + + const closeEyes = () => { + clearTimeout(holdTimer); + this.img.src = this.images.eyesClosed; + }; + const reopenEyes = () => { + clearTimeout(holdTimer); + if (!this._isSpeaking) { + this.img.src = this.images.default; + } + }; + + this.img.addEventListener('mousedown', () => { + // if currently talking, ignore hold-to-close + if (this._isSpeaking) return; + closeEyes(); + // force reopen after max 5s + holdTimer = setTimeout(reopenEyes, 4000); + }); + + ['mouseup', 'mouseleave'].forEach(evt => + this.img.addEventListener(evt, reopenEyes) + ); + } + + /** Call when streaming text begins */ + beginSpeech() { + clearTimeout(this._speechTimeout); + clearInterval(this._talkIntervalId); + + this._isSpeaking = true; + this._mouthOpen = false; + this.img.src = this.images.default; + this.bubble.style.opacity = '1'; + this.bubble.textContent = ''; + + this._talkIntervalId = setInterval(() => { + this._mouthOpen = !this._mouthOpen; + this.img.src = this._mouthOpen + ? this.images.mouthOpen + : this.images.default; + }, this.talkInterval / 2); + } + + /** Append a chunk of streamed text */ + appendSpeech(chunk) { + this.bubble.textContent += chunk; + } + + /** Call when the stream ends */ + endSpeech() { + clearInterval(this._talkIntervalId); + this.img.src = this.images.default; + this._speechTimeout = setTimeout(() => { + this.bubble.style.opacity = '0'; + this._isSpeaking = false; + }, 3000); + } + + /** Clean up timers & DOM */ + destroy() { + clearTimeout(this._blinkTimeout); + clearInterval(this._talkIntervalId); + clearTimeout(this._speechTimeout); + this.wrapper.remove(); + } +} \ No newline at end of file diff --git a/assets/cat/default.png b/assets/cat/default.png new file mode 100644 index 0000000000000000000000000000000000000000..af4743ee2fd79ae16103f132604b1ee4e235ff78 GIT binary patch literal 42930 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 ZAg5rguIZcPGHAhs*jgXAVi76H{{qGf1Frx8 literal 0 HcmV?d00001 diff --git a/assets/cat/eyes_closed.png b/assets/cat/eyes_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..c0284c3217295b389a2c64624262952449852f61 GIT binary patch literal 40041 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 V!w}F3UfzQs|K^=cg|tE7{{XeDZNmTn literal 0 HcmV?d00001 diff --git a/assets/cat/mouth_open.png b/assets/cat/mouth_open.png new file mode 100644 index 0000000000000000000000000000000000000000..b37040ae8ff73b796f8c13229d3513e707beb579 GIT binary patch literal 43449 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 z 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 HyW;-?NfD?i literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..c1ad142 --- /dev/null +++ b/index.html @@ -0,0 +1,121 @@ + + + + + auto-git + + + + + + + + + +
+
+

No folder selected

+
+
    +
    + +
    +
    + + + +
    + + \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..6017941 --- /dev/null +++ b/main.js @@ -0,0 +1,194 @@ +const { app, BrowserWindow, ipcMain, dialog } = require('electron'); +const { exec } = require('child_process'); +const path = require('path'); +const fs = require('fs'); +const Store = require('electron-store'); +const simpleGit = require('simple-git'); +const chokidar = require('chokidar'); + +const store = new Store({ + defaults: { + folders: [], + selected: null + } +}); + +// Map zum Speichern der Watcher pro Ordner +const repoWatchers = new Map(); + +/** + * Erstellt das BrowserWindow und lädt index.html. + * Gibt das Window-Objekt zurück. + */ +function createWindow() { + const win = new BrowserWindow({ + width: 900, + height: 600, + title: 'auto-git', + webPreferences: { + preload: path.join(__dirname, 'preload.js'), + contextIsolation: true + } + }); + win.loadFile('index.html'); + return win; +} + +/** + * Startet einen File-Watcher auf .git/refs/heads/master, + * sendet bei Änderungen 'repo-updated' an den Renderer. + */ +function watchRepo(folder, win) { + const gitHead = path.join(folder, '.git', 'refs', 'heads', 'master'); + const watcher = chokidar.watch(gitHead, { ignoreInitial: true }); + watcher.on('change', () => { + win.webContents.send('repo-updated', folder); + }); + repoWatchers.set(folder, watcher); +} + +/** + * Initiiert ein Git-Repo in `folder`, falls noch nicht vorhanden, + * und erzeugt einen Initial-Commit mit Timestamp. + */ +async function initGitRepo(folder) { + const git = simpleGit(folder); + const gitDir = path.join(folder, '.git'); + if (!fs.existsSync(gitDir)) { + await git.init(); + const message = `Initial commit: ${new Date().toISOString()}`; + const readmePath = path.join(folder, 'README.md'); + fs.writeFileSync(readmePath, `# Projekt in ${path.basename(folder)}\n`); + await git.add('./*'); + await git.commit(message); + } +} + +app.whenReady().then(() => { + const win = createWindow(); + + // 1) Beim Start bereits gespeicherte Ordner überwachen + const folders = store.get('folders'); + folders.forEach(folder => { + // nur watchen, wenn .git existiert + if (fs.existsSync(path.join(folder, '.git', 'refs', 'heads', 'master'))) { + watchRepo(folder, win); + } + }); + + // 2) IPC-Handler + + // Liste aller Folders + ipcMain.handle('get-folders', () => store.get('folders')); + + // Ordner hinzufügen: Open-Dialog, init, Store-Update, watchen + ipcMain.handle('add-folder', async () => { + const { canceled, filePaths } = await dialog.showOpenDialog({ + properties: ['openDirectory'] + }); + if (canceled || !filePaths[0]) { + return store.get('folders'); + } + const newFolder = filePaths[0]; + + // Repo initialisieren + await initGitRepo(newFolder); + + // Im Store ablegen + const current = store.get('folders'); + if (!current.includes(newFolder)) { + store.set('folders', [...current, newFolder]); + } + store.set('selected', newFolder); + + // und watchen + watchRepo(newFolder, win); + + return store.get('folders'); + }); + + // Ordner entfernen: Watcher schließen, Store-Update + ipcMain.handle('remove-folder', (_e, folder) => { + const watcher = repoWatchers.get(folder); + if (watcher) { + watcher.close(); + repoWatchers.delete(folder); + } + const updated = store.get('folders').filter(f => f !== folder); + store.set('folders', updated); + if (store.get('selected') === folder) { + store.set('selected', null); + } + return updated; + }); + + // Selected + ipcMain.handle('get-selected', () => store.get('selected')); + ipcMain.handle('set-selected', (_e, folder) => { + store.set('selected', folder); + return folder; + }); + + // Commits holen + ipcMain.handle('get-commits', async (_e, folder) => { + const git = simpleGit(folder); + // alle Commits holen + const log = await git.log(['--all']); + // aktuellen HEAD‐Hash ermitteln + const fullHead = (await git.revparse(['--verify', 'HEAD'])).trim(); + const head = fullHead.substring(0, 7); + return { + head, + commits: log.all.map(c => ({ + hash: c.hash.substring(0, 7), + date: c.date, + message: c.message + })) + }; + }); + + // Diff + ipcMain.handle('diff-commit', async (_e, folder, hash) => { + const git = simpleGit(folder); + return git.diff([`${hash}^!`]); + }); + + // Revert + ipcMain.handle('revert-commit', async (_e, folder, hash) => { + const git = simpleGit(folder); + await git.revert(hash, ['--no-edit']); + }); + + /** + * Checkt das Arbeitsverzeichnis auf exakt den Zustand von `hash` aus. + */ + ipcMain.handle('checkout-commit', async (_e, folder, hash) => { + const git = simpleGit(folder); + // clean mode: alle lokalen Veränderungen verwerfen + await git.checkout([hash, '--force']); + }); + + + // Snapshot + ipcMain.handle('snapshot-commit', async (_e, folder, hash) => { + const { canceled, filePaths } = await dialog.showOpenDialog({ + title: 'Ordner auswählen zum Speichern des Snapshots', + properties: ['openDirectory'] + }); + if (canceled || !filePaths[0]) return; + const outDir = filePaths[0]; + const baseName = path.basename(folder); + const filePath = path.join(outDir, `${baseName}-${hash}.zip`); + return new Promise((resolve, reject) => { + exec( + `git -C "${folder}" archive --format zip --output "${filePath}" ${hash}`, + err => err ? reject(err) : resolve(filePath) + ); + }); + }); +}); + +// clean up on exit +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') app.quit(); +}); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..25a3a43 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "auto-git", + "version": "1.0.0", + "main": "main.js", + "scripts": { + "start": "electron ." + }, + "dependencies": { + "chokidar": "^4.0.3", + "electron-store": "^8.2.0", + "simple-git": "^3.20.0" + }, + "devDependencies": { + "electron": "^25.0.0" + } +} diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..bb7226b --- /dev/null +++ b/preload.js @@ -0,0 +1,19 @@ +const { contextBridge, ipcRenderer } = require('electron'); + +contextBridge.exposeInMainWorld('electronAPI', { + getFolders: () => ipcRenderer.invoke('get-folders'), + addFolder: () => ipcRenderer.invoke('add-folder'), + removeFolder: folder => ipcRenderer.invoke('remove-folder', folder), + getSelected: () => ipcRenderer.invoke('get-selected'), + setSelected: folder => ipcRenderer.invoke('set-selected', folder), + listFolder: folder => ipcRenderer.invoke('list-folder', folder), + getCommits: folder => ipcRenderer.invoke('get-commits', folder), + diffCommit: (folder, hash) => ipcRenderer.invoke('diff-commit', folder, hash), + revertCommit: (folder, hash) => ipcRenderer.invoke('revert-commit', folder, hash), + snapshotCommit: (folder, hash) => ipcRenderer.invoke('snapshot-commit', folder, hash), + checkoutCommit: (folder, hash) => ipcRenderer.invoke('checkout-commit', folder, hash), +}); + +ipcRenderer.on('repo-updated', (_e, folder) => { + window.dispatchEvent(new CustomEvent('repo-updated', { detail: folder })); +}); \ No newline at end of file diff --git a/renderer.js b/renderer.js new file mode 100644 index 0000000..22e62b8 --- /dev/null +++ b/renderer.js @@ -0,0 +1,230 @@ +// renderer.jsx + +window.addEventListener('DOMContentLoaded', async () => { + const folderList = document.getElementById('folderList'); + const addBtn = document.getElementById('addFolderBtn'); + const titleEl = document.getElementById('currentTitle'); + const contentList = document.getElementById('contentList'); + + window.addEventListener('repo-updated', e => { + const updatedFolder = e.detail; + const current = titleEl.textContent; + if (current === updatedFolder) { + renderContent(current); + } + }); + + function basename(fullPath) { + return fullPath.replace(/.*[\\/]/, ''); + } + + async function renderSidebar() { + const folders = await window.electronAPI.getFolders(); + const selected = await window.electronAPI.getSelected(); + folderList.innerHTML = ''; + folders.forEach(folder => { + const li = document.createElement('li'); + li.className = [ + 'flex items-center justify-between px-3 py-2 rounded cursor-pointer text-[#9f1239]', + folder === selected ? 'bg-[#fecdd3]' : '' + ].join(' '); + li.innerHTML = ` + + + + + ${basename(folder)} + + + `; + li.addEventListener('click', async e => { + if (e.target.closest('.remove-btn')) return; + await window.electronAPI.setSelected(folder); + await renderSidebar(); + await renderContent(folder); + }); + li.querySelector('.remove-btn').addEventListener('click', async () => { + await window.electronAPI.removeFolder(folder); + await renderSidebar(); + titleEl.textContent = 'No folder selected'; + contentList.innerHTML = ''; + }); + folderList.appendChild(li); + }); + } + + async function renderContent(folder) { + const currentFolder = folder; + titleEl.textContent = folder; + const { head, commits } = await window.electronAPI.getCommits(folder); + + + contentList.innerHTML = commits.map(c => ` +
  • +
    + ${c.hash} + ${new Date(c.date).toLocaleString()} +
    +
    ${c.message}
    +
    + + + + + + + + +
    +
    +
    
    +        
    +
  • + `).join(''); + + // Erst mal alle Diff-Buttons prüfen und ggf. deaktivieren + contentList.querySelectorAll('.diff-btn').forEach(async btn => { + const hash = btn.dataset.hash; + const diffText = await window.electronAPI.diffCommit(folder, hash); + if (!diffText.trim()) { + btn.disabled = true; + btn.classList.add('disabled'); + } + }); + + // Diff-Toggle & Highlighting + contentList.querySelectorAll('.diff-btn').forEach(btn => { + btn.addEventListener('click', async () => { + const li = btn.closest('li'); + const hash = btn.dataset.hash; + const svg = btn.querySelector('svg'); + const container = li.querySelector('.diff-container'); + const pre = container.querySelector('pre'); + + if (!pre.innerHTML.trim()) { + // fetch und HTML-Snippet bauen + const diff = await window.electronAPI.diffCommit(folder, hash); + const escaped = diff + .replace(/&/g, '&') + .replace(//g, '>'); + pre.innerHTML = escaped + .split('\n') + .map(line => { + const cls = line.startsWith('+') + ? 'diff-line addition' + : line.startsWith('-') + ? 'diff-line deletion' + : 'diff-line'; + return `
    ${line}
    `; + }) + .join(''); + } + + const isOpen = container.classList.toggle('open'); + if (isOpen) { + container.style.maxHeight = container.scrollHeight + 'px'; + } else { + container.style.maxHeight = '0'; + } + svg.classList.toggle('open', isOpen); + }); + }); + + // Snapshot-Button + contentList.querySelectorAll('.snapshot-btn').forEach(btn => { + btn.addEventListener('click', async () => { + const hash = btn.dataset.hash; + try { + // verwende jetzt currentFolder statt einer undefinierten Variable + const savedPath = await window.electronAPI.snapshotCommit(currentFolder, hash); + if (savedPath) { + alert(`Snapshot gespeichert unter:\n${savedPath}`); + } + } catch (err) { + console.error(err); + alert('Snapshot fehlgeschlagen'); + } + }); + }); + + // Revert-Button + contentList.querySelectorAll('.revert-btn').forEach(btn => { + btn.addEventListener('click', async () => { + const hash = btn.dataset.hash; + if (confirm(`Commit ${hash} wirklich revertieren?`)) { + await window.electronAPI.revertCommit(folder, hash); + await renderContent(folder); + } + }); + }); + + // Checkout-Button + contentList.querySelectorAll('.checkout-btn').forEach(btn => { + btn.addEventListener('click', async () => { + const hash = btn.dataset.hash; + //if (!confirm(`Jump here? Ungestagte Änderungen werden verworfen.`)) return; + // currentFolder hast du oben in renderContent gespeichert + await window.electronAPI.checkoutCommit(currentFolder, hash); + await renderContent(currentFolder); + }); + }); + const currentEl = contentList.querySelector('li.current-commit'); + if (currentEl) { + // weich scrollen und zentriert in den Viewport bringen + currentEl.scrollIntoView({ behavior: 'smooth', block: 'center' }); + } + } + + // initial + await renderSidebar(); + const initial = await window.electronAPI.getSelected(); + if (initial) await renderContent(initial); + + // Add-Folder + addBtn.addEventListener('click', async () => { + await window.electronAPI.addFolder(); + await renderSidebar(); + const sel = await window.electronAPI.getSelected(); + if (sel) await renderContent(sel); + }); +}); \ No newline at end of file