From ce770c2e79b084b70bdd09721fe725c3d0374ac5 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 27 Sep 2011 14:51:47 -0500 Subject: [PATCH] Don't leak nodeSelector --- .../frontend/public/javascript/gollum.js | 168 +++++++++--------- 1 file changed, 82 insertions(+), 86 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index 7205262f..2d832a9c 100755 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -1,5 +1,87 @@ // ua $(document).ready(function() { + var nodeSelector = { + node1: null, + node2: null, + + selectNodeRange: function( n1, n2 ) { + if ( nodeSelector.node1 && nodeSelector.node2 ) { + $('#wiki-history td.selected').removeClass('selected'); + nodeSelector.node1.addClass('selected'); + nodeSelector.node2.addClass('selected'); + + // swap the nodes around if they went in reverse + if ( nodeSelector.nodeComesAfter( nodeSelector.node1, + nodeSelector.node2 ) ) { + var n = nodeSelector.node1; + nodeSelector.node1 = nodeSelector.node2; + nodeSelector.node2 = n; + } + + var s = true; + var $nextNode = nodeSelector.node1.next(); + while ( $nextNode ) { + $nextNode.addClass('selected'); + if ( $nextNode[0] == nodeSelector.node2[0] ) { + break; + } + $nextNode = $nextNode.next(); + } + } + }, + + nodeComesAfter: function ( n1, n2 ) { + var s = false; + $(n1).prevAll().each(function() { + if ( $(this)[0] == $(n2)[0] ) { + s = true; + } + }); + return s; + }, + + checkNode: function( nodeCheckbox ) { + var $nodeCheckbox = nodeCheckbox; + var $node = $(nodeCheckbox).parent().parent(); + // if we're unchecking + if ( !$nodeCheckbox.is(':checked') ) { + + // remove the range, since we're breaking it + $('#wiki-history tr.selected').each(function() { + if ( $(this).find('td.checkbox input').is(':checked') ) { + return; + } + $(this).removeClass('selected'); + }); + + // no longer track this + if ( $node[0] == nodeSelector.node1[0] ) { + nodeSelector.node1 = null; + if ( nodeSelector.node2 ) { + nodeSelector.node1 = nodeSelector.node2; + nodeSelector.node2 = null; + } + } else if ( $node[0] == nodeSelector.node2[0] ) { + nodeSelector.node2 = null; + } + + } else { + if ( !nodeSelector.node1 ) { + nodeSelector.node1 = $node; + nodeSelector.node1.addClass('selected'); + } else if ( !nodeSelector.node2 ) { + // okay, we don't have a node 2 but have a node1 + nodeSelector.node2 = $node; + nodeSelector.node2.addClass('selected'); + nodeSelector.selectNodeRange( nodeSelector.node1, + nodeSelector.node2 ); + } else { + // we have two selected already + $nodeCheckbox[0].checked = false; + } + } + } + }; // ua detection if ($.browser.mozilla) { @@ -76,90 +158,4 @@ $(document).ready(function() { $('#gollum-revert-form').submit(); }); } - }); - -var nodeSelector = { - - node1: null, - node2: null, - - selectNodeRange: function( n1, n2 ) { - if ( nodeSelector.node1 && nodeSelector.node2 ) { - $('#wiki-history td.selected').removeClass('selected'); - nodeSelector.node1.addClass('selected'); - nodeSelector.node2.addClass('selected'); - - // swap the nodes around if they went in reverse - if ( nodeSelector.nodeComesAfter( nodeSelector.node1, - nodeSelector.node2 ) ) { - var n = nodeSelector.node1; - nodeSelector.node1 = nodeSelector.node2; - nodeSelector.node2 = n; - } - - var s = true; - var $nextNode = nodeSelector.node1.next(); - while ( $nextNode ) { - $nextNode.addClass('selected'); - if ( $nextNode[0] == nodeSelector.node2[0] ) { - break; - } - $nextNode = $nextNode.next(); - } - } - }, - - nodeComesAfter: function ( n1, n2 ) { - var s = false; - $(n1).prevAll().each(function() { - if ( $(this)[0] == $(n2)[0] ) { - s = true; - } - }); - return s; - }, - - checkNode: function( nodeCheckbox ) { - var $nodeCheckbox = nodeCheckbox; - var $node = $(nodeCheckbox).parent().parent(); - // if we're unchecking - if ( !$nodeCheckbox.is(':checked') ) { - - // remove the range, since we're breaking it - $('#wiki-history tr.selected').each(function() { - if ( $(this).find('td.checkbox input').is(':checked') ) { - return; - } - $(this).removeClass('selected'); - }); - - // no longer track this - if ( $node[0] == nodeSelector.node1[0] ) { - nodeSelector.node1 = null; - if ( nodeSelector.node2 ) { - nodeSelector.node1 = nodeSelector.node2; - nodeSelector.node2 = null; - } - } else if ( $node[0] == nodeSelector.node2[0] ) { - nodeSelector.node2 = null; - } - - } else { - if ( !nodeSelector.node1 ) { - nodeSelector.node1 = $node; - nodeSelector.node1.addClass('selected'); - } else if ( !nodeSelector.node2 ) { - // okay, we don't have a node 2 but have a node1 - nodeSelector.node2 = $node; - nodeSelector.node2.addClass('selected'); - nodeSelector.selectNodeRange( nodeSelector.node1, - nodeSelector.node2 ); - } else { - // we have two selected already - $nodeCheckbox[0].checked = false; - } - } - } - -};