[isidorus-cvs] r40 - trunk/src/ajax/javascripts

Author: lgiessmann Date: Thu Jun 11 14:10:31 2009 New Revision: 40 Log: ajax-client: added a "player-remove"-handler for roles; fixed a problem with roles depending on otherrole-constraints by adding new roles depending on associationrole-constraints Modified: trunk/src/ajax/javascripts/datamodel.js Modified: trunk/src/ajax/javascripts/datamodel.js ============================================================================== --- trunk/src/ajax/javascripts/datamodel.js (original) +++ trunk/src/ajax/javascripts/datamodel.js Thu Jun 11 14:10:31 2009 @@ -1625,7 +1625,7 @@ for(var i = 0; i !== rolesToCheck.length; ++i) rolesToCheck[i].hideRemoveButton(); } - if(cardMax > rolesToCheck.length && rolesToCheck.length < lenPlayers){ + if(cardMax === "*" || cardMax > rolesToCheck.length && rolesToCheck.length < lenPlayers){ for(var i = 0; i !== rolesToCheck.length; ++i) rolesToCheck[i].showAddButton(); } else { @@ -1742,11 +1742,9 @@ var cleanedPlayers = cleanPlayers(players ? players : new Array(), usedPlayers); var role = new RoleC(null, roleType, cleanedPlayers, roleContainer.__arContainer__); var foundRpcs = getRolePlayerConstraintsForRole(roleType, roleContainer.__rolePlayerConstraints__); - alert("frpcs: " + foundRpcs.length); roleContainer.__setRoleChangePlayerHandler__(role, roleContainer.__arContainer__.__frames__, foundRpcs, null); roleContainer.__setARCAddHandler__(role, players, associationRoleConstraint); roleContainer.__setARCRemoveHandler__(role, associationRoleConstraint); - roleContainer.__error__.insert({"before" : role.getFrame()}); // --- removes the new role's selected item from all other existing roles for(var j = 0; j !== rolesToCheck.length; ++j){ @@ -1754,6 +1752,7 @@ } roleContainer.__arContainer__.__frames__[roleContainer.__arContainer__.__frames__.length - 2].getFrame().insert({"after" : role.getFrame()}); rolesToCheck.push(role); + roleContainer.__checkORCRoles__(role); } roleContainer.__checkARCButtons__(rolesToCheck, players, associationRoleConstraint); @@ -1764,9 +1763,43 @@ "__setARCRemoveHandler__" : function(role, associationRoleConstraint){ if(!role || !associationRoleConstraint) return; + var roleContainer = this; function removeHandler(myself){ - alert("myself: " + myself + "!!!"); + var cardMin = associationRoleConstraint.cardMin === 0 ? 1 : parseInt(associationRoleConstraint.cardMin); + var roleType = associationRoleConstraint.roleType.flatten(); + var rolesToCheck = new Array(); + for(var i = 0; i !== roleContainer.__arContainer__.__frames__.length; ++i){ + if(roleType.indexOf(roleContainer.__arContainer__.__frames__[i].getType()) !== -1) + rolesToCheck.push(roleContainer.__arContainer__.__frames__[i]); + } + // --- removes the role + if(cardMin < rolesToCheck.length){ + // --- gets the player which is selected by the role has to be removed + var player = null; + for(var i = 0; roleContainer.__rolePlayerConstraints__ && i !== roleContainer.__rolePlayerConstraints__.length; ++i){ + if(player !== null) break; + for(var j = 0; roleContainer.__rolePlayerConstraints__[i].players && j !== roleContainer.__rolePlayerConstraints__[i].players.length; ++j){ + if(roleContainer.__rolePlayerConstraints__[i].players[j].indexOf(role.getPlayer()) !== -1){ + player = roleContainer.__rolePlayerConstraints__[i].players[j]; + break; + } + } + } + rolesToCheck = rolesToCheck.without(role); + role.remove(); + roleContainer.__arContainer__.__frames__ = roleContainer.__arContainer__.__frames__.without(role); + + // --- adds the player which was selected by the removed role to all other + // --- existing roles of the same type + for(var i = 0; i !== rolesToCheck.length; ++i){ + rolesToCheck[i].addPlayer(player); + } + } + var foundRpcs = getRolePlayerConstraintsForRole(associationRoleConstraint.roleType, roleContainer.__rolePlayerConstraints__); + var players = extractPlayersOfConstraints(foundRpcs); + roleContainer.__checkARCButtons__(rolesToCheck, players, associationRoleConstraint); + roleContainer.__checkORCRoles__(null); } role.setRemoveHandler(removeHandler); @@ -1877,7 +1910,7 @@ } // --- creates new roles from other role-constraints, which has to exist or are optional - this.__makeRolesFromORC__(changedRole.getType(), changedRole.getPlayer()); + if(changedRole) this.__makeRolesFromORC__(changedRole.getType(), changedRole.getPlayer()); }, "getContent" : function(){ if((!this.__orContainer__.__frames__ && this.__orContainer__.frames__.length === 0) || (!this.__arContainer__.__frames__ && this.__arContainer__.__frames__.length === 0)) return null;
participants (1)
-
Lukas Giessmann