From 4481197cf6b1697344116a4c1b7c4e85adbe18fe Mon Sep 17 00:00:00 2001 From: Tomasz Bartosiak <tomasz.bartosiak@mozart.ipipan.waw.pl> Date: Tue, 27 Oct 2015 17:15:57 +0100 Subject: [PATCH] Removed possibility of assiging two roles to single syntactic phrase/position --- semantics/static/js/semantics_connections.js | 5 ++--- semantics/static/js/semantics_frames.js | 15 +++++++++++++++ semantics/static/js/semantics_view.js | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- semantics/templates/semantics.html | 2 +- semantics/views.py | 13 ++++--------- 5 files changed, 101 insertions(+), 66 deletions(-) diff --git a/semantics/static/js/semantics_connections.js b/semantics/static/js/semantics_connections.js index 93c6ba4..114d7b8 100644 --- a/semantics/static/js/semantics_connections.js +++ b/semantics/static/js/semantics_connections.js @@ -1,10 +1,9 @@ var connected = {}; // dictionaries of connections and disconnections between frames and schemas -var disconnected = {}; -function memorizeConnections(arguments_connected, arguments_disconnected){ +function memorizeConnections(arguments_connected, frames_connection){ connected = arguments_connected; - disconnected = arguments_disconnected; + connected_reverse = frames_connection; } function getConnected(frame_id) { /* TODO */ diff --git a/semantics/static/js/semantics_frames.js b/semantics/static/js/semantics_frames.js index 78e0276..87bbed0 100644 --- a/semantics/static/js/semantics_frames.js +++ b/semantics/static/js/semantics_frames.js @@ -197,6 +197,16 @@ function removeFrame(frame_id) { frames_operations.push({operation: "remove_frame", id: frame_id, units: units, connections: connections}); } +function roleFree(frame_id, field_ids) { + var i; + for (i = 0; i < field_ids.length; i++) { + if (connected_reverse[field_ids[i]].indexOf('frame_' + frame_id + '_') >= 0) { + return false; + } + } + return true; +} + function addArgument(frame_id, field_ids, roles) { if (validateRoles(roles)) { @@ -207,6 +217,11 @@ function addArgument(frame_id, field_ids, roles) { frame_content[frame_id].display.preferences[i].push({csv_class: 'frame_' + frame_id + '_comp_' + free_complement_id + '_', csv_id: 'frame_' + frame_id + '_comp_' + free_complement_id + '_pref_-' + i + '_', preference: ''}); } connected['frame_' + frame_id + '_comp_' + free_complement_id + '_'] = field_ids; + + for(i = 0; i < field_ids.length; i++) { + connected_reverse[field_ids[i]].append('frame_' + frame_id + '_'); + } + var complement_id = free_complement_id; free_complement_id = free_complement_id - 1; diff --git a/semantics/static/js/semantics_view.js b/semantics/static/js/semantics_view.js index cc8d11d..9407866 100644 --- a/semantics/static/js/semantics_view.js +++ b/semantics/static/js/semantics_view.js @@ -989,50 +989,55 @@ function schemaClick(class_id) { // highlighted_id = "26" var frame_id = parseInt(highlighted_id); - var choose_role = { - state0: { - title: 'Wybierz rolę', - html: roles_display_table, - buttons: { Anuluj: -1, Zatwierdź: 1 }, - focus: 1, - close: function(){return result;}, - submit: function(e,v,m,f){ - - if (v == -1) { - e.preventDefault(); - $.prompt.close(); - } - if (v == 1) { - e.preventDefault(); - - var roles = normalizeFormData(f.roles); - - var frame_id = parseInt(highlighted_id); - var complement_id = addArgument(frame_id, field_ids, roles); - - if (complement_id) { - var h = "frame_" + highlighted_id + "_"; - var a = "frame_" + highlighted_id + "_comp_" + complement_id + "_"; + if (roleFree(frame_id, field_ids)) { + + var choose_role = { + state0: { + title: 'Wybierz rolę', + html: roles_display_table, + buttons: { Anuluj: -1, Zatwierdź: 1 }, + focus: 1, + close: function(){return result;}, + submit: function(e,v,m,f){ + + if (v == -1) { + e.preventDefault(); + $.prompt.close(); + } + if (v == 1) { + e.preventDefault(); - // re-draw and re-color frame - frameClick(h); - displayFrames(); - frameClick(a); + var roles = normalizeFormData(f.roles); + + // var frame_id = parseInt(highlighted_id); + var complement_id = addArgument(frame_id, field_ids, roles); - result = true; - $.prompt.close(); - } else { - alert("Wybrano niepoprawne role!"); + if (complement_id) { + var h = "frame_" + highlighted_id + "_"; + var a = "frame_" + highlighted_id + "_comp_" + complement_id + "_"; + + // re-draw and re-color frame + frameClick(h); + displayFrames(); + frameClick(a); + + result = true; + $.prompt.close(); + } else { + alert("Wybrano niepoprawne role!"); + } } + } - - } - }, - }; - if (change == true) { - alertSemantics(); + }, + }; + if (change == true) { + alertSemantics(); + } else { + $.prompt(choose_role); + } } else { - $.prompt(choose_role); + alert("Nie można ponownie podłączyć tej samej pozycji składniowej"); } } @@ -1046,21 +1051,42 @@ function schemaClick(class_id) { } else { // arg = "frame_26_comp_36_" var i, j; + var can_connect = true; + if (roleFree(frame_id, field_ids)) { + can_connect = false; + } + var connect = true; for (i = 0; i < field_ids.length; i++) { - if ((j = connected[arg].indexOf(field_ids[i])) != -1) { - // disconnect - connected[arg].splice(j, 1); - frames_operations.push({operation: 'disconnect', arg: arg, connect: field_ids[i]}); - var a = arg; - frameClick(""); - frameClick(a); - } else { - //connect - connected[arg].push(field_ids[i]); - frames_operations.push({operation: 'connect', arg: arg, connect: field_ids[i]}); - var a = arg; - frameClick(""); - frameClick(a); + if (connected[arg].indexOf(field_ids[i]) != -1) { + connect = false; + break; + } + } + if (connect && !can_connect) { + alert("Nie można ponownie podłączyć tej samej pozycji składniowej"); + } else { + for (i = 0; i < field_ids.length; i++) { + if (!connect) { + // disconnect + j = connected[arg].indexOf(field_ids[i]) + if (j != -1) { + connected[arg].splice(j, 1); + frames_operations.push({operation: 'disconnect', arg: arg, connect: field_ids[i]}); + var a = arg; + frameClick(""); + frameClick(a); + } + } else { + //connect + j = connected[arg].indexOf(field_ids[i]) + if (j == -1) { // redundant + connected[arg].push(field_ids[i]); + frames_operations.push({operation: 'connect', arg: arg, connect: field_ids[i]}); + var a = arg; + frameClick(""); + frameClick(a); + } + } } } } diff --git a/semantics/templates/semantics.html b/semantics/templates/semantics.html index 61ca5a0..30b386e 100644 --- a/semantics/templates/semantics.html +++ b/semantics/templates/semantics.html @@ -39,7 +39,7 @@ $.getJSON(ajax_frames, {lemma_id: {{ lemma.id }}}, function(data){ getFrames(data.frames_display); displayFrames(); - memorizeConnections(data.connections.connected, data.connections.disconnected); + memorizeConnections(data.connections.connected, data.connections.connected_reverse); alternationCounts(data.alternations); $("#semantic-frames-count").empty(); $("#semantic-frames-count").append(data.frames_count); diff --git a/semantics/views.py b/semantics/views.py index 8258a6e..e4aae64 100644 --- a/semantics/views.py +++ b/semantics/views.py @@ -166,9 +166,6 @@ def ajax_frames(request, lemma_id): display = {"roles": frame_roles, "preferences": frame_preferences} frame_display["frames"].append({"frame_id": str(frame.id), "colspan": str(max(len(frame_roles), 1)), "rowspan": str(frame_preferences_rowspan), "status": u'pewna', "display": display}) - - arguments_frame_connected[frame.id] = [] - for complement, complement_class in zip(frame_complements, frame_ids): if complement_class not in complement_arguments: complement_arguments[complement_class] = [] @@ -180,7 +177,9 @@ def ajax_frames(request, lemma_id): alternation = schema_position.alternation realization_id = u'schema_' + str(schema.id) + u'_pos_' + str(position.id) + '_arg_' + str(argument.id) + '_' + 'alt_' + str(alternation) + '_' complement_arguments[complement_class].append(realization_id) - arguments_frame_connected[frame.id].append(realization_id) + if realization_id not in arguments_frame_connected: + arguments_frame_connected[realization_id] = [] + arguments_frame_connected[realization_id].append('frame_' + str(frame.id) + '_') if schema.id in alternations[frame.id]: alternations[frame.id][schema.id] = max(alternations[frame.id][schema.id], alternation) else: @@ -189,16 +188,12 @@ def ajax_frames(request, lemma_id): frames_display.append(frame_display) - - arguments_not_connected = {} - # for complement_class in complement_arguments: - # arguments_not_connected[complement_class] = list(all_schema_classes.difference(arguments_frame_connected[int(complement_class.split('_')[1])])) # ala["ma"] = "kot" context = { 'frames_display': frames_display, - 'connections': {'connected': complement_arguments, 'disconnected': arguments_not_connected}, + 'connections': {'connected': complement_arguments, 'connected_reverse': arguments_frame_connected}, 'frames_count': lemma.entry_obj.actual_frames().count(), 'alternations': alternations } -- libgit2 0.22.2