<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Antville Macros</title>
    <link>https://macros.antville.org/</link>
    <description />
    <language>en</language>
    <pubDate>Sun, 09 Aug 2026 08:09:43 GMT</pubDate>
    <dc:date>2026-08-09T08:09:43Z</dc:date>
    <dc:language>en</dc:language>
    <item>
      <title>Grundlegendes: Wie Macros entstehen</title>
      <link>https://macros.antville.org/stories/2248409/</link>
      <description>&lt;p&gt;Im Zuge der Erneuerung der hier befindlichen Dokumentation soll dargestellt werden, wie die Macros im Quellcode zusammengesetzt werden:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;(Fast) jeder Prototype enthält eine nach ihm benannte JavaScript-Datei (z.B. &lt;a href="https://github.com/antville/antville/blob/develop/code/Story/Story.js"&gt;Story/Story.js&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Macros sind JavaScript-Funktionen, die auf &lt;code&gt;_macro&lt;/code&gt; enden (z.B. &lt;a href="https://github.com/antville/antville/blob/develop/code/Story/Story.js#L556"&gt;abstract_macro()&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Der Macroname ist der Teil vor dem &lt;code&gt;_macro&lt;/code&gt;-Suffix (im Beispiel »abstract«)&lt;/li&gt;&lt;li&gt;Die Argumente für ein Macro bestehen immer aus dem (meist) &lt;code&gt;param&lt;/code&gt; genannten Objekt; die Keys müssen allerdings aus der Funktion oder dem Macro-Aufruf erschlossen werden&lt;/li&gt;&lt;li&gt;Zusätzlich gibt es sog. »positional parameters«, die auf das &lt;code&gt;param&lt;/code&gt;-Objekt folgen.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Beispiele:&lt;/p&gt;&lt;p&gt;&lt;code&gt;// Definiert globales Macro der Form  [Macro not allowed in sandbox: foo]function foo_macro(param) {res.write(param.bar); // xyz}&lt;/p&gt;&lt;p&gt;// Definiert Story-Macro der Form  [Macro not allowed in sandbox: story.foo]Story.prototype.foo_macro = function(param, bar) {res.write(bar) // xzy};&lt;/p&gt;&lt;p&gt;// Definiert HopObject-Macro der Form  [Macro not allowed in sandbox: this.foo]HopObject.prototype.foo_macro = function(param, arg1, whatever) {res.write(param.bar); // xyzres.write(param.baz); // 123res.write(arg1); // frummres.write(whatever); // 4711};&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Globale Macros gelten überall, alle anderen immer nur für den Prototypen, für den sie definiert werden, sowie für die Prototypen, die sich davon ableiten (z.B. kennt Comment die Macros von Story, alle Prototypen kennen die von HopObject).&lt;/p&gt;&lt;p&gt;Es stehen immer alle Macros von Prototypen zur Verfügung, die im &lt;code&gt;path&lt;/code&gt; vorkommen. D.h. in einem Stories-Skin gibt es auch die Site-Macros, in einem Story-Skin die von Site und Stories usw.&lt;/p&gt;&lt;p&gt;In einer Story selbst (also im Story-Editor) sind nur Macros erlaubt, die in &lt;a href="https://github.com/antville/antville/blob/develop/code/Story/Story.js#L29"&gt;Story.ALLOWED_MACROS&lt;/a&gt; definiert sind.&lt;/p&gt;&lt;p&gt;Quelle: &lt;a href="https://help.antville.org/stories/2248348/#2248373"&gt;help.antville.org&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 18 Jan 2017 13:21:00 GMT</pubDate>
      <guid>https://macros.antville.org/stories/2248409/</guid>
      <dc:creator>libralop</dc:creator>
      <dc:date>2017-01-18T13:21:00Z</dc:date>
    </item>
  </channel>
</rss>

