<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://candypedia.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ABooks</id>
	<title>Module:Books - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://candypedia.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ABooks"/>
	<link rel="alternate" type="text/html" href="https://candypedia.wiki/index.php?title=Module:Books&amp;action=history"/>
	<updated>2026-05-06T10:22:22Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.0</generator>
	<entry>
		<id>https://candypedia.wiki/index.php?title=Module:Books&amp;diff=2921&amp;oldid=prev</id>
		<title>SuitCase: modularising books too</title>
		<link rel="alternate" type="text/html" href="https://candypedia.wiki/index.php?title=Module:Books&amp;diff=2921&amp;oldid=prev"/>
		<updated>2025-04-24T00:51:56Z</updated>

		<summary type="html">&lt;p&gt;modularising books too&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define the book groups and their entries&lt;br /&gt;
p.groups = {&lt;br /&gt;
    {&lt;br /&gt;
        name = &amp;quot;Volumes&amp;quot;,&lt;br /&gt;
        list = {&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Volume One|Volume One&amp;quot;,&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Starting Over|Starting Over (Volume Two)&amp;quot;,&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Volume Three|Volume Three&amp;quot;,&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Volume Four|Volume Four&amp;quot;,&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Volume Five|Volume Five&amp;quot;,&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Volume Six|Volume Six&amp;quot;,&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Volume Seven|Volume Seven&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        name = &amp;quot;Other books&amp;quot;,&lt;br /&gt;
        list = {&lt;br /&gt;
            &amp;quot;Bittersweet Candy Bowl: Omnibus 1|Omnibus 1&amp;quot;,&lt;br /&gt;
            &amp;quot;Ask Roseville High (book)|Ask Roseville High&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Render a collapsible navbox for the books&lt;br /&gt;
function p.renderNav(frame)&lt;br /&gt;
    local state = frame.args.state or &amp;quot;autocollapse&amp;quot;&lt;br /&gt;
    local args = {&lt;br /&gt;
        &amp;quot;{{Navbox&amp;quot;,&lt;br /&gt;
        &amp;quot;| name      = Books&amp;quot;,&lt;br /&gt;
        &amp;quot;| title     = Books&amp;quot;,&lt;br /&gt;
        &amp;quot;| state     = &amp;quot; .. state,&lt;br /&gt;
        &amp;quot;| listclass = hlist&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for i, grp in ipairs(p.groups) do&lt;br /&gt;
        table.insert(args, &amp;quot;| group&amp;quot; .. i .. &amp;quot; = &amp;quot; .. grp.name)&lt;br /&gt;
        local items = {}&lt;br /&gt;
        for _, entry in ipairs(grp.list) do&lt;br /&gt;
            local parts = mw.text.split(entry, &amp;quot;|&amp;quot;, true)&lt;br /&gt;
            local target = parts[1]&lt;br /&gt;
            local label  = parts[2] or parts[1]&lt;br /&gt;
            table.insert(items, &amp;quot;* [[&amp;quot; .. target .. &amp;quot;|&amp;quot; .. label .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(args, &amp;quot;| list&amp;quot; .. i .. &amp;quot; =\n&amp;quot; .. table.concat(items, &amp;quot;\n&amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.insert(args, &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return frame:preprocess(table.concat(args, &amp;quot;\n&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render a plain list of books grouped into sections&lt;br /&gt;
function p.renderList(frame)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, grp in ipairs(p.groups) do&lt;br /&gt;
        table.insert(out, &amp;quot;== &amp;quot; .. grp.name .. &amp;quot; ==\n&amp;quot;)&lt;br /&gt;
        table.insert(out, &amp;#039;&amp;lt;div style=&amp;quot;column-count:3; column-gap:2em;&amp;quot;&amp;gt;\n&amp;#039;)&lt;br /&gt;
        for _, entry in ipairs(grp.list) do&lt;br /&gt;
            local parts = mw.text.split(entry, &amp;quot;|&amp;quot;, true)&lt;br /&gt;
            local target = parts[1]&lt;br /&gt;
            local label  = parts[2] or parts[1]&lt;br /&gt;
            table.insert(out, &amp;quot;* [[&amp;quot; .. target .. &amp;quot;|&amp;quot; .. label .. &amp;quot;]]\n&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SuitCase</name></author>
	</entry>
</feed>