Commit 8671b45052c18cf46fbec5fffa7eb266afa57192

Authored by Tomasz Bartosiak
1 parent 6b16d0dc

phraseology -- second attempt on interface

semantics/static/js/semantics_frames.js
... ... @@ -93,6 +93,12 @@ function getFrameDisplay(frame_description){
93 93 display += '<table class="InactiveFrameTable">';
94 94 display += '<tr><td class="ColumnHeader">Rama:</td><td id="frame_' + frame_description.frame_id + '_" class="frame_' + frame_description.frame_id + '_" colspan="' + frame_description.colspan + '" onclick="frameClick(\'frame_' + frame_description.frame_id + '_\', \'frame_' + frame_description.frame_id + '_\')">';
95 95 display += '<span class="Opinion">' + frame_description.status + ' [' + frame_description.frame_id + ']</span>';
  96 + // display += '</td>';
  97 + if (frame_description.lemma.include) {
  98 + display += '<table style="float: right"><td id="' + frame_description.lemma.csv_id + '" class="' + frame_description.lemma.csv_class + '" onclick="var e = arguments[0]; e.stopPropagation(); frameClick(\'' +frame_description.lemma.csv_id + '\', \'' + frame_description.lemma.csv_class + '\')">Lemma</td></table>';
  99 + }
  100 + display += '</td>';
  101 + display += '</tr>';
96 102 display += '<tr>';
97 103 display += '<td class="ColumnHeader">Rola:</td>';
98 104 for (i = 0; i < frame_description.display.roles.length; i++) {
... ... @@ -155,7 +161,7 @@ function newFrame(units) {
155 161 }
156 162 lexical_units_num.push(units_list);
157 163  
158   - frame_content[free_frame_id] = {colspan: "1", rowspan: "1", status: "brak", frame_id: "" + x, display: {preferences:[[]], roles:[]}};
  164 + frame_content[free_frame_id] = {colspan: "1", rowspan: "1", status: "brak", frame_id: "" + x, display: {preferences:[[]], roles:[]}, lemma: {include: false}};
159 165 frames_operations.push({operation: "create_frame", meanings: units_list, id: x});
160 166 free_frame_id = free_frame_id - 1;
161 167 }
... ... @@ -240,13 +246,30 @@ function roleFree(frame_id, field_ids) {
240 246 function addArgument(frame_id, field_ids, roles) {
241 247  
242 248 if (validateRoles(roles)) {
243   - frame_content[frame_id].colspan = "" + (parseInt(frame_content[frame_id].colspan) + 1);
244   - frame_content[frame_id].display.roles.push({csv_class: 'frame_' + frame_id + '_comp_' + free_complement_id + '_', csv_id: 'frame_' + frame_id + '_comp_' + free_complement_id + '_', argument: ''});
245   - var i;
246   - for (i = 0; i < frame_content[frame_id].rowspan; i++) {
247   - 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: ''});
  249 + if (isLemma(roles)) {
  250 + if (frame_content[frame_id].lemma.include) {
  251 + alert("Ta rama ma już pole związane z lematem!");
  252 + } else {
  253 + frame_content[frame_id].lemma = {include: true, csv_class: 'frame_' + frame_id + '_lemma_comp_' + free_complement_id + '_', csv_id: 'frame_' + frame_id + '_lemma_comp_' + free_complement_id + '_'};
  254 + connected['frame_' + frame_id + '_lemma_comp_' + free_complement_id + '_'] = field_ids;
  255 + var complement_id_num = free_complement_id;
  256 + free_complement_id = free_complement_id - 1;
  257 + var complement_id = "frame_" + highlighted_id + "_lemma_comp_" + complement_id_num + "_";
  258 + var conn_complement_id = "frame_" + highlighted_id + "_comp_" + complement_id_num + "_";
  259 + }
  260 + } else {
  261 + frame_content[frame_id].colspan = "" + (parseInt(frame_content[frame_id].colspan) + 1);
  262 + frame_content[frame_id].display.roles.push({csv_class: 'frame_' + frame_id + '_comp_' + free_complement_id + '_', csv_id: 'frame_' + frame_id + '_comp_' + free_complement_id + '_', argument: ''});
  263 + var i;
  264 + for (i = 0; i < frame_content[frame_id].rowspan; i++) {
  265 + 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: ''});
  266 + }
  267 + connected['frame_' + frame_id + '_comp_' + free_complement_id + '_'] = field_ids;
  268 + var complement_id_num = free_complement_id;
  269 + free_complement_id = free_complement_id - 1;
  270 + var complement_id = "frame_" + highlighted_id + "_comp_" + complement_id_num + "_";
  271 + var conn_complement_id = complement_id;
248 272 }
249   - connected['frame_' + frame_id + '_comp_' + free_complement_id + '_'] = field_ids;
250 273  
251 274 for(i = 0; i < field_ids.length; i++) {
252 275 if (typeof(connected_reverse[field_ids[i]]) == 'undefined') {
... ... @@ -254,44 +277,46 @@ function addArgument(frame_id, field_ids, roles) {
254 277 }
255 278 connected_reverse[field_ids[i]].push('frame_' + frame_id + '_');
256 279 }
257   -
258   - var complement_id = free_complement_id;
259   - free_complement_id = free_complement_id - 1;
260 280  
261 281 for (i = 0; i < frame_content[frame_id].display.roles.length; i++) {
262   - if (frame_content[frame_id].display.roles[i].csv_id == 'frame_' + frame_id + '_comp_' + complement_id + '_') {
  282 + if (frame_content[frame_id].display.roles[i].csv_id == complement_id) {
263 283 frame_content[frame_id].display.roles[i].argument = roles;
264 284 }
265 285 }
266 286  
267   - frames_operations.push({operation: 'add_argument', frame_id: frame_id, id: complement_id, role: roles});
  287 + frames_operations.push({operation: 'add_argument', frame_id: frame_id, id: complement_id_num, role: roles});
268 288 for (i = 0; i < field_ids.length; i++) {
269   - frames_operations.push({operation: 'connect', arg: 'frame_' + frame_id + '_comp_' + complement_id + '_', connect: field_ids[i]});
  289 + frames_operations.push({operation: 'connect', arg: conn_complement_id, connect: field_ids[i]});
270 290 }
271 291  
272 292 return complement_id;
273 293 } else {
  294 + alert("Wybrano niepoprawny zestaw ról!");
274 295 return false;
275 296 }
276 297  
277 298 }
278 299  
279   -function removeArgument(frame_id, complement_id) {
  300 +function removeArgument(frame_id, complement_id, argument) {
280 301 var pos = -1;
281   - var arg = "frame_" + frame_id + "_comp_" + complement_id + "_"
  302 + var arg = argument;
282 303  
283   - var i;
284   - for (i = 0; i < frame_content[frame_id].display.roles.length; i++) {
285   - if (frame_content[frame_id].display.roles[i].csv_id == arg) {
286   - pos = i;
287   - }
288   - }
289   -
290   - frame_content[frame_id].display.roles.splice(pos, 1);
291   -
292   - var j;
293   - for (j = 0; j < frame_content[frame_id].display.preferences.length; j++) {
294   - frame_content[frame_id].display.preferences[j].splice(pos, 1);
  304 + if (argument.split('_').length == 5) { // zwykły argument
  305 + var i;
  306 + for (i = 0; i < frame_content[frame_id].display.roles.length; i++) {
  307 + if (frame_content[frame_id].display.roles[i].csv_id == arg) {
  308 + pos = i;
  309 + }
  310 + }
  311 +
  312 + frame_content[frame_id].display.roles.splice(pos, 1);
  313 +
  314 + var j;
  315 + for (j = 0; j < frame_content[frame_id].display.preferences.length; j++) {
  316 + frame_content[frame_id].display.preferences[j].splice(pos, 1);
  317 + }
  318 + } else { // argument leksykalny
  319 + frame_content[frame_id].lemma.include = false;
295 320 }
296 321  
297 322 frames_operations.push({operation: 'remove_argument', frame_id: frame_id, complement_id: complement_id});
... ... @@ -462,12 +487,16 @@ function saveFrames() {
462 487 else {
463 488 frameClick("");
464 489 $.post(ajax_modify_frames, {"operations": JSON.stringify(frames_operations), "lemma_id": lemma_id}, function(data){
465   - getFrames(data.frames_display);
466   - displayFrames();
467   - memorizeConnections(data.connections.connected, data.connections.connected_reverse);
468   - $("#semantic-frames-count").empty();
469   - $("#semantic-frames-count").append(data.frames_count);
470   - updateSchemataConnections();
  490 + $.getJSON(ajax_units, {"lemma_id": window.lemma_id}, function(units) {
  491 + memorizeLexicalUnits(units.lexical_units);
  492 + basicLexicalUnitsData(units.informations);
  493 + getFrames(data.frames_display);
  494 + displayFrames();
  495 + memorizeConnections(data.connections.connected, data.connections.connected_reverse);
  496 + $("#semantic-frames-count").empty();
  497 + $("#semantic-frames-count").append(data.frames_count);
  498 + updateSchemataConnections();
  499 + });
471 500 }, 'json');
472 501 frames_operations = [];
473 502 }
... ...
semantics/static/js/semantics_lexical_units.js
... ... @@ -198,34 +198,31 @@ function getMeaningsSelectionForFrame(frame_id) {
198 198  
199 199 display += "<div>";
200 200  
201   - var i;
202   - var roles = frame_content[frame_id].display.roles;
203   - for (i = 0; i < roles.length; i++) {
204   - if (isPOL(frame_id, i)) {
205   - var j;
206   - for (j = 0; j < connected[roles[i].csv_class].length; j++) {
207   - var options = [];
208   - var sch = connected[roles[i].csv_class][j].split("pos")[0];
209   - var pos = connected[roles[i].csv_class][j].split("arg")[0];
210   - var k;
211   - for (k = 0; k < schemas_content[sch].display.arguments[0].length; k++) {
212   - if (schemas_content[sch].display.arguments[0][k].csv_class == pos) {
213   - var l;
214   - for (l = 0; l < schemas_content[sch].display.arguments[0][k].lex.length; l++) {
215   - options.push(schemas_content[sch].display.arguments[0][k].lex[l]);
216   - }
217   - }
218   - }
219   - var temp; // TODO: temporal solution for multiple schemata
220   - if (hasRefl(sch)) {
221   - temp = [['się'], options]
222   - } else {
223   - temp = [options];
224   - }
225   - lexicalisation.push(temp);
226   - }
  201 + if (frame_content[frame_id].lemma.include) {
  202 + var lem = frame_content[frame_id].lemma.csv_class;
  203 + var j;
  204 + for (j = 0; j < connected[lem].length; j++) {
  205 + var options = [];
  206 + var sch = connected[lem][j].split("pos")[0];
  207 + var pos = connected[lem][j].split("arg")[0];
  208 + var k;
  209 + for (k = 0; k < schemas_content[sch].display.arguments[0].length; k++) {
  210 + if (schemas_content[sch].display.arguments[0][k].csv_class == pos) {
  211 + var l;
  212 + for (l = 0; l < schemas_content[sch].display.arguments[0][k].lex.length; l++) {
  213 + options.push(schemas_content[sch].display.arguments[0][k].lex[l]);
  214 + }
  215 + }
  216 + }
  217 + var temp; // TODO: temporal solution for multiple schemata
  218 + if (hasRefl(sch)) {
  219 + temp = [['się'], options]
  220 + } else {
  221 + temp = [options];
  222 + }
  223 + lexicalisation.push(temp);
227 224 }
228   - }
  225 + }
229 226  
230 227 display += getFormForLexicalisation(lexicalisation);
231 228  
... ... @@ -293,6 +290,12 @@ function lexicalisationForm(tokenised) {
293 290 var display = "";
294 291 var i;
295 292 for (i = 0; i < tokenised.length; i++) {
  293 + var j;
  294 + for (j = 0; j < lexical_units.length; j++) {
  295 + if (base + " " + tokenised[i].join(" ") == lexical_units[j].base) {
  296 + return "";
  297 + }
  298 + }
296 299 display += "<input type = \"checkbox\" name = \"mwe\" value = \"" + base + " " + tokenised[i].join(" ") + "\">"; // TODO: unikalne wartości, wartość => dodanie odpowiedniej jednostki (nazwa jednostki w wartości?)
297 300 display += base + " " + tokenised[i].join(" ") + "<br\>";
298 301 }
... ...
semantics/static/js/semantics_roles.js
... ... @@ -45,6 +45,13 @@ function rolesToHtml(roles_display, full){
45 45 return table;
46 46 }
47 47  
  48 +function isLemma(roles) {
  49 + if (roles.length != 1) {
  50 + return false;
  51 + }
  52 + return (role_name[roles[0]] == 'Lemma');
  53 +}
  54 +
48 55 function memorizeRoles(roles_display, roles_full){
49 56 roles_display_table = rolesToHtml(roles_display, false);
50 57 roles_display_table_full = rolesToHtml(roles_full, true);
... ...
semantics/static/js/semantics_view.js
... ... @@ -769,7 +769,7 @@ function removeFromFrame() {
769 769  
770 770 }
771 771 if (op == "add_realization") {
772   - // arg = "frame_26_comp_36_"
  772 + // arg = "frame_26_comp_36_(lemma_)"
773 773  
774 774 var frame_id = parseInt(arg.split('_')[1]);
775 775 var complement_id = parseInt(arg.split('_')[3]);
... ... @@ -777,8 +777,8 @@ function removeFromFrame() {
777 777 var h = "frame_" + highlighted_id + "_";
778 778  
779 779 frameClick(h);
780   -
781   - removeArgument(frame_id, complement_id);
  780 +
  781 + removeArgument(frame_id, complement_id, arg);
782 782  
783 783 op = "add_argument";
784 784 arg = "";
... ... @@ -812,7 +812,7 @@ function removeFromFrame() {
812 812 //////////////////////////// Display ////////////////////////////
813 813  
814 814 function frameClick(clicked_id) {
815   -
  815 +
816 816 if (clicked_id == "") {
817 817 deselect();
818 818 highlighted_id = "";
... ... @@ -866,6 +866,38 @@ function frameClick(clicked_id) {
866 866 $('#change_lus').removeAttr('disabled');
867 867 $('#change_opinion').removeAttr('disabled');
868 868 }
  869 + } else if (clicked_id.split('_')[4] == 'lemma') { // part of lemma click
  870 + frame_id = clicked_id.split('_')[1]
  871 +
  872 + if (highlighted_id != "") {
  873 + deselect();
  874 + }
  875 + if (semantics_selected_id == clicked_id) {
  876 + highlighted_id = "";
  877 + semantics_selected_id = "";
  878 + op = "none";
  879 +
  880 + $('#assign_role').attr('disabled', "True");
  881 + $('#add_preference').attr('disabled', "True");
  882 + $('#delete').attr('disabled', "True");
  883 + $('#multi_lus').attr('disabled', "True");
  884 + $('#change_lus').attr('disabled', "True");
  885 + $('#change_opinion').attr('disabled', "True");
  886 + } else {
  887 + select(frame_id, clicked_id);
  888 +
  889 + highlighted_id = frame_id;
  890 + semantics_selected_id = clicked_id;
  891 + op = "add_realization";
  892 + arg = clicked_id //.split('pref')[0]
  893 +
  894 + $('#assign_role').attr('disabled', "True");
  895 + $('#add_preference').attr('disabled', "True");
  896 + $('#delete').removeAttr('disabled');
  897 + $('#multi_lus').removeAttr('disabled');
  898 + $('#change_lus').removeAttr('disabled');
  899 + $('#change_opinion').removeAttr('disabled');
  900 + }
869 901 } else { // argument click
870 902 frame_id = clicked_id.split('_')[1]
871 903  
... ... @@ -947,6 +979,19 @@ function selectFrame(frame_id, clicked_id) {
947 979 $('#' + functionCsvId(connected[roles[i].csv_class][j])).css('color', '');
948 980 }
949 981 }
  982 +
  983 + var lemma = frame_content[frame_id].lemma;
  984 + if (lemma.include) {
  985 + var style = {type: 'background-color', value: 'white'};
  986 + $('#' + lemma.csv_id).css(style.type, style.value);
  987 + var j;
  988 + for (j = 0; j < connected[lemma.csv_class].length; j++) {
  989 + $('#' + connected[lemma.csv_class][j]).css(style.type, style.value);
  990 + $('#' + connected[lemma.csv_class][j]).css('color', '');
  991 + $('#' + functionCsvId(connected[lemma.csv_class][j])).css(style.type, style.value);
  992 + $('#' + functionCsvId(connected[lemma.csv_class][j])).css('color', '');
  993 + }
  994 + }
950 995  
951 996 $("#" + clicked_id).css('border-width', '5px');
952 997  
... ... @@ -1119,7 +1164,7 @@ function schemaClick(class_id, lex) {
1119 1164 }
1120 1165 field_ids = [class_id];
1121 1166 }
1122   -
  1167 +
1123 1168 if (control == "connect") {
1124 1169 if (op == "none") {
1125 1170 return;
... ... @@ -1153,7 +1198,7 @@ function schemaClick(class_id, lex) {
1153 1198  
1154 1199 if (complement_id) {
1155 1200 var h = "frame_" + highlighted_id + "_";
1156   - var a = "frame_" + highlighted_id + "_comp_" + complement_id + "_";
  1201 + var a = complement_id; //"frame_" + highlighted_id + "_comp_" + complement_id + "_";
1157 1202  
1158 1203 // re-draw and re-color frame
1159 1204 frameClick(h);
... ... @@ -1162,9 +1207,9 @@ function schemaClick(class_id, lex) {
1162 1207  
1163 1208 result = true;
1164 1209 $.prompt.close();
1165   - } else {
  1210 + } /*else {
1166 1211 alert("Wybrano niepoprawne role!");
1167   - }
  1212 + } */
1168 1213 }
1169 1214  
1170 1215 }
... ... @@ -1188,7 +1233,11 @@ function schemaClick(class_id, lex) {
1188 1233 if (arg == "") {
1189 1234 return;
1190 1235 } else {
1191   - // arg = "frame_26_comp_36_"
  1236 + // arg = "frame_26_comp_36_(lemma_)"
  1237 + if (arg.split('_')[4] == 'lemma' && lex.length == 0) {
  1238 + alert("Nie można podłączyć do lematu!");
  1239 + return;
  1240 + }
1192 1241 var frame_id = parseInt(parseInt(arg.split('_')[1]));
1193 1242 var i, j;
1194 1243 var can_connect = false;
... ...
semantics/views.py
... ... @@ -115,7 +115,10 @@ def create_frames_context(lemma_id, user):
115 115 frame_display["lexical_units"].append({"id": str(lu.id), "base": lu.base, "sense": str(lu.sense)})
116 116 for frame in type_frames[t]:
117 117 # frame_complements = Complement.objects.filter(frame=frame)
118   - frame_complements = frame.complements.all()
  118 + # frame_complements = frame.complements.all()
  119 + lemma_role = SemanticRole.objects.get(role="Lemma")
  120 + frame_complements = frame.complements.all().exclude(roles=lemma_role)
  121 + lemma_argument = frame.complements.filter(roles=lemma_role)
119 122  
120 123 # classes and first frame/position part of identifiers
121 124 frame_ids = [u'frame_' + str(frame.id) + '_comp_' + str(complement.id) + '_' for complement in frame_complements]
... ... @@ -174,7 +177,29 @@ def create_frames_context(lemma_id, user):
174 177 status = u'pewna'
175 178 else:
176 179 status = frame.opinion.value
177   - frame_display["frames"].append({"frame_id": str(frame.id), "colspan": str(max(len(frame_roles), 1)), "rowspan": str(frame_preferences_rowspan), "status": status, "display": display})
  180 + if len(lemma_argument) > 0:
  181 + csv = u'frame_' + str(frame.id) + '_comp_' + str(lemma_argument[0].id) + '_lemma_'
  182 + lemma_info = {"include": True, "csv_id": csv, "csv_class": csv}
  183 + if csv not in complement_arguments:
  184 + complement_arguments[csv] = []
  185 +
  186 + for schema_position in lemma_argument[0].realizations.all():
  187 + schema = schema_position.frame
  188 + position = schema_position.position
  189 + argument = schema_position.argument
  190 + alternation = schema_position.alternation
  191 + realization_id = u'schema_' + str(schema.id) + u'_pos_' + str(position.id) + '_arg_' + str(argument.id) + '_' + 'alt_' + str(alternation) + '_'
  192 + complement_arguments[csv].append(realization_id)
  193 + if realization_id not in arguments_frame_connected:
  194 + arguments_frame_connected[realization_id] = []
  195 + arguments_frame_connected[realization_id].append('frame_' + str(frame.id) + '_')
  196 + if schema.id in alternations[frame.id]:
  197 + alternations[frame.id][schema.id] = max(alternations[frame.id][schema.id], alternation)
  198 + else:
  199 + alternations[frame.id][schema.id] = alternation
  200 + else:
  201 + lemma_info = {"include": False}
  202 + frame_display["frames"].append({"frame_id": str(frame.id), "colspan": str(max(len(frame_roles), 1)), "rowspan": str(frame_preferences_rowspan), "status": status, "display": display, "lemma": lemma_info})
178 203  
179 204 for complement, complement_class in zip(frame_complements, frame_ids):
180 205 if complement_class not in complement_arguments:
... ...