save UI state
This commit is contained in:
parent
5e7f95c9e5
commit
c8aa818fed
7 changed files with 259 additions and 169 deletions
|
|
@ -29,4 +29,7 @@ def site_config():
|
|||
site_config['keys'] = {}
|
||||
for key in site_config['sortKeys']:
|
||||
site_config['keys'][key['id']] = key
|
||||
site_config['_findKeys'] = {}
|
||||
for key in site_config['findKeys']:
|
||||
site_config['_findKeys'][key['id']] = key
|
||||
return site_config
|
||||
|
|
|
|||
|
|
@ -343,7 +343,7 @@ class Item(models.Model):
|
|||
def save(key, value):
|
||||
f, created = ItemFind.objects.get_or_create(item=self, key=key)
|
||||
if value not in ('', '||'):
|
||||
f.value = value
|
||||
f.value = value.strip()
|
||||
f.save()
|
||||
else:
|
||||
f.delete()
|
||||
|
|
@ -785,6 +785,8 @@ class ItemFind(models.Model):
|
|||
key = models.CharField(max_length=200, db_index=True)
|
||||
value = models.TextField(blank=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s=%s" % (self.key, self.value)
|
||||
'''
|
||||
ItemSort
|
||||
table constructed based on info in site_config['sortKeys']
|
||||
|
|
|
|||
|
|
@ -239,8 +239,13 @@ def autocomplete(request):
|
|||
op = data.get('operator', '')
|
||||
|
||||
site_config = models.site_config()
|
||||
order_by = site_config['_findKeys'].get(data['key'], {}).get('autocompleteSortKey', False)
|
||||
if order_by:
|
||||
order_by = '-sort__%s_desc' % order_by
|
||||
else:
|
||||
order_by = '-items'
|
||||
if site_config['keys'][data['key']]['type'] == 'title':
|
||||
qs = models.Item.objects.filter(available=True) #does this need more limiting? user etc
|
||||
qs = _parse_query({'query': data.get('query', {})}, request.user)['qs']
|
||||
if data['value']:
|
||||
if op == '':
|
||||
qs = qs.filter(find__key=data['key'], find__value__icontains=data['value'])
|
||||
|
|
@ -248,7 +253,7 @@ def autocomplete(request):
|
|||
qs = qs.filter(find__key=data['key'], find__value__istartswith=data['value'])
|
||||
elif op == '$':
|
||||
qs = qs.filter(find__key=data['key'], find__value__iendswith=data['value'])
|
||||
qs = qs.order_by('-sort__%s'%site_config['keys'][data['key']]['autocompleteSortKey'])
|
||||
qs = qs.order_by(order_by)
|
||||
qs = qs[data['range'][0]:data['range'][1]]
|
||||
response = json_response({})
|
||||
response['data']['items'] = [i.get(data['key']) for i in qs]
|
||||
|
|
@ -261,7 +266,8 @@ def autocomplete(request):
|
|||
qs = qs.filter(value__istartswith=data['value'])
|
||||
elif op == '$':
|
||||
qs = qs.filter(value__iendswith=data['value'])
|
||||
qs = qs.values('value').annotate(items=Count('id')).order_by('-items')
|
||||
qs = qs.values('value').annotate(items=Count('id'))
|
||||
qs = qs.order_by(order_by)
|
||||
qs = qs[data['range'][0]:data['range'][1]]
|
||||
response = json_response({})
|
||||
response['data']['items'] = [i['value'] for i in qs]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"findKeys": [
|
||||
{"id": "all", "title": "All"},
|
||||
{"id": "title", "title": "Title", "autocomplete": true},
|
||||
{"id": "title", "title": "Title", "autocomplete": true, "autocompleteSortKey": "votes"},
|
||||
{"id": "director", "title": "Director", "autocomplete": true},
|
||||
{"id": "country", "title": "Country", "autocomplete": true},
|
||||
{"id": "year", "title": "Year", "autocomplete": true},
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
{"id": "featured", "title": "Featured Lists"}
|
||||
],
|
||||
"sortKeys": [
|
||||
{"id": "title", "title": "Title", "width": 180, "removable": false, "type": "title", "autocompleteSortKey": "votes"},
|
||||
{"id": "title", "title": "Title", "width": 180, "removable": false, "type": "title"},
|
||||
{"id": "director", "title": "Director", "width": 180, "removable": false, "type": "person"},
|
||||
{"id": "country", "title": "Country", "width": 120, "type": "string"},
|
||||
{"id": "year", "title": "Year", "width": 60, "type": "year"},
|
||||
|
|
|
|||
|
|
@ -33,7 +33,17 @@ class UserProfile(models.Model):
|
|||
ui = {}
|
||||
config = site_config()
|
||||
ui.update(config['user']['ui'])
|
||||
ui.update(self.ui)
|
||||
def updateUI(ui, new):
|
||||
'''
|
||||
only update set keys in dicts
|
||||
'''
|
||||
for key in new:
|
||||
if isinstance(new[key], dict) and key in ui:
|
||||
ui[key] = updateUI(ui[key], new[key])
|
||||
else:
|
||||
ui[key] = new[key]
|
||||
return ui
|
||||
ui = updateUI(ui, self.ui)
|
||||
if not 'lists' in ui:
|
||||
ui['lists'] = {}
|
||||
ui['lists'][''] = config['uiDefaults']['list']
|
||||
|
|
|
|||
|
|
@ -409,14 +409,14 @@ def setUI(request):
|
|||
key.subkey: value
|
||||
}
|
||||
you can set nested keys
|
||||
api.setUI({"lists.my.listView": "icons"})
|
||||
api.setUI({"lists|my|ListView": "icons"})
|
||||
|
||||
return {
|
||||
'status': {'code': int, 'text': string}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
keys = data.keys()[0].split('.')
|
||||
keys = data.keys()[0].split('|')
|
||||
value = data.values()[0]
|
||||
profile = request.user.get_profile()
|
||||
p = profile.ui
|
||||
|
|
@ -425,6 +425,8 @@ def setUI(request):
|
|||
if isinstance(p, list):
|
||||
p = p[getPositionById(p, key)]
|
||||
else:
|
||||
if key not in p:
|
||||
p[key] = {}
|
||||
p = p[key]
|
||||
p[keys[0]] = value
|
||||
profile.save()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue