<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mechsploit.me/index.php?action=history&amp;feed=atom&amp;title=Module%3AChessBowserPrototype</id>
	<title>Module:ChessBowserPrototype - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mechsploit.me/index.php?action=history&amp;feed=atom&amp;title=Module%3AChessBowserPrototype"/>
	<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:ChessBowserPrototype&amp;action=history"/>
	<updated>2026-04-08T15:54:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:ChessBowserPrototype&amp;diff=282&amp;oldid=prev</id>
		<title>MechsploWikiSysop: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:ChessBowserPrototype&amp;diff=282&amp;oldid=prev"/>
		<updated>2025-09-02T02:50:19Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:50, 1 September 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:ChessBowserPrototype&amp;diff=281&amp;oldid=prev</id>
		<title>mw&gt;קיפודנחש: experiment</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:ChessBowserPrototype&amp;diff=281&amp;oldid=prev"/>
		<updated>2020-02-03T16:56:28Z</updated>

		<summary type="html">&lt;p&gt;experiment&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local function build_notation_span(notation, plynum, current)&lt;br /&gt;
	local class = plynum and &amp;quot;pgn-movelink&amp;quot; or &amp;quot;pgn-steplink&amp;quot;&lt;br /&gt;
	if current then class = class .. &amp;quot; pgn-current-move&amp;quot; end&lt;br /&gt;
	local data = plynum and &amp;#039;data-ply=&amp;#039; .. plynum or &amp;#039;&amp;#039;&lt;br /&gt;
	notation = mw.ustring.gsub(notation, &amp;#039;-&amp;#039;, &amp;#039;‑&amp;#039;) -- replace hyphens with non-breaלing hyphens, so results (like 1-0) and castling won&amp;#039;t break&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span class=&amp;quot;%s&amp;quot;%s&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, class, data, notation)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function move_of(notation) &lt;br /&gt;
	if not notation then return end&lt;br /&gt;
	local move = tonumber(string.sub(notation, 1, -2))&lt;br /&gt;
	if not move then return end&lt;br /&gt;
	local col = string.sub(notation, -1)&lt;br /&gt;
	local extra = 0&lt;br /&gt;
	if col == &amp;#039;l&amp;#039; then extra = 1 elseif col ~= &amp;#039;d&amp;#039; then return end&lt;br /&gt;
	return move * 2 - extra&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function piecediv( piece, row, file, res )&lt;br /&gt;
	local color = piece:match( &amp;#039;%u&amp;#039; ) and &amp;#039;l&amp;#039; or &amp;#039;d&amp;#039;&lt;br /&gt;
	piece = piece:lower()&lt;br /&gt;
	table.insert( res, string.format(&amp;#039;&amp;lt;div class=&amp;quot;pgn-chessPiece pgn-ptype-color-%s%s pgn-prow-%d pgn-pfile-%d&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;, piece, color, 7-row, file) )&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
local function pieces_of_fen(fen)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local row = 0&lt;br /&gt;
	if not fen then return end&lt;br /&gt;
	for srow in string.gmatch(&amp;quot;/&amp;quot; .. fen, &amp;quot;/%w+&amp;quot;) do&lt;br /&gt;
		local file = 0&lt;br /&gt;
		for piece in srow:gmatch( &amp;quot;%w&amp;quot; ) do -- if a digit, increment &amp;quot;file&amp;quot; by the digit. else, add the piece _and_ increment file by 1&lt;br /&gt;
			file = file + ( piece:match(&amp;quot;%d&amp;quot;) or piecediv( piece, row, file, result ) or 1 )&lt;br /&gt;
		end&lt;br /&gt;
		row = row + 1&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function demo(frame)&lt;br /&gt;
	local pgn = frame.args.pgn&lt;br /&gt;
	if not pgn then error(&amp;#039;no valid pgn found&amp;#039;) end&lt;br /&gt;
	local parser = require(&amp;#039;Module:Parse-pgn&amp;#039;)&lt;br /&gt;
	local fens, plys, notations, metadata = parser.parsePgn(pgn)&lt;br /&gt;
	local display_board = move_of(frame.args.display) or #fens - 1&lt;br /&gt;
	local passToScript = {&lt;br /&gt;
		fen = fens[1],&lt;br /&gt;
		plys = plys,&lt;br /&gt;
		metadata = metadata,&lt;br /&gt;
		display = display_board,&lt;br /&gt;
	}&lt;br /&gt;
	local baseTemp = [[&lt;br /&gt;
	&amp;lt;div class=&amp;quot;pgnviewer&amp;quot; data-chess = &amp;#039; $passToScript &amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;table class=&amp;quot;mw-collapsible mw-collapsed pgn-metadata-table&amp;quot; style=&amp;quot;margin:auto;text-align:left;&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;th colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&amp;gt;Game Details&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		$metadataRows&lt;br /&gt;
		&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;pgn-notations&amp;quot; style=&amp;quot;scroll-behavior:smooth;&amp;quot;&amp;gt;&lt;br /&gt;
		$notations&lt;br /&gt;
 	&amp;lt;/div&amp;gt;     &lt;br /&gt;
 	&amp;lt;div class=&amp;quot;pgn-board-div&amp;quot; style=&amp;quot;width: 348px; height: 348px;&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-board-img&amp;quot; style=&amp;quot;position: absolute; left: 20px; top: 20px; width: 308px; height: 308px;&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-chessPiece pgn-ply-source&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         $pieces&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;pgn-row-legend pgn-row-left&amp;quot; style=&amp;quot;top:20px;height:308px;width:20px;&amp;quot;&amp;gt;$rowLegends&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;pgn-row-legend pgn-row-right&amp;quot; style=&amp;quot;top:20px;left:328px;height:308px;width:20px;&amp;quot;&amp;gt;$rowLegends&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;pgn-file-legend pgn-file-top&amp;quot; style=&amp;quot;left:20px;width:308px;height:20px;&amp;quot;&amp;gt;$fileLegends&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;pgn-file-legend pgn-file-bottom&amp;quot; style=&amp;quot;left:20px;top:328px;width:308px;height:20px;&amp;quot;&amp;gt;$fileLegends&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pgn-controls&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-tostart&amp;quot; title=&amp;quot;Go to initial position&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-retreat&amp;quot; title=&amp;quot;Previous&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-slower&amp;quot; title=&amp;quot;Slower (autoplay)&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-play&amp;quot; title=&amp;quot;Autoplay/Pause&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-faster&amp;quot; title=&amp;quot;Faster (autoplay)&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-advance&amp;quot; title=&amp;quot;Next&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-toend&amp;quot; title=&amp;quot;Go to final position&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-flip&amp;quot; title=&amp;quot;Flip to view board from Black or White poit of view&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
         $comments&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pgn-nojs-message&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
To see the game interactively, enable Javascript for your browser&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
]]&lt;br /&gt;
	local file_letters = { [0] = &amp;quot;a&amp;quot;, [1] = &amp;quot;b&amp;quot;, [2] = &amp;quot;c&amp;quot;, [3] = &amp;quot;d&amp;quot;, [4] = &amp;quot;e&amp;quot;, [5] = &amp;quot;f&amp;quot;, [6] = &amp;quot;g&amp;quot;, [7] = &amp;quot;h&amp;quot; }&lt;br /&gt;
	local rowlegends, filelegends = &amp;#039;&amp;#039;, &amp;#039;&amp;#039;&lt;br /&gt;
	for r = 0 ,7 do&lt;br /&gt;
		rowlegends = string.format(&amp;#039;%s&amp;lt;span class=&amp;quot;pgn-row-legend pgn-prow-%d&amp;quot;&amp;gt;%d&amp;lt;/span&amp;gt;&amp;#039;, rowlegends, r, r + 1)&lt;br /&gt;
		filelegends = string.format(&amp;#039;%s&amp;lt;span class=&amp;quot;pgn-file-legend pgn-pfile-%d&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, filelegends, r, file_letters[r]) &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local notation_spans = { build_notation_span(&amp;#039;⚃&amp;#039;, 0) }&lt;br /&gt;
	for i, notation in ipairs(notations) do&lt;br /&gt;
		if i % 2 == 1 then&lt;br /&gt;
			table.insert(notation_spans, build_notation_span((i + 1) / 2 .. &amp;#039;.&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(notation_spans, build_notation_span(notation, i, i == display_board))&lt;br /&gt;
	end&lt;br /&gt;
	local pieces = pieces_of_fen(fens[display_board + 1])&lt;br /&gt;
	local metadataRows = {}&lt;br /&gt;
	mw.logObject(metadata)&lt;br /&gt;
	for mdt, mdv in pairs(metadata) do&lt;br /&gt;
		if mdt and mdv then&lt;br /&gt;
			mw.log(&amp;#039;token: &amp;#039;, mdt, &amp;#039; value: &amp;#039;, mdv)&lt;br /&gt;
			table.insert(metadataRows, &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039; .. mdt .. &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#039; .. mdv .. &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	mw.logObject(metadataRows)&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	local result = string.gsub(baseTemp, &amp;#039;$passToScript&amp;#039;, mw.text.jsonEncode(passToScript))&lt;br /&gt;
	result = string.gsub(result, &amp;#039;$rowLegends&amp;#039;, rowlegends)&lt;br /&gt;
	result = string.gsub(result, &amp;#039;$fileLegends&amp;#039;, filelegends)&lt;br /&gt;
	result = string.gsub(result, &amp;#039;$notations&amp;#039;, table.concat(notation_spans, &amp;#039; &amp;#039;))&lt;br /&gt;
	result = string.gsub(result, &amp;#039;$pieces&amp;#039;, table.concat(pieces))&lt;br /&gt;
	result = string.gsub(result, &amp;#039;$metadataRows&amp;#039;, table.concat(metadataRows))&lt;br /&gt;
	result = string.gsub(result, &amp;#039;$comments&amp;#039;, &amp;#039;&amp;#039;) -- N/A: create comments button if pgn contains comments:    &amp;lt;div class=&amp;quot;pgn-image-button pgn-image-button-off pgn-button-cc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	[&amp;#039;demo&amp;#039;] = demo,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>mw&gt;קיפודנחש</name></author>
	</entry>
</feed>