From 6ec8b0f8c601176053c3d820a0df10df82289306 Mon Sep 17 00:00:00 2001 From: susanodd Date: Fri, 12 Jul 2024 11:53:43 +0200 Subject: [PATCH] #1268: Added Movement Direction to phonology fields. --- media/js/glosses_toggle_edit.js | 31 +++++++++++++++ signbank/dictionary/adminviews.py | 8 +++- .../dictionary/admin_batch_edit_view.html | 27 +++++++++++++ signbank/dictionary/update.py | 13 +++++++ signbank/dictionary/update_glosses.py | 38 +++++++++++++++++++ signbank/dictionary/urls.py | 3 ++ 6 files changed, 119 insertions(+), 1 deletion(-) diff --git a/media/js/glosses_toggle_edit.js b/media/js/glosses_toggle_edit.js index 81d757b2..b9932f8a 100644 --- a/media/js/glosses_toggle_edit.js +++ b/media/js/glosses_toggle_edit.js @@ -201,6 +201,23 @@ function toggle_movSh(data) { buttonCell.attr('value', button_contents); } +function toggle_movDir(data) { + if ($.isEmptyObject(data)) { + return; + }; + var glossid = data.glossid; + var movDir = data.movDir; + var hCell = $("#movDir_cell_"+glossid); + $(hCell).empty(); + var cell = ""+movDir+""; + hCell.html(cell); + + var button_lookup = '#button_' + glossid + '_movDir'; + var buttonCell = $(button_lookup); + var button_contents = similar_gloss_fields_labels['movDir'] + ': ' + movDir; + buttonCell.attr('value', button_contents); +} + function toggle_repeat(data) { if ($.isEmptyObject(data)) { return; @@ -524,6 +541,20 @@ $(document).ready(function() { }); }); + $('.quick_movDir').click(function(e) + { + e.preventDefault(); + var glossid = $(this).attr('value'); + var movDir = $(this).attr("data-movDir"); + $.ajax({ + url : url + "/dictionary/update/toggle_movDir/" + glossid + "/" + movDir, + type: 'POST', + data: { 'csrfmiddlewaretoken': csrf_token }, + datatype: "json", + success : toggle_movDir + }); + }); + $('.quick_repeat').click(function(e) { e.preventDefault(); diff --git a/signbank/dictionary/adminviews.py b/signbank/dictionary/adminviews.py index 9ec27a37..4dcbcb2e 100755 --- a/signbank/dictionary/adminviews.py +++ b/signbank/dictionary/adminviews.py @@ -6540,7 +6540,7 @@ def get_context_data(self, **kwargs): context['available_tags'] = [tag for tag in Tag.objects.all()] similar_gloss_fields = ['handedness', 'domhndsh', 'subhndsh', 'handCh', 'relatArtic', 'locprim', - 'contType', 'movSh', 'repeat', 'altern'] + 'contType', 'movSh', 'movDir', 'repeat', 'altern'] context['similar_gloss_fields'] = json.dumps(similar_gloss_fields) similar_gloss_fields_labels = {} for field in similar_gloss_fields: @@ -6592,6 +6592,12 @@ def get_context_data(self, **kwargs): field='MovementShape', machine_value__gt=1).order_by('name')] context['available_movSh'] = available_movSh + available_movDir = [fc for fc in FieldChoice.objects.filter( + field='MovementDir', machine_value__in=[0, 1]).order_by('machine_value')] + available_movDir += [fc for fc in FieldChoice.objects.filter( + field='MovementDir', machine_value__gt=1).order_by('name')] + context['available_movDir'] = available_movDir + available_boolean = [{'machine_value': 1, 'name': gettext("Yes")}, {'machine_value': 0, 'name': gettext("No")}] context['available_boolean'] = available_boolean diff --git a/signbank/dictionary/templates/dictionary/admin_batch_edit_view.html b/signbank/dictionary/templates/dictionary/admin_batch_edit_view.html index d3eaa308..3d11a9fb 100644 --- a/signbank/dictionary/templates/dictionary/admin_batch_edit_view.html +++ b/signbank/dictionary/templates/dictionary/admin_batch_edit_view.html @@ -532,6 +532,14 @@

