From 3fccd580cab152d42c9e42beb298981b8b395d88 Mon Sep 17 00:00:00 2001
From: Kasia Krasnowska <kasia.krasnowska@gmail.com>
Date: Wed, 7 Jul 2021 17:01:59 +0200
Subject: [PATCH] filter forms updates + fixes

---
 entries/forms.py                  |  48 ++-
 entries/views.py                  | 119 +++++-
 locale/en/LC_MESSAGES/django.mo   | Bin 29985 -> 32086 bytes
 locale/en/LC_MESSAGES/django.po   | 645 ++++++++++++++++++------------
 locale/en/LC_MESSAGES/djangojs.po |  38 +-
 5 files changed, 539 insertions(+), 311 deletions(-)

diff --git a/entries/forms.py b/entries/forms.py
index 16013dd..2ea7818 100644
--- a/entries/forms.py
+++ b/entries/forms.py
@@ -100,7 +100,7 @@ def or_button(button_label, add_button_id):
 def other_button(button_label, add_button_id):
     return bootstrap.StrictButton('+ {} ({})'.format(_('Inny'), button_label), css_class='other-button btn-xs btn-warning', data_add_id=add_button_id)
 
-def and_or_form_creator(button_label, button_id, field=None, data_add=None, add_other=False, *args, **kwargs):
+def and_or_form_creator(button_label, button_id, field=None, data_add=None, add_other=False, help=None, tooltip=None, *args, **kwargs):
     add_button = None
     data_add = 'switch' if data_add is None else data_add
     if field is not None:
@@ -115,6 +115,11 @@ def and_or_form_creator(button_label, button_id, field=None, data_add=None, add_
     ]
     if add_other:
         ret.insert(-1, other_button(button_label, button_id))
+    if help:
+        help_tooltip = ''
+        if tooltip:
+            help_tooltip = ' <span data-toggle="tooltip" data-placement="bottom" title="{}"><img src="/static/common/img/info.svg" alt="info" width="12" height="12"/></span>'.format(tooltip)
+        ret.insert(-1, layout.HTML('<small class="form-text text-muted">{}{}</small>'.format(help, help_tooltip)))
     return ret
 
 class EntryForm(QueryForm):
@@ -138,17 +143,26 @@ class EntryForm(QueryForm):
         schema_components = [
             self.make_field('num_schemata'),
         ] + \
-        and_or_form_creator(_('Schemat'), 'add-schema-0', data_add='schema', add_other=True) + \
+        and_or_form_creator(_('Schemat'), 'add-schema-0', data_add='schema', add_other=True, help=_('Schemat(y) występujące w haśle')) + \
+        and_or_form_creator(_('Pozycja'), 'add-position-0', data_add='position', add_other=True,
+            help=_('Pozycja/e występujące w haśle'),
+            tooltip=_('Pozycje mogą występować w różnych schematach. Aby ograniczyć filtrowanie do występowania wymaganych pozycji w obrębie jednego schematu, proszę użyć filtru POZYCJA wewnątrz filtra SCHEMAT powyżej.')
+            ) + \
+        and_or_form_creator(_('Fraza'), 'add-phrase-0', field=self.make_field('phrase_type'), data_prefix='phrase_',
+            help=_('Fraza/y występujące w haśle'),
+            tooltip=_('Frazy mogą występować w różnych schematach i na różnych pozycjach. Aby ograniczyć filtrowanie do występowania wymaganych fraz w obrębie jednej pozycji, proszę użyć filtru POZYCJA powyżej lub wewnątrz filtra SCHEMAT.')
+        ) + \
         [
             self.make_field('filter_schemata'),
         ]
         
-        #and_or_form_creator(_('Fraza'), 'add-phrase-0', field=self.make_field('phrase_type'), data_prefix='phrase_') + \
+        
         
         frame_components = [
             self.make_field('num_frames'),
         ] + \
-        and_or_form_creator(_('Rama'), 'add-frame-0', data_add='frame', add_other=True) + \
+        and_or_form_creator(_('Rama'), 'add-frame-0', data_add='frame', add_other=True, help=_('Rama/y występujące w haśle')) + \
+        and_or_form_creator(_('Argument'), 'add-argument-0', data_add='argument', help=_('Argument(y) występujące w haśle')) + \
         [
             self.make_field('filter_frames'),
         ]
@@ -181,6 +195,7 @@ class EntryForm(QueryForm):
         label ='Status',
         queryset=Status.objects.all().order_by('-priority'),
         key = 'key',
+        human_values=polish_strings.STATUS(),
         lookup='status',
     )
     num_schemata = RangeFilter(
@@ -193,7 +208,8 @@ class EntryForm(QueryForm):
     )
     phrase_type = PhraseTypeFilter(
         queryset=PhraseTypeModel.objects.filter(main_phrase_types__positions__schemata__isnull=False).distinct(),
-        help_text=_('Typ frazy występujący w haśle.'))
+        #help_text=_('Typ frazy występujący w haśle.'),
+    )
     filter_schemata = SwitchField(_('Ukryj niepasujÄ…ce schematy'))
     filter_frames = SwitchField(_('Ukryj niepasujÄ…ce ramy'))
     
@@ -201,10 +217,14 @@ class EntryForm(QueryForm):
     def get_child_form_prefix(child_form):
         if child_form.model_class == Schema:
             return 'subentries__schemata__in'
+        if child_form.model_class == Position:
+            return 'subentries__schemata__positions__in'
         if child_form.model_class == PhraseType:
             return 'subentries__schemata__positions__phrase_types__in'
         if child_form.model_class == Frame:
             return 'subentries__schema_hooks__argument_connections__argument__frame__in'
+        if child_form.model_class == Argument:
+            return 'subentries__schema_hooks__argument_connections__argument__in'
         raise KeyError(type(child_form))
 
 
@@ -314,7 +334,6 @@ class SchemaFormFactory(FormFactory):
                 key='key',
                 human_values=polish_strings.SCHEMA_OPINION(),
                 lookup='opinion',
-                #initial=SchemaOpinion.objects.filter(key__in=('col', 'vul')),
             ),
             None,
         ), 
@@ -400,7 +419,7 @@ class SchemaFormFactory(FormFactory):
         #),
         (
             None, None,
-            lambda n, cls: and_or_form_creator(_('Pozycja'), 'add-position-{}'.format(n), data_add='position', add_other=True),
+            lambda n, cls: and_or_form_creator(_('Pozycja'), 'add-position-{}'.format(n), data_add='position', add_other=True, help=_('Pozycja/e występujące w schemacie')),
         ),
     )
     
@@ -449,10 +468,19 @@ class PositionFormFactory(FormFactory):
                 lookup='pred_control',
             ), None,
         ),
+        (
+            'num_phrases',
+            lambda: RangeFilter(
+                label=_('Liczba fraz'),
+                lookup='phrases_count',
+            ),
+            None,
+        ),
         (
             'phrase_type',
-            lambda: PhraseTypeFilter(help_text=_('Typ frazy występujący na pozycji.')),
-            lambda n, cls: and_or_form_creator(_('Fraza'), 'add-phrase-{}'.format(n), field=cls.make_field(FormFactory.unique_name('phrase_type', n)), data_prefix='phrase_'),
+            #lambda: PhraseTypeFilter(help_text=_('Typ frazy występujący na pozycji.')),
+            lambda: PhraseTypeFilter(),
+            lambda n, cls: and_or_form_creator(_('Fraza'), 'add-phrase-{}'.format(n), field=cls.make_field(FormFactory.unique_name('phrase_type', n)), data_prefix='phrase_', help=_('Fraza/y występujące na pozycji')),
         ),
     )
      
@@ -629,6 +657,8 @@ class ArgumentFormFactory(FormFactory):
             return 'relations__in'
         if child_form.model_class == Synset:
             return 'synsets__in'
+        if child_form.model_class == PhraseType:
+            return 'argument_connections__schema_connections__phrase_type__in'
         raise KeyError(type(child_form))
 
 
diff --git a/entries/views.py b/entries/views.py
index b4b6e0e..2012399 100644
--- a/entries/views.py
+++ b/entries/views.py
@@ -35,7 +35,7 @@ from .forms import (
     SynsetPreferenceFormFactory,
 )
 
-from .polish_strings import SCHEMA_OPINION, FRAME_OPINION, EXAMPLE_SOURCE, EXAMPLE_OPINION, RELATION
+from .polish_strings import STATUS, SCHEMA_OPINION, FRAME_OPINION, EXAMPLE_SOURCE, EXAMPLE_OPINION, RELATION
 
 from .phrase_descriptions.descriptions import position_prop_description
 
@@ -105,7 +105,7 @@ def get_subform(request):
             print('******************', form_type)
             raise
         return JsonResponse({'form_html' : form_html})
-    
+
 #TODO clean this code bordello up
 
 def filter_objects(objects, queries, tab=''):
@@ -250,7 +250,7 @@ def get_filtered_objects(forms, initial_objects=None, tab='   '):
     objects = objects.distinct()
     #print(tab, 'FILTERED:', form.model_class)
     return objects
