Index: trunk/kernel/admin_templates/incs/script.js =================================================================== diff -u -r3299 -r3543 --- trunk/kernel/admin_templates/incs/script.js (.../script.js) (revision 3299) +++ trunk/kernel/admin_templates/incs/script.js (.../script.js) (revision 3543) @@ -464,11 +464,261 @@ { if ( $kf.elements[i].id.match($cb_mask) ) { -// alert('found:' + $kf.elements[i].id); if ($kf.elements[i].checked) $tmp += '|'+$kf.elements[i].value; } } if($tmp.length > 0) $tmp += '|'; document.getElementById($hidden_id).value = $tmp.replace(/,$/, ''); -// alert('field: '+$hidden_id+' = '+document.getElementById($hidden_id).value ); -} \ No newline at end of file +} + +// related to lists operations (moving) + + + + function move_selected($from_list, $to_list) + { + if (typeof($from_list) != 'object') $from_list = document.getElementById($from_list); + if (typeof($to_list) != 'object') $to_list = document.getElementById($to_list); + + if (has_selected_options($from_list)) + { + var $from_array = select_to_array($from_list); + var $to_array = select_to_array($to_list); + var $new_from = Array(); + var $cur = null; + + for (var $i = 0; $i < $from_array.length; $i++) + { + $cur = $from_array[$i]; + if ($cur[2]) // If selected - add to To array + { + $to_array[$to_array.length] = $cur; + } + else //Else - keep in new From + { + $new_from[$new_from.length] = $cur; + } + } + + $from_list = array_to_select($new_from, $from_list); + $to_list = array_to_select($to_array, $to_list); + } + else + { + alert('Please select items to perform moving!'); + } + } + + function select_to_array($aSelect) + { + var $an_array = new Array(); + var $cur = null; + + for (var $i = 0; $i < $aSelect.length; $i++) + { + $cur = $aSelect.options[$i]; + $an_array[$an_array.length] = new Array($cur.text, $cur.value, $cur.selected); + } + return $an_array; + } + + function array_to_select($anArray, $aSelect) + { + var $initial_length = $aSelect.length; + for (var $i = $initial_length - 1; $i >= 0; $i--) + { + $aSelect.options[$i] = null; + } + + for (var $i = 0; $i < $anArray.length; $i++) + { + $cur = $anArray[$i]; + $aSelect.options[$aSelect.length] = new Option($cur[0], $cur[1]); + } + } + + function select_compare($a, $b) + { + if ($a[0] < $b[0]) + return -1; + if ($a[0] > $b[0]) + return 1; + return 0; + } + + function select_to_string($aSelect) + { + var $result = ''; + var $cur = null; + + if (typeof($aSelect) != 'object') $aSelect = document.getElementById($aSelect); + + for (var $i = 0; $i < $aSelect.length; $i++) + { + $result += $aSelect.options[$i].value + '|'; + } + + return $result.length ? '|' + $result : ''; + } + + function selected_to_string($aSelect) + { + var $result = ''; + var $cur = null; + + if (typeof($aSelect) != 'object') $aSelect = document.getElementById($aSelect); + + for (var $i = 0; $i < $aSelect.length; $i++) + { + $cur = $aSelect.options[$i]; + if ($cur.selected && $cur.value != '') + { + $result += $cur.value + '|'; + } + } + + return $result.length ? '|' + $result : ''; + } + + function string_to_selected($str, $aSelect) + { + var $cur = null; + for (var $i = 0; i < $aSelect.length; $i++) + { + $cur = $aSelect.options[$i]; + $aSelect.options[$i].selected = $str.match(',' + $cur.value + ',') ? true : false; + } + } + + function set_selected($selected_options, $aSelect) + { + if (!$selected_options.length) return false; + + for (var $i = 0; $i < $aSelect.length; $i++) + { + for (var $k = 0; $k < $selected_options.length; $k++) + { + if ($aSelect.options[$i].value == $selected_options[$k]) + { + $aSelect.options[$i].selected = true; + } + } + } + } + + function get_selected_count($theList) + { + var $count = 0; + var $cur = null; + for (var $i = 0; $i < $theList.length; $i++) + { + $cur = $theList.options[$i]; + if ($cur.selected) $count++; + } + return $count; + } + + function get_selected_index($aSelect, $typeIndex) + { + var $index = 0; + for (var $i = 0; $i < $aSelect.length; $i++) + { + if ($aSelect.options[$i].selected) + { + $index = $i; + if ($typeIndex == 'firstSelected') break; + } + } + return $index; + } + + function has_selected_options($theList) + { + var $ret = false; + var $cur = null; + + for (var $i = 0; $i < $theList.length; $i++) + { + $cur = $theList.options[$i]; + if ($cur.selected) $ret = true; + } + return $ret; + } + + function select_sort($aSelect) + { + if (typeof($aSelect) != 'object') $aSelect = document.getElementById($aSelect); + + var $to_array = select_to_array($aSelect); + $to_array.sort(select_compare); + array_to_select($to_array, $aSelect); + } + + function move_options_up($aSelect, $interval) + { + if (typeof($aSelect) != 'object') $aSelect = document.getElementById($aSelect); + + if (has_selected_options($aSelect)) + { + var $selected_options = Array(); + var $first_selected = get_selected_index($aSelect, 'firstSelected'); + + for (var $i = 0; $i < $aSelect.length; $i++) + { + if ($aSelect.options[$i].selected && ($first_selected > 0) ) + { + swap_options($aSelect, $i, $i - $interval); + $selected_options[$selected_options.length] = $aSelect.options[$i - $interval].value; + } + else if ($first_selected == 0) + { + alert('Begin of list'); + break; + } + } + set_selected($selected_options, $aSelect); + } + else + { + alert('Check items from moving'); + } + } + + function move_options_down($aSelect, $interval) + { + if (typeof($aSelect) != 'object') $aSelect = document.getElementById($aSelect); + + if (has_selected_options($aSelect)) + { + var $last_selected = get_selected_index($aSelect, 'lastSelected'); + var $selected_options = Array(); + + for (var $i = $aSelect.length - 1; $i >= 0; $i--) + { + if ($aSelect.options[$i].selected && ($aSelect.length - ($last_selected + 1) > 0)) + { + swap_options($aSelect, $i, $i + $interval); + $selected_options[$selected_options.length] = $aSelect.options[$i + $interval].value; + } + else if ($last_selected + 1 == $aSelect.length) + { + alert('End of list'); + break; + } + } + set_selected($selected_options, $aSelect); + } + else + { + alert('Check items from moving'); + } + } + + function swap_options($aSelect, $src_num, $dst_num) + { + var $src_option = new Option($aSelect.options[$src_num].innerHTML, $aSelect.options[$src_num].value); + var $dst_option = new Option($aSelect.options[$dst_num].innerHTML, $aSelect.options[$dst_num].value); + + $aSelect.options[$src_num] = $dst_option; + $aSelect.options[$dst_num] = $src_option; + } \ No newline at end of file