From 3f727ea05aae7e2b69274046075b4d13feba2223 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Sun, 8 Dec 2013 20:44:11 +0100
Subject: [PATCH] =?utf8?q?Impl=C3=A9mentation=20de=20la=20s=C3=A9lection?=
 =?utf8?q?=20par=20range=20des=20cases=20=C3=A0=20cocher.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 skins/ajax_scripts/folder_contents_script.js | 32 +++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/skins/ajax_scripts/folder_contents_script.js b/skins/ajax_scripts/folder_contents_script.js
index 800a746..7edda7d 100644
--- a/skins/ajax_scripts/folder_contents_script.js
+++ b/skins/ajax_scripts/folder_contents_script.js
@@ -27,6 +27,7 @@ FolderDDropControler = function(listing, firstItemPos) {
 	this.listing = listing;
 	this.firstItemPos = firstItemPos;
 	this._updatePositions();
+	this.lastCBChecked = undefined;
 	var thisControler = this;
 	this.listing.onmousedown	= function(evt) {thisControler.drag(evt);};
 	this.listing.onmouseover	= function(evt) {thisControler.moveRow(evt);};
@@ -120,7 +121,7 @@ FolderDDropControler.prototype.drop =  function(evt){
 					   String(this.lastOverPosition - 1 + trim);
 
 			// reinitialize positions
-			this._updatePositions()
+			this._updatePositions();
 
 			// send request				
 			var req = new XMLHttpRequest();
@@ -142,8 +143,37 @@ FolderDDropControler.prototype.disableClickAfterDrop = function(evt) {
 };
 
 FolderDDropControler.prototype.selectCBRange = function(evt) {
+	var target = getTargetedObject(evt);
+	if (target.tagName === 'INPUT' && target.type === 'checkbox') {
+		evt = getEventObject(evt);
+		var shift = evt.shiftKey;
+		if (shift && this.lastCBChecked) {
+			var from = this.getCBIndex(this.lastCBChecked);
+			var to = this.getCBIndex(target);
+			var rows = this.listing.getElementsByTagName('TR');
+			var start = Math.min(from, to);
+			var stop = Math.max(from, to);
+			var i;
+			for (i=start ; i<stop ; i++ ) {
+				rows[i].getElementsByTagName('INPUT')[0].checked = true;
+			}
+		}
+		else if (target.checked) {
+			this.lastCBChecked = target;
+		}
+		else {
+			this.lastCBChecked = undefined;
+		}
+	}
 };
 
+FolderDDropControler.prototype.getCBIndex = function(cb) {
+	var row = cb.parentNode;
+	while(row.tagName !== 'TR') {
+		row = row.parentNode;
+	}
+	return row.pos - this.firstItemPos;
+};
 
 FolderDDropControler.prototype.reset = function() {
 	this.targetRow = null;
-- 
2.20.1