<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=MyWiki%3AWikiProject_User_scripts%2FScripts%2FTwoColumns.js</id>
	<title>MyWiki:WikiProject User scripts/Scripts/TwoColumns.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=MyWiki%3AWikiProject_User_scripts%2FScripts%2FTwoColumns.js"/>
	<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=MyWiki:WikiProject_User_scripts/Scripts/TwoColumns.js&amp;action=history"/>
	<updated>2026-04-22T14:49:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://70.231.62.181/index.php?title=MyWiki:WikiProject_User_scripts/Scripts/TwoColumns.js&amp;diff=9585422&amp;oldid=prev</id>
		<title>imported&gt;Mr. Stradivarius: Protected &quot;Wikipedia:WikiProject User scripts/Scripts/TwoColumns.js&quot;: used in user scripts; should not be openly editable ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))</title>
		<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=MyWiki:WikiProject_User_scripts/Scripts/TwoColumns.js&amp;diff=9585422&amp;oldid=prev"/>
		<updated>2021-12-04T12:16:07Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/WikiProject_User_scripts/Scripts/TwoColumns.js&quot; class=&quot;extiw&quot; title=&quot;wikipedia:WikiProject User scripts/Scripts/TwoColumns.js&quot;&gt;Wikipedia:WikiProject User scripts/Scripts/TwoColumns.js&lt;/a&gt;&amp;quot;: used in user scripts; &lt;a href=&quot;https://en.wikipedia.org/wiki/User_scripts#A_word_about_security&quot; class=&quot;extiw&quot; title=&quot;wikipedia:User scripts&quot;&gt;should not be openly editable&lt;/a&gt; ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* TwoColumns, version [0.0.5]&lt;br /&gt;
Documentation: Wikipedia:WikiProject User scripts/Scripts/TwoColumns&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
if (mw.config.get(&amp;#039;wgAction&amp;#039;) == &amp;#039;view&amp;#039; &amp;amp;&amp;amp; mw.config.get(&amp;#039;wgCanonicalNamespace&amp;#039;)==&amp;#039;&amp;#039;)  addOnloadHook(fr_format)&lt;br /&gt;
&lt;br /&gt;
var fr_columns;&lt;br /&gt;
var imgRegExp= /(thumb|frame)/i;&lt;br /&gt;
var trashNodes;&lt;br /&gt;
function fr_format() {&lt;br /&gt;
     fr_addButton();&lt;br /&gt;
     fr_columns=fr_getCookie (&amp;#039;fr_columns&amp;#039;); if (! (0&amp;lt;1*fr_columns)) fr_columns=1;&lt;br /&gt;
     trashNodes=new Array;&lt;br /&gt;
     if (fr_columns==1) return;&lt;br /&gt;
     var bodyContent= document.getElementById(&amp;#039;bodyContent&amp;#039;);&lt;br /&gt;
     if (! bodyContent || ! bodyContent.innerHTML || bodyContent.innerHTML==&amp;#039;&amp;#039;) return;&lt;br /&gt;
&lt;br /&gt;
     var allNodes=bodyContent.childNodes;&lt;br /&gt;
     var group=new Array, node, groupArea=0;&lt;br /&gt;
     for (var i = allNodes.length-1; 0 &amp;lt;= i; i--) {&lt;br /&gt;
       node=allNodes[i];&lt;br /&gt;
       var pre= node.tagName==&amp;quot;PRE&amp;quot; || (node.tagName==&amp;quot;DIV&amp;quot; &amp;amp;&amp;amp; node.childNodes[1] &amp;amp;&amp;amp; node.childNodes[1].tagName==&amp;#039;PRE&amp;#039;) &lt;br /&gt;
       if (node.nodeValue &amp;amp;&amp;amp; node.nodeValue.substr(0,1)==&amp;quot;\n&amp;quot;) {&lt;br /&gt;
&lt;br /&gt;
//       } else if (node.tagName==&amp;quot;p&amp;quot; || node.tagName==&amp;quot;P&amp;quot; || node.tagName==&amp;quot;ul&amp;quot; || node.tagName==&amp;quot;UL&amp;quot; ) {&lt;br /&gt;
       } else if (node.tagName &amp;amp;&amp;amp; node.tagName.substr(0,1) !=&amp;quot;H&amp;quot; &amp;amp;&amp;amp; node.tagName.substr(0,5) !=&amp;quot;TABLE&amp;quot; &amp;amp;&amp;amp; node.tagName.substr(0,5) !=&amp;quot;SCRIPT&amp;quot; &amp;amp;&amp;amp; node.style.MozColumnCount&amp;lt;=0 &amp;amp;&amp;amp; ! pre) { //everything but H&lt;br /&gt;
         group.push(node);&lt;br /&gt;
         groupArea += node.clientHeight * node.clientWidth;&lt;br /&gt;
       } else {&lt;br /&gt;
          if (node.tagName &amp;amp;&amp;amp; node.tagName.substr(0,1) ==&amp;quot;H&amp;quot;) {&lt;br /&gt;
            var prevNode=node;&lt;br /&gt;
            var count=0;&lt;br /&gt;
            do {&lt;br /&gt;
              do {&lt;br /&gt;
                prevNode=prevNode.previousSibling;count++;&lt;br /&gt;
              } while (prevNode &amp;amp;&amp;amp; (prevNode.clientHeight==0 || prevNode.clientHeight=== undefined));&lt;br /&gt;
              if (prevNode &amp;amp;&amp;amp; prevNode.className &amp;amp;&amp;amp; imgRegExp.test(prevNode.className)) {&lt;br /&gt;
                group.push(prevNode); i=i-count;count=0;&lt;br /&gt;
                groupArea += prevNode.clientHeight * prevNode.clientWidth;&lt;br /&gt;
              }&lt;br /&gt;
            } while (prevNode &amp;amp;&amp;amp; prevNode.className &amp;amp;&amp;amp; imgRegExp.test(prevNode.className))&lt;br /&gt;
         }&lt;br /&gt;
         if (0&amp;lt;group.length) fr_layoutDiv (group, groupArea);&lt;br /&gt;
         group=new Array; groupArea=0;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for (var i=trashNodes.length-1; 0&amp;lt;=i;i--) {&lt;br /&gt;
      trashNodes[i].parentNode.removeChild(trashNodes[i]);&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fr_layoutDiv (aGroup, groupArea) {&lt;br /&gt;
  var contentWidth=aGroup[0].parentNode.clientWidth;&lt;br /&gt;
  if (groupArea &amp;lt; 100 * contentWidth) return;&lt;br /&gt;
  var start=0, stop=aGroup.length-1;&lt;br /&gt;
  var pieces=Math.round(groupArea / (window.innerHeight * contentWidth)+0.5);&lt;br /&gt;
  var targetArea=groupArea/ pieces; &lt;br /&gt;
  var targetHeight= (pieces==1) ? window.innerHeight : targetArea / contentWidth;&lt;br /&gt;
  var divArea=0, first=true, imgHeight=0;&lt;br /&gt;
  for (var i = stop; 0 &amp;lt;= i; i--) {&lt;br /&gt;
     if (aGroup[i].className &amp;amp;&amp;amp; imgRegExp.test(aGroup[i].className)) {&lt;br /&gt;
       imgHeight +=aGroup[i].clientHeight;&lt;br /&gt;
     }&lt;br /&gt;
    divArea += aGroup[i].clientHeight * aGroup[i].clientWidth;&lt;br /&gt;
    if (targetArea &amp;lt; divArea || targetHeight &amp;lt; imgHeight) { &lt;br /&gt;
      fr_createDiv(aGroup, i+1,stop,fr_columns,first); &lt;br /&gt;
      first=false;&lt;br /&gt;
      stop=i; &lt;br /&gt;
       if (aGroup[i].className &amp;amp;&amp;amp; imgRegExp.test(aGroup[i].className)) {&lt;br /&gt;
         imgHeight =aGroup[i].clientHeight;&lt;br /&gt;
       } else {&lt;br /&gt;
         imgHeight =0;&lt;br /&gt;
       }&lt;br /&gt;
      divArea = aGroup[i].clientHeight * aGroup[i].clientWidth;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  if (0&amp;lt;=stop) {&lt;br /&gt;
    divArea=0;&lt;br /&gt;
    for (i=stop; 0&amp;lt;=i;i--) {&lt;br /&gt;
      divArea += aGroup[i].clientHeight * aGroup[i].clientWidth;&lt;br /&gt;
    }&lt;br /&gt;
    if (100 * contentWidth &amp;lt; divArea) fr_createDiv(aGroup,0,stop,fr_columns,first);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function fr_createDiv(aGroup, start, stop, columns, noHR) { // start, stop: inclusive, (counting in the Group !), e.g. 0..3&lt;br /&gt;
  if (stop&amp;lt;start) return;&lt;br /&gt;
  var newDiv = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
  newDiv.style.MozColumnCount=columns;&lt;br /&gt;
  newDiv.style.MozColumnGap=&amp;#039;2em&amp;#039;;&lt;br /&gt;
  newDiv.style.textAlign=&amp;#039;justify&amp;#039;;&lt;br /&gt;
  var tooBig=false;&lt;br /&gt;
  for (var i = stop; start &amp;lt;= i; i--) { // first append the thumb&lt;br /&gt;
      if (imgRegExp.test(aGroup[i].className)) {&lt;br /&gt;
        newNode=aGroup[i].cloneNode(true);&lt;br /&gt;
        newDiv.appendChild(newNode);&lt;br /&gt;
        if (imgRegExp.test(aGroup[i].className) &amp;amp;&amp;amp; aGroup[i].parentNode.clientWidth / columns &amp;lt; newNode.clientWidth) {&lt;br /&gt;
          tooBig=true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  for (var i = stop; start &amp;lt;= i; i--) {&lt;br /&gt;
      if (!imgRegExp.test(aGroup[i].className)) {&lt;br /&gt;
        newNode=aGroup[i].cloneNode(true);&lt;br /&gt;
        newDiv.appendChild(newNode)&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  if (window.innerHeight &amp;lt; newDiv.clientHeight || tooBig /* window.innerHeight-10 &amp;lt; imgHeight */) { // safety valve: too big &lt;br /&gt;
     return;&lt;br /&gt;
  }&lt;br /&gt;
  aGroup[start].parentNode.insertBefore(newDiv,aGroup[start]);&lt;br /&gt;
  if (!noHR) {&lt;br /&gt;
      var HR=document.createElement(&amp;#039;HR&amp;#039;);&lt;br /&gt;
      newDiv.parentNode.insertBefore(HR,newDiv);&lt;br /&gt;
  }&lt;br /&gt;
  for (var i = stop; start &amp;lt;= i; i--) { &lt;br /&gt;
      trashNodes.push(aGroup[i]); //newDiv.parentNode.removeChild(aGroup[i])&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Button to increment the number of columns&lt;br /&gt;
&lt;br /&gt;
function fr_addButton () {&lt;br /&gt;
    var node = document.getElementById(&amp;#039;p-personal&amp;#039;);&lt;br /&gt;
    if ( !node ) return null;&lt;br /&gt;
    node = node.getElementsByTagName( &amp;quot;ul&amp;quot; )[0];&lt;br /&gt;
    if ( !node ) return null;&lt;br /&gt;
&lt;br /&gt;
    var link = document.createElement( &amp;quot;img&amp;quot; );&lt;br /&gt;
  link.src= &amp;#039;http://upload.wikimedia.org/wikipedia/commons/f/f5/FastReader_logo.PNG&amp;#039;;&lt;br /&gt;
    link.appendChild( document.createTextNode( &amp;quot;FastReader&amp;quot; ) );&lt;br /&gt;
    link.onclick = function() {fr_next()};&lt;br /&gt;
&lt;br /&gt;
    var item = document.createElement( &amp;quot;li&amp;quot; );&lt;br /&gt;
    item.appendChild( link );&lt;br /&gt;
&lt;br /&gt;
    link.setAttribute( &amp;quot;title&amp;quot;, &amp;#039;FastReader&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
    node.appendChild( item );  // IE compatibility (?)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fr_next() {&lt;br /&gt;
  fr_columns= fr_columns % 2 +1;&lt;br /&gt;
  fr_setCookie(&amp;#039;fr_columns&amp;#039;, fr_columns);&lt;br /&gt;
  document.location.reload();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Cookie routines to save the number of columns&lt;br /&gt;
&lt;br /&gt;
function fr_getCookie (cookieName) {&lt;br /&gt;
&lt;br /&gt;
    var cookie = &amp;#039; &amp;#039; + document.cookie;&lt;br /&gt;
    var search = &amp;#039; &amp;#039; + cookieName + &amp;#039;=&amp;#039;;&lt;br /&gt;
    var cookieValue = &amp;#039;&amp;#039;;&lt;br /&gt;
    var offset = 0;&lt;br /&gt;
    var end = 0;&lt;br /&gt;
    offset = cookie.indexOf(search);&lt;br /&gt;
    if (offset != -1) {&lt;br /&gt;
        offset += search.length;&lt;br /&gt;
        end = cookie.indexOf(&amp;#039;;&amp;#039;, offset)&lt;br /&gt;
        if (end == -1) {&lt;br /&gt;
            end = cookie.length;&lt;br /&gt;
        }&lt;br /&gt;
        cookieValue = cookie.substring(offset, end);&lt;br /&gt;
        cookieValue = cookieValue.replace(/\\+/g, &amp;#039; &amp;#039;);&lt;br /&gt;
        cookieValue = decodeURIComponent(cookieValue);&lt;br /&gt;
    }&lt;br /&gt;
    return(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fr_setCookie (name, value) {&lt;br /&gt;
    var cookie = name + &amp;#039;=&amp;#039; + encodeURIComponent(value);&lt;br /&gt;
    var cookieExpire = new Date();&lt;br /&gt;
    expires = cookieExpire.setTime(cookieExpire.getTime() + 30 * 24 * 60 * 60 * 1000);&lt;br /&gt;
    expires = cookieExpire.toUTCString();&lt;br /&gt;
    cookie += &amp;#039;; expires=&amp;#039; + expires;&lt;br /&gt;
    document.cookie = cookie;&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>imported&gt;Mr. Stradivarius</name></author>
	</entry>
</feed>