]> source.dussan.org Git - redmine.git/commitdiff
Allows to move multiple columns in selection list (#18357).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 17 Nov 2014 22:57:40 +0000 (22:57 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 17 Nov 2014 22:57:40 +0000 (22:57 +0000)
Patch by Filou Centrinov.

git-svn-id: http://svn.redmine.org/redmine/trunk@13610 e93f8b46-1217-0410-a6f0-8f06a7374b81

public/javascripts/select_list_move.js

index c3a5d0a2b68fa763feb82145a285ce82f22ad7ba..a5687981f3a5ac1ca73f360d04897bde2ad65f64 100644 (file)
@@ -7,13 +7,16 @@ function addOption(theSel, theText, theValue) {
 }
 
 function swapOptions(theSel, index1, index2) {
-  var text, value;
+  var text, value, selected;
   text = theSel.options[index1].text;
   value = theSel.options[index1].value;
+  selected = theSel.options[index1].selected;
   theSel.options[index1].text = theSel.options[index2].text;
   theSel.options[index1].value = theSel.options[index2].value;
+  theSel.options[index1].selected = theSel.options[index2].selected;
   theSel.options[index2].text = text;
   theSel.options[index2].value = value;
+  theSel.options[index2].selected = selected;
 }
 
 function deleteOption(theSel, theIndex) {
@@ -44,40 +47,54 @@ function moveOptions(theSelFrom, theSelTo) {
 }
 
 function moveOptionUp(theSel) {
-  var index = theSel.selectedIndex;
-  if (index > 0) {
-    swapOptions(theSel, index-1, index);
-    theSel.selectedIndex = index-1;
+  var indexTop = 0;
+  for(var s=0; s<theSel.length; s++) {
+    if (theSel.options[s].selected) {
+      if (s > indexTop) {
+        swapOptions(theSel, s-1, s);
+      }
+      indexTop++;
+    }
   }
 }
 
 function moveOptionTop(theSel) {
-  var index = theSel.selectedIndex;
-
-  if (index > 0) {
-    for (i=index; i>0; i--) {
-      swapOptions(theSel, i-1, i);
+  var indexTop = 0;
+  for(var s=0; s<theSel.length; s++) {
+    if (theSel.options[s].selected) {
+      if (s > indexTop) {
+        for (var i=s; i>indexTop; i--) {
+          swapOptions(theSel, i-1, i);
+        }
+      }
+      indexTop++;
     }
-    theSel.selectedIndex = 0;
   }
 }
 
 function moveOptionDown(theSel) {
-  var index = theSel.selectedIndex;
-  if (index < theSel.length - 1) {
-    swapOptions(theSel, index, index+1);
-    theSel.selectedIndex = index+1;
+  var indexBottom = theSel.length - 1;
+  for(var s=indexBottom; s>=0; s--) {
+    if (theSel.options[s].selected) {
+      if (s < indexBottom) {
+        swapOptions(theSel, s+1, s);
+      }
+      indexBottom--;
+    }
   }
 }
 
 function moveOptionBottom(theSel) {
-  var index = theSel.selectedIndex;
-  var indexTop = theSel.length - 1;
-  if (index < theSel.length - 1) {
-    for (i=index; i<indexTop; i++) {
-      swapOptions(theSel, i+1, i);
+  var indexBottom = theSel.length - 1;
+  for(var s=indexBottom; s>=0; s--) {
+    if (theSel.options[s].selected) {
+      if (s < indexBottom) {
+        for (i=s; i<indexBottom; i++) {
+          swapOptions(theSel, i+1, i);
+        }
+      }
+      indexBottom--;
     }
-    theSel.selectedIndex = indexTop;
   }
 }