Skip to content

Todo hier im Blog ...

serendipity Mit dem neuen Template von Matthias musste ich hier von einer lieb gewonnenen Eigenschaft eines Serendipity-Plugins Abstand nehmen, nämlich das Einfügen von Zeilenumbrüchen durch das "Textformatierung: NL2BR"-Plugin. Aus den aus verschiedenen Gründen blöden br-Tags für die Zeilenumbrüche habe ich jetzt Absätze machen lassen (p-Tag).

Damit einhergeht, dass ich alle Artikel des Blogs einmal anfassen muss, dafür habe ich allen Artikeln das Tag "todo" verpasst.

Das lässt sich einfach durch folgendes SQL bewerkstelligen:

INSERT INTO serendipity_entrytags
(SELECT id,"todo" FROM serendipity_entries);

Das ist auch der Grund, weil der Feed die nächsten Tage etwas spinnen wird.

Ich hangele mich jetzt durch die Artikel und denen, die ich bearbeitet habe, nehme ich "todo" wieder weg.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Matthias Mees am :

*Warum musst Du nach der Umstellung alle Artikel einmal „anfassen“?

Matthias Mees am :

*Örks, okaaay … wobei das Faszinierende ja ist: Es sieht ganz manierlich aus, so lange man nicht in den Quelltext schaut. Was sich mir jetzt nicht auf Anhieb erschließt, ist, warum NL2BR da Absätze mit Klassen versieht und denen auch noch CSS mit auf den Weg gibt, aber es wird wohl mal wieder die leidige Abwärtskompatibilität sein.

Dirk Deimeke am :

*:-)

Das ist dann wieder Deine Baustelle.

Ich sehe nur, dass die Abstände viel zu gross sind. Absätze mache ich grundsätzlich mit einer Leerzeile dazwischen, ansonsten ist ein Zeilenumbruch ja auch ein Gestaltungselement.

Wo ich Dich gerade "am Rohr" habe. Mir gefällt der "graue Kasten" bei pre-Tags sehr gut (Beispiel). Spricht etwas dagegen, den für Geshi auch zu machen?

Matthias Mees am :

*Das ist ein Problem der Kaskade. Ein anständigesâ„¢ Template setzt für Absätze Abstände, und zwar direkt für das p-Element. Dessen Spezifität ist höher als die eines p-Elementes mit einer Klasse, zudem werden IIRC die Plugin-Styles vor denen des Templates gesetzt (was richtig ist, sonst könnte man sie nicht templateseitig überschreiben). Deswegen werden die Styles für die Klasse .break überschrieben und die entsprechenden Absätze wie „normale“ Absätze gestaltet.

Die schnellste und einfachste Lösung wäre es wohl, sich die Plugin-Styles für .break und .whitespace nochmal in die user.css zu schreiben. Die sauberste Lösung ist natürlich, das Markup von Hand anzupassen, also z.B. auch die Listen als Listen auszuzeichnen. Macht aber halt sackviel Arbeit …

Zu Geshi: Nö, kann man machen. user.css:

.geshi {
background: #eee;
border: 1px solid #aaa;
padding: .71428em;
}

Dirk Deimeke am :

*Vielen Dank Matthias, guck Dir mal Deinen Kommentar an. Da schlägt es auch durch.

Ich mache mir jetzt einmal den Sack viel Arbeit. Es betrifft ja nicht nur Aufzählungen.

Matthias Mees am :

*Ja, klar – NL2P macht anscheinend (im Gegensatz zu etwa Textile) insofern keinen Unterschied zwischen einem Zeilenumbruch und einer Leerzeile, als dass es beides zum Anlass nimmt, einen Absatz in Form eines p-Elementes zu erzeugen bzw. „löst“ das, indem es den erzeugten p-Elementen unterschiedliche Klassen mit eigenem CSS zuweist, die aber von Templates extrem leicht zu überschreiben sind.

Ich werde mich mal in den entsprechenden Kram im Forum einlesen und es entsprechend kommentieren, aber es kann sein, dass es keine gut andere Lösung dafür gibt. Kann ich so nicht sagen, da ich das Plugin maximal für Kommentare verwende.