-            
+
 
 # forms – an ‘or’ list of ‘and’ lists of forms, the forms are flattened and treated as one ‘or’ list.
 # The function is used for filtering out schemata/frames. E.g. if the user chooses entries with a schema
@@ -350,12 +350,13 @@ def get_entries(request):
             if order_dir == 'desc':
                 order_field = '-' + order_field
             entries = entries.order_by(order_field)
+        status_names = STATUS()
         entries_list = list(entries.values('id', 'name', 'status__key'))
         result = {
             'draw' : scroller_params['draw'],
             'recordsTotal': total,
             'recordsFiltered': filtered,
-            'data': entries_list[i:j],
+            'data': [{'id' : e['id'], 'name' : e['name'], 'status__key' : status_names[e['status__key']]} for e in entries_list[i:j]],
         }
         return JsonResponse(result)
     return JsonResponse({})
@@ -574,6 +575,70 @@ def get_examples(entry):
         })
     return sorted(examples, key=lambda x: x['sentence'])
 
+# [[POS1], [POS2, POS3]]
+# =>
+# [
+#     [
+#         (<SchemaForm>, [], [('position', 'or', [[POS1]])])
+#     ],
+#     [
+#         (<SchemaForm>, [], [('position', 'or', [[POS2]])]),
+#         (<SchemaForm>, [], [('position', 'or', [[POS3]])])
+#     ]
+# ]
+def position_forms2schema_forms(forms):
+    dummy_schema_form = make_form('schema', data={})
+    # validate the dummy to ensure access to cleaned_data
+    assert(dummy_schema_form.is_valid())
+    return [
+        [(dummy_schema_form, [], [('position', 'or', [[posf]])]) for posf in posfs]
+        for posfs in forms
+    ]
+
+# [[ATR1, ATR2], [ATR3]]
+# =>
+# [
+#     [
+#         (<SchemaForm>, [], [('position', 'or', [[(<PositionForm>, [], [('switch', 'or', [[ATR]])])]])]),
+#         (<SchemaForm>, [], [('position', 'or', [[(<PositionForm>, [], [('switch', 'or', [[ATR]])])]])])
+#     ],
+#     [
+#         (<SchemaForm>, [], [('position', 'or', [[(<PositionForm>, [], [('switch', 'or', [[ATR]])])]])])
+#     ]
+# ]
+
+def phrase_forms2schema_forms(forms):
+    dummy_schema_form = make_form('schema', data={})
+    dummy_position_form = make_form('position', data={})
+    # validate the dummies to ensure access to cleaned_data
+    assert(dummy_schema_form.is_valid())
+    assert(dummy_position_form.is_valid())
+    return [
+        [(dummy_schema_form, [], [('position', 'or', [[(dummy_position_form, [], [('switch', 'or', [[phrf]])])]])]) for phrf in phrfs]
+        for phrfs in forms
+    ]
+
+# [[ARG1, ARG2], [ARG3]]
+# =>
+# [
+#     [
+#         (<FrameForm>, [], [('argument', 'or', [[ARG1]])]),
+#         (<FrameForm>, [], [('argument', 'or', [[ARG2]])])
+#     ],
+#     [
+#         (<FrameForm>, [], [('argument', 'or', [[ARG3]])])
+#     ]
+# ]
+
+def argument_forms2frame_forms(forms):
+    dummy_frame_form = make_form('frame', data={})
+    # validate the dummy to ensure access to cleaned_data
+    assert(dummy_frame_form.is_valid())
+    return [
+        [(dummy_frame_form, [], [('argument', 'or', [[argf]])]) for argf in argfs]
+        for argfs in forms
+    ]
+
 #TODO test (*) changes
 
 @ajax_required
@@ -596,23 +661,43 @@ def get_entry(request):
             
             filter_schemata, filter_frames = entry_form.cleaned_data['filter_schemata'], entry_form.cleaned_data['filter_frames']
             if filter_schemata:
-                schema_forms = [frms[2] for frms in children_forms if frms[0] == 'schema']
-                assert (len(schema_forms) <= 1)
-                if schema_forms:
-                    schema_forms = schema_forms[0]
+                schema_forms = []
+                # e.g. entry has schema that satisfies X & entry has schema that satisfies Y
+                # => filtering schemata shows only schemata that contributed to the match
+                # => leave schemata that satisfies X or satisfy Y
+                schema_forms1 = [frms[2] for frms in children_forms if frms[0] == 'schema']
+                assert (len(schema_forms1) <= 1)
+                if schema_forms1:
+                    schema_forms = schema_forms1[0]
+                # e.g. entry has position that satisfies X & entry has position that satisfies Y
+                # => entry has schema that has position that satisfies X
+                # & entry has schema that has position that satisfies Y
+                # => leave schemata that have position that satisfies X or have position that satisfies Y
+                position_forms = [frms[2] for frms in children_forms if frms[0] == 'position']
+                assert (len(position_forms) <= 1)
+                if position_forms:
+                    position_forms = position_forms[0]
+                    schema_forms += position_forms2schema_forms(position_forms)
                 phrase_forms = [frms[2] for frms in children_forms if frms[0] == 'switch']
                 assert (len(phrase_forms) <= 1)
                 if phrase_forms:
                     phrase_forms = phrase_forms[0]
-                    print('=====================', phrase_forms)
-                filter_schemata = schema_forms or phrase_forms
+                    schema_forms += phrase_forms2schema_forms(phrase_forms)
+                filter_schemata = len(schema_forms) > 0
+            
             if filter_frames:
-                frame_forms = [frms[2] for frms in children_forms if frms[0] == 'frame']
-                assert (len(frame_forms) <= 1)
-                if frame_forms:
-                    frame_forms = frame_forms[0]
-                else:
-                    filter_frames = False
+                frame_forms = []
+                frame_forms1 = [frms[2] for frms in children_forms if frms[0] == 'frame']
+                assert (len(frame_forms1) <= 1)
+                if frame_forms1:
+                    frame_forms = frame_forms1[0]
+                argument_forms = [frms[2] for frms in children_forms if frms[0] == 'argument']
+                assert (len(argument_forms) <= 1)
+                if argument_forms:
+                    argument_forms = argument_forms[0]
+                    frame_forms += argument_forms2frame_forms(argument_forms)
+                filter_frames = len(frame_forms) > 0
+            
             
             local_schema_form = None
             if 'schema_form' in request.session:
@@ -633,7 +718,7 @@ def get_entry(request):
                 schemata = []
                 schema_objects = subentry.schemata.all()
                 # filter out schemata by schema properties
-                if filter_schemata and schema_forms:
+                if filter_schemata:
                     schema_objects = get_filtered_objects2(schema_forms, schema_objects)
                 if local_schema_form:
                     schema_objects = get_filtered_objects(local_schema_form, schema_objects)
diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo
index a8128f1b25e0df0286b824eac063484775ff1c97..e25e72102e413eb22e0c3b3afd4ec2b13f5d4f93 100644
GIT binary patch
delta 12084
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
J)8fRKe*rz8Fp~fP

delta 10011
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

diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
index 8848c5e..c890dc3 100644
--- a/locale/en/LC_MESSAGES/django.po
+++ b/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-06-30 10:15+0200\n"
+"POT-Creation-Date: 2021-07-07 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: common/templates/base.html:48 entries/templates/entries.html:7
+#: common/templates/base.html:49 entries/templates/entries.html:7
+#: entries/templates/entries.html:38
 msgid "Hasła"
 msgstr "Entries"
 
@@ -26,35 +27,40 @@ msgstr "Entries"
 msgid "Typy fraz"
 msgstr "Phrase types"
 
-#: common/templates/base.html:66
+#: common/templates/base.html:60
+#: dictionary_statistics/templates/dictionary_statistics.html:9
+msgid "Statystyki"
+msgstr "Statistics"
+
+#: common/templates/base.html:71
 msgid "EN"
 msgstr "PL"
 
-#: common/templates/base.html:76
+#: common/templates/base.html:81
 msgid "Instytut Podstaw Informatyki PAN"
 msgstr "Institute of Computer Science PAS"
 
-#: common/templates/base.html:77
+#: common/templates/base.html:82
 msgid "Praca współfinansowana przez"
 msgstr "Work co-founded by"
 
-#: common/templates/base.html:78
+#: common/templates/base.html:83
 msgid "Strona wykorzystuje"
 msgstr "Webpage powered by"
 
-#: common/templates/base.html:79
+#: common/templates/base.html:84
 msgid "oraz"
 msgstr "and "
 
-#: common/templates/base.html:80
+#: common/templates/base.html:85
 msgid "z motywem opartym na"
 msgstr "with"
 
-#: common/templates/base.html:81
+#: common/templates/base.html:86
 msgid " i krojem pisma"
 msgstr "-based motive and"
 
-#: common/templates/base.html:82
+#: common/templates/base.html:87
 msgid "."
 msgstr " font."
 
