<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sv">
	<id>https://luggude.slektforskning.se/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AMonobook.js</id>
	<title>MediaWiki:Monobook.js - Versionshistorik</title>
	<link rel="self" type="application/atom+xml" href="https://luggude.slektforskning.se/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AMonobook.js"/>
	<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;action=history"/>
	<updated>2026-04-16T03:40:59Z</updated>
	<subtitle>Versionshistorik för denna sida på wikin</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=399&amp;oldid=prev</id>
		<title>Martinbrandt den 28 november 2010 kl. 12.09</title>
		<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=399&amp;oldid=prev"/>
		<updated>2010-11-28T12:09:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sv&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Äldre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Versionen från 28 november 2010 kl. 12.09&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Rad 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;alert&lt;/del&gt;(&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;HEJ&lt;/del&gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;importScript&lt;/ins&gt;(&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;User:Martinbrandt/familytree.js&lt;/ins&gt;&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinbrandt</name></author>
		
	</entry>
	<entry>
		<id>https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=398&amp;oldid=prev</id>
		<title>Martinbrandt den 28 november 2010 kl. 12.09</title>
		<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=398&amp;oldid=prev"/>
		<updated>2010-11-28T12:09:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sv&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Äldre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Versionen från 28 november 2010 kl. 12.09&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Rad 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;alert(&amp;quot;HEJ&amp;quot;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinbrandt</name></author>
		
	</entry>
	<entry>
		<id>https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=395&amp;oldid=prev</id>
		<title>Martinbrandt: Tömde sidan</title>
		<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=395&amp;oldid=prev"/>
		<updated>2010-11-28T12:05:40Z</updated>

		<summary type="html">&lt;p&gt;Tömde sidan&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sv&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Äldre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Versionen från 28 november 2010 kl. 12.05&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Rad 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;importScript(&amp;quot;User:Martinbrandt/familytree.js&amp;quot;);&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinbrandt</name></author>
		
	</entry>
	<entry>
		<id>https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=394&amp;oldid=prev</id>
		<title>Martinbrandt: Ersätter sidans innehåll med &#039;importScript(&quot;User:Martinbrandt/familytree.js&quot;);&#039;</title>
		<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=394&amp;oldid=prev"/>
		<updated>2010-11-28T12:01:23Z</updated>

		<summary type="html">&lt;p&gt;Ersätter sidans innehåll med &amp;#039;importScript(&amp;quot;User:Martinbrandt/familytree.js&amp;quot;);&amp;#039;&lt;/p&gt;
&lt;a href=&quot;https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;amp;diff=394&amp;amp;oldid=392&quot;&gt;Visa ändringar&lt;/a&gt;</summary>
		<author><name>Martinbrandt</name></author>
		
	</entry>
	<entry>
		<id>https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=392&amp;oldid=prev</id>
		<title>Martinbrandt den 28 november 2010 kl. 11.57</title>
		<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=392&amp;oldid=prev"/>
		<updated>2010-11-28T11:57:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sv&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Äldre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Versionen från 28 november 2010 kl. 11.57&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot; &gt;Rad 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; if (item == &amp;quot;wiki2art&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; if (item == &amp;quot;wiki2art&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; addPortletLink (&amp;quot;p-tb&amp;quot;, &amp;quot;javascript:wiki2art()&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; addPortletLink (&amp;quot;p-tb&amp;quot;, &amp;quot;javascript:wiki2art()&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;Templates &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;→ &lt;/del&gt;Art&amp;quot;, &amp;quot;t-diagram&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;Templates &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;? &lt;/ins&gt;Art&amp;quot;, &amp;quot;t-diagram&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &amp;quot;Convert {{&amp;quot; + Template + &amp;quot;}}... to ASCII art&amp;quot;, &amp;quot;&amp;quot;, node);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &amp;quot;Convert {{&amp;quot; + Template + &amp;quot;}}... to ASCII art&amp;quot;, &amp;quot;&amp;quot;, node);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; if (item == &amp;quot;art2wiki&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; if (item == &amp;quot;art2wiki&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; addPortletLink (&amp;quot;p-tb&amp;quot;, &amp;quot;javascript:art2wiki()&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; addPortletLink (&amp;quot;p-tb&amp;quot;, &amp;quot;javascript:art2wiki()&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;Art &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;→ &lt;/del&gt;Templates&amp;quot;, &amp;quot;t-diagram&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;Art &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;? &lt;/ins&gt;Templates&amp;quot;, &amp;quot;t-diagram&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &amp;quot;Convert ASCII art back to {{&amp;quot; + Template + &amp;quot;}}...&amp;quot;, &amp;quot;&amp;quot;, node);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &amp;quot;Convert ASCII art back to {{&amp;quot; + Template + &amp;quot;}}...&amp;quot;, &amp;quot;&amp;quot;, node);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l61&quot; &gt;Rad 61:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 61:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var textarea = document.editform.wpTextbox1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var textarea = document.editform.wpTextbox1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var scroll_pos = textarea.scrollTop;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var scroll_pos = textarea.scrollTop;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var pattern = /\{\{(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;|chart)\/start[\S\s]*?\{\{\w+\/end}}/ig;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var pattern = /\{\{(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;|chart)\/start[\S\s]*?\{\{\w+\/end}}/ig;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; textarea.value = textarea.value.replace(pattern, wiki2art_replace);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; textarea.value = textarea.value.replace(pattern, wiki2art_replace);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l125&quot; &gt;Rad 125:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 125:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; var res;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; var res;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; text = text || &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; text = text || &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; text = text.replace(/^.*\n/, &amp;quot;&amp;quot;);&amp;#160;  // strip {{&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;/start}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; text = text.replace(/^.*\n/, &amp;quot;&amp;quot;);&amp;#160;  // strip {{&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;/start}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; res = text.match(/\w( *)\|/);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; res = text.match(/\w( *)\|/);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l144&quot; &gt;Rad 144:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 144:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; Parse textual series of {{&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;|...|...}} templates&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; Parse textual series of {{&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;|...|...}} templates&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; into a list of parameter lists. The parameters can contain&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; into a list of parameter lists. The parameters can contain&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; arbitrarily complex nested wiki syntax like [[foo|bar]] and&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; arbitrarily complex nested wiki syntax like [[foo|bar]] and&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l240&quot; &gt;Rad 240:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 240:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var alias = {};&amp;#160; &amp;#160;  // mapped to different name on this row?&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var alias = {};&amp;#160; &amp;#160;  // mapped to different name on this row?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (row[0].search(/^\s*(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;|chart)\s*$/i) == -1)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (row[0].search(/^\s*(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;|chart)\s*$/i) == -1)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; throw &amp;quot;Unrecognized template {{&amp;quot; + row[0] + &amp;quot;}}&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; throw &amp;quot;Unrecognized template {{&amp;quot; + row[0] + &amp;quot;}}&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l410&quot; &gt;Rad 410:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 410:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var textarea = document.editform.wpTextbox1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var textarea = document.editform.wpTextbox1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var scroll_pos = textarea.scrollTop;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var scroll_pos = textarea.scrollTop;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var pattern = /\{\{(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;|chart)\/start[\S\s]*?\{\{\w+\/end}}/ig;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; var pattern = /\{\{(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;|chart)\/start[\S\s]*?\{\{\w+\/end}}/ig;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; textarea.value = textarea.value.replace(pattern, art2wiki_replace);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; textarea.value = textarea.value.replace(pattern, art2wiki_replace);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l620&quot; &gt;Rad 620:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 620:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; lists if entire columns are unused.&amp;#160; The rows are assumed&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; lists if entire columns are unused.&amp;#160; The rows are assumed&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; to be the same virtual width.&amp;#160; If a margin is desired, use&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; to be the same virtual width.&amp;#160; If a margin is desired, use&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; {{&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;/start| style=margin:1em}}, not empty rows/columns.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; {{&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;/start| style=margin:1em}}, not empty rows/columns.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; (In rare cases there could also be leading/trailing rows that&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; (In rare cases there could also be leading/trailing rows that&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l824&quot; &gt;Rad 824:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 824:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; Build reverse lookup table needed by Tile objects.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; Build reverse lookup table needed by Tile objects.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; There is some conflict between the {{&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;}} and {{chart}} symbols.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; There is some conflict between the {{&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;}} and {{chart}} symbols.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; A few recently-added symbols map to different specs, and some specs&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; A few recently-added symbols map to different specs, and some specs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; map back to different symbols.&amp;#160; Hence the extra logic here depending&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&amp;#160; map back to different symbols.&amp;#160; Hence the extra logic here depending&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l939&quot; &gt;Rad 939:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 939:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if (document.editform) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if (document.editform) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; var textbox = document.editform.wpTextbox1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; var textbox = document.editform.wpTextbox1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; var res = textbox.value.match(/\{\{(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;|chart)\/start[\S\s]*\{\{\w+\/end/i);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; var res = textbox.value.match(/\{\{(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;|chart)\/start[\S\s]*\{\{\w+\/end/i);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; if (res) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; if (res) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Template = res[1];&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Template = res[1];&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (res[0].search(/^\s*\{\{(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familytree&lt;/del&gt;|chart)\s*\|/mi) &amp;gt; 0)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (res[0].search(/^\s*\{\{(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;släktträd&lt;/ins&gt;|chart)\s*\|/mi) &amp;gt; 0)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; update_menu (&amp;quot;wiki2art&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; update_menu (&amp;quot;wiki2art&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; else&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; else&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinbrandt</name></author>
		
	</entry>
	<entry>
		<id>https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=391&amp;oldid=prev</id>
		<title>Martinbrandt: Skapade sidan med &#039;/* JavaScript här kommer att laddas för dem som använder skalet Monobook */ // Wiki user script to help maintain {{familytree}} or {{chart}} // boxes-and-lines diagrams, by al...&#039;</title>
		<link rel="alternate" type="text/html" href="https://luggude.slektforskning.se/w/index.php?title=MediaWiki:Monobook.js&amp;diff=391&amp;oldid=prev"/>
		<updated>2010-11-28T11:52:46Z</updated>

		<summary type="html">&lt;p&gt;Skapade sidan med &amp;#039;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;JavaScript här kommer att laddas för dem som använder skalet Monobook: &lt;/span&gt; // Wiki user script to help maintain {{familytree}} or {{chart}} // boxes-and-lines diagrams, by al...&amp;#039;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny sida&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* JavaScript här kommer att laddas för dem som använder skalet Monobook */&lt;br /&gt;
// Wiki user script to help maintain {{familytree}} or {{chart}}&lt;br /&gt;
// boxes-and-lines diagrams, by allowing you to edit the diagram&lt;br /&gt;
// in a simpler and more standard ASCII art format.&lt;br /&gt;
// Greg Ubben, 1 Dec 2008&lt;br /&gt;
//&lt;br /&gt;
// To install, add:   importScript(&amp;quot;User:GregU/familytree.js&amp;quot;);&lt;br /&gt;
// to your monobook.js file.  This adds an option to the toolbox&lt;br /&gt;
// menu when editing familytrees.&lt;br /&gt;
//&lt;br /&gt;
// IE may work better than Firefox since it supports typeover mode.&lt;br /&gt;
//&lt;br /&gt;
// TODO:&lt;br /&gt;
// - Anything we can do to improve [[WP:ACCESSIBILITY]]&lt;br /&gt;
// - Some smarts with border/boxstyle&lt;br /&gt;
//&lt;br /&gt;
// Advanced ideas:&lt;br /&gt;
// - Draw line between start and end of selection&lt;br /&gt;
// - Cut/copy/paste rectangular selections (no existing library??)&lt;br /&gt;
//   - include overwrite/typeover mode emulation for Firefox&lt;br /&gt;
// - Java GUI version where you drag boxes and lines on a grid&lt;br /&gt;
 &lt;br /&gt;
addOnloadHook (function() {      // wraps entire script&lt;br /&gt;
 &lt;br /&gt;
var Summary  = &amp;quot;Edited {{%s}} using [[User:GregU/familytree.js|familytree.js]]&amp;quot;;&lt;br /&gt;
var Special  = [ &amp;quot;border&amp;quot;, &amp;quot;boxstyle&amp;quot;, &amp;quot;colspan&amp;quot;, &amp;quot;rowspan&amp;quot; ];&lt;br /&gt;
var Template;            // familytree or chart ?&lt;br /&gt;
var Style    = null;&lt;br /&gt;
var Center   = 40;       // center small diagrams on this column&lt;br /&gt;
var Maxwidth = 80;&lt;br /&gt;
var Picky    = 0;        // complain instead of self-correct?&lt;br /&gt;
var rows;&lt;br /&gt;
var boxes;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
//  Add/replace convert option at top of toolbox menu on sidebar.&lt;br /&gt;
//&lt;br /&gt;
function update_menu (item)&lt;br /&gt;
{&lt;br /&gt;
    var node = document.getElementById(&amp;quot;t-diagram&amp;quot;);&lt;br /&gt;
    if (node)&lt;br /&gt;
        node.parentNode.removeChild(node);&lt;br /&gt;
 &lt;br /&gt;
    node = document.getElementById(&amp;quot;t-whatlinkshere&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    if (item == &amp;quot;wiki2art&amp;quot;)&lt;br /&gt;
        addPortletLink (&amp;quot;p-tb&amp;quot;, &amp;quot;javascript:wiki2art()&amp;quot;,&lt;br /&gt;
                        &amp;quot;Templates → Art&amp;quot;, &amp;quot;t-diagram&amp;quot;,&lt;br /&gt;
           &amp;quot;Convert {{&amp;quot; + Template + &amp;quot;}}... to ASCII art&amp;quot;, &amp;quot;&amp;quot;, node);&lt;br /&gt;
 &lt;br /&gt;
    if (item == &amp;quot;art2wiki&amp;quot;)&lt;br /&gt;
        addPortletLink (&amp;quot;p-tb&amp;quot;, &amp;quot;javascript:art2wiki()&amp;quot;,&lt;br /&gt;
                        &amp;quot;Art → Templates&amp;quot;, &amp;quot;t-diagram&amp;quot;,&lt;br /&gt;
           &amp;quot;Convert ASCII art back to {{&amp;quot; + Template + &amp;quot;}}...&amp;quot;, &amp;quot;&amp;quot;, node);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function wiki2art()&lt;br /&gt;
{&lt;br /&gt;
    try {&lt;br /&gt;
        Style = null;&lt;br /&gt;
        var textarea = document.editform.wpTextbox1;&lt;br /&gt;
        var scroll_pos = textarea.scrollTop;&lt;br /&gt;
        var pattern = /\{\{(familytree|chart)\/start[\S\s]*?\{\{\w+\/end}}/ig;&lt;br /&gt;
 &lt;br /&gt;
        textarea.value = textarea.value.replace(pattern, wiki2art_replace);&lt;br /&gt;
        textarea.setAttribute(&amp;quot;wrap&amp;quot;, &amp;quot;off&amp;quot;);&lt;br /&gt;
        // work around problem with Firefox ignoring wrap (bug 302710)&lt;br /&gt;
        textarea.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
        textarea.scrollTop = scroll_pos;      // Mozilla only?&lt;br /&gt;
        update_menu (&amp;quot;art2wiki&amp;quot;);&lt;br /&gt;
        document.editform.wpSave.disabled = true;&lt;br /&gt;
    }&lt;br /&gt;
    catch (e) {&lt;br /&gt;
        alert (&amp;quot;Could not convert to ASCII art because:\n\n&amp;quot; + e);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function wiki2art_replace (text, tmpl)&lt;br /&gt;
{&lt;br /&gt;
    var rows  = [];&lt;br /&gt;
    var parts = {};&lt;br /&gt;
 &lt;br /&gt;
    if (text.indexOf(&amp;quot;\n&amp;quot;) == -1)&lt;br /&gt;
        return text;                // don&amp;#039;t convert a 1-line legend&lt;br /&gt;
 &lt;br /&gt;
    //  Sanity check, if non-empty but no lines begin with {{.&lt;br /&gt;
    //&lt;br /&gt;
    if (text.search(/\n\s*\{\{.*\n/)   == -1 &amp;amp;&amp;amp;&lt;br /&gt;
        text.search(/\n\s*[^\s&amp;lt;].*\n/) != -1) {&lt;br /&gt;
            toss (&amp;quot;Out of sync; looks like this already is art.&amp;quot;);&lt;br /&gt;
            return text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    Template = tmpl.toLowerCase();&lt;br /&gt;
    Maxwidth = (Template == &amp;quot;chart&amp;quot; ? 50 : 80);&lt;br /&gt;
    Style    = Style || new MarkupStyle(text);&lt;br /&gt;
 &lt;br /&gt;
    parse_templates (text, rows);&lt;br /&gt;
    var start = &amp;quot;{{&amp;quot; + rows.shift().join(&amp;quot;|&amp;quot;) + &amp;quot;}}\n&amp;quot;;&lt;br /&gt;
    var end   = &amp;quot;{{&amp;quot; + rows.pop().join(&amp;quot;|&amp;quot;)   + &amp;quot;}}&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    layout_tiles (rows, parts);&lt;br /&gt;
    var art = pad_text( touchup( parts.art ));&lt;br /&gt;
 &lt;br /&gt;
    var width = art.indexOf(&amp;quot;\n&amp;quot;) / 2;&lt;br /&gt;
    width = (width &amp;gt; 50 &amp;amp;&amp;amp; Maxwidth &amp;gt; 50) ? Maxwidth : 50;&lt;br /&gt;
 &lt;br /&gt;
    var ruler = Array(11).join(&amp;quot;0-1-2-3-4-5-6-7-8-9-&amp;quot;)&lt;br /&gt;
                         .slice(0, width*2-1);&lt;br /&gt;
 &lt;br /&gt;
    return start + &amp;quot;\n&amp;quot; + ruler + &amp;quot;\n&amp;quot; + art +&lt;br /&gt;
           &amp;quot;\n&amp;quot; + parts.list + &amp;quot;\n&amp;quot; + end;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Remember markup spacing styles based on first occurrences.&lt;br /&gt;
//  So to change the markup style, just change the first one&lt;br /&gt;
//  then toggle twice to &amp;quot;refresh&amp;quot;.&lt;br /&gt;
//&lt;br /&gt;
function MarkupStyle (text)&lt;br /&gt;
{&lt;br /&gt;
    this.initial = &amp;quot;&amp;quot;;&lt;br /&gt;
    this.lead    = &amp;quot; &amp;quot;;&lt;br /&gt;
    this.equal   = &amp;quot;=&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    var res;&lt;br /&gt;
    text = text || &amp;quot;&amp;quot;;&lt;br /&gt;
    text = text.replace(/^.*\n/, &amp;quot;&amp;quot;);   // strip {{familytree/start}}&lt;br /&gt;
 &lt;br /&gt;
    res = text.match(/\w( *)\|/);&lt;br /&gt;
    if (res) {&lt;br /&gt;
        this.initial = res[1];   // space after template name?&lt;br /&gt;
    }&lt;br /&gt;
    res = text.match(/\|(\s*)\w{2,5}(\s*=\s*)[^\s=|}]/);&lt;br /&gt;
    if (res) {&lt;br /&gt;
        this.lead  = res[1];     // params indented on new lines?&lt;br /&gt;
        this.equal = res[2];&lt;br /&gt;
    }&lt;br /&gt;
    this.trail = (/\n/.test(this.lead) ? &amp;quot; &amp;quot; : &amp;quot;&amp;quot;);&lt;br /&gt;
    this.trim  = (text.search(/\| \| (\|?}}|\|\s*\w+\s*=)/) == -1);&lt;br /&gt;
 &lt;br /&gt;
    this.param = function(name,value) {&lt;br /&gt;
        return this.lead + name + this.equal + value + this.trail;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Parse textual series of {{familytree|...|...}} templates&lt;br /&gt;
//  into a list of parameter lists. The parameters can contain&lt;br /&gt;
//  arbitrarily complex nested wiki syntax like [[foo|bar]] and&lt;br /&gt;
//  {{foo|bar|{{{1|baz}}}}} but this simple strategy of just&lt;br /&gt;
//  counting double brackets and braces should be good enough.&lt;br /&gt;
//&lt;br /&gt;
function parse_templates (text, rows)&lt;br /&gt;
{&lt;br /&gt;
    var pattern = /([[\]{}])\1|\||&amp;lt;!--[\S\s]*?--&amp;gt;|&amp;lt;nowiki&amp;gt;[\S\s]*?&amp;lt;\/nowiki&amp;gt;/ig;&lt;br /&gt;
    var level = 0;&lt;br /&gt;
    var row, start, res;&lt;br /&gt;
 &lt;br /&gt;
    while ((res = pattern.exec(text)) != null) {&lt;br /&gt;
        if (res[1]) {&lt;br /&gt;
            (res[1]==&amp;quot;[&amp;quot; || res[1]==&amp;quot;{&amp;quot;) ? level++ : level--;&lt;br /&gt;
        }&lt;br /&gt;
        if (res[0] == &amp;quot;{{&amp;quot; &amp;amp;&amp;amp; level == 1) {&lt;br /&gt;
            row   = [];&lt;br /&gt;
            start = res.index + 2;&lt;br /&gt;
        }&lt;br /&gt;
        if (res[0] == &amp;quot;|&amp;quot; &amp;amp;&amp;amp; level == 1) {&lt;br /&gt;
            row.push(text.slice(start, res.index));&lt;br /&gt;
            start = res.index + 1;&lt;br /&gt;
        }&lt;br /&gt;
        if (res[0] == &amp;quot;}}&amp;quot; &amp;amp;&amp;amp; level == 0) {&lt;br /&gt;
            row.push(text.slice(start, res.index));&lt;br /&gt;
            rows.push(row);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (level != 0)&lt;br /&gt;
        throw &amp;quot;Mismatched {{...}} or [[...]]&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function layout_tiles (rows, parts)&lt;br /&gt;
{&lt;br /&gt;
    var art     = &amp;quot;&amp;quot;;&lt;br /&gt;
    var params  = {};&lt;br /&gt;
    var order   = [];&lt;br /&gt;
    var specpat = new RegExp(&amp;quot;^((&amp;quot; + Special.join(&amp;quot;|&amp;quot;) + &amp;quot;)_)\\s*(\\S.*)&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    //  Tweak name so it is valid (matches namepat from map_boxes()&lt;br /&gt;
    //  and is 2 to 5 characters long) and so it is unique if the&lt;br /&gt;
    //  same name is used on several templates with different values.&lt;br /&gt;
    //  Then store it in params{} and order[].&lt;br /&gt;
    //&lt;br /&gt;
    //  Could remember mappings in another hash, and change&lt;br /&gt;
    //  back to original name on output (if original name not&lt;br /&gt;
    //  already used on line).  Probably best not to though.&lt;br /&gt;
    //&lt;br /&gt;
    function goodname (name, value)&lt;br /&gt;
    {&lt;br /&gt;
        var res, prefix=&amp;quot;&amp;quot;, nn;&lt;br /&gt;
 &lt;br /&gt;
        if (res = name.match(specpat)) {&lt;br /&gt;
            prefix = res[1];&lt;br /&gt;
            name   = res[3];&lt;br /&gt;
        }&lt;br /&gt;
        nn = alias[name];&lt;br /&gt;
        if (!nn) {             // first encounter on this template&lt;br /&gt;
            nn = name;&lt;br /&gt;
            if (nn.search(/\w.*\w/) == -1 &amp;amp;&amp;amp; value.search(/\w.*\w/) &amp;gt; -1)&lt;br /&gt;
                nn = value.toUpperCase();&lt;br /&gt;
            nn = nn.replace( /[^\w.\/&amp;amp;]/g,               &amp;quot;_&amp;quot;);&lt;br /&gt;
            nn = nn.replace( /_*([\W_])[\W_]*/g,        &amp;quot;$1&amp;quot;);&lt;br /&gt;
            nn = nn.replace( /^[\W_]*(.{0,4}[^\W_]).*/, &amp;quot;$1&amp;quot;);&lt;br /&gt;
            nn = nn.replace( /^.?$/,                    &amp;quot;A0001&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
            var base = nn;&lt;br /&gt;
            var num  = 1;&lt;br /&gt;
            while (nn in params &amp;amp;&amp;amp; (params[nn] != value || prefix)) {&lt;br /&gt;
                num++;&lt;br /&gt;
                nn = base.slice(0, 5 - String(num).length) + num;&lt;br /&gt;
            }&lt;br /&gt;
            alias[name] = nn;&lt;br /&gt;
        }&lt;br /&gt;
        nn = prefix + nn;&lt;br /&gt;
 &lt;br /&gt;
        if (! (nn in params)) {&lt;br /&gt;
            order.push(nn);&lt;br /&gt;
            params[nn] = value;&lt;br /&gt;
        }&lt;br /&gt;
        return nn;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //   FRANKLIN = Benjamin Franklin    FRANK&lt;br /&gt;
    //   FRANKLIN = Frank N. Furter      FRAN2    boxstyle_FRANKLIN = red&lt;br /&gt;
    //   FRANKLIN = Franklin Richards    FRAN3&lt;br /&gt;
    //   FRANKLIN = Frank N. Furter               boxstyle_FRANKLIN = blue&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    for (var r=0; r &amp;lt; rows.length; r++) {&lt;br /&gt;
        var row   = rows[r];&lt;br /&gt;
        var seen  = {};&lt;br /&gt;
        var alias = {};     // mapped to different name on this row?&lt;br /&gt;
 &lt;br /&gt;
        if (row[0].search(/^\s*(familytree|chart)\s*$/i) == -1)&lt;br /&gt;
            throw &amp;quot;Unrecognized template {{&amp;quot; + row[0] + &amp;quot;}}&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        for (var i=0; i &amp;lt; Special.length; i++)&lt;br /&gt;
            alias[Special[i]] = Special[i];    // don&amp;#039;t truncate boxstyle&lt;br /&gt;
 &lt;br /&gt;
        //  Pass 1:  Do only the assignments first, because if the&lt;br /&gt;
        //  same parameter name is used on a previous row with a&lt;br /&gt;
        //  different value, then we need to rename this parameter&lt;br /&gt;
        //  and its boxes before they are output.&lt;br /&gt;
        //&lt;br /&gt;
        for (var c=1; c &amp;lt; row.length; c++)&lt;br /&gt;
        {&lt;br /&gt;
            var cell = row[c];&lt;br /&gt;
            var i    = cell.indexOf(&amp;quot;=&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
            if (i &amp;lt; 0 || cell == &amp;quot;=&amp;quot;)&lt;br /&gt;
                continue;&lt;br /&gt;
 &lt;br /&gt;
            var name  = trim(cell.slice(0,i));&lt;br /&gt;
            var value = trim(cell.slice(i+1));&lt;br /&gt;
 &lt;br /&gt;
            if (value.indexOf(&amp;quot;\n&amp;quot;) &amp;gt;= 0)&lt;br /&gt;
                toss (&amp;#039;Parameter &amp;quot;&amp;#039; + name + &amp;#039;&amp;quot; spans multiple lines.&amp;#039;);&lt;br /&gt;
            value = value.replace(/\n\s*/g, &amp;quot; &amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
            if (seen[name] &amp;amp;&amp;amp; value != seen[name])&lt;br /&gt;
                throw &amp;#039;Parameter &amp;quot;&amp;#039; + name + &amp;#039;&amp;quot; has multiple values on template &amp;#039; + (r+1);&lt;br /&gt;
            seen[name] = value;&lt;br /&gt;
 &lt;br /&gt;
            goodname(name, value);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        //  Pass 2:  Now layout the tiles and boxes.&lt;br /&gt;
        //&lt;br /&gt;
        for (var c=1; c &amp;lt; row.length; c++)&lt;br /&gt;
        {&lt;br /&gt;
            var cell = trim(row[c]);&lt;br /&gt;
 &lt;br /&gt;
            if (istile(cell) &amp;amp;&amp;amp; ! (cell in seen))&lt;br /&gt;
            {&lt;br /&gt;
                art += pad(cell, 2);&lt;br /&gt;
            }&lt;br /&gt;
            else if (cell.indexOf(&amp;quot;=&amp;quot;) == -1)        // it&amp;#039;s a BOX&lt;br /&gt;
            {&lt;br /&gt;
                cell = goodname(cell, cell.replace(/_/g, &amp;quot; &amp;quot;)).slice(0,5);&lt;br /&gt;
 &lt;br /&gt;
                // Don&amp;#039;t adjoin a {{chart}} wide cell if can avoid&lt;br /&gt;
                if (cell.length == 4 &amp;amp;&amp;amp; /\w$/.test(art))&lt;br /&gt;
                    cell = &amp;quot; &amp;quot; + cell;&lt;br /&gt;
 &lt;br /&gt;
                art += (&amp;quot;  &amp;quot;+cell+&amp;quot;   &amp;quot;).substr(cell.length/2, 6);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        art += &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // list the parameter values, one per line&lt;br /&gt;
    // TODO:  Styles referenced via [1], [2], etc&lt;br /&gt;
 &lt;br /&gt;
    var param_width = 5;&lt;br /&gt;
    for (var name in params)&lt;br /&gt;
        if (name.length &amp;gt; 8)&lt;br /&gt;
            param_width = 14;       // any boxstyle_FOO ?&lt;br /&gt;
 &lt;br /&gt;
    var param_list = &amp;quot;&amp;quot;;&lt;br /&gt;
    while (name = order.shift()) {&lt;br /&gt;
        param_list += pad(name, param_width) + &amp;quot; = &amp;quot; + (params[name] || &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    parts.art  = art;&lt;br /&gt;
    parts.list = param_list;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Make the art more readable by converting some symbols.&lt;br /&gt;
//  Mainly just fills in --- and ~~~ horizontal lines for now.&lt;br /&gt;
//  1.  Fill in a ~ tile followed by a ~ tile or a box&lt;br /&gt;
//  2.  Fill in a box    followed by a ~ tile&lt;br /&gt;
//  TOM  - v -  SUE    becomes    TOM ---v--- SUE&lt;br /&gt;
//&lt;br /&gt;
function touchup (art)&lt;br /&gt;
{&lt;br /&gt;
    art = art.replace( /!/g, &amp;quot;|&amp;quot;);&lt;br /&gt;
    art = art.replace( /([,`^)}*+-]|\b[Xadijqrv]) (?=[.&amp;#039;^({*+-]|[acijlqrv]| ?\w\w)/g, &amp;quot;$1-&amp;quot;);&lt;br /&gt;
    art = art.replace( /([~%#\]]|\b[ADFLVfhy]) (?=[~%#[]|[7ACJKVXehy]| ?\w\w)/g,      &amp;quot;$1~&amp;quot;);&lt;br /&gt;
    art = art.replace( /(\w\w ? ?) (?=[.&amp;#039;^({*+-]|[acijlqrv]\b)/g, &amp;quot;$1-&amp;quot;);&lt;br /&gt;
    art = art.replace( /(\w\w ? ?) (?=[~%#[]|[7ACJKVXehy]\b)/g,   &amp;quot;$1~&amp;quot;);&lt;br /&gt;
    art = art.replace( /(\w\w ) (-|~)/g, &amp;quot;$1$2$2&amp;quot;);&lt;br /&gt;
    return art;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Trim and pad a multi-line diagram with spaces to its maximum&lt;br /&gt;
//  width, adding a margin on both sides and a 1-line padded&lt;br /&gt;
//  margin above and below.  Also tweaks the alignment if most&lt;br /&gt;
//  of the alignment indicators are mis-aligned on odd.&lt;br /&gt;
//  If margin is not given (wiki2art), it depends on the width.&lt;br /&gt;
//&lt;br /&gt;
function pad_text (text, margin)&lt;br /&gt;
{&lt;br /&gt;
    // trim trailing spaces and leading and trailing lines&lt;br /&gt;
    text = text.replace(/\t/g, &amp;quot;        &amp;quot;);    // just in case&lt;br /&gt;
    text = text.replace(/ *\r*$/mg, &amp;quot;&amp;quot;);&lt;br /&gt;
    text = text.replace(/^\n*/, &amp;quot;\n&amp;quot;);&lt;br /&gt;
    text = text.replace(/\n*$/, &amp;quot;\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    // trim indentation if not empty&lt;br /&gt;
    while (text.search(/(^|\n).?\S|^\s*$/) == -1) {&lt;br /&gt;
        text = text.replace(/^  /mg, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    var rows  = text.split(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    var width = 0;&lt;br /&gt;
    var align = 0;&lt;br /&gt;
    var alignpat = /[^\w\s=~&amp;amp;\/\[\].-]|[A-Z0-9]+([\/&amp;amp;._]?[A-Z0-9])+/ig;&lt;br /&gt;
    var res;&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
        width = Math.max(width, rows[i].length);&lt;br /&gt;
 &lt;br /&gt;
        //  Are majority of alignment indicators on odd or even?&lt;br /&gt;
        //&lt;br /&gt;
        while ((res = alignpat.exec(rows[i])) != null) {&lt;br /&gt;
            var len = res[0].length;&lt;br /&gt;
            if (len % 2)              // even boxes are ambiguous&lt;br /&gt;
                ((res.index + len/2) &amp;amp; 1) ? align-- : align++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //  If formatting for display, center diagram on column 40, but&lt;br /&gt;
    //  at least a 4-cell left margin unless close to max width.&lt;br /&gt;
    //  The margin gives room to draw another box on the left, and&lt;br /&gt;
    //  you can then toggle view twice to indent another 4 cells.&lt;br /&gt;
    //&lt;br /&gt;
    if (margin == null) {&lt;br /&gt;
        margin = Center - width / 2;&lt;br /&gt;
        margin = Math.max(margin &amp;amp; ~1, 8);&lt;br /&gt;
        if (width/2 + margin &amp;gt; Maxwidth)&lt;br /&gt;
            margin = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (align &amp;lt; 0)&lt;br /&gt;
        margin++;&lt;br /&gt;
 &lt;br /&gt;
    margin = pad(&amp;quot;&amp;quot;, margin);&lt;br /&gt;
    text   = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
        text += margin + pad(rows[i], width) + margin + &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return text;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Pad str with spaces on right to width len, but don&amp;#039;t truncate.&lt;br /&gt;
//&lt;br /&gt;
function pad (str, len)&lt;br /&gt;
{&lt;br /&gt;
    if (str.length &amp;lt; len)&lt;br /&gt;
        str += Array(len - str.length + 1).join(&amp;quot; &amp;quot;);&lt;br /&gt;
    return str;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function trim (str)&lt;br /&gt;
{&lt;br /&gt;
    return str.replace(/^\s+|\s+$/g, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function art2wiki()&lt;br /&gt;
{&lt;br /&gt;
    try {&lt;br /&gt;
        var textarea = document.editform.wpTextbox1;&lt;br /&gt;
        var scroll_pos = textarea.scrollTop;&lt;br /&gt;
        var pattern = /\{\{(familytree|chart)\/start[\S\s]*?\{\{\w+\/end}}/ig;&lt;br /&gt;
 &lt;br /&gt;
        textarea.value = textarea.value.replace(pattern, art2wiki_replace);&lt;br /&gt;
        textarea.removeAttribute(&amp;quot;wrap&amp;quot;);&lt;br /&gt;
        textarea.style.display = &amp;quot;inline&amp;quot;;    // Firefox work-around&lt;br /&gt;
        textarea.scrollTop = scroll_pos;      // Firefox only?&lt;br /&gt;
 &lt;br /&gt;
        document.editform.wpSave.disabled = false;&lt;br /&gt;
        update_menu (&amp;quot;wiki2art&amp;quot;);&lt;br /&gt;
        if (document.editform.wpSummary.value.search(/^(\/\* .* \*\/)? *$/) == 0)&lt;br /&gt;
            document.editform.wpSummary.value += Summary.replace(&amp;quot;%s&amp;quot;, Template);&lt;br /&gt;
    }&lt;br /&gt;
    catch (e) {&lt;br /&gt;
        alert (&amp;quot;Could not convert ASCII art because:\n\n&amp;quot; + e);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function art2wiki_replace (text, tmpl)&lt;br /&gt;
{&lt;br /&gt;
    var label      = {};&lt;br /&gt;
    var param_rows = [];&lt;br /&gt;
 &lt;br /&gt;
    Template = tmpl.toLowerCase();&lt;br /&gt;
    rows     = [];&lt;br /&gt;
    boxes    = [];&lt;br /&gt;
 &lt;br /&gt;
    if (text.indexOf(&amp;quot;\n&amp;quot;) == -1)&lt;br /&gt;
        return text;                // don&amp;#039;t convert a 1-line legend&lt;br /&gt;
 &lt;br /&gt;
    //  Sanity check, if any lines begin with {{...&lt;br /&gt;
    //&lt;br /&gt;
    if (text.search(/\n\s*\{\{.*\n/) != -1) {&lt;br /&gt;
        toss (&amp;quot;Out of sync; looks like this already is wikitext.&amp;quot;);&lt;br /&gt;
        return text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var res = text.match(/^(.*}})([\S\s]*)\{\{/);&lt;br /&gt;
    if (res == null)&lt;br /&gt;
        throw &amp;quot;Didn&amp;#039;t find end of /start tag on same line&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    parse_art (res[2], label,rows);&lt;br /&gt;
    map_boxes (rows, boxes);&lt;br /&gt;
    map_tiles (boxes,rows, param_rows);&lt;br /&gt;
    crop_rows (param_rows);&lt;br /&gt;
    var temps = to_wikitext (label, param_rows);&lt;br /&gt;
    var start = summarize (res[1], boxes.count);&lt;br /&gt;
 &lt;br /&gt;
    return start + &amp;quot;\n&amp;quot; + temps + &amp;quot;{{&amp;quot; + tmpl + &amp;quot;/end}}&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Parse the simple ASCII art, storing the diagram in&lt;br /&gt;
//  rows[] and the labels in label{}&lt;br /&gt;
//&lt;br /&gt;
function parse_art (text, label,outrows)&lt;br /&gt;
{&lt;br /&gt;
    // remove any rulers or comments (messages)&lt;br /&gt;
    text = text.replace(/^.*1-2-3-4-5-6-7-8-9.*\n/mg, &amp;quot;&amp;quot;);&lt;br /&gt;
    text = text.replace(/^ *\/\/.*/mg, &amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    // Parse the name=value definitions into label{}.&lt;br /&gt;
    // We&amp;#039;re as flexible as possible, allowing defs&lt;br /&gt;
    // with no RHS, defs in multiple columns, and&lt;br /&gt;
    // defs quickly jotted to the right of the art.&lt;br /&gt;
    // However, a value cannot span lines. And assume&lt;br /&gt;
    // foo===bar is part of the art, where === is ---.&lt;br /&gt;
    // AAA=Freddy overrides AAA=AAA overrides AAA=&lt;br /&gt;
    //&lt;br /&gt;
    text = text.replace(/([^\s=]+) *=(?!=) *(.*?)(\t|   (?=.*\w.*=)| *$)/mg, &lt;br /&gt;
        function (str,name,value) {&lt;br /&gt;
            if (! /\w/.test(name))      // art&lt;br /&gt;
                return str;&lt;br /&gt;
            if (! label[name] || label[name] == name &amp;amp;&amp;amp; value)&lt;br /&gt;
                label[name] = value;&lt;br /&gt;
            if (value != label[name] &amp;amp;&amp;amp; value != name &amp;amp;&amp;amp; value)&lt;br /&gt;
                throw &amp;#039;Parameter &amp;quot;&amp;#039; + name + &amp;#039;&amp;quot; has multiple values.&amp;#039;;&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
        });&lt;br /&gt;
 &lt;br /&gt;
    // Treat ..... same as ~~~~~&lt;br /&gt;
    text = text.replace(/\.{3,}/g, function(s){ return s.replace(/./g, &amp;quot;~&amp;quot;); });&lt;br /&gt;
 &lt;br /&gt;
    text = pad_text(text, 4);&lt;br /&gt;
 &lt;br /&gt;
    var a = text.slice(0,-1).split(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    while (a.length)&lt;br /&gt;
        outrows.push(a.shift());&lt;br /&gt;
 &lt;br /&gt;
    // At this point, outrows[] should contain the diagram padded&lt;br /&gt;
    // to the maximum width with two extra blank cells on each&lt;br /&gt;
    // side (1 box overlap + 1 neighbor) and with the vertical&lt;br /&gt;
    // lines aligned on the even characters (assuming diagram is&lt;br /&gt;
    // consistent in this).&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
//  Find which cells are occupied by boxes, even if the box&lt;br /&gt;
//  names are real short (must be at least 2 characters) or&lt;br /&gt;
//  real long.  Doing this first makes processing the tiles&lt;br /&gt;
//  easier.  Returns the 2D boxes array.&lt;br /&gt;
//&lt;br /&gt;
function map_boxes (rows, boxes)&lt;br /&gt;
{&lt;br /&gt;
    var namepat = /[A-Z0-9]+([\/&amp;amp;._]?[A-Z0-9])+/ig;&lt;br /&gt;
    var row, map, res, name, pos;&lt;br /&gt;
 &lt;br /&gt;
    boxes.count = 0;&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
        row = rows[i];&lt;br /&gt;
        map = new Array(row.length);&lt;br /&gt;
 &lt;br /&gt;
        while ((res = namepat.exec(row)) != null) {&lt;br /&gt;
            name = res[0];&lt;br /&gt;
 &lt;br /&gt;
            //  Handle cases where wide {{chart}} tiles look like boxes.&lt;br /&gt;
            //  If it looks like they could be tiles, then they&amp;#039;re tiles,&lt;br /&gt;
            //  else they&amp;#039;re boxes.  We rely on user to not use ambiguous&lt;br /&gt;
            //  box names like a2b2c (though names like a2 and a2b should&lt;br /&gt;
            //  actually work as long as they remain aligned on odd).&lt;br /&gt;
            //&lt;br /&gt;
            if (Template == &amp;quot;chart&amp;quot; &amp;amp;&amp;amp; res.index % 2 == 0)&lt;br /&gt;
            {&lt;br /&gt;
                while (name.search(/^[a-z]2[^\W_].../) == 0) {&lt;br /&gt;
                    name = name.slice(2);&lt;br /&gt;
                    res.index += 2;&lt;br /&gt;
                }&lt;br /&gt;
                //  Tiles: m2 m2P m2n2 m2n2P   Boxes: m2ab m2abc m2Pn2&lt;br /&gt;
                if (name.search(/^([a-z]2)*.?$/) == 0)&lt;br /&gt;
                    continue;&lt;br /&gt;
 &lt;br /&gt;
                //  Also allow convenience shortcut of  SPPPRPPPPPP&lt;br /&gt;
                //  to be used as alternative to        S P R P P P&lt;br /&gt;
                if (name.search(/^(?=.*PPP)([bmnoPSYWMHR]P){3,}.?$/) == 0)&lt;br /&gt;
                    continue;&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
            //  Even allow on odd alignment if it&amp;#039;s all PPPPPPPPPPPs&lt;br /&gt;
            if (Template == &amp;quot;chart&amp;quot; &amp;amp;&amp;amp; name.search(/^P{6,}.$/) == 0)&lt;br /&gt;
                continue;&lt;br /&gt;
 &lt;br /&gt;
            if (name.length % 2 == 1 &amp;amp;&amp;amp; res.index % 2 == 0)&lt;br /&gt;
                toss (name + &amp;quot; is aligned ambiguously&amp;quot;);&lt;br /&gt;
            pos = (res.index + name.length / 2) &amp;amp; ~1;&lt;br /&gt;
            if (map[pos-2])&lt;br /&gt;
                throw &amp;quot;box [&amp;quot; + name + &amp;quot;] overlaps [&amp;quot; + map[pos-2] + &amp;quot;]&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            map[pos-2] = name;&lt;br /&gt;
            map[pos]   = name;&lt;br /&gt;
            map[pos+2] = name;&lt;br /&gt;
 &lt;br /&gt;
            //  Blank out the name.  If it&amp;#039;s a long name (&amp;gt;5) and&lt;br /&gt;
            //  a horizontal line joins it, extend the line into&lt;br /&gt;
            //  the extra space from shortening the name.&lt;br /&gt;
 &lt;br /&gt;
            var before = row.slice(0, res.index);&lt;br /&gt;
            var blank  = name.replace(/./g, &amp;quot; &amp;quot;);&lt;br /&gt;
            var after  = row.slice(res.index + name.length);&lt;br /&gt;
            var half   = name.length / 2;&lt;br /&gt;
 &lt;br /&gt;
            if (res = before.match(/(-|~) ?$/))&lt;br /&gt;
                blank = Array((half+1)|0).join(res[1]) + blank.slice(half);&lt;br /&gt;
            if (res = after.match(/^ ?(-|~)/))&lt;br /&gt;
                blank = blank.slice(0,half) + Array((half+1.6)|0).join(res[1]);&lt;br /&gt;
 &lt;br /&gt;
            row = before + blank + after;&lt;br /&gt;
            boxes.count++;&lt;br /&gt;
 &lt;br /&gt;
            if (row.slice(pos-2, pos+3).search(/[^\s[\]P~=_-]/) &amp;gt;= 0)&lt;br /&gt;
                toss (&amp;quot;A tile overlaps box [&amp;quot; + name + &amp;quot;]&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        boxes.push(map);&lt;br /&gt;
        rows[i] = row;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function map_tiles (boxes,rows, param_rows)&lt;br /&gt;
{&lt;br /&gt;
    Tile.invert_symbols();&lt;br /&gt;
 &lt;br /&gt;
    for (var r=1; r &amp;lt; rows.length-1; r++)&lt;br /&gt;
    {&lt;br /&gt;
        var row    = rows[r];&lt;br /&gt;
        var params = [];&lt;br /&gt;
 &lt;br /&gt;
        var res = row.match(/^.(..)*?([^\s[\]P~=_-])/);&lt;br /&gt;
        if (res)&lt;br /&gt;
            toss (res[2] + &amp;quot; is mis-aligned on row &amp;quot; + r);&lt;br /&gt;
 &lt;br /&gt;
        for (var c=2; c &amp;lt; row.length-2; c += 2)&lt;br /&gt;
        {&lt;br /&gt;
            if (boxes[r][c]) {&lt;br /&gt;
                params.push( boxes[r][c] );&lt;br /&gt;
                c += 4;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                var t = new Tile(r,c);&lt;br /&gt;
                t.tweak(r-1, c, 0);&lt;br /&gt;
                t.tweak(r+1, c, 2);&lt;br /&gt;
                t.tweak(r, c-2, 3);&lt;br /&gt;
                t.tweak(r, c+2, 1);&lt;br /&gt;
                params.push( t.symbol() );&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        param_rows.push(params);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Crop unneeded spaces from beginnings and ends of parameter&lt;br /&gt;
//  lists if entire columns are unused.  The rows are assumed&lt;br /&gt;
//  to be the same virtual width.  If a margin is desired, use&lt;br /&gt;
//  {{familytree/start| style=margin:1em}}, not empty rows/columns.&lt;br /&gt;
//&lt;br /&gt;
//  (In rare cases there could also be leading/trailing rows that&lt;br /&gt;
//  are empty, but don&amp;#039;t crop them. Should only happen if these&lt;br /&gt;
//  lines were blank exept for character(s) in the odd cells.&lt;br /&gt;
//  Which shouldn&amp;#039;t happen by accident.)&lt;br /&gt;
//&lt;br /&gt;
function crop_rows (rows)&lt;br /&gt;
{&lt;br /&gt;
    var min = 9999;&lt;br /&gt;
    var max = 0;&lt;br /&gt;
 &lt;br /&gt;
    //  Find first and last columns used&lt;br /&gt;
    //&lt;br /&gt;
    for (var r=0; r &amp;lt; rows.length; r++) {&lt;br /&gt;
        var params = rows[r];&lt;br /&gt;
        var col    = 0;         // virtual column / width&lt;br /&gt;
        var first  = 9999;      // first used column&lt;br /&gt;
        var last   = 0;         // last used column&lt;br /&gt;
 &lt;br /&gt;
        for (var i=0; i &amp;lt; params.length; i++) {&lt;br /&gt;
            var param = params[i];&lt;br /&gt;
            if (param != &amp;#039; &amp;#039; &amp;amp;&amp;amp; first &amp;gt; col)&lt;br /&gt;
                first = col;&lt;br /&gt;
            if (! istile(param))&lt;br /&gt;
                col += 2;          // it&amp;#039;s a 3-wide box&lt;br /&gt;
            if (param != &amp;#039; &amp;#039;)&lt;br /&gt;
                last = col;&lt;br /&gt;
            col++;&lt;br /&gt;
        }&lt;br /&gt;
        min = Math.min(min, first);&lt;br /&gt;
        max = Math.max(max, last);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (min &amp;gt; max)  return;        // all blank&lt;br /&gt;
    var extra = col - max - 1;     // amount to trim on right&lt;br /&gt;
 &lt;br /&gt;
    // Now crop leading and trailing params in blank columns.&lt;br /&gt;
    // Though the param list lengths vary, their virtual widths&lt;br /&gt;
    // should all be the same, and will continue to be consistent&lt;br /&gt;
    // after shaving the same amount off of each end.&lt;br /&gt;
    //&lt;br /&gt;
    for (r=0; r &amp;lt; rows.length; r++) {&lt;br /&gt;
        rows[r].splice(0, min);&lt;br /&gt;
        rows[r].splice(rows[r].length - extra, extra);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function to_wikitext (label, rows)&lt;br /&gt;
{&lt;br /&gt;
    var style      = Style || new MarkupStyle();&lt;br /&gt;
    var result     = &amp;quot;&amp;quot;;&lt;br /&gt;
    var first_part = &amp;quot;{{&amp;quot; + Template + style.initial;&lt;br /&gt;
    var label_used = {};&lt;br /&gt;
    var i, attr;&lt;br /&gt;
 &lt;br /&gt;
    for (i=0; i &amp;lt; Special.length; i++) {&lt;br /&gt;
        attr = Special[i];&lt;br /&gt;
        if (attr in label) {&lt;br /&gt;
            first_part += &amp;quot;|&amp;quot; + attr + &amp;quot;=&amp;quot; + label[attr];&lt;br /&gt;
            label_used[attr] = 1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for (var r=0; r &amp;lt; rows.length; r++)&lt;br /&gt;
    {&lt;br /&gt;
        var params    = rows[r];&lt;br /&gt;
        var seen      = {};&lt;br /&gt;
        var last_part = &amp;quot;&amp;quot;;&lt;br /&gt;
        var param;&lt;br /&gt;
        result += first_part;&lt;br /&gt;
 &lt;br /&gt;
        while (param = params.shift()) {&lt;br /&gt;
            result += &amp;quot;|&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            if (istile(param) &amp;amp;&amp;amp; !(param in label)) {&lt;br /&gt;
                result += param;&lt;br /&gt;
                continue;&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
            if (! (param in seen)) {&lt;br /&gt;
                seen[param] = 1;&lt;br /&gt;
 &lt;br /&gt;
                if (param in label) {&lt;br /&gt;
                    last_part += &amp;quot;|&amp;quot; + style.param(param, label[param]);&lt;br /&gt;
                    label_used[param] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                for (i=0; i &amp;lt; Special.length; i++) {&lt;br /&gt;
                    attr = Special[i] + &amp;quot;_&amp;quot; + param;&lt;br /&gt;
                    if (attr in label) {&lt;br /&gt;
                        last_part += &amp;quot;|&amp;quot; + style.param(attr, label[attr]);&lt;br /&gt;
                        label_used[attr] = 1;&lt;br /&gt;
                        seen[param]      = 2;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
            //  If param.length &amp;lt; 5, center it so it looks better.&lt;br /&gt;
            //  Unless it&amp;#039;s used in any per-box attributes like boxstyle_FOO,&lt;br /&gt;
            //  in which case it must be flush left to work correctly.&lt;br /&gt;
 &lt;br /&gt;
            if (seen[param] == 2 || param.length &amp;gt; 5)&lt;br /&gt;
                result += pad(param, 5);&lt;br /&gt;
            else&lt;br /&gt;
                result += (&amp;quot;  &amp;quot;+param+&amp;quot;  &amp;quot;).substr(param.length/2, 5);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        if (style.trim)&lt;br /&gt;
            result = result.replace(/(\| )+$/g, &amp;quot;&amp;quot;);    // trim empty cells&lt;br /&gt;
        result += last_part + &amp;quot;}}\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var unused = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    for (i in label) {&lt;br /&gt;
        if (! (i in label_used) &amp;amp;&amp;amp; label[i] &amp;amp;&amp;amp; label[i] != i)&lt;br /&gt;
            unused += &amp;quot;|&amp;quot; + style.param(i, label[i]);&lt;br /&gt;
    }&lt;br /&gt;
    if (unused)&lt;br /&gt;
        result += &amp;quot;&amp;lt;!-- Unused parameters: --&amp;gt;\n&amp;quot; +&lt;br /&gt;
                  &amp;quot;{{&amp;quot; + Template + style.initial + unused + &amp;quot;}}\n&amp;quot;;&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Create a slightly more useful summary than the default.&lt;br /&gt;
//  The user is hoped to revise this to a more meaningful summary&lt;br /&gt;
//  than can be calculated automatically. For example:&lt;br /&gt;
//&lt;br /&gt;
//  summary = Family tree diagram for Barack Obama, connecting&lt;br /&gt;
//            29 individuals in 4 generations.  Generations are&lt;br /&gt;
//            arranged in rows, with Barack appearing 3rd on the&lt;br /&gt;
//            3rd such row.&lt;br /&gt;
//&lt;br /&gt;
function summarize (tag, count)&lt;br /&gt;
{&lt;br /&gt;
    if (tag.search(/\|\s*summary\s*=/) == -1)&lt;br /&gt;
        tag = tag.replace(/}}$/,&lt;br /&gt;
           &amp;quot;| summary=Boxes and lines diagram with &amp;quot; + count + &amp;quot; boxes}}&amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
        tag = tag.replace(/\d+(?= (boxes|nodes|individuals))/, count);&lt;br /&gt;
    return tag;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function istile (sym)&lt;br /&gt;
{&lt;br /&gt;
    return sym.length &amp;lt;= 1 ||&lt;br /&gt;
           Template == &amp;quot;chart&amp;quot; &amp;amp;&amp;amp; /^[a-z]2$/.test(sym);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function Tile(r,c)&lt;br /&gt;
{&lt;br /&gt;
    var a = get_tile(r,c);&lt;br /&gt;
    this.orig_sym = a[0];&lt;br /&gt;
    this.sides    = a[1].slice(0,4);   // copy vs ref&lt;br /&gt;
    this.weight   = a[1][4];&lt;br /&gt;
 &lt;br /&gt;
    // If edge is a line but next tile not same with &amp;gt; weight, change it&lt;br /&gt;
    // If edge is blank  but next tile is line with &amp;gt;= weight, change it&lt;br /&gt;
    //&lt;br /&gt;
    this.tweak = function (r,c,dir)&lt;br /&gt;
    {&lt;br /&gt;
        var neighbor = get_tile(r,c);&lt;br /&gt;
        var specs    = neighbor[1];&lt;br /&gt;
        var ne_line  = specs[dir ^ 2];&lt;br /&gt;
        var us_line  = this.sides[dir];&lt;br /&gt;
 &lt;br /&gt;
        if (us_line &amp;gt; 0  &amp;amp;&amp;amp; ne_line != us_line &amp;amp;&amp;amp; specs[4] &amp;gt; this.weight ||&lt;br /&gt;
            us_line == 0 &amp;amp;&amp;amp; ne_line &amp;gt; 0        &amp;amp;&amp;amp; specs[4] &amp;gt;= this.weight)&lt;br /&gt;
                this.sides[dir] = ne_line;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    this.symbol = function()&lt;br /&gt;
    {&lt;br /&gt;
        var ch = new_symbol[this.sides];&lt;br /&gt;
        if (ch == null || /[ :~!-]/.test(ch))&lt;br /&gt;
            ch = this.orig_sym;&lt;br /&gt;
        return ch;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function get_tile(r,c)&lt;br /&gt;
    {&lt;br /&gt;
        if (boxes[r][c])&lt;br /&gt;
            return [&amp;quot;BOX&amp;quot;, [0, 0, 0, 0, 20]];&lt;br /&gt;
        var ch  = rows[r].charAt(c);&lt;br /&gt;
        var ch2 = rows[r].charAt(c+1);&lt;br /&gt;
        if (/[ P_=~-]/.test(ch) &amp;amp;&amp;amp; /[^ [\]P_=~-]/.test(ch2))    // mis-aligned?&lt;br /&gt;
            ch = ch2;&lt;br /&gt;
        if (/\w/.test(ch) &amp;amp;&amp;amp; ch2 == &amp;#039;2&amp;#039;)              // {{chart}} long symbol?&lt;br /&gt;
            ch += &amp;#039;2&amp;#039;;&lt;br /&gt;
        if (ch == &amp;#039;|&amp;#039; || ch == &amp;#039;1&amp;#039;)&lt;br /&gt;
            ch = &amp;#039;!&amp;#039;;&lt;br /&gt;
        if (ch == &amp;#039;_&amp;#039; || ch == &amp;#039;=&amp;#039;)&lt;br /&gt;
            ch = &amp;#039;-&amp;#039;;&lt;br /&gt;
        var specs = symbols[ch] || [0, 0, 0, 0, 20];&lt;br /&gt;
 &lt;br /&gt;
        if (specs.length &amp;gt; 5 &amp;amp;&amp;amp; Template == &amp;quot;chart&amp;quot;)    // t, T, k, G&lt;br /&gt;
            specs = specs.slice(5);&lt;br /&gt;
 &lt;br /&gt;
        return [ch, specs];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//  Build reverse lookup table needed by Tile objects.&lt;br /&gt;
//  There is some conflict between the {{familytree}} and {{chart}} symbols.&lt;br /&gt;
//  A few recently-added symbols map to different specs, and some specs&lt;br /&gt;
//  map back to different symbols.  Hence the extra logic here depending&lt;br /&gt;
//  on the current Template family.&lt;br /&gt;
//&lt;br /&gt;
Tile.invert_symbols = function()&lt;br /&gt;
{&lt;br /&gt;
    new_symbol = {};&lt;br /&gt;
    var start = (Template == &amp;quot;chart&amp;quot;) ? -5 : 0;&lt;br /&gt;
 &lt;br /&gt;
    for (var sym in symbols) {&lt;br /&gt;
        var nesw = symbols[sym].slice(start,start+4).join();&lt;br /&gt;
        if (! (nesw in new_symbol) || Template == &amp;quot;chart&amp;quot;)&lt;br /&gt;
            new_symbol[nesw] = sym;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function toss (msg)            // Soft throw.&lt;br /&gt;
{&lt;br /&gt;
    if (Picky) throw msg;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// I haven&amp;#039;t tuned many of these weights yet.&lt;br /&gt;
// Hopefully we won&amp;#039;t need to go to per-edge weights.&lt;br /&gt;
//&lt;br /&gt;
//        Doubt:&lt;br /&gt;
//        0   space&lt;br /&gt;
//        1   ^ v ( )&lt;br /&gt;
//        2   - ! ~ :&lt;br /&gt;
//        3   + . , &amp;#039; ` / \ BOX&lt;br /&gt;
 &lt;br /&gt;
var new_symbol = {};&lt;br /&gt;
 &lt;br /&gt;
var symbols = {&lt;br /&gt;
//              N, E, S, W, Weight&lt;br /&gt;
        &amp;quot; &amp;quot; : [ 0, 0, 0, 0, 90 ],&lt;br /&gt;
        &amp;quot;-&amp;quot; : [ 0, 1, 0, 1, 50 ],&lt;br /&gt;
        &amp;quot;!&amp;quot; : [ 1, 0, 1, 0, 50 ],&lt;br /&gt;
        &amp;quot;+&amp;quot; : [ 1, 1, 1, 1, 20 ],&lt;br /&gt;
        &amp;quot;,&amp;quot; : [ 0, 1, 1, 0, 20 ],&lt;br /&gt;
        &amp;quot;.&amp;quot; : [ 0, 0, 1, 1, 20 ],&lt;br /&gt;
        &amp;quot;`&amp;quot; : [ 1, 1, 0, 0, 20 ],&lt;br /&gt;
        &amp;quot;&amp;#039;&amp;quot; : [ 1, 0, 0, 1, 20 ],&lt;br /&gt;
        &amp;quot;^&amp;quot; : [ 1, 1, 0, 1, 70 ],&lt;br /&gt;
        &amp;quot;v&amp;quot; : [ 0, 1, 1, 1, 70 ],&lt;br /&gt;
        &amp;quot;(&amp;quot; : [ 1, 0, 1, 1, 70 ],&lt;br /&gt;
        &amp;quot;)&amp;quot; : [ 1, 1, 1, 0, 70 ],&lt;br /&gt;
        &amp;quot;~&amp;quot; : [ 0, 2, 0, 2, 50 ],&lt;br /&gt;
        &amp;quot;:&amp;quot; : [ 2, 0, 2, 0, 50 ],&lt;br /&gt;
        &amp;quot;%&amp;quot; : [ 2, 2, 2, 2, 20 ],&lt;br /&gt;
        &amp;quot;F&amp;quot; : [ 0, 2, 2, 0, 20 ],&lt;br /&gt;
        &amp;quot;7&amp;quot; : [ 0, 0, 2, 2, 20 ],&lt;br /&gt;
        &amp;quot;L&amp;quot; : [ 2, 2, 0, 0, 20 ],&lt;br /&gt;
        &amp;quot;J&amp;quot; : [ 2, 0, 0, 2, 20 ],&lt;br /&gt;
        &amp;quot;A&amp;quot; : [ 2, 2, 0, 2, 70 ],&lt;br /&gt;
        &amp;quot;V&amp;quot; : [ 0, 2, 2, 2, 70 ],&lt;br /&gt;
        &amp;quot;C&amp;quot; : [ 2, 0, 2, 2, 70 ],&lt;br /&gt;
        &amp;quot;D&amp;quot; : [ 2, 2, 2, 0, 70 ],&lt;br /&gt;
        &amp;quot;*&amp;quot; : [ 2, 1, 2, 1, 51 ],&lt;br /&gt;
        &amp;quot;#&amp;quot; : [ 1, 2, 1, 2, 51 ],   // don&amp;#039;t tweak ---#---&lt;br /&gt;
        &amp;quot;h&amp;quot; : [ 1, 2, 0, 2, 33 ],&lt;br /&gt;
        &amp;quot;y&amp;quot; : [ 0, 2, 1, 2, 33 ],&lt;br /&gt;
        &amp;quot;{&amp;quot; : [ 2, 0, 2, 1, 33 ],&lt;br /&gt;
        &amp;quot;}&amp;quot; : [ 2, 1, 2, 0, 33 ],&lt;br /&gt;
        &amp;quot;t&amp;quot; : [ 2, 1, 0, 1, 33,   1, 2, 1, 2, 51 ],&lt;br /&gt;
        &amp;quot;[&amp;quot; : [ 1, 0, 1, 2, 33 ],&lt;br /&gt;
        &amp;quot;]&amp;quot; : [ 1, 2, 1, 0, 33 ],&lt;br /&gt;
        &amp;quot;X&amp;quot; : [ 2, 1, 2, 2, 33 ],&lt;br /&gt;
        &amp;quot;T&amp;quot; : [ 0, 1, 2, 2, 33,   0, 0, 3, 3, 20 ],&lt;br /&gt;
        &amp;quot;K&amp;quot; : [ 2, 0, 1, 2, 33 ],&lt;br /&gt;
        &amp;quot;k&amp;quot; : [ 1, 0, 2, 2, 33,   3, 1, 3, 0, 33 ],&lt;br /&gt;
        &amp;quot;G&amp;quot; : [ 2, 2, 1, 0, 33,   3, 0, 3, 3, 70 ],&lt;br /&gt;
              // chart&lt;br /&gt;
        &amp;quot;P&amp;quot; : [ 0, 3, 0, 3, 50 ],&lt;br /&gt;
        &amp;quot;Q&amp;quot; : [ 3, 0, 3, 0, 50 ],&lt;br /&gt;
        &amp;quot;R&amp;quot; : [ 3, 3, 3, 3, 20 ],&lt;br /&gt;
        &amp;quot;S&amp;quot; : [ 0, 3, 3, 0, 20 ],&lt;br /&gt;
        &amp;quot;Y&amp;quot; : [ 3, 3, 0, 0, 20 ],&lt;br /&gt;
        &amp;quot;Z&amp;quot; : [ 3, 0, 0, 3, 20 ],&lt;br /&gt;
        &amp;quot;W&amp;quot; : [ 3, 3, 0, 3, 70 ],&lt;br /&gt;
        &amp;quot;M&amp;quot; : [ 0, 3, 3, 3, 70 ],&lt;br /&gt;
        &amp;quot;H&amp;quot; : [ 3, 3, 3, 0, 70 ],&lt;br /&gt;
        &amp;quot;c&amp;quot; : [ 2, 0, 2, 1, 33 ],&lt;br /&gt;
        &amp;quot;d&amp;quot; : [ 2, 1, 2, 0, 33 ],&lt;br /&gt;
        &amp;quot;i&amp;quot; : [ 2, 1, 0, 1, 33 ],&lt;br /&gt;
        &amp;quot;j&amp;quot; : [ 0, 1, 2, 1, 33 ],&lt;br /&gt;
        &amp;quot;e&amp;quot; : [ 1, 0, 1, 2, 33 ],&lt;br /&gt;
        &amp;quot;f&amp;quot; : [ 1, 2, 1, 0, 33 ],&lt;br /&gt;
        &amp;quot;a&amp;quot; : [ 3, 1, 3, 1, 51 ],&lt;br /&gt;
        &amp;quot;b&amp;quot; : [ 1, 3, 1, 3, 51 ],   // don&amp;#039;t tweak ---b---&lt;br /&gt;
        &amp;quot;l&amp;quot; : [ 3, 0, 3, 1, 33 ],&lt;br /&gt;
        &amp;quot;m&amp;quot; : [ 0, 3, 1, 3, 33 ],&lt;br /&gt;
        &amp;quot;n&amp;quot; : [ 1, 3, 0, 3, 33 ],&lt;br /&gt;
        &amp;quot;o&amp;quot; : [ 1, 3, 1, 0, 33 ],&lt;br /&gt;
        &amp;quot;p&amp;quot; : [ 1, 0, 1, 3, 33 ],&lt;br /&gt;
        &amp;quot;q&amp;quot; : [ 3, 1, 0, 1, 33 ],&lt;br /&gt;
        &amp;quot;r&amp;quot; : [ 0, 1, 3, 1, 33 ],&lt;br /&gt;
       &amp;quot;a2&amp;quot; : [ 3, 2, 3, 2, 54 ],&lt;br /&gt;
       &amp;quot;b2&amp;quot; : [ 2, 3, 2, 3, 54 ],&lt;br /&gt;
       &amp;quot;k2&amp;quot; : [ 3, 2, 3, 0, 44 ],&lt;br /&gt;
       &amp;quot;l2&amp;quot; : [ 3, 0, 3, 2, 44 ],&lt;br /&gt;
       &amp;quot;m2&amp;quot; : [ 0, 3, 2, 3, 44 ],&lt;br /&gt;
       &amp;quot;n2&amp;quot; : [ 2, 3, 0, 3, 44 ],&lt;br /&gt;
       &amp;quot;o2&amp;quot; : [ 2, 3, 2, 0, 44 ],&lt;br /&gt;
       &amp;quot;p2&amp;quot; : [ 2, 0, 2, 3, 44 ],&lt;br /&gt;
       &amp;quot;q2&amp;quot; : [ 3, 2, 0, 2, 44 ],&lt;br /&gt;
       &amp;quot;r2&amp;quot; : [ 0, 2, 3, 2, 44 ]&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
window.wiki2art = wiki2art;     // expose to HTML link&lt;br /&gt;
window.art2wiki = art2wiki;&lt;br /&gt;
 &lt;br /&gt;
if (document.editform) {&lt;br /&gt;
    var textbox = document.editform.wpTextbox1;&lt;br /&gt;
    var res = textbox.value.match(/\{\{(familytree|chart)\/start[\S\s]*\{\{\w+\/end/i);&lt;br /&gt;
    if (res) {&lt;br /&gt;
        Template = res[1];&lt;br /&gt;
        if (res[0].search(/^\s*\{\{(familytree|chart)\s*\|/mi) &amp;gt; 0)&lt;br /&gt;
            update_menu (&amp;quot;wiki2art&amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
            update_menu (&amp;quot;art2wiki&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
} );    // end of script and addOnloadHook() wrapper&lt;/div&gt;</summary>
		<author><name>Martinbrandt</name></author>
		
	</entry>
</feed>