Matthias Mees am :

*Ach herrjeh, nee. Das ist ein Fehler im CSS von 2k11, ich habe die von NL2P zugewiesenen Klassen vertauscht. Weia. Wird gefixt.

Dirk Deimeke am :

*Weia!

Vielleicht täte ein Guide mal Not, was man alles bei der Templategestaltung für Serendipity beachten muss.

Matthias Mees am :

*Klar wäre das gut. Ich hab ja sonst nichts zu tun. :-D

Hätte ich soweit im aktuellen master, kommt heute noch in den Kern. Allerdings habe ich jetzt auch noch die Geshi-Styles in 2k11 integriert und beiße mich da gerade fest. Das Geshi-Plugin ist auch nur so lange nett, bis man Zeilennummern anschaltet. Dann wird's ekelhafte Inline-Style-Suppe … seufz

Dirk Deimeke am :

*Heisst ja nicht, dass Du das machen sollst, aber sinnvoll wäre es schon.

Danke!

Matthias Mees am :

*Das klingt jetzt großkotziger als gedacht, aber ich fürchte, außer mir hat niemand genug Überblick über Templating dafür … der Aderlaß in puncto Manpower in dem Bereich war echt schmerzhaft. :-/

Dirk Deimeke am :

*Ich wüsste auch keinen anderen. Um so wichtiger wäre es, das Wissen auf mehr Schultern zu verteilen, sonst sind wir wieder beim Holzfäller.

Dirk Deimeke am :

*@Matthias: Was hast Du getan? Es scheint, dass ich gar nichts mehr nacharbeiten muss ...

Matthias Mees am :

*Ich sagte doch, es war ein Fehler im CSS von 2k11 – ich habe die von NL2P zugewiesenen CSS-Klassen vertauscht. :-)

NL2P erzeugt im Grunde zwei Arten von Absätzen – p.whiteline für „echte Absätze“, also mit einem Abstand nach unten, und p.break für Zeilenumbrüche ohne Abstand nach unten. Das ist zwar semantisch falsch, sieht aber halt so aus, wie man es erwartet.

Dirk Deimeke am :

*Hmpf!

Ich hatte das nur auf Kommentare bezogen. Na, um so besser. Dann bleibt mir sehr viel Arbeit erspart.

onli am :

*kein grund zum streiten, aber ich will das erwähnt haben: das entspricht der von mir intendierten semantik, in meinen augen ist da nichts falsch. Mirzufolge sind beide arten von absätzen echte absätze und gehören daher in p-tags.

Matthias Mees am :

*Ich habe offen gesagt, keine Lust, das zu diskutieren, zumal ich persönlich (no offense) das Plugin ohnehin sinnfrei finde.

onli am :

*>kein grund zum streiten, aber ich will das erwähnt haben:
Deutlicher konnte ich eigentlich nicht machen, dass das keine Diskussionsvorlage ist. Es steht auch nicht zur Diskussion, denn es ist das, was ich mir damals dabei dachte. Objektive Fakten, nicht ausdiskutierbar.

Dein Kommentar dazu war also ziemlich unnötig.

Eigentlich ist dieser Kommentar dadurch nicht nötiger, aber damit das klar ist: Es ist ein ziemlich mieser Kniff, anzudeuten wie beschissen man eine Lösung findet und sich gleichzeitig der Diskussion zu verweigern, die nie angeboten wurde. Ein Trick, um sich unangreifbar zu machen und die andere Position schlecht wirken zu lassen. Das hast du nicht nötig, und das hat nl2p genausowenig verdient. Und ich weiß auch gar nicht, woher das plötzlich kommt.

Matthias Mees am :

*Erstens kommt das nicht „plötzlich“ – ich habe schon mehrfach klar kommuniziert (hier, im Forum, im Podcast), dass ich das NL2BR-Plugin für sinnfrei und auch die NL2P-Erweiterung für keine Lösung des Problems halte. Es tut mir leid, wenn Du Dich dadurch persönlich angegriffen fühlst, aber das ist meine persönliche Meinung.