@@ -90,15 +96,33 @@ msgstr "Citing <i>Walenty</i>"
 msgid "Pozostałe publikacje"
 msgstr "Other publications"
 
-#: dictionary_statistics/templates/dictionary_statistics.html:7
-msgid "Statystyki"
-msgstr "Statistics"
+#: dictionary_statistics/templates/dictionary_statistics.html:17
+msgid "Liczba haseł"
+msgstr "Number of entries"
+
+#: dictionary_statistics/templates/dictionary_statistics.html:22
+msgid "Status / część mowy"
+msgstr "Status / part of speech"
+
+#: dictionary_statistics/templates/dictionary_statistics.html:43
+#: entries/forms.py:201
+msgid "Liczba schematów"
+msgstr "Number of schemata"
+
+#: dictionary_statistics/templates/dictionary_statistics.html:67
+#: entries/forms.py:205
+msgid "Liczba ram"
+msgstr "Number of frames"
+
+#: dictionary_statistics/views.py:11
+msgid "wszystkie"
+msgstr "all"
 
 #: download/templates/download.html:6
 msgid "Pobieranie"
 msgstr "Download"
 
-#: entries/autocompletes.py:27 entries/views.py:438
+#: entries/autocompletes.py:27 entries/views.py:439
 msgid "definicja:"
 msgstr "definition:"
 
@@ -162,11 +186,11 @@ msgstr "Invalid expression: %(msg)s."
 msgid "Typ frazy zleksykalizowanej"
 msgstr "Lexicalised phrase type"
 
-#: entries/form_fields/specialised_fields.py:44 entries/forms.py:521
+#: entries/form_fields/specialised_fields.py:44 entries/forms.py:546
 msgid "Typ frazy"
 msgstr "Phrase type"
 
-#: entries/form_fields/specialised_fields.py:51 entries/forms.py:609
+#: entries/form_fields/specialised_fields.py:51 entries/forms.py:634
 msgid "wybierz"
 msgstr "choose"
 
@@ -174,7 +198,7 @@ msgstr "choose"
 msgid "Frazeologia"
 msgstr "Phraseology"
 
-#: entries/form_fields/specialised_fields.py:78 entries/polish_strings.py:99
+#: entries/form_fields/specialised_fields.py:78 entries/polish_strings.py:115
 msgid "dowolnie"
 msgstr "any"
 
@@ -218,263 +242,290 @@ msgstr "Other"
 msgid "Dodaj"
 msgstr "Add"
 
-#: entries/forms.py:141
+#: entries/forms.py:146
 msgid "Schemat"
 msgstr "Schema"
 
-#: entries/forms.py:151
+#: entries/forms.py:146
+msgid "Schemat(y) występujące w haśle"
+msgstr "Phrase type(s) occurring in the entry."
+
+#: entries/forms.py:147 entries/forms.py:419 entries/forms.py:640
+msgid "Pozycja"
+msgstr "Position"
+
+#: entries/forms.py:148
+msgid "Pozycja/e występujące w haśle"
+msgstr "Position(s) occurring in the entry."
+
+#: entries/forms.py:149
+msgid ""
+"Pozycje mogą występować w różnych schematach. Aby ograniczyć filtrowanie do "
+"występowania wymaganych pozycji w obrębie jednego schematu, proszę użyć "
+"filtru POZYCJA wewnątrz filtra SCHEMAT powyżej."
+msgstr "Positions may occur in different schemata. In order to restrict filtering to positions co-occuring in one schema, use the POSITION filter inside SCHEMA filter above."
+
+#: entries/forms.py:151 entries/forms.py:480 entries/forms.py:645
+#: entries/forms.py:764 entries/forms.py:766 entries/forms.py:768
+#: entries/forms.py:770
+msgid "Fraza"
+msgstr "Phrase"
+
+#: entries/forms.py:152
+msgid "Fraza/y występujące w haśle"
+msgstr "Phrase type(s) occurring in the entry."
+
+#: entries/forms.py:153
+msgid ""
+"Frazy mogą występować w różnych schematach i na różnych pozycjach. Aby "
+"ograniczyć filtrowanie do występowania wymaganych fraz w obrębie jednej "
+"pozycji, proszę użyć filtru POZYCJA powyżej lub wewnątrz filtra SCHEMAT."
+msgstr "Phrases may occur in different schemata and on different positions. In order to restrict filtering to phrases co-occuring on one position, use the POSITION filter above or inside the SCHEMA filter."
+
+#: entries/forms.py:164
 msgid "Rama"
 msgstr "Frame"
 
-#: entries/forms.py:157
+#: entries/forms.py:164
+msgid "Rama/y występujące w haśle"
+msgstr "Frame(s) occurring in the entry."
+
+#: entries/forms.py:170
 msgid "Własności hasła"
 msgstr "Entry properties"
 
-#: entries/forms.py:158
+#: entries/forms.py:171
 msgid "Własności składniowe"
 msgstr "Syntactic properties"
 
-#: entries/forms.py:159
+#: entries/forms.py:172
 msgid "Własności semantyczne"
 msgstr "Semantic properties"
 
-#: entries/forms.py:160 entries/forms.py:242
+#: entries/forms.py:173 entries/forms.py:259
 msgid "Filtruj"
 msgstr "Filter"
 
-#: entries/forms.py:161 entries/forms.py:243
+#: entries/forms.py:174 entries/forms.py:260
 msgid "Wyczyść"
 msgstr "Reset"
 
-#: entries/forms.py:167 entries/forms.py:471 entries/forms.py:477
-#: entries/forms.py:516 entries/templates/entries_list.html:6
+#: entries/forms.py:180 entries/forms.py:496 entries/forms.py:502
+#: entries/forms.py:541 entries/templates/entries_list.html:6
 msgid "Lemat"
 msgstr "Lemma"
 
-#: entries/forms.py:173
+#: entries/forms.py:186
 msgid "Część mowy"
 msgstr "Part of speech"
 
-#: entries/forms.py:187
-msgid "Liczba schematów"
-msgstr "Number of schemata"
-
-#: entries/forms.py:191
-msgid "Liczba ram"
-msgstr "Number of frames"
-
-#: entries/forms.py:196
-msgid "Typ frazy występujący w haśle."
-msgstr "Phrase type occurring in the entry."
-
-#: entries/forms.py:197
+#: entries/forms.py:212
 msgid "Ukryj niepasujÄ…ce schematy"
 msgstr "Hide non-matching schemata"
 
-#: entries/forms.py:198
+#: entries/forms.py:213
 msgid "Ukryj niepasujÄ…ce ramy"
 msgstr "Hide non-matching frames"
 
-#: entries/forms.py:238
+#: entries/forms.py:255
 msgid "Zwiń"
 msgstr "Collapse"
 
-#: entries/forms.py:238
+#: entries/forms.py:255
 msgid "Usuń"
 msgstr "Remove"
 
-#: entries/forms.py:291 entries/forms.py:777
+#: entries/forms.py:308 entries/forms.py:802
 msgid "Zaneguj"
 msgstr "Negate"
 
-#: entries/forms.py:306
+#: entries/forms.py:323
 msgid "Schemat składniowy"
 msgstr "Syntactic schema"
 
-#: entries/forms.py:312
+#: entries/forms.py:329
 msgid "Opinia o schemacie"
 msgstr "Schema opinion"
 
-#: entries/forms.py:324
+#: entries/forms.py:340
 msgid "Typ"
 msgstr "Type"
 
-#: entries/forms.py:326
+#: entries/forms.py:342
 msgid "zwykły"
 msgstr "ordinary"
 
-#: entries/forms.py:327
+#: entries/forms.py:343
 msgid "frazeologiczny"
 msgstr "phraseological"
 
-#: entries/forms.py:336
+#: entries/forms.py:352
 msgid "Zwrotność"
 msgstr "Reflexiveness"
 
-#: entries/forms.py:347
+#: entries/forms.py:363
 msgid "Negatywność"
 msgstr "Negativity"
 
-#: entries/forms.py:358
+#: entries/forms.py:374
 msgid "Predykatywność"
 msgstr "Predicativity"
 
-#: entries/forms.py:369 entries/polish_strings.py:80
+#: entries/forms.py:385 entries/polish_strings.py:96
 msgid "Aspekt"
 msgstr "Aspect"
 
-#: entries/forms.py:388
+#: entries/forms.py:404
 msgid "Liczba pozycyj"
 msgstr "Number of positions"
 
-#: entries/forms.py:403 entries/forms.py:615
-msgid "Pozycja"
-msgstr "Position"
-
 #: entries/forms.py:419
+msgid "Pozycja/e występujące w schemacie"
+msgstr "Position(s) occurring in the entry."
+
+#: entries/forms.py:435
 msgid "Pozycja składniowa"
 msgstr "Syntactic position"
 
-#: entries/forms.py:425
+#: entries/forms.py:441
 msgid "Funkcja gramatyczna"
 msgstr "Grammatical function"
 
-#: entries/forms.py:435
+#: entries/forms.py:451
 msgid "Kontrola"
 msgstr "Control"
 