{% trans "Batch Edit" %}

+ + {% trans "Movement Direction" %} + +
{% if gloss.movDir %}{{gloss.movDir.name}}{% endif %} +
+ + {% trans "Repeated Movement" %} @@ -758,6 +766,25 @@

{% trans "Batch Edit" %}

+
+
{% trans "Movement Direction" %} +
+
+
+

+ {% for wc in available_movDir %} + + {% endfor %} +

+
+
+
+
{% trans "Repeated Movement" %} diff --git a/signbank/dictionary/update.py b/signbank/dictionary/update.py index eb1f4dcd..07e7bb7a 100755 --- a/signbank/dictionary/update.py +++ b/signbank/dictionary/update.py @@ -3629,6 +3629,19 @@ def toggle_movSh(request, glossid, movSh): return JsonResponse(result) +@permission_required('dictionary.change_gloss') +def toggle_movDir(request, glossid, movDir): + + gloss = Gloss.objects.filter(id=glossid).first() + + if not okay_to_update_gloss(request, gloss): + return JsonResponse({}) + + result = mapping_toggle_movDir(request, gloss, movDir) + + return JsonResponse(result) + + @permission_required('dictionary.change_gloss') def toggle_repeat(request, glossid, repeat): diff --git a/signbank/dictionary/update_glosses.py b/signbank/dictionary/update_glosses.py index 756983ae..082f6c39 100644 --- a/signbank/dictionary/update_glosses.py +++ b/signbank/dictionary/update_glosses.py @@ -460,6 +460,44 @@ def mapping_toggle_movSh(request, gloss, movSh): return result +@permission_required('dictionary.change_gloss') +def mapping_toggle_movDir(request, gloss, movDir): + + try: + movDir_machine_value = int(movDir) + except TypeError: + return {} + + empty_movDir = FieldChoice.objects.get(field='MovementDir', machine_value=0) + new_movDir = FieldChoice.objects.filter(field='MovementDir', machine_value=movDir_machine_value).first() + + if not new_movDir: + # if the word class does not exist, set it to empty + movDir_machine_value = 0 + new_movDir = empty_movDir + + original_movDir = gloss.movDir.name if gloss.movDir else '-' + + with atomic(): + if not gloss.movDir: + gloss.movDir = new_movDir + elif gloss.movDir.machine_value != movDir_machine_value: + gloss.movDir = new_movDir + else: + gloss.movDir = empty_movDir + new_movDir = empty_movDir + gloss.save() + + add_gloss_update_to_revision_history(request.user, gloss, 'movDir', original_movDir, new_movDir.name) + + result = dict() + result['glossid'] = str(gloss.id) + newvalue = gloss.movDir.name + result['movDir'] = newvalue + + return result + + @permission_required('dictionary.change_gloss') def mapping_toggle_repeat(request, gloss, repeat): # repeat is 0 or 1 diff --git a/signbank/dictionary/urls.py b/signbank/dictionary/urls.py index 5ded9b1a..8e0c9d2d 100755 --- a/signbank/dictionary/urls.py +++ b/signbank/dictionary/urls.py @@ -114,6 +114,9 @@ re_path(r'^update/toggle_movSh/(?P\d+)/(?P.*)$', signbank.dictionary.update.toggle_movSh, name='toggle_movSh'), + re_path(r'^update/toggle_movDir/(?P\d+)/(?P.*)$', + signbank.dictionary.update.toggle_movDir, + name='toggle_movDir'), re_path(r'^update/toggle_repeat/(?P\d+)/(?P.*)$', signbank.dictionary.update.toggle_repeat, name='toggle_repeat'),