@@ -57,119 +57,150 @@
<div style="float:left">
<div class="text" style="padding: 0px 0px 6px;">${_('Choosen group members')}</div>
${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
<div id="remove_all_elements" style="cursor:pointer;text-align:center">
${_('Remove all elements')}
<img alt="remove" style="vertical-align:text-bottom" src="/images/icons/arrow_right.png"/>
</div>
<div style="float:left;width:20px;padding-top:50px">
<img alt="add" id="add_element"
style="padding:2px;cursor:pointer"
src="/images/icons/arrow_left.png"/>
<br />
<img alt="remove" id="remove_element"
src="/images/icons/arrow_right.png"/>
<div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
<div id="add_all_elements" style="cursor:pointer;text-align:center">
<img alt="add" style="vertical-align:text-bottom" src="/images/icons/arrow_left.png"/>
${_('Add all elements')}
</td>
</tr>
</table>
<div class="buttons">
${h.submit('save','save',class_="ui-button")}
${h.end_form()}
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function(){
var D = YAHOO.util.Dom;
var E = YAHOO.util.Event;
//definition of containers ID's
var available_container = 'available_members';
var selected_container = 'users_group_members';
//form containing containers id
var form_id = 'edit_users_group';
//temp container for selected storage.
var cache = new Array();
var av_cache = new Array();
var c = D.get(selected_container);
var ac = D.get(available_container);
//get only selected options for further fullfilment
for(var i = 0;node =c.options[i];i++){
if(node.selected){
//push selected to my temp storage left overs :)
cache.push(node);
}
//clear 'selected' select
c.options.length = 0;
//fill it with remembered options
for(var i = 0;node = cache[i];i++){
c.options[i]=new Option(node.text, node.value, false, false);
//get all available options to cache
for(var i = 0;node =ac.options[i];i++){
av_cache.push(node);
//fill available only with those not in choosen
ac.options.length=0;
tmp_cache = new Array();
for(var i = 0;node = av_cache[i];i++){
var add = true;
for(var i2 = 0;node_2 = cache[i2];i2++){
if(node.value == node_2.value){
add=false;
break;
if(add){
tmp_cache.push(new Option(node.text, node.value, false, false));
for(var i = 0;node = tmp_cache[i];i++){
ac.options[i] = node;
function prompts_action_callback(e){
var choosen = D.get(selected_container);
var available = D.get(available_container);
//get checked and unchecked options from field
function get_checked(from_field){
//temp container for storage.
var sel_cache = new Array();
var oth_cache = new Array();
for(var i = 0;node = from_field.options[i];i++){
//push selected fields :)
sel_cache.push(node);
else{
oth_cache.push(node)
return [sel_cache,oth_cache]
//fill the field with given options
function fill_with(field,options){
//clear firtst
field.options.length=0;
for(var i = 0;node = options[i];i++){
field.options[i]=new Option(node.text, node.value,
false, false);
//adds to current field
function add_to(field,options){
field.appendChild(new Option(node.text, node.value,
false, false));
// add action
if (this.id=='add_element'){
var c = get_checked(available);
add_to(choosen,c[0]);
fill_with(available,c[1]);
Status change: