<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.seculargames.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACheckboxLists.js</id>
	<title>MediaWiki:CheckboxLists.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.seculargames.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACheckboxLists.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.seculargames.org/index.php?title=MediaWiki:CheckboxLists.js&amp;action=history"/>
	<updated>2026-07-29T05:22:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.seculargames.org/index.php?title=MediaWiki:CheckboxLists.js&amp;diff=45794&amp;oldid=prev</id>
		<title>imported&gt;Loramin at 23:42, 21 April 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.seculargames.org/index.php?title=MediaWiki:CheckboxLists.js&amp;diff=45794&amp;oldid=prev"/>
		<updated>2021-04-21T23:42:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Set the visible &amp;quot;checked&amp;quot; state of the list items when the page loads&lt;br /&gt;
 */&lt;br /&gt;
var initializeCheckboxes = function() {&lt;br /&gt;
  var $checkboxLis = $(&amp;#039;.checkbox-list li&amp;#039;);&lt;br /&gt;
  var status = getStateByPage(&amp;#039;checkbox-status&amp;#039;) || {};&lt;br /&gt;
  Object.keys(status).forEach(function(key) {&lt;br /&gt;
    if (!status[key]) return;&lt;br /&gt;
&lt;br /&gt;
    var index = parseInt(key);&lt;br /&gt;
    if (index &amp;lt; 0) return; // A bogus index got set; ignore it&lt;br /&gt;
    $checkboxLis.eq(index).addClass(&amp;#039;checked&amp;#039;);&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/** Attach click handlers to the spans we added */&lt;br /&gt;
var listenForSpanClicks = function() {&lt;br /&gt;
  $(&amp;#039;.checkbox-list li span&amp;#039;).click(function(e) {&lt;br /&gt;
    if (e.originalTarget &amp;amp;&amp;amp; e.originalTarget !== e.target) return; // for &amp;lt;li&amp;gt;s nested in other &amp;lt;lis&amp;gt;&lt;br /&gt;
    if (e.target.tagName === &amp;#039;A&amp;#039;) return; // don&amp;#039;t prevent link clicks&lt;br /&gt;
    const $li = $(e.target).parent();&lt;br /&gt;
    toggleIsChecked($li);&lt;br /&gt;
    return false;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Both changes the DOM to make the item appear visibly checked, and updates&lt;br /&gt;
 * the &amp;quot;checked&amp;quot; status in local storage&lt;br /&gt;
 */&lt;br /&gt;
var toggleIsChecked = function($li) {&lt;br /&gt;
  var isChecked = !$li.is(&amp;#039;.checked&amp;#039;); // Clicks toggle checked status&lt;br /&gt;
&lt;br /&gt;
  $li.toggleClass(&amp;#039;checked&amp;#039;, isChecked);&lt;br /&gt;
  setCheckedStatus($li, isChecked);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 * Attach click handlers to the lis also, but only use them if the click was&lt;br /&gt;
 * on the left (checkbox) part&lt;br /&gt;
 */&lt;br /&gt;
var listenForLiClicks = function() {&lt;br /&gt;
  $(&amp;#039;.checkbox-list li&amp;#039;).click(function(e) {&lt;br /&gt;
    if (e.originalTarget &amp;amp;&amp;amp; e.originalTarget !== e.target) return; // for &amp;lt;li&amp;gt;s nested in other &amp;lt;lis&amp;gt;&lt;br /&gt;
    if (e.offsetX &amp;gt; 50) return&lt;br /&gt;
    var $target = $(e.target);&lt;br /&gt;
    toggleIsChecked($target);&lt;br /&gt;
    return false;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var wrapContentsInSpan = function($li) {&lt;br /&gt;
  return &amp;#039;&amp;lt;span&amp;gt;&amp;#039; + $li.html() + &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Wrap the contents of all checbox LIs in a span so that clicks only work&lt;br /&gt;
 * on the text, not on the LI&amp;#039;s entire (ie. page) width&lt;br /&gt;
 */&lt;br /&gt;
var addWrappingSpans = function() {&lt;br /&gt;
  $(&amp;#039;.checkbox-list li&amp;#039;)&lt;br /&gt;
    .map(function(i, li) { return $(li); })&lt;br /&gt;
    .each(function(i, $li) { $li.html(wrapContentsInSpan($li)); })&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets the status, in local storge, of the checkbox specified by the &lt;br /&gt;
 * provided index, to the providd &amp;quot;isChecked&amp;quot; boolean&lt;br /&gt;
 */&lt;br /&gt;
var setCheckedStatus = function($li, isChecked) {&lt;br /&gt;
  var index = $(&amp;#039;.checkbox-list li&amp;#039;).index($li);&lt;br /&gt;
  if (index &amp;lt; 0) return; // Don&amp;#039;t set index -1, it means something went wrong&lt;br /&gt;
&lt;br /&gt;
  var status = getStateByPage(&amp;#039;checkbox-status&amp;#039;) || {};&lt;br /&gt;
  status[index] = isChecked;&lt;br /&gt;
  setStateByPage(&amp;#039;checkbox-status&amp;#039;, status);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var setupCheckboxes = function() {&lt;br /&gt;
  addWrappingSpans();&lt;br /&gt;
  listenForSpanClicks();&lt;br /&gt;
  listenForLiClicks();&lt;br /&gt;
  initializeCheckboxes();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
setupCheckboxes();&lt;/div&gt;</summary>
		<author><name>imported&gt;Loramin</name></author>
	</entry>
</feed>