-#: entries/forms.py:445
+#: entries/forms.py:461
 msgid "Kontrola predykatywna"
 msgstr "Predicative control"
 
-#: entries/forms.py:454
-msgid "Typ frazy występujący na pozycji."
-msgstr "Phrase type occurring on the position."
+#: entries/forms.py:471
+msgid "Liczba fraz"
+msgstr "Number of phrases"
 
-#: entries/forms.py:455 entries/forms.py:620 entries/forms.py:739
-#: entries/forms.py:741 entries/forms.py:743 entries/forms.py:745
-msgid "Fraza"
-msgstr "Phrase"
+#: entries/forms.py:480
+msgid "Fraza/y występujące na pozycji"
+msgstr "Phrase type(s) occurring on the position."
 
-#: entries/forms.py:491
+#: entries/forms.py:516
 msgid "Fraza zleksykalizowana"
 msgstr "Lexicalised phrase"
 
-#: entries/forms.py:497
+#: entries/forms.py:522
 msgid "Wybór lematów"
 msgstr "Lemma choice"
 
-#: entries/forms.py:507
+#: entries/forms.py:532
 msgid "Łączenie lematów"
 msgstr "Lemma joining"
 
-#: entries/forms.py:520 entries/forms.py:798
+#: entries/forms.py:545 entries/forms.py:823
 msgid "Typ składniowy frazy zleksykalizowanej."
 msgstr "Syntactic type of lexicalised phrase."
 
-#: entries/forms.py:543
+#: entries/forms.py:568
 msgid "Rama semantyczna"
 msgstr "Semantic frame"
 
-#: entries/forms.py:549 entries/templates/entry_display.html:47
+#: entries/forms.py:574 entries/templates/entry_display.html:37
+#: entries/templates/entry_display.html:56
 #: entries/templates/entry_display.html:71
-#: entries/templates/entry_display.html:86
 msgid "Opinia"
 msgstr "Opinion"
 
-#: entries/forms.py:559
+#: entries/forms.py:584
 msgid "Liczba argumentów"
 msgstr "Number of arguments"
 
-#: entries/forms.py:566
+#: entries/forms.py:591
 msgid "Liczba preferencyj selekcyjnych argumentu"
 msgstr "Number of argument’s selectional preferences"
 
-#: entries/forms.py:572
+#: entries/forms.py:597
 msgid "Argument"
 msgstr "Argument"
 
-#: entries/forms.py:588
+#: entries/forms.py:613
 msgid "Argument semantyczny"
 msgstr "Semantic argument"
 
-#: entries/forms.py:594
+#: entries/forms.py:619
 msgid "Rola"
 msgstr "Role"
 
-#: entries/forms.py:601
+#: entries/forms.py:626
 msgid "Atrybut roli"
 msgstr "Role attribute"
 
-#: entries/forms.py:608 entries/forms.py:611
+#: entries/forms.py:633 entries/forms.py:636
 msgid "Preferencja selekcyjna"
 msgstr "Selectional preference"
 
-#: entries/forms.py:609
+#: entries/forms.py:634
 msgid "Predefiniowana grupa znaczeń"
 msgstr "Predefined meanings class"
 
-#: entries/forms.py:609
+#: entries/forms.py:634
 msgid "Wyrażona przez relację"
 msgstr "Expressed by relation"
 
-#: entries/forms.py:609
+#: entries/forms.py:634
 msgid "Wyrażona przez jednostkę leksykalną Słowosieci"
 msgstr "Expressed by plWordnet lexical unit"
 
-#: entries/forms.py:619
+#: entries/forms.py:644
 msgid "Typ frazy, przez którą może być realizowany argument."
 msgstr ""
 
-#: entries/forms.py:640
+#: entries/forms.py:665
 msgid "Preferencja predefiniowana"
 msgstr "Predefined preference"
 
-#: entries/forms.py:646
+#: entries/forms.py:671
 msgid "Predefiniowane"
 msgstr "Predefined"
 
-#: entries/forms.py:660
+#: entries/forms.py:685
 msgid "Preferencja – relacja"
 msgstr "Relational preference"
 
-#: entries/forms.py:666
+#: entries/forms.py:691
 msgid "Relacja"
 msgstr "Relation"
 
-#: entries/forms.py:677
+#: entries/forms.py:702
 msgid "Do: rola"
 msgstr "To: role"
 
-#: entries/forms.py:684
+#: entries/forms.py:709
 msgid "Do: atrybut"
 msgstr "To: attribute"
 
-#: entries/forms.py:696
+#: entries/forms.py:721
 msgid "Preferencja – Słowosieć"
 msgstr "plWordnet preference"
 
-#: entries/forms.py:702
+#: entries/forms.py:727
 msgid "Jednostka leksykalna"
 msgstr "Lexical unit"
 
-#: entries/forms.py:750
+#: entries/forms.py:775
 msgid "Fraza {}"
 msgstr "{} phrase"
 
-#: entries/forms.py:752 entries/phrase_descriptions/descriptions.py:124
+#: entries/forms.py:777 entries/phrase_descriptions/descriptions.py:124
 msgid "zleksykalizowana"
 msgstr "lexicalised"
 
-#: entries/forms.py:788
+#: entries/forms.py:813
 msgid "Realizacja składniowa frazy."
 msgstr "Syntactic realisation of the phrase."
 
-#: entries/forms.py:792
+#: entries/forms.py:817
 msgid "Fraza składowa zleksykalizowanej konstrukcji porównawczej."
 msgstr "Component phrase of lexicalised comparative construction."
 
-#: entries/forms.py:794
+#: entries/forms.py:819
 msgid "Fraza zleksykalizowana."
 msgstr "Lexicalised phrase."
 
@@ -497,7 +548,7 @@ msgstr "lexicalised {phrase} frozen in the form <i>{phraseo}</i>"
 
 #: entries/phrase_descriptions/polish_strings.py:9
 #: entries/phrase_descriptions/polish_strings.py:336
-#: entries/polish_strings.py:53
+#: entries/polish_strings.py:69
 msgid "podmiot"
 msgstr "subject"
 
@@ -846,42 +897,42 @@ msgstr "%(a3)s %(a2)s %(a1)s"
 #: entries/phrase_descriptions/polish_strings.py:200
 #: entries/phrase_descriptions/polish_strings.py:224
 #: entries/phrase_descriptions/polish_strings.py:239
-#: entries/polish_strings.py:110
+#: entries/polish_strings.py:126
 msgid "(miejsce)"
 msgstr "(place)"
 
 #: entries/phrase_descriptions/polish_strings.py:201
 #: entries/phrase_descriptions/polish_strings.py:225
 #: entries/phrase_descriptions/polish_strings.py:240
-#: entries/polish_strings.py:111
+#: entries/polish_strings.py:127
 msgid "(miejsce poczÄ…tkowe)"
 msgstr "(start point)"
 
 #: entries/phrase_descriptions/polish_strings.py:202
 #: entries/phrase_descriptions/polish_strings.py:226
 #: entries/phrase_descriptions/polish_strings.py:241
-#: entries/polish_strings.py:112
+#: entries/polish_strings.py:128
 msgid "(miejsce końcowe)"
 msgstr "(end point)"
 
 #: entries/phrase_descriptions/polish_strings.py:203
 #: entries/phrase_descriptions/polish_strings.py:227
 #: entries/phrase_descriptions/polish_strings.py:242
-#: entries/polish_strings.py:113
+#: entries/polish_strings.py:129
 msgid "(trasa)"
 msgstr "(path)"
 
 #: entries/phrase_descriptions/polish_strings.py:204
 #: entries/phrase_descriptions/polish_strings.py:228
 #: entries/phrase_descriptions/polish_strings.py:243
-#: entries/polish_strings.py:114
+#: entries/polish_strings.py:130
 msgid "(czasu)"
 msgstr "(time)"
 
 #: entries/phrase_descriptions/polish_strings.py:205
 #: entries/phrase_descriptions/polish_strings.py:229
 #: entries/phrase_descriptions/polish_strings.py:244
-#: entries/polish_strings.py:115
+#: entries/polish_strings.py:131
 msgid "(trwania)"
 msgstr "(duration)"
 
@@ -894,21 +945,21 @@ msgstr "%(a2)s %(a1)s describing manner"
 #: entries/phrase_descriptions/polish_strings.py:207
 #: entries/phrase_descriptions/polish_strings.py:232
 #: entries/phrase_descriptions/polish_strings.py:246
-#: entries/polish_strings.py:117
+#: entries/polish_strings.py:133
 msgid "(przyczyny)"
 msgstr "(reason)"
 
 #: entries/phrase_descriptions/polish_strings.py:208
 #: entries/phrase_descriptions/polish_strings.py:233
 #: entries/phrase_descriptions/polish_strings.py:247
-#: entries/polish_strings.py:118
+#: entries/polish_strings.py:134
 msgid "(celu)"
 msgstr "(goal)"
 
 #: entries/phrase_descriptions/polish_strings.py:209
 #: entries/phrase_descriptions/polish_strings.py:234
 #: entries/phrase_descriptions/polish_strings.py:248
-#: entries/polish_strings.py:119
+#: entries/polish_strings.py:135
 msgid "(narzędzie)"
 msgstr "(tool)"
 
@@ -1025,7 +1076,7 @@ msgstr ""
 "phrases, accusative case is used (<i>dać każdemu po dwa jabłka</i>)"
 
 #: entries/phrase_descriptions/polish_strings.py:314
-#: entries/polish_strings.py:111
+#: entries/polish_strings.py:127
 msgid "ablatywna"
 msgstr "ablative"
 
@@ -1038,7 +1089,7 @@ msgid "ablatywnÄ…"
 msgstr "ablative"
 
 #: entries/phrase_descriptions/polish_strings.py:315
-#: entries/polish_strings.py:112
+#: entries/polish_strings.py:128
 msgid "adlatywna"
 msgstr "adlative"
 
@@ -1051,7 +1102,7 @@ msgid "adlatywnÄ…"
 msgstr "adlative"
 
 #: entries/phrase_descriptions/polish_strings.py:316
-#: entries/polish_strings.py:133
+#: entries/polish_strings.py:149
 msgid "bezokolicznikowa"
 msgstr "infinitival"
 
@@ -1064,7 +1115,7 @@ msgid "bezokolicznikowÄ…"
 msgstr "infinitival"
 
 #: entries/phrase_descriptions/polish_strings.py:317
-#: entries/polish_strings.py:118
+#: entries/polish_strings.py:134
 msgid "destynacyjna"
 msgstr "destinative"
 
@@ -1101,7 +1152,7 @@ msgid "dowolnÄ…"
 msgstr "any"
 
 #: entries/phrase_descriptions/polish_strings.py:320
-#: entries/polish_strings.py:115
+#: entries/polish_strings.py:131
 msgid "duratywna"
 msgstr "durative"
 
@@ -1126,7 +1177,7 @@ msgid "frazÄ…"
 msgstr "phrase"
 
 #: entries/phrase_descriptions/polish_strings.py:322
-#: entries/polish_strings.py:119
+#: entries/polish_strings.py:135
 msgid "instrumentalna"
 msgstr "instrumental"
 
@@ -1139,7 +1190,7 @@ msgid "instrumentalnÄ…"
 msgstr "instrumental"
 
 #: entries/phrase_descriptions/polish_strings.py:323
-#: entries/polish_strings.py:141
+#: entries/polish_strings.py:157
 msgid "imiesłowowa"
 msgstr "participal"
 
@@ -1152,7 +1203,7 @@ msgid "imiesłowową"
 msgstr "participal"
 
 #: entries/phrase_descriptions/polish_strings.py:324
-#: entries/polish_strings.py:117
+#: entries/polish_strings.py:133
 msgid "kauzatywna"
 msgstr "causative"
 
@@ -1177,7 +1228,7 @@ msgid "konstrukcjami"
 msgstr "constructions"
 
 #: entries/phrase_descriptions/polish_strings.py:326
-#: entries/polish_strings.py:138
+#: entries/polish_strings.py:154
 msgid "liczebnikowa"
 msgstr "numeral"
 
@@ -1190,7 +1241,7 @@ msgid "liczebnikowÄ…"
 msgstr "numeral"
 
 #: entries/phrase_descriptions/polish_strings.py:327
-#: entries/polish_strings.py:110
+#: entries/polish_strings.py:126
 msgid "lokatywna"
 msgstr "locative"
 
@@ -1215,7 +1266,7 @@ msgid "mowÄ…"
 msgstr "speech"
 
 #: entries/phrase_descriptions/polish_strings.py:329
-#: entries/polish_strings.py:136
+#: entries/polish_strings.py:152
 msgid "niechromatyczna"
 msgstr "nonchromatic"
 
@@ -1276,7 +1327,7 @@ msgid "odsłownikową"
 msgstr "gerundial"
 
 #: entries/phrase_descriptions/polish_strings.py:334
-#: entries/polish_strings.py:148
+#: entries/polish_strings.py:164
 msgid "partykuła"
 msgstr "particle"
 
@@ -1289,7 +1340,7 @@ msgid "partykułą"
 msgstr "particle"
 
 #: entries/phrase_descriptions/polish_strings.py:335
-#: entries/polish_strings.py:113
+#: entries/polish_strings.py:129
 msgid "perlatywna"
 msgstr "perlative"
 
@@ -1310,7 +1361,7 @@ msgid "podmiotem"
 msgstr "subject"
 
 #: entries/phrase_descriptions/polish_strings.py:337
-#: entries/polish_strings.py:140
+#: entries/polish_strings.py:156
 msgid "posesywna"
 msgstr "possesive"
 
@@ -1323,7 +1374,7 @@ msgid "posesywnÄ…"
 msgstr "possesive"
 
 #: entries/phrase_descriptions/polish_strings.py:338
-#: entries/polish_strings.py:126
+#: entries/polish_strings.py:142
 msgid "porównawcza"
 msgstr "comparative"
 
@@ -1336,7 +1387,7 @@ msgid "porównawczą"
 msgstr "comparative"
 
 #: entries/phrase_descriptions/polish_strings.py:339
-#: entries/polish_strings.py:124
+#: entries/polish_strings.py:140
 msgid "przymiotnikowa"
 msgstr "adjectival"
 
@@ -1361,7 +1412,7 @@ msgid "przysłówkami"
 msgstr "adverbs"
 
 #: entries/phrase_descriptions/polish_strings.py:341
-#: entries/polish_strings.py:125
+#: entries/polish_strings.py:141
 msgid "przysłówkowa"
 msgstr "adverbial"
 
@@ -1410,7 +1461,7 @@ msgid "realizujÄ…cÄ…"
 msgstr "realising"
 
 #: entries/phrase_descriptions/polish_strings.py:345
-#: entries/polish_strings.py:137
+#: entries/polish_strings.py:153
 msgid "rzeczownikowa"
 msgstr "nominal"
 
@@ -1447,7 +1498,7 @@ msgid "stosowanÄ…"
 msgstr "used"
 
 #: entries/phrase_descriptions/polish_strings.py:348
-#: entries/polish_strings.py:114
+#: entries/polish_strings.py:130
 msgid "temporalna"
 msgstr "temporal"
 
@@ -1496,7 +1547,7 @@ msgid "zależną"
 msgstr "dependent"
 
 #: entries/phrase_descriptions/polish_strings.py:353
-#: entries/polish_strings.py:128
+#: entries/polish_strings.py:144
 msgid "zdaniowa"
 msgstr "clause"
 
@@ -1509,194 +1560,242 @@ msgid "zdaniowÄ…"
 msgstr "clause"
 
 #: entries/polish_strings.py:6
+msgid "do obróbki"
+msgstr "unprocessed"
+
+#: entries/polish_strings.py:7
+msgid "w obróbce"
+msgstr "in processing"
+
+#: entries/polish_strings.py:8
+msgid "do usunięcia"
+msgstr "to delete"
+
+#: entries/polish_strings.py:9
+msgid "gotowe"
+msgstr "ready"
+
+#: entries/polish_strings.py:10
+msgid "zalążkowe"
+msgstr "stub"
+
+#: entries/polish_strings.py:11
+msgid "sprawdzone"
+msgstr "checked"
+
+#: entries/polish_strings.py:12
+msgid "(F) w obróbce"
+msgstr "(F) in processing"
+
+#: entries/polish_strings.py:13
+msgid "(F) gotowe"
+msgstr "(F) ready"
+
+#: entries/polish_strings.py:14
+msgid "(F) sprawdzone"
+msgstr "(F) checked"
+
+#: entries/polish_strings.py:15
+msgid "(S) w obróbce"
+msgstr "(S) in processing"
+
+#: entries/polish_strings.py:16
+msgid "(S) gotowe"
+msgstr "(S) ready"
+
+#: entries/polish_strings.py:17
+msgid "(S) sprawdzone"
+msgstr "(S) checked"
+
+#: entries/polish_strings.py:22
 msgid "przymiotnik"
 msgstr "adjective"
 
-#: entries/polish_strings.py:7
+#: entries/polish_strings.py:23
 msgid "przysłówek"
 msgstr "adverb"
 
-#: entries/polish_strings.py:8
+#: entries/polish_strings.py:24
 msgid "rzeczownik"
 msgstr "noun"
 
-#: entries/polish_strings.py:9
+#: entries/polish_strings.py:25
 msgid "czasownik"
 msgstr "verb"
 
-#: entries/polish_strings.py:14
+#: entries/polish_strings.py:30
 msgid "dokonany"
 msgstr "perfective"
 
-#: entries/polish_strings.py:15
+#: entries/polish_strings.py:31
 msgid "niedokonany"
 msgstr "imperfective"
 
-#: entries/polish_strings.py:20
+#: entries/polish_strings.py:36
 msgid "zanegowany"
 msgstr "negated"
 
-#: entries/polish_strings.py:21
+#: entries/polish_strings.py:37
 msgid "niezanegowany"
 msgstr "not negated"
 
-#: entries/polish_strings.py:22
+#: entries/polish_strings.py:38
 msgid "dowolny"
 msgstr "any"
 
-#: entries/polish_strings.py:25
+#: entries/polish_strings.py:41
 msgid "tak"
 msgstr "yes"
 
-#: entries/polish_strings.py:25
+#: entries/polish_strings.py:41
 msgid "nie"
 msgstr "no"
 
-#: entries/polish_strings.py:29
+#: entries/polish_strings.py:45
 msgid "wulgarny"
 msgstr "vulgar"
 
-#: entries/polish_strings.py:30
+#: entries/polish_strings.py:46
 msgid "potoczny"
 msgstr "colloquial"
 
-#: entries/polish_strings.py:31
+#: entries/polish_strings.py:47
 msgid "archaiczny"
 msgstr "archaic"
 
-#: entries/polish_strings.py:32 entries/polish_strings.py:211
+#: entries/polish_strings.py:48 entries/polish_strings.py:227
 msgid "zły"
 msgstr "bad"
 
-#: entries/polish_strings.py:33 entries/polish_strings.py:212
+#: entries/polish_strings.py:49 entries/polish_strings.py:228
 msgid "wÄ…tpliwy"
 msgstr "uncertain"
 
-#: entries/polish_strings.py:34
+#: entries/polish_strings.py:50
 msgid "pewny"
 msgstr "certain"
 
-#: entries/polish_strings.py:39
+#: entries/polish_strings.py:55
 msgid "wulgarna"
 msgstr "vulgar"
 
-#: entries/polish_strings.py:40
+#: entries/polish_strings.py:56
 msgid "potoczna"
 msgstr "colloquial"
 
-#: entries/polish_strings.py:41
+#: entries/polish_strings.py:57
 msgid "archaiczna"
 msgstr "archaic"
 
-#: entries/polish_strings.py:42
+#: entries/polish_strings.py:58
 msgid "zła"
 msgstr "bad"
 
-#: entries/polish_strings.py:43
-msgid "niepewna"
+#: entries/polish_strings.py:59
+msgid "wÄ…tpliwa"
 msgstr "uncertain"
 
-#: entries/polish_strings.py:44
+#: entries/polish_strings.py:60
 msgid "pewna"
 msgstr "certain"
 
-#: entries/polish_strings.py:45
+#: entries/polish_strings.py:61
 msgid "sporadyczna"
 msgstr "rare"
 
-#: entries/polish_strings.py:46
+#: entries/polish_strings.py:62
 msgid "dziedzinowa"
 msgstr "domain-specific"
 
-#: entries/polish_strings.py:47
+#: entries/polish_strings.py:63
 msgid "metaforyczna"
 msgstr "metaphorical"
 
-#: entries/polish_strings.py:48
+#: entries/polish_strings.py:64
 msgid "nieznana"
 msgstr "unknown"
 
-#: entries/polish_strings.py:54
+#: entries/polish_strings.py:70
 msgid "dopełnienie"
 msgstr "object"
 
-#: entries/polish_strings.py:55
+#: entries/polish_strings.py:71
 msgid "centrum"
 msgstr "head"
 
-#: entries/polish_strings.py:60 entries/polish_strings.py:64
+#: entries/polish_strings.py:76 entries/polish_strings.py:80
 msgid "kontrolujÄ…cy"
 msgstr "controller"
 
-#: entries/polish_strings.py:61 entries/polish_strings.py:65
+#: entries/polish_strings.py:77 entries/polish_strings.py:81
 msgid "kontrolowany"
 msgstr "controllee"
 
-#: entries/polish_strings.py:62
+#: entries/polish_strings.py:78
 msgid "kontrolujÄ…cy #2"
 msgstr "controller #2"
 
-#: entries/polish_strings.py:63
+#: entries/polish_strings.py:79
 msgid "kontrolowany #2"
 msgstr "controllee #2"
 
-#: entries/polish_strings.py:70
+#: entries/polish_strings.py:86
 msgid "Przypadek"
 msgstr "Case"
 
-#: entries/polish_strings.py:71
+#: entries/polish_strings.py:87
 msgid "Liczba"
 msgstr "Number"
 
-#: entries/polish_strings.py:72
+#: entries/polish_strings.py:88
 msgid "Rodzaj"
 msgstr "Gender"
 
-#: entries/polish_strings.py:73
+#: entries/polish_strings.py:89
 msgid "Stopień"
 msgstr "Degree"
 
-#: entries/polish_strings.py:74
+#: entries/polish_strings.py:90
 msgid "Przyimek"
 msgstr "Preposition"
 
-#: entries/polish_strings.py:75
+#: entries/polish_strings.py:91
 msgid "Przyimek złożony"
 msgstr "Complex preposition"
 
-#: entries/polish_strings.py:76
+#: entries/polish_strings.py:92
 msgid "Inherentne <i>siÄ™</i>"
 msgstr "Inherent <i>siÄ™</i>"
 
-#: entries/polish_strings.py:77
+#: entries/polish_strings.py:93
 msgid "Zanegowanie"
 msgstr "Negativity"
 
-#: entries/polish_strings.py:78
+#: entries/polish_strings.py:94
 msgid "Typ frazy zdaniowej"
 msgstr "Clause type"
 
-#: entries/polish_strings.py:79
+#: entries/polish_strings.py:95
 msgid "Realizacje"
 msgstr "Realisations"
 
-#: entries/polish_strings.py:81
+#: entries/polish_strings.py:97
 msgid "Typ okolicznika"
 msgstr "Adverbial type"
 
-#: entries/polish_strings.py:82
+#: entries/polish_strings.py:98
 msgid "Typ frazy porównawczej"
 msgstr "Comparative phrase type"
 
-#: entries/polish_strings.py:83
+#: entries/polish_strings.py:99
 msgid "Postać frazy zleksykalizowanej"
 msgstr "Form of lexicalised phrase"
 
-#: entries/polish_strings.py:88
+#: entries/polish_strings.py:104
 msgid "strukturalny"
 msgstr "structural"
 
-#: entries/polish_strings.py:88
+#: entries/polish_strings.py:104
 msgid ""
 "mianownik na pozycji podmiotu, biernik albo dopełniacz w zależności od "
 "negacji na pozycji dopełnienia"
@@ -1704,45 +1803,45 @@ msgstr ""
 "nominative on a subject position, accusative or genitive depending on "
 "negation on a direct object position"
 
-#: entries/polish_strings.py:89
+#: entries/polish_strings.py:105
 msgid "mianownik"
 msgstr "nominative"
 
-#: entries/polish_strings.py:90
+#: entries/polish_strings.py:106
 msgid "dopełniacz"
 msgstr "genitive"
 
-#: entries/polish_strings.py:91
+#: entries/polish_strings.py:107
 msgid "celownik"
 msgstr "dative"
 
-#: entries/polish_strings.py:92
+#: entries/polish_strings.py:108
 msgid "biernik"
 msgstr "accusative"
 
-#: entries/polish_strings.py:93
+#: entries/polish_strings.py:109
 msgid "narzędnik"
 msgstr "instrumental"
 
-#: entries/polish_strings.py:94
+#: entries/polish_strings.py:110
 msgid "miejscownik"
 msgstr "locative"
 
-#: entries/polish_strings.py:95
+#: entries/polish_strings.py:111
 msgid "predykatywny"
 msgstr "predicative"
 
-#: entries/polish_strings.py:95
+#: entries/polish_strings.py:111
 msgid ""
 "narzędnik bądź przypadek narzucany przez element kontrolujący na pozycji "
 "predykatywnej"
 msgstr ""
 
-#: entries/polish_strings.py:96
+#: entries/polish_strings.py:112
 msgid "partytytwny"
 msgstr "partitive"
 
-#: entries/polish_strings.py:96
+#: entries/polish_strings.py:112
 msgid ""
 "przypadek służący do opisu rozchwiania pomiędzy biernikiem a dopełniaczem "
 "charakterystycznego dla rzeczowników partytywnych (podzielnych, np. "
@@ -1750,280 +1849,291 @@ msgid ""
 "chleba</i>, <i>nalać wodę/wody</i>)"
 msgstr ""
 
-#: entries/polish_strings.py:97
+#: entries/polish_strings.py:113
 msgid "poprzyimkowy"
 msgstr "postprepositional"
 
-#: entries/polish_strings.py:98
+#: entries/polish_strings.py:114
 msgid "uzgodnienie"
 msgstr "agreement"
 
-#: entries/polish_strings.py:100
+#: entries/polish_strings.py:116
 msgid "pojedyncza"
 msgstr "singular"
 
-#: entries/polish_strings.py:101
+#: entries/polish_strings.py:117
 msgid "mnoga"
 msgstr "plural"
 
-#: entries/polish_strings.py:102
+#: entries/polish_strings.py:118
 msgid "męski osobowy"
 msgstr "masculine personal"
 
-#: entries/polish_strings.py:103
+#: entries/polish_strings.py:119
 msgid "męski żywotny"
 msgstr "masculine animate"
 
-#: entries/polish_strings.py:104
+#: entries/polish_strings.py:120
 msgid "męski nieżywotny"
 msgstr "masculine inanimate"
 
-#: entries/polish_strings.py:105
+#: entries/polish_strings.py:121
 msgid "żeński"
 msgstr "feminine"
 
-#: entries/polish_strings.py:106
+#: entries/polish_strings.py:122
 msgid "nijaki"
 msgstr "neuter"
 
-#: entries/polish_strings.py:107
+#: entries/polish_strings.py:123
 msgid "równy"
 msgstr "positive"
 
-#: entries/polish_strings.py:108
+#: entries/polish_strings.py:124
 msgid "wyższy"
 msgstr "comparative"
 
-#: entries/polish_strings.py:109
+#: entries/polish_strings.py:125
 msgid "najwyższy"
 msgstr "superlative"
 
-#: entries/polish_strings.py:116
+#: entries/polish_strings.py:132
 msgid "sposobu"
 msgstr "manner"
 
-#: entries/polish_strings.py:127
+#: entries/polish_strings.py:143
 msgid "przyimkowa z przyimkiem złożonym"
 msgstr "prepositional with complex preposition"
 
-#: entries/polish_strings.py:129
+#: entries/polish_strings.py:145
 msgid "dystrybutywna"
 msgstr "distributive"
 
-#: entries/polish_strings.py:131
+#: entries/polish_strings.py:147
 msgid "podmiot czasownika wymagajÄ…cego bezokolicznika"
 msgstr "subject of a verb requiring an infinitive"
 
-#: entries/polish_strings.py:132
+#: entries/polish_strings.py:148
 msgid "zamrożona fraza zleksykalizowana"
 msgstr "fixed lexicalised phrase"
 
-#: entries/polish_strings.py:134
+#: entries/polish_strings.py:150
 msgid "fraza zleksykalizowana"
 msgstr "lexicalised phrase"
 
-#: entries/polish_strings.py:135
+#: entries/polish_strings.py:151
 msgid "zdaniowa z korelatem"
 msgstr "clause with a correlate"
 
-#: entries/polish_strings.py:139
+#: entries/polish_strings.py:155
 msgid "mowa niezależna"
 msgstr "direct speech"
 
-#: entries/polish_strings.py:142
+#: entries/polish_strings.py:158
 msgid "przyimkowo-przymiotnikowa"
 msgstr "adjectival-prepositional"
 
-#: entries/polish_strings.py:143
+#: entries/polish_strings.py:159
 msgid "przyimkowo-odsłownikowa"
 msgstr "gerundial-prepositional"
 
-#: entries/polish_strings.py:144
+#: entries/polish_strings.py:160
 msgid "zdaniowa z korelatem przyimkowym"
 msgstr "clause with a prepositional correlate"
 
-#: entries/polish_strings.py:145
+#: entries/polish_strings.py:161
 msgid "przyimkowo-rzeczownikowa"
 msgstr "nominal-prepositional"
 
-#: entries/polish_strings.py:146
+#: entries/polish_strings.py:162
 msgid "przyimkowo-liczebnikowa"
 msgstr "numeral-prepositional"
 
-#: entries/polish_strings.py:147
+#: entries/polish_strings.py:163
 msgid "przyimkowo-imiesłowowa"
 msgstr "participal-prepositional"
 
-#: entries/polish_strings.py:149
+#: entries/polish_strings.py:165
 msgid "wzajemnościowa partykuła się"
 msgstr "reciprocal siÄ™ particle"
 
-#: entries/polish_strings.py:150
+#: entries/polish_strings.py:166
 msgid "zwrotna partykuła się"
 msgstr "reflexive siÄ™ particle"
 
-#: entries/polish_strings.py:151
+#: entries/polish_strings.py:167
 msgid "okolicznikowa"
 msgstr "adjunct"
 
-#: entries/polish_strings.py:161
+#: entries/polish_strings.py:177
 msgid "lub"
 msgstr "or"
 
-#: entries/polish_strings.py:162
+#: entries/polish_strings.py:178
 msgid "wyłącznie"
 msgstr "exclusively"
 
-#: entries/polish_strings.py:167
+#: entries/polish_strings.py:183
 msgid "szeregowo (bez spójnika)"
 msgstr "concatenation (no conjunction)"
 
-#: entries/polish_strings.py:168
+#: entries/polish_strings.py:184
 msgid "koordynacja (ze spójnikiem)"
 msgstr "coordination (with conjunction)"
 
-#: entries/polish_strings.py:173
+#: entries/polish_strings.py:189
 msgid "RELAT"
 msgstr "RELAT"
 
-#: entries/polish_strings.py:174
+#: entries/polish_strings.py:190
 msgid "fuzzynimia synsetów"
 msgstr "synset fuzzynymy"
 
-#: entries/polish_strings.py:175
+#: entries/polish_strings.py:191
 msgid "holonimia"
 msgstr "holonymy"
 
-#: entries/polish_strings.py:176
+#: entries/polish_strings.py:192
 msgid "holonimia (typu część)"
 msgstr "holonymy (part)"
 
-#: entries/polish_strings.py:177
+#: entries/polish_strings.py:193
 msgid "holonimia (typu element taksonomiczny)"
 msgstr "holonymy (taxonomical element)"
 
-#: entries/polish_strings.py:178
+#: entries/polish_strings.py:194
 msgid "holonimia (typu element)"
 msgstr "holonymy (element)"
 
-#: entries/polish_strings.py:179
+#: entries/polish_strings.py:195
 msgid "holonimia (typu materiał)"
 msgstr "holonymy (material)"
 
-#: entries/polish_strings.py:180
+#: entries/polish_strings.py:196
 msgid "holonimia (typu miejsce)"
 msgstr "holonymy (place)"
 
-#: entries/polish_strings.py:181
+#: entries/polish_strings.py:197
 msgid "holonimia (typu porcja)"
 msgstr "holonymy (portion)"
 
-#: entries/polish_strings.py:182
+#: entries/polish_strings.py:198
 msgid "meronimia"
 msgstr "meronymy"
 
-#: entries/polish_strings.py:183
+#: entries/polish_strings.py:199
 msgid "meronimia (typu część)"
 msgstr "meronymy (part)"
 
-#: entries/polish_strings.py:184
+#: entries/polish_strings.py:200
 msgid "meronimia (typu element taksonomiczny)"
 msgstr "meronymy (taxonomical element)"
 
-#: entries/polish_strings.py:185
+#: entries/polish_strings.py:201
 msgid "meronimia (typu element)"
 msgstr "meronymy (element)"
 
-#: entries/polish_strings.py:186
+#: entries/polish_strings.py:202
 msgid "meronimia (typu materiał)"
 msgstr "meronymy (material)"
 
-#: entries/polish_strings.py:187
+#: entries/polish_strings.py:203
 msgid "meronimia (typu miejsce)"
 msgstr "meronymy (place)"
 
-#: entries/polish_strings.py:188
+#: entries/polish_strings.py:204
 msgid "meronimia (typu porcja)"
 msgstr "meronymy (portion)"
 
-#: entries/polish_strings.py:189
+#: entries/polish_strings.py:205
 msgid "nosiciel stanu/cechy"
 msgstr "owner of state/feature"
 
-#: entries/polish_strings.py:190
+#: entries/polish_strings.py:206
 msgid "stan/cecha"
 msgstr "state/feature"
 
-#: entries/polish_strings.py:191
+#: entries/polish_strings.py:207
 msgid "synonimia międzyparadygmatyczna"
 msgstr "interparadigm synonymy"
 
-#: entries/polish_strings.py:197
+#: entries/polish_strings.py:213
 msgid "Korpus Słownika Frekwencyjnego (0,5M segmentów)"
 msgstr "Frequency Dictionary Corpus (0.5M segments)"
 
-#: entries/polish_strings.py:198
+#: entries/polish_strings.py:214
 msgid "korpus ręcznie anotowany (1,2M segmentów)"
 msgstr "manually annotated corpus (1.2M segments)"
 
-#: entries/polish_strings.py:199
+#: entries/polish_strings.py:215
 msgid "próbka Korpusu IPI PAN (2. wydanie; 30M segmentów)"
 msgstr "IPI PAN Corpus sample (2nd edition; 30M segments)"
 
-#: entries/polish_strings.py:200
+#: entries/polish_strings.py:216
 msgid "pełny Korpus IPI PAN (2. wydanie; 250M segmentów)"
 msgstr "full IPI PAN Corpus (2nd edition; 250M segments)"
 
-#: entries/polish_strings.py:201
+#: entries/polish_strings.py:217
 msgid "podkorpus zrównoważony NKJP (300M segmentów)"
 msgstr "balanced NKJP subcorpus (300M segments)"
 
-#: entries/polish_strings.py:202
+#: entries/polish_strings.py:218
 msgid "demo NKJP (wersja 2; 500M segmentów)"
 msgstr "demo NKJP (version 2; 500M segments)"
 
-#: entries/polish_strings.py:203
+#: entries/polish_strings.py:219
 msgid "pełny NKJP (1800M segmentów)"
 msgstr "full NKJP (1800M segments)"
 
-#: entries/polish_strings.py:204
+#: entries/polish_strings.py:220
 msgid "literatura lingwistyczna"
 msgstr "linguistic literature"
 
-#: entries/polish_strings.py:205
+#: entries/polish_strings.py:221
 msgid "literatura inna"
 msgstr "other literature"
 
-#: entries/polish_strings.py:206
+#: entries/polish_strings.py:222
 msgid "własny"
 msgstr "own"
 
-#: entries/polish_strings.py:213
+#: entries/polish_strings.py:229
 msgid "dobry"
 msgstr "good"
 
 #: entries/templates/entries.html:34
+msgid "Filtrowanie"
+msgstr "Filtering"
+
+#: entries/templates/entries.html:41
+msgid "Ramy"
+msgstr "Frames"
+
+#: entries/templates/entries.html:44
+msgid "Schematy"
+msgstr "Schemata"
+
+#: entries/templates/entries.html:50
 msgid "Ostatnio oglÄ…dane"
 msgstr "Last visited"
 
-#: entries/templates/entries.html:47
+#: entries/templates/entries.html:60
 msgid "Opcje"
 msgstr "Options"
 
-#: entries/templates/entries.html:53
+#: entries/templates/entries.html:66
 msgid "Wyświetlaj opisy realizacji"
 msgstr "Show realisation descriptions"
 
-#: entries/templates/entries.html:67 entries/templates/entries.html:89
+#: entries/templates/entries.html:97
 msgid "Filtrowanie haseł"
 msgstr "Entry filtering"
 
-#: entries/templates/entries.html:105 entries/templates/entry_display.html:28
+#: entries/templates/entries.html:113
 msgid "Filtrowanie ram"
 msgstr "Frame filtering"
 
-#: entries/templates/entries.html:121 entries/templates/entry_display.html:36
-#: entries/templates/entry_display.html:61
+#: entries/templates/entries.html:129
 msgid "Filtrowanie schematów"
 msgstr "Schema filtering"
 
@@ -2039,40 +2149,40 @@ msgstr "Syntax (schemata)"
 msgid "Przykłady niedopasowane"
 msgstr "Unmatched examples"
 
-#: entries/templates/entry_display.html:45
+#: entries/templates/entry_display.html:35
+#: entries/templates/entry_display.html:54
 #: entries/templates/entry_display.html:69
-#: entries/templates/entry_display.html:84
 msgid "Przykład"
 msgstr "Example"
 
-#: entries/templates/entry_display.html:46
+#: entries/templates/entry_display.html:36
+#: entries/templates/entry_display.html:55
 #: entries/templates/entry_display.html:70
-#: entries/templates/entry_display.html:85
 msgid "Źródło"
 msgstr "Source"
 
-#: entries/templates/entry_display.html:53
+#: entries/templates/entry_display.html:43
+#: entries/templates/entry_display.html:62
 #: entries/templates/entry_display.html:77
-#: entries/templates/entry_display.html:92
 msgid "Brak przykładów"
 msgstr "No examples"
 
-#: entries/views.py:426
+#: entries/views.py:427
 msgid ""
 "Realizacja tego argumentu w zdaniu powinna być powiązana jakąkolwiek relacją"
 msgstr "Realisation of this argument in the sentence should be in any relation"
 
-#: entries/views.py:428
+#: entries/views.py:429
 msgid ""
 "Realizacja tego argumentu w zdaniu powinna być powiązana relacją <i>{}</i>"
 msgstr ""
 "Realisation of this argument in the sentence should be in <i>{}</i> relation"
 
-#: entries/views.py:429
+#: entries/views.py:430
 msgid "z realizacjÄ… argumentu <i>{}</i>."
 msgstr "with realisation of the <i>{}</i> argument."
 
-#: entries/views.py:442
+#: entries/views.py:443
 msgid "hiperonimy:"
 msgstr "hypernyms"
 
@@ -2116,6 +2226,9 @@ msgstr "distributive phrase"
 msgid "fraza posesywna"
 msgstr "possesive phrase"
 
+#~ msgid "niepewna"
+#~ msgstr "uncertain"
+
 #~ msgid "Pobierz słownik"
 #~ msgstr "Download dictionary"
 
diff --git a/locale/en/LC_MESSAGES/djangojs.po b/locale/en/LC_MESSAGES/djangojs.po
index 380b0a3..2af266d 100644
--- a/locale/en/LC_MESSAGES/djangojs.po
+++ b/locale/en/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-06-30 10:15+0200\n"
+"POT-Creation-Date: 2021-07-07 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -180,27 +180,27 @@ msgstr ": sort column in descending order"
 msgid "Formularz filtrowania zawiera błędy."
 msgstr "The filtering form contains errors."
 
-#: entries/static/entries/js/forms.js:46 entries/static/entries/js/forms.js:108
+#: entries/static/entries/js/forms.js:49 entries/static/entries/js/forms.js:111
 msgid "nie"
 msgstr "not"
 
-#: entries/static/entries/js/forms.js:83
+#: entries/static/entries/js/forms.js:86
 msgid "i"
 msgstr "and"
 
-#: entries/static/entries/js/forms.js:83
+#: entries/static/entries/js/forms.js:86
 msgid "lub"
 msgstr "or"
 
-#: entries/static/entries/js/forms.js:142
+#: entries/static/entries/js/forms.js:145
 msgid "zwiń"
 msgstr "collapse"
 
-#: entries/static/entries/js/forms.js:147
+#: entries/static/entries/js/forms.js:150
 msgid "rozwiń"
 msgstr "expand"
 
-#: entries/static/entries/js/forms.js:160
+#: entries/static/entries/js/forms.js:163
 msgid ""
 "Łączenie negacji elementu z operatorem ‹inny› na jednym poziomie formularza "
 "jest niemożliwe."
@@ -208,33 +208,33 @@ msgstr ""
 "Mixing element negation with ‹other› operator on the same level is not "
 "possible."
 
-#: entries/static/entries/js/forms.js:177
+#: entries/static/entries/js/forms.js:180
 msgid "Kliknij, aby wyłączyć negację tego atrybutu."
 msgstr "Click to switch off negation of this attribute."
 
-#: entries/static/entries/js/forms.js:179
+#: entries/static/entries/js/forms.js:182
 msgid "Kliknij, aby zanegować ten atrybut."
 msgstr "Click to negate this attribute."
 
-#: entries/static/entries/js/forms.js:203
+#: entries/static/entries/js/forms.js:206
 msgid ""
 "Łączenie operatorów ‹lub› i ‹inny› na jednym poziomie formularza jest "
 "niemożliwe."
 msgstr "Mixing ‹or› and ‹other› operators on the same level is not possible."
 
-#: entries/static/entries/js/forms.js:210
+#: entries/static/entries/js/forms.js:213
 msgid "Proszę najpierw dodać element,"
 msgstr "First add an element"
 
-#: entries/static/entries/js/forms.js:210
+#: entries/static/entries/js/forms.js:213
 msgid "aby użyć operatora ‹lub›"
 msgstr "in order to use ‹or› operator"
 
-#: entries/static/entries/js/forms.js:210
+#: entries/static/entries/js/forms.js:213
 msgid "aby użyć operatora ‹inny›"
 msgstr "in order to use ‹other› operator"
 
-#: entries/static/entries/js/forms.js:214
+#: entries/static/entries/js/forms.js:217
 msgid ""
 "Łączenie operatora ‹inny› z negacją elementu na jednym poziomie formularza "
 "jest niemożliwe."
@@ -242,24 +242,24 @@ msgstr ""
 "Mixing ‹other› operator with element negation on the same level is not "
 "possible."
 
-#: entries/static/entries/js/forms.js:218
+#: entries/static/entries/js/forms.js:221
 msgid "LUB"
 msgstr "OR"
 
-#: entries/static/entries/js/forms.js:218
+#: entries/static/entries/js/forms.js:221
 msgid "INNY"
 msgstr "OTHER"
 
-#: entries/static/entries/js/forms.js:218
+#: entries/static/entries/js/forms.js:221
 msgid "Usuń"
 msgstr "Remove"
 
-#: entries/static/entries/js/forms.js:229
+#: entries/static/entries/js/forms.js:232
 msgid "Wykonanie zapytania z operatorem ‹inny› może trwać zauważalnie dłużej."
 msgstr ""
 "Execution of a query using the ‹other› operator can take considerably longer."
 
-#: entries/static/entries/js/forms.js:322
+#: entries/static/entries/js/forms.js:325
 msgid ""
 "Dodanie elementu jest niemożliwe: osiągnięto maksymalny poziom zagnieżdżenia."
 msgstr "Can’t add an element: maximum depth reached."
-- 
GitLab