Commit 4481197cf6b1697344116a4c1b7c4e85adbe18fe

Authored by Tomasz Bartosiak
1 parent 316b760a

Removed possibility of assiging two roles to single syntactic phrase/position

semantics/static/js/semantics_connections.js
1 1 var connected = {}; // dictionaries of connections and disconnections between frames and schemas
2   -var disconnected = {};
3 2  
4 3  
5   -function memorizeConnections(arguments_connected, arguments_disconnected){
  4 +function memorizeConnections(arguments_connected, frames_connection){
6 5 connected = arguments_connected;
7   - disconnected = arguments_disconnected;
  6 + connected_reverse = frames_connection;
8 7 }
9 8  
10 9 function getConnected(frame_id) { /* TODO */
... ...
semantics/static/js/semantics_frames.js
... ... @@ -197,6 +197,16 @@ function removeFrame(frame_id) {
197 197 frames_operations.push({operation: "remove_frame", id: frame_id, units: units, connections: connections});
198 198 }
199 199  
  200 +function roleFree(frame_id, field_ids) {
  201 + var i;
  202 + for (i = 0; i < field_ids.length; i++) {
  203 + if (connected_reverse[field_ids[i]].indexOf('frame_' + frame_id + '_') >= 0) {
  204 + return false;
  205 + }
  206 + }
  207 + return true;
  208 +}
  209 +
200 210 function addArgument(frame_id, field_ids, roles) {
201 211  
202 212 if (validateRoles(roles)) {
... ... @@ -207,6 +217,11 @@ function addArgument(frame_id, field_ids, roles) {
207 217 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: ''});
208 218 }
209 219 connected['frame_' + frame_id + '_comp_' + free_complement_id + '_'] = field_ids;
  220 +
  221 + for(i = 0; i < field_ids.length; i++) {
  222 + connected_reverse[field_ids[i]].append('frame_' + frame_id + '_');
  223 + }
  224 +
210 225 var complement_id = free_complement_id;
211 226 free_complement_id = free_complement_id - 1;
212 227  
... ...
semantics/static/js/semantics_view.js
... ... @@ -989,50 +989,55 @@ function schemaClick(class_id) {
989 989 // highlighted_id = "26"
990 990 var frame_id = parseInt(highlighted_id);
991 991  
992   - var choose_role = {
993   - state0: {
994   - title: 'Wybierz rolę',
995   - html: roles_display_table,
996   - buttons: { Anuluj: -1, Zatwierdź: 1 },
997   - focus: 1,
998   - close: function(){return result;},
999   - submit: function(e,v,m,f){
1000   -
1001   - if (v == -1) {
1002   - e.preventDefault();
1003   - $.prompt.close();
1004   - }
1005   - if (v == 1) {
1006   - e.preventDefault();
1007   -
1008   - var roles = normalizeFormData(f.roles);
1009   -
1010   - var frame_id = parseInt(highlighted_id);
1011   - var complement_id = addArgument(frame_id, field_ids, roles);
1012   -
1013   - if (complement_id) {
1014   - var h = "frame_" + highlighted_id + "_";
1015   - var a = "frame_" + highlighted_id + "_comp_" + complement_id + "_";
  992 + if (roleFree(frame_id, field_ids)) {
  993 +
  994 + var choose_role = {
  995 + state0: {
  996 + title: 'Wybierz rolę',
  997 + html: roles_display_table,
  998 + buttons: { Anuluj: -1, Zatwierdź: 1 },
  999 + focus: 1,
  1000 + close: function(){return result;},
  1001 + submit: function(e,v,m,f){
  1002 +
  1003 + if (v == -1) {
  1004 + e.preventDefault();
  1005 + $.prompt.close();
  1006 + }
  1007 + if (v == 1) {
  1008 + e.preventDefault();
1016 1009  
1017   - // re-draw and re-color frame
1018   - frameClick(h);
1019   - displayFrames();
1020   - frameClick(a);
  1010 + var roles = normalizeFormData(f.roles);
  1011 +
  1012 + // var frame_id = parseInt(highlighted_id);
  1013 + var complement_id = addArgument(frame_id, field_ids, roles);
1021 1014  
1022   - result = true;
1023   - $.prompt.close();
1024   - } else {
1025   - alert("Wybrano niepoprawne role!");
  1015 + if (complement_id) {
  1016 + var h = "frame_" + highlighted_id + "_";
  1017 + var a = "frame_" + highlighted_id + "_comp_" + complement_id + "_";
  1018 +
  1019 + // re-draw and re-color frame
  1020 + frameClick(h);
  1021 + displayFrames();
  1022 + frameClick(a);
  1023 +
  1024 + result = true;
  1025 + $.prompt.close();
  1026 + } else {
  1027 + alert("Wybrano niepoprawne role!");
  1028 + }
1026 1029 }
  1030 +
1027 1031 }
1028   -
1029   - }
1030   - },
1031   - };
1032   - if (change == true) {
1033   - alertSemantics();
  1032 + },
  1033 + };
  1034 + if (change == true) {
  1035 + alertSemantics();
  1036 + } else {
  1037 + $.prompt(choose_role);
  1038 + }
1034 1039 } else {
1035   - $.prompt(choose_role);
  1040 + alert("Nie można ponownie podłączyć tej samej pozycji składniowej");
1036 1041 }
1037 1042  
1038 1043 }
... ... @@ -1046,21 +1051,42 @@ function schemaClick(class_id) {
1046 1051 } else {
1047 1052 // arg = "frame_26_comp_36_"
1048 1053 var i, j;
  1054 + var can_connect = true;
  1055 + if (roleFree(frame_id, field_ids)) {
  1056 + can_connect = false;
  1057 + }
  1058 + var connect = true;
1049 1059 for (i = 0; i < field_ids.length; i++) {
1050   - if ((j = connected[arg].indexOf(field_ids[i])) != -1) {
1051   - // disconnect
1052   - connected[arg].splice(j, 1);
1053   - frames_operations.push({operation: 'disconnect', arg: arg, connect: field_ids[i]});
1054   - var a = arg;
1055   - frameClick("");
1056   - frameClick(a);
1057   - } else {
1058   - //connect
1059   - connected[arg].push(field_ids[i]);
1060   - frames_operations.push({operation: 'connect', arg: arg, connect: field_ids[i]});
1061   - var a = arg;
1062   - frameClick("");
1063   - frameClick(a);
  1060 + if (connected[arg].indexOf(field_ids[i]) != -1) {
  1061 + connect = false;
  1062 + break;
  1063 + }
  1064 + }
  1065 + if (connect && !can_connect) {
  1066 + alert("Nie można ponownie podłączyć tej samej pozycji składniowej");
  1067 + } else {
  1068 + for (i = 0; i < field_ids.length; i++) {
  1069 + if (!connect) {
  1070 + // disconnect
  1071 + j = connected[arg].indexOf(field_ids[i])
  1072 + if (j != -1) {
  1073 + connected[arg].splice(j, 1);
  1074 + frames_operations.push({operation: 'disconnect', arg: arg, connect: field_ids[i]});
  1075 + var a = arg;
  1076 + frameClick("");
  1077 + frameClick(a);
  1078 + }
  1079 + } else {
  1080 + //connect
  1081 + j = connected[arg].indexOf(field_ids[i])
  1082 + if (j == -1) { // redundant
  1083 + connected[arg].push(field_ids[i]);
  1084 + frames_operations.push({operation: 'connect', arg: arg, connect: field_ids[i]});
  1085 + var a = arg;
  1086 + frameClick("");
  1087 + frameClick(a);
  1088 + }
  1089 + }
1064 1090 }
1065 1091 }
1066 1092 }
... ...
semantics/templates/semantics.html
... ... @@ -39,7 +39,7 @@
39 39 $.getJSON(ajax_frames, {lemma_id: {{ lemma.id }}}, function(data){
40 40 getFrames(data.frames_display);
41 41 displayFrames();
42   - memorizeConnections(data.connections.connected, data.connections.disconnected);
  42 + memorizeConnections(data.connections.connected, data.connections.connected_reverse);
43 43 alternationCounts(data.alternations);
44 44 $("#semantic-frames-count").empty();
45 45 $("#semantic-frames-count").append(data.frames_count);
... ...
semantics/views.py
... ... @@ -166,9 +166,6 @@ def ajax_frames(request, lemma_id):
166 166 display = {"roles": frame_roles, "preferences": frame_preferences}
167 167 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})
168 168  
169   -
170   - arguments_frame_connected[frame.id] = []
171   -
172 169 for complement, complement_class in zip(frame_complements, frame_ids):
173 170 if complement_class not in complement_arguments:
174 171 complement_arguments[complement_class] = []
... ... @@ -180,7 +177,9 @@ def ajax_frames(request, lemma_id):
180 177 alternation = schema_position.alternation
181 178 realization_id = u'schema_' + str(schema.id) + u'_pos_' + str(position.id) + '_arg_' + str(argument.id) + '_' + 'alt_' + str(alternation) + '_'
182 179 complement_arguments[complement_class].append(realization_id)
183   - arguments_frame_connected[frame.id].append(realization_id)
  180 + if realization_id not in arguments_frame_connected:
  181 + arguments_frame_connected[realization_id] = []
  182 + arguments_frame_connected[realization_id].append('frame_' + str(frame.id) + '_')
184 183 if schema.id in alternations[frame.id]:
185 184 alternations[frame.id][schema.id] = max(alternations[frame.id][schema.id], alternation)
186 185 else:
... ... @@ -189,16 +188,12 @@ def ajax_frames(request, lemma_id):
189 188  
190 189  
191 190 frames_display.append(frame_display)
192   -
193   - arguments_not_connected = {}
194   - # for complement_class in complement_arguments:
195   - # arguments_not_connected[complement_class] = list(all_schema_classes.difference(arguments_frame_connected[int(complement_class.split('_')[1])]))
196 191  
197 192 # ala["ma"] = "kot"
198 193  
199 194 context = {
200 195 'frames_display': frames_display,
201   - 'connections': {'connected': complement_arguments, 'disconnected': arguments_not_connected},
  196 + 'connections': {'connected': complement_arguments, 'connected_reverse': arguments_frame_connected},
202 197 'frames_count': lemma.entry_obj.actual_frames().count(),
203 198 'alternations': alternations
204 199 }
... ...