<script type="text/template" id="tenant-edit-users">
<%= xosPickerTemplate({pickedItems: model.usersBuffer,
- unpickedItems: array_diff(xos.tenant().current_user_site_users, model.usersBuffer),
+ unpickedItems: array_subtract(xos.tenant().current_user_site_users, model.usersBuffer),
id: "users",
fieldName: "users",
detailView: detailView,
- lookupFunc: function(x) { return array_pair_lookup(x, xos.tenant().current_user_site_user_names, xos.tenant().current_user_site_users); },
+ lookupFunc: function(x) { return array_pair_lookup(x,
+ $.merge($.merge([], xos.tenant().current_user_site_user_names), model.user_namesOrig),
+ $.merge($.merge([], xos.tenant().current_user_site_users), model.usersOrig)); },
} ) %>
</script>
def user_names(self):
return [user["name"] for user in self.getSliceInfo()["users"].values()]
+ @user_names.setter
+ def user_names(self, value):
+ pass # it's read-only
+
@property
def users(self):
return [user["id"] for user in self.getSliceInfo()["users"].values()]
tenantSites = new XOSTenantSiteCollection();\r
tenantSites.getFromSlice(model);\r
model.usersBuffer = model.attributes.users; /* save a copy of 'users' that we can edit. This prevents another view (developer) from overwriting our copy with a fetch from the server */\r
+ model.usersOrig = model.attributes.users; /* save an immutable copy that we'll use for username lookups */\r
+ model.user_namesOrig = model.attributes.user_names;\r
model.tenantSiteCollection = tenantSites;\r
XOSTenantApp.tenantSites = tenantSites;\r
\r
return diff;\r
}
+function array_subtract(a1, a2)
+{
+ result=[]
+ for (index in a1) {
+ value = a1[index];
+ if (!$.inArray(value, a2) >= 0) {
+ result.push(value);
+ }
+ }
+ return result;
+}
+
function array_pair_lookup(x, names, values)
{
for (index in values) {