<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://solche.de/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AHolm%2Fcommon.js</id>
	<title>Benutzer:Holm/common.js - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://solche.de/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AHolm%2Fcommon.js"/>
	<link rel="alternate" type="text/html" href="https://solche.de/index.php?title=Benutzer:Holm/common.js&amp;action=history"/>
	<updated>2026-11-02T15:52:11Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Solche</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://solche.de/index.php?title=Benutzer:Holm/common.js&amp;diff=296486&amp;oldid=prev</id>
		<title>Holm: Die Seite wurde neu angelegt: „/* Solche / So Schicht – persönlicher Texteditor, nur für Holm und Privat:So Schicht.    Einmalig als Benutzer:Holm/common.js im MediaWiki speichern.    Be…“</title>
		<link rel="alternate" type="text/html" href="https://solche.de/index.php?title=Benutzer:Holm/common.js&amp;diff=296486&amp;oldid=prev"/>
		<updated>2026-10-30T16:32:03Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „/* Solche / So Schicht – persönlicher Texteditor, nur für Holm und Privat:So Schicht.    Einmalig als Benutzer:Holm/common.js im MediaWiki speichern.    Be…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Solche / So Schicht – persönlicher Texteditor, nur für Holm und Privat:So Schicht.&lt;br /&gt;
   Einmalig als Benutzer:Holm/common.js im MediaWiki speichern.&lt;br /&gt;
   Bearbeitet bewusst nur schlichten Erzähltext in den Zellen der Fototabelle.&lt;br /&gt;
   Keine Formatierung hinzufügen: Wiki-Syntax außerhalb des Textfeldes bleibt unverändert. */&lt;br /&gt;
(function () {&lt;br /&gt;
  &amp;#039;use strict&amp;#039;;&lt;br /&gt;
  if (mw.config.get(&amp;#039;wgPageName&amp;#039;) !== &amp;#039;Privat:So_Schicht&amp;#039; ||&lt;br /&gt;
      mw.config.get(&amp;#039;wgUserName&amp;#039;) !== &amp;#039;Holm&amp;#039; ||&lt;br /&gt;
      mw.config.get(&amp;#039;wgAction&amp;#039;) !== &amp;#039;view&amp;#039;) return;&lt;br /&gt;
&lt;br /&gt;
  mw.loader.using([&amp;#039;mediawiki.api&amp;#039;]).then(function () {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var target = Array.from(document.querySelectorAll(&amp;#039;h2&amp;#039;)).find(function (h) {&lt;br /&gt;
      return h.textContent.indexOf(&amp;#039;Handschriftenvergleich 2020&amp;#039;) !== -1;&lt;br /&gt;
    });&lt;br /&gt;
    if (!target) return;&lt;br /&gt;
    var button = document.createElement(&amp;#039;button&amp;#039;);&lt;br /&gt;
    button.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
    button.textContent = &amp;#039;Menzel-Text visuell bearbeiten&amp;#039;;&lt;br /&gt;
    button.style.cssText = &amp;#039;margin:0.7em;padding:0.5em 0.9em;cursor:pointer&amp;#039;;&lt;br /&gt;
    target.parentNode.insertBefore(button, target.nextSibling);&lt;br /&gt;
&lt;br /&gt;
    button.addEventListener(&amp;#039;click&amp;#039;, function () {&lt;br /&gt;
      api.get({ action: &amp;#039;query&amp;#039;, prop: &amp;#039;revisions&amp;#039;, titles: &amp;#039;Privat:So Schicht&amp;#039;,&lt;br /&gt;
        rvprop: &amp;#039;ids|content&amp;#039;, rvslots: &amp;#039;main&amp;#039;, formatversion: 2 }).then(function (response) {&lt;br /&gt;
        var rev = response.query.pages[0].revisions[0];&lt;br /&gt;
        var source = rev.slots.main.content;&lt;br /&gt;
        // Capture text of a single right-hand cell, preserving its original wiki syntax.&lt;br /&gt;
        var re = /\|-\s*\n\|\s*&amp;#039;&amp;#039;&amp;#039;Foto\s+(\d+)&amp;#039;&amp;#039;&amp;#039;[^\n]*\n[\s\S]*?\n\|\s*([\s\S]*?)(?=\n\|-\s*\n\|\s*&amp;#039;&amp;#039;&amp;#039;Foto|\n\|\})/g;&lt;br /&gt;
        var matches = Array.from(source.matchAll(re));&lt;br /&gt;
        if (!matches.length) {&lt;br /&gt;
          alert(&amp;#039;Die Fototabelle wurde nicht eindeutig erkannt. Nichts geändert.&amp;#039;); return;&lt;br /&gt;
        }&lt;br /&gt;
        var shade = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        shade.style.cssText = &amp;#039;position:fixed;z-index:999999;inset:0;background:rgba(0,0,0,.65);display:flex;justify-content:center;align-items:center;padding:10px&amp;#039;;&lt;br /&gt;
        var panel = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        panel.style.cssText = &amp;#039;box-sizing:border-box;width:min(940px,96vw);max-height:95vh;overflow:auto;background:white;color:black;padding:20px;display:flex;flex-direction:column;gap:12px&amp;#039;;&lt;br /&gt;
        var tip = document.createElement(&amp;#039;p&amp;#039;);&lt;br /&gt;
        tip.textContent = &amp;#039;Nur den Erzähltext bearbeiten; Fett/Kursiv und Tabellenformatierung bleiben in der ersten Version unverändert. Die Fußzeile bitte im Text belassen.&amp;#039;;&lt;br /&gt;
        var select = document.createElement(&amp;#039;select&amp;#039;);&lt;br /&gt;
        matches.forEach(function (m, i) {&lt;br /&gt;
          var option = document.createElement(&amp;#039;option&amp;#039;); option.value = i;&lt;br /&gt;
          option.textContent = &amp;#039;Foto &amp;#039; + m[1]; select.appendChild(option);&lt;br /&gt;
        });&lt;br /&gt;
        var editor = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        editor.contentEditable = &amp;#039;true&amp;#039;; editor.spellcheck = true;&lt;br /&gt;
        editor.style.cssText = &amp;#039;min-height:270px;max-height:60vh;overflow:auto;white-space:pre-wrap;border:1px solid #999;padding:16px;font:18px/1.6 Georgia,serif&amp;#039;;&lt;br /&gt;
        var chosen, prefix, suffix;&lt;br /&gt;
        function load() {&lt;br /&gt;
          chosen = matches[Number(select.value)];&lt;br /&gt;
          var cell = chosen[2];&lt;br /&gt;
          var a = cell.match(/^\s*/)[0], b = cell.match(/\s*$/)[0];&lt;br /&gt;
          var inner = cell.slice(a.length, cell.length - b.length);&lt;br /&gt;
          var italics = inner.startsWith(&amp;quot;&amp;#039;&amp;#039;&amp;quot;) &amp;amp;&amp;amp; inner.endsWith(&amp;quot;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
          prefix = a + (italics ? &amp;quot;&amp;#039;&amp;#039;&amp;quot; : &amp;#039;&amp;#039;);&lt;br /&gt;
          suffix = (italics ? &amp;quot;&amp;#039;&amp;#039;&amp;quot; : &amp;#039;&amp;#039;) + b;&lt;br /&gt;
          if (italics) inner = inner.slice(2, -2);&lt;br /&gt;
          if (/&amp;lt;(?!br\s*\/?\s*&amp;gt;)[^&amp;gt;]+&amp;gt;/i.test(inner)) {&lt;br /&gt;
            alert(&amp;#039;Dieser Zellentext enthält HTML; bitte den Wiki-Quelltexteditor verwenden.&amp;#039;);&lt;br /&gt;
            editor.contentEditable = &amp;#039;false&amp;#039;; return;&lt;br /&gt;
          }&lt;br /&gt;
          editor.contentEditable = &amp;#039;true&amp;#039;;&lt;br /&gt;
          editor.textContent = inner.replace(/&amp;lt;br\s*\/?\s*&amp;gt;/gi, &amp;#039;\n&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
        select.onchange = load; load();&lt;br /&gt;
        var buttons = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        buttons.style.cssText = &amp;#039;display:flex;gap:12px;flex-wrap:wrap&amp;#039;;&lt;br /&gt;
        var save = document.createElement(&amp;#039;button&amp;#039;); save.type=&amp;#039;button&amp;#039;;&lt;br /&gt;
        save.textContent = &amp;#039;Im Wiki speichern&amp;#039;; save.style.cssText=&amp;#039;font-weight:bold;padding:8px&amp;#039;;&lt;br /&gt;
        var cancel = document.createElement(&amp;#039;button&amp;#039;); cancel.type=&amp;#039;button&amp;#039;; cancel.textContent = &amp;#039;Schließen&amp;#039;;&lt;br /&gt;
        cancel.onclick = function () { shade.remove(); };&lt;br /&gt;
        save.onclick = function () {&lt;br /&gt;
          if (editor.contentEditable === &amp;#039;false&amp;#039;) return;&lt;br /&gt;
          if (!confirm(&amp;#039;Den Text für Foto &amp;#039; + chosen[1] + &amp;#039; speichern?&amp;#039;)) return;&lt;br /&gt;
          var plain = editor.innerText.replace(/\r/g, &amp;#039;&amp;#039;).replace(/\u00a0/g, &amp;#039; &amp;#039;);&lt;br /&gt;
          var newCell = prefix + plain + suffix;&lt;br /&gt;
          // Replace only the verified cell, using its exact source offset.&lt;br /&gt;
          var offset = chosen.index + chosen[0].lastIndexOf(chosen[2]);&lt;br /&gt;
          if (source.slice(offset, offset + chosen[2].length) !== chosen[2]) {&lt;br /&gt;
            alert(&amp;#039;Sicherheitsprüfung fehlgeschlagen; keine Änderung.&amp;#039;); return;&lt;br /&gt;
          }&lt;br /&gt;
          var next = source.slice(0, offset) + newCell + source.slice(offset + chosen[2].length);&lt;br /&gt;
          save.disabled = true;&lt;br /&gt;
          api.postWithToken(&amp;#039;csrf&amp;#039;, { action: &amp;#039;edit&amp;#039;, title: &amp;#039;Privat:So Schicht&amp;#039;,&lt;br /&gt;
            text: next, baserevid: rev.revid, summary: &amp;#039;Menzel: Foto &amp;#039; + chosen[1] + &amp;#039; über Texteditor geändert&amp;#039; })&lt;br /&gt;
            .then(function (result) {&lt;br /&gt;
              if (result.edit &amp;amp;&amp;amp; result.edit.result === &amp;#039;Success&amp;#039;) location.reload();&lt;br /&gt;
              else { save.disabled = false; alert(&amp;#039;Speichern nicht bestätigt.&amp;#039;); }&lt;br /&gt;
            }).catch(function (err) {&lt;br /&gt;
              save.disabled = false;&lt;br /&gt;
              alert(&amp;#039;Nicht gespeichert – möglicherweise wurde die Seite inzwischen geändert: &amp;#039; + String(err));&lt;br /&gt;
            });&lt;br /&gt;
        };&lt;br /&gt;
        buttons.appendChild(save); buttons.appendChild(cancel);&lt;br /&gt;
        panel.appendChild(tip); panel.appendChild(select); panel.appendChild(editor); panel.appendChild(buttons);&lt;br /&gt;
        shade.appendChild(panel); document.body.appendChild(shade);&lt;br /&gt;
      }).catch(function (err) { alert(&amp;#039;Wikiseite konnte nicht geladen werden: &amp;#039; + String(err)); });&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Holm</name></author>
	</entry>
</feed>