# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
+import json
from django.apps import apps
-from django.db.models import Prefetch
+from django.db.models import Prefetch, Q
from django.http import Http404, JsonResponse
from django.urls import reverse
from django.utils.formats import localize_input
res = res[0]['sub']
return res
- for thema in self.queryset.all():
+ def apply_filter(filt):
+ if 'not' in filt:
+ return ~apply_filter(filt['not'])
+ if 'startswith' in filt:
+ q = None
+ for prefix in filt['startswith']:
+ q2 = Q(code__startswith=prefix)
+ if q:
+ q |= q2
+ else:
+ q = q2
+ return q
+ assert False
+
+ qs = self.queryset
+ try:
+ filt = json.loads(request.GET.get('filter'))
+ except:
+ pass
+ else:
+ qs = qs.filter(apply_filter(filt))
+
+ for thema in qs:
populate(thema)
missing = list(getmissing(tree))
rdfdesc.append('\n ');
rdf.append('\n ');
}
+ if (field.filter && field.filter.startswith) {
+ span.text(field.filter.startswith[0]);
+ }
span.appendTo(rdfdesc);
rdfdesc.append('\n ');
$.ajax({
url: field.value_type.chooser.source,
+ data: field.filter ? {'filter': JSON.stringify(field.filter)} : '',
success: function(data) {
add_options(body, data, input.val());
}
// lang
}
+ applyFilter(filter, text) {
+ if (filter.not) {
+ return !this.applyFilter(filter.not, text)
+ } else if (filter.startswith) {
+ for (prefix of filter.startswith) {
+ if (text.startsWith(prefix))
+ return true;
+ }
+ return false;
+ }
+ }
+
displayMetaProperty($fg) {
let self = this;
let ns = $fg.data('ns');
selector += "[x-ns='"+ns+"']";
}
$(selector, self.$edited).each(function() {
+ if (field.filter) {
+ let text = $(this).text();
+ if (!self.applyFilter(field.filter, text))
+ return;
+ }
self.addMetaInput(
$('.c', $fg),
field,
)
)
)
- fields.append(d)
+ if d['name'] == 'thema':
+ d_loc = d.copy()
+ d_time = d.copy()
+ d['filter'] = {'not': {'startswith': ['1', '3']}}
+ d_loc['filter'] = {'startswith': ['1']}
+ d_loc['name'] += ' (miejsca)'
+ d_time['filter'] = {'startswith': ['3']}
+ d_time['name'] += ' (czas)'
+ fields.extend([d, d_loc, d_time])
+ else:
+ fields.append(d)
return HttpResponse(
'let META_FIELDS = ' + json.dumps(fields),