Zweitens ging es mir weder darum, mich unangreifbar noch Dich schlecht zu machen, ich wollte lediglich abschließend kommunizieren, dass ich nicht vorhabe bzw. vor hatte, in dieses (für mich leidige) Thema weiteren Diskussionsaufwand zu stecken, damit hier keine Diskussion weiterläuft, die ich nicht beobachte.

Das war, und dafür bitte ich Dich um Entschuldigung, in der Kürze meiner Antwort offensichtlich nicht deutlich genug. Sorry.

onli am :

*Ok und akzeptiert.

>Erstens kommt das nicht „plötzlich“ – ich habe schon mehrfach klar kommuniziert (hier, im Forum, im Podcast), dass ich das NL2BR-Plugin für sinnfrei ...

Das stimmt. Ich bezog mich mit dem plötzlich nur auf das wie. Verknappen ist böse ;-)

Dirk Deimeke am :

*Entschuldige bitte, aber denkst Du auch an Einsteiger?

Ansonsten muss ich Malte leider zu stimmen, dass das kein guter Stil ist.

Matthias Mees am :

*Es gibt aus meiner Sicht (auch das ist eine subjektive, persönliche Meinung) deutlich „bessere“ Alternativen für Einsteiger, auch wenn diese weder HTML von Hand schreiben noch einen WYSIWYG-Editor verwenden möchten, etwa Textile.

Ja, es ist mehr Aufwand, von Plain Text auf Textile umzustellen als von Plain Text auf NL2(BR|P), speziell wenn es um ein Blog wie dieses geht, dass aus Jahren „unformatierter“ Inhalte besteht – vermutlich zuviel Aufwand.

Ich finde es falsch, in s9y NL2(BR|P) als standardmäßige Alternative zum WYSIWYG-Editor einzusetzen, ich würde es durch Textile oder Markdown ersetzen, aber da sind scheinbar alle restlichen Kernentwickler anderer Meinung.

Dirk Deimeke am :

*Vielleicht kennen wir auch einfach andere Arten von Einsteigern als Du. Markdown oder Textile ist für einen Einsteiger eine sehr grosse Hürde. Plaintext und Formatierungshilfen sind (leider) für den Endbenutzer der beste Kompromiss.

Matthias Mees am :

*Ich weiß nicht, ob das klar ist: NL2(BR|P) macht genau eine Formatierung mit Plain Text – Umwandeln von Zeilenumbrüchen in zwei Sorten Absätze. Genau das leistet Textile auch, und zwar automagisch, ohne zusätzliche Formatierungszeichen, aber – aus meiner Sicht – mit einem „besseren“ Ergebnis. (Gleiches gilt übrigens für Markdown.)

Was daran für einen Einsteiger schwerer sein soll, verstehe ich nicht.

Ja, Textile ermöglich komplexere Auszeichnungen in einer Form, die eventuell komplizierter und ganz sicher fehleranfälliger, aber eben auch deutlich leistungsfähiger ist – aber das sind nicht die Dinge, die NL2(BR|P) leistet, das erledigt in einem normalen s9y-Setup das Plugin Markup: Serendipity.

Gleiches gilt auch hier für Markdown, das allerdings ein paar Dinge anders macht als Textile. Die Entscheidung zwischen Textile und Markdown ist sehr subjektiv, Markdown hat sicherlich den Vorteil, dass es (z.T. leicht abgewandelt) im Moment sehr populär ist, etwa auf GitHub oder in Jekyll/Octopress. Aber im Grunde ist es Jacke wie Hose, ob man Textile oder Markdown nimmt, weshalb nicht wenige Seiten beides anbieten.

Matthias Mees am :

*Nichts zu entschuldigen. :-)

Es ist ja nicht so, dass man bei Textile oder Markdown andere Formatierungen verwenden muss – man kann ganz normal Plain Text ins Eingabefeld tippen, den eventuell mit den typischen Serendipity-Markup-Zeichen (* und _) versehen und bekommt dennoch eine anständigâ„¢ formatierte Ausgabe.

Der einzige Unterschied ist der, dass Textile und Markdown den Underscore anders interpretieren als s9y-Markup – nicht als Unterstreichung, sondern als Betonung (em; doppelt verwendet als strong). Das ist meines Erachtens zu verschmerzen, zumal das u-Element ohnehin als veraltet eingestuft wird und Unterstreichung über CSS gelöst werden sollte.

Dirk Deimeke am :

*Spucken die Buttons im Plaintext-Editor dann auch das entsprechende Markup aus?

Matthias Mees am :

*Die Buttons im Plain-Text-Editor spucken (meine ich, ich hab's eben auch lokal getestet) immer HTML-Markup aus, das man in allen drei Varianten natürlich immer reinmischen kann – es würde mich auch wundern, wenn es anders wäre, denn so ist es ja die „günstigste“ Art, den PT-Editor flexibel zu halten.

Dirk Deimeke am :

*"Flexibel" wäre für mich, wenn das Markup passend ausgespuckt würde ...

Matthias Mees am :

*Aber HTML-Markup innerhalb der Ausgabe welches Markup-Plugins auch immer ist doch immer passend. :-)

Nun ist das bei den genannten nicht der Fall, aber nehmen wir mal an, es gäbe Auszeichnungskommandos, die von einem Markup-Plugin nicht interpretiert, aber von den Editor-Buttons erzeugt würden. Dann hättest Du, wenn Du mal wechselst, Markup in den Einträgen, das nicht interpretiert wird. Das wäre doch unschön.

Dirk Deimeke am :

*Die Entscheidung für das Markup ist bei einem mittelprächtig benutzten Blog eine ziemlich endgültige. Daher würde ich den Fall der Markup-Umschaltung gar nicht beachten. Um auf Nummer sicher zu gehen, muss sowieso jeder Artikel angefasst werden.

Bei einem Mix der Markups sträuben sich mir die Nackenhaare. Wenn es ein Kommando in einem Markup nicht gibt, muss der Button ausgegraut werden. Daher liesse sich schon überlegen, ob die Buttons durch das Markup-Plugin zur Verfügung gestellt werden.

Wenn ich durch eine Editor-Komponente immer html-Code erzeuge, dann brauche ich weder Textile noch Markdown verwenden, dann sehe ich den Nutzen nicht.

Matthias Mees am :

*Du erzeugst ja nicht nur über die Buttons Markup. Absätze etwa erzeugst Du in allen drei Varianten einfach nur durch Zeilenumbruch im Editor.

Die Buttons im PT-Editor leisten ja im Prinzip Folgendes: Sie ermöglichen es dem Laien, komplexes Markup einzugeben, ohne es von Hand tippen zu müssen, z.B. einen Link. Aber bei den meisten dieser Buttons unterscheidet sich die Auszeichnung der überlagernden Markup-Sprache deutlich.

Das kann ich jetzt hier schlecht demonstrieren, aber nimm mal als Beispiel ruhig den Link – das Markup von Textile und Markdown ist ein ganz anderes. NL2(BR|P) hingegen hat gar keine Kurzauszeichnung dafür, weil es „nur“ Absätze erzeugt. Unter diesen Umständen ist es der kleinste gemeinsame Nenner, wenn der Editor-Button HTML erzeugt, denn HTML ist ja das, wohin alle Markup-Plugins umwandeln.

Würden die Editor-Buttons etwas anderes erzeugen, wäre die erzeugte Auszeichnung so in der Datenbank gespeichert, also etwa „*fett*“, was ein schlechtes Beispiel ist, weil das von allen Markup-Plugins interpretiert würde – aber im Zweifelsfall steht dann eben etwas in der Datenbank, was von anderen Plugins nicht interpretiert wird. Ganz zu schweigen von Umgebungen, in denen gar kein Markup-Plugin läuft (ja, das gibt es leider auch).

Wäre es so, dass die Buttons spezifische Auszeichnung generieren, wäre die Markupwahl tatsächlich endgültig – so ist sie es (mit Einschränkungen zumindest) nicht.

Dirk Deimeke am :

*Ich stimme nicht zu. Sobald ich das Markup wirklich verwende, muss ich nacharbeiten. Ob es zwei Punkte mehr oder weniger sind, ist dabei unerheblich.

Wenn kein Markup läuft, ist HTML oder xHTML gesetzt ...

Eine Mischung ist in jedem Fall böse.

Matthias Mees am :

*Dirk, ich kann Dir leider nicht folgen.

Sobald man komplexere Auszeichnungen eines Markup-Plugins einsetzt, wird es schwierig, das stimmt. Verwende ich etwa die Auszeichnung von Textile für Links oder Blockzitate, wird Markdown damit nichts anfangen können. Auch ohne eine Markup-Plugin steht dann sehr merkwürdiger Text in der Datenbank. Aber genau deshalb ist es (aus meiner Sicht) sinnvoll, dass die Buttons HTML erzeugen – denn HTML funktioniert in jedem Fall, weil jedes Markup-Plugin letztlich HTML erzeugt.

Problematisch wäre eher, Plugin-spezifische Auszeichnungen in der Datenbank zu haben, die nicht von jedem Markup-Plugin interpretiert werden. Genau das ist bei den Auszeichnungen, die die Kombination aus Markup: Serendipity und NL2(BR|P) interpretiert (Absätze, * und ) aber der Fall, auch wenn die Interpretation von Textile und Markdown etwa anders ausfällt als bei Markup: Serendipity. Selbst ganz ohne Markup-Plugin wäre das noch halbwegs erträglich – es gäbe keine Absätze, aber die Markierungen fett und _unterstrichen sind ja auch in E-Mails gebräuchlich.

Schwierig wird es erst, wenn in der Datenbank Formatierungen stehen, die sehr spezifisch und damit nicht „übertragbar“ sind, und fast alle Buttons des PT-Editor erzeugen solche Formatierungen.

Dirk Deimeke am :

*Das beste wäre es, wenn in der Datenbank echtes (tm) HTML stehen würde und für die Bearbeitung im Editor würde es gemäss dem entsprechenden Markup zurückgewandelt.

Vielleicht bringt es das auf den Punkt: Markup sollte nicht gemischt werden. Entweder Markup ist Serendipity, dann steht nur HTML drin oder Textile, dann steht ausschliesslich Textile drin.

Was nicht passieren sollte, ist Textile und ein "bisschen HTML".

Ist das jetzt ein bisschen klarer?

Wenn man Textile verwendet und Textile hat ein Feature nicht, dass man braucht, sollte man nicht zu dem "kruden Hack", Markups zu mischen greifen.

So ist es nicht und ich weiss das.

Es gibt Gründe, die für das Mischen sprechen und die hast Du dargelegt. Trotzdem ist das nicht sauber.

Wazu das unsaubere führen kann, sehen wir wenn sich - wie jetzt - jemand (Du) jetzt den Output mal genauer von einer andere Seite aus anschaut, nämlich dass nach heutigen Kriterien sauberes HTML erzeugt wird.

Selbst so wie es jetzt ist, würde es - so lange man bei einem einzigen Markup bleibt - ein leichtes sein, sich an aktuelle Standards alleine dadurch anzupassen, dass man das Markup-Plugin überarbeitet. Wenn html-Tags sich ändern, ich denke dabei beispielsweise an den Slash, der vor der schliessenden spitzen Klammer eines img-Tags verwendet wird und der früher nicht benötigt würde, wird das durch die Mischung von Markups nicht aufgefangen.

Matthias Mees am :

*Ah, jetzt, ja. :-)

Jetzt kommen wir in den Bereich, in dem ich nur noch mutmaßen kann, nämlich darüber, warum es so ist, wie es ist. Ich nehme an, dass der Schritt, dass erzeugte HTML in die Datenbank zu schreiben und ggf. zurück in das „Schicht-Markup“ umzuwandeln, arg auf die Performance drücken würde. Der Benutzer soll ja idealerweise nicht „merken“, dass da etwas konvertiert wird.

Grundsätzlich stimmt ich Dir zu, wenn es keinen guten Grund dagegen gibt (was ich nicht weiß), sollte in der Datenbank HTML landen.

Der Slash ist übrigens zumindest in HTML5 kein Problem, da HTML5 die XML-Syntax auch erlaubt, auch gemischt mit klassischer HTML-Syntax. Das wäre nur problematisch, wenn Du von XHTML auf HTML4.01 schalten würdest.

onli am :

*Vielleicht noch ein paar Worte hierzu:
>Grundsätzlich stimmt ich Dir zu, wenn es keinen guten Grund dagegen gibt (was ich nicht weiß), sollte in der Datenbank HTML landen.

Praktisches Problem daran ist schlicht, dass wir dann einen Parser HTML->Markup bräuchten. Derzeit existiert, soweit ich weiß, immer nur der Parser Markup->HTML. Das ist auch logisch, denn das Markup bildet nur eine Teilmenge von HTML ab, es ist also gar nicht immer möglich, HTML in Markup zu verwandeln.

In Ansätzen machbar wäre das wahrscheinlich nur, wenn die Parser mit sauberen Grammatiken geschrieben und aus denen abgeleitet werden würden, statt die bisherigen Regex-Formeln.

Performanceprobleme dagegen sehe ich keine, im Gegenteil, es wäre für die Performance gut, wenn nicht bei jedem Lesen (gut, das wird durch entryproperties gecachet, trotzdem) das Markup in HTML umgewandelt werden müsste.

Dirk Deimeke am :

*Dass es das (noch) nicht gibt, ist mir bewusst. Wenn aber eh in jedem Markup html erlaubt ist, spricht nichts dagegen.

onli am :

*freut mich jetzt aber, dass es am template lag. Hab die kommentare durch gebangt. Nl2p zu überarbeiten macht nur begrenzt spaß.

bei fragen dazu ne mail an mich, der code und die idee für die funktionsweise kommt von mir.

Matthias Mees am :

*Naja – generell ist das schon suboptimal, aber vermutlich nicht schmerzfrei anders zu lösen. Im Prinzip erzeugt NL2P jetzt sogar Absätze, wo eigentlich keine hingehören – das, was jetzt p.break ist, müsste streng genommen eigentlich ein br-Element (Umbruch innerhalb eines Absatzes) sein.

Aber letztlich funktioniert es so ja, mehr als eine Krücke ist das ohnehin nicht. Ich kann mir gut vorstellen, dass es ekelhafter Code ist, insofern steck Deine Zeit lieber in was Sinnvolles. ;-)

Matthias Mees am :

*Naja, das hört sich so knapp und technisch formuliert jetzt auch brutaler an, als es ist.

NL2BR bzw. NL2P jetzt noch so aufzubohren, dass es das leistet, was Textile oder Markdown leisten, hielte ich für falsch bzw. unsinnig eingesetzte Arbeitszeit, weil es bedeuten würde, ein kleines Plugin, das letztlich nur ein einfacher Textfilter ist, so zu erweitern, dass es „echten“ Markup-Plugins ebenbürtig würde – was noch dazu dem Prinzip widerspräche, möglichst wenig doppelte Funktionalität durch Plugins abzubilden.

Da würden mir andere Dinge einfallen, falls Malte Langeweile hätte. ;-)

Dirk Deimeke am :

*Jein. Oder deutlicher formuliert: "Kommt darauf an". :-)

Die NL2-Plugins kommen ganz besonders den Benutzern entgegen (wie mir beispielsweise), die einfach nur ein paar Zeilen schreiben und dabei nicht gross auf besondere Markup-"Sprachen" umstellen wollen.

Da ist für mich mittlerweile auch der Zug abgefahren. Es ist ausreichend Arbeit, alle Artikel einmal zu sichten.

Dass die Resultate aus Sicht von HTML oder vor allem aus Sicht eines Designers manchmal - vorsichtig formuliert - korrekturbedürftig sind, steht ausser Frage.

Als ich mit Serendipity begonnen habe, gab es noch keinen guten Editor.

Kommentar schreiben

Gravatar, Favatar, Pavatar, Identica, Twitter, MyBlogLog Autoren-Bilder werden unterstützt.
BBCode-Formatierung erlaubt
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Formular-Optionen