semantics_lexical_units.js 9.96 KB
var lexical_units = [];         // list of all lexical_units
var base;                       // base form of lexical unit
var free_luid = -1;             // these ids will be temporarely given to new lexical units
var free_sense;                 // what sense should be given to new lexical unit
var lexical_units_frames = [];
var lexical_units_num = [];

// store lexical units from database
function memorizeLexicalUnits(input_lexical_units) {
    lexical_units = input_lexical_units;
    
    var i;
    for (i = 0; i < lexical_units.length; i++) {
        lexical_unit_examples[lexical_units[i].id] = [];
    }
}

function basicLexicalUnitsData(info){
    base = info.base;
    free_sense = info.sense;
}

// create new lexical_unit
function createLexicalUnit(refl, glossa, relation, to) {

    if (((typeof to) == 'undefined') && (relation != 2)) {
        return
    }

    var refl_text = "";
    if (refl == "true") {
        refl_text = " się";
    } else {
        refl_text = "";
    }

    var lu = {base: base + refl_text, glossa: "" + glossa, definition: "", id: free_luid, luid: -1, refl: refl, glossa: glossa, pos: "czasownik", sense: free_sense, relation: relation, to: to, location: ""};
    var operation = {operation: 'add_unit', unit:lu};
    lexical_units.push(lu);
    lexical_unit_examples[free_luid] = []
    units_operations.push(operation); 
    free_sense = String.fromCharCode(free_sense.charCodeAt(0) + 1);
    free_luid -= 1;
}

// is unit with given luid from PlWN?
function isPlWNUnit(luid) {
    var i = indexOfId(lexical_units, luid);
    if (i >= 0) {
        if (lexical_units[i].luid == -1) {
            return false;
        }
    }
    return true;
}

// remove lexical unit (that is not from PlWN)
function destroyLexicalUnit(luid) {
    var i = indexOfId(lexical_units, luid);
    if (i >= 0) {
        if (lexical_units[i].luid == -1) {
            lexical_units.splice(i, 1);
            
            var j;
            for (j = 0; j < lexical_unit_examples[luid].length; j++) {
                var k = indexOfId(examples, lexical_unit_examples[luid][j]);
                if (k >= 0) {
                    examples[k].meanings = [];
                }
            }
            lexical_unit_examples[luid] = [];
            
            var operation = {operation: 'remove_unit', luid: luid};
            units_operations.push(operation);
        }
    }
}

function getGlossa(luid) {
    var lu = lexical_units[indexOfId(lexical_units, luid)];
    return lu.glossa;
}

// set glossa for unit with given luid
function setGlossa(luid, glossa) {
    var i = indexOfId(lexical_units, luid);
    lexical_units[i].glossa = "" + glossa;
    units_operations.push({operation: 'set_glossa', unit: luid, value: lexical_units[i].glossa});
}

function getLocation(luid) {
    if (isPLWNUnit(luid)){
	var lu = lexical_units[indexOfId(lexical_units, luid)];
	return lu.location;	
    } else {
	return "";
    }
}

// save all changes to meanings (lexical units)
function saveMeanings() {
    $.ajax({
        dataType: "json",
        url: ajax_update_meanings,
        data: {"operations": JSON.stringify(units_operations), "lemma_id": lemma_id},
        success: function(data){
            memorizeLexicalUnits(data.lexical_units);
            basicLexicalUnitsData(data.informations);
            updateExamplesConnections();
        },
        async: false
    });
    $.ajax({
        dataType: "json",
        url: ajax_examples,
        data: {"lemma_id": lemma_id},
        success: function(data){
            memorizeExamples(data.examples, true);
        },
        async: false
    });
    units_operations = [];
}

// get all meanings as radio-button form named "meaning"
function getMeanings() {
    var display = "";
    
    var i;
    for (i = 0; i < lexical_units.length; i++) {
        display += "<input type = \"radio\" name = \"meaning\" value = \"" + lexical_units[i].id + "\">" + lexical_units[i].base + "-" + lexical_units[i].sense + "<div id=\"glossa_" + lexical_units[i].id + "\">" + " <i>" + lexical_units[i].definition + "</i>";
	if (lexical_units[i].definition != "") {
	    display += "<br>";
	}
	display += lexical_units[i].glossa 
	if (lexical_units[i].glossa != "") {
	    display += "<br>";
	}
	display += lexical_units[i].location + "</div>";
    }
    
    return display;
}

// get all meanings as checkbox-type form, meanings with frame are disabled
function getMeaningsSelection() {
    var display = "";
    
    var i;
    for (i = 0; i < lexical_units.length; i++) {
        display += "<input type = \"checkbox\" name = \"meaning\" value = \"" + lexical_units[i].id + "\""
        var j;
        for (j = 0; j < lexical_units_num.length; j++) {
            if (indexOfId(lexical_units_num[j], lexical_units[i].id) != -1) {
                display += " disabled = \"True\""
            }
        }
        display += ">" + lexical_units[i].base + "-" + lexical_units[i].sense + "<br><div id=\"glossa_" + lexical_units[i].id + "\">" + lexical_units[i].glossa + "</div>"
    }

    return display;
}

// get all meanings as checkbox-type form, meanings with frame are disabled
function getMeaningsSelectionForFrame(frame_id) {
    var display = "";
    var id = "" + frame_id;
    

    // podstawowe znaczenia
    display += "<div>";
    var i;
    for (i = 0; i < lexical_units.length; i++) {
        display += "<input type = \"checkbox\" name = \"meaning\" value = \"" + lexical_units[i].id + "\""
        var j;
        for (j = 0; j < lexical_units_num.length; j++) {
            if 
            (indexOfId(lexical_units_num[j], lexical_units[i].id) != -1) {
                if (lexical_units_frames[j].indexOf(id) != -1) {
                    display += " checked";
                } else {
                    display += " disabled = \"True\"";
                }
            }
        }
        display += ">" + lexical_units[i].base + "-" + lexical_units[i].sense + "<br><div id=\"glossa_" + lexical_units[i].id + "\">" + lexical_units[i].glossa + "</div>"
    }
    display += "</div>";

    // znaczenia wielowyrazowe

    var lexicalisation = [];

    display += "<br/>";

    display += "<div>";

    var i;
    var roles = frame_content[frame_id].display.roles;
    for (i = 0; i < roles.length; i++) {
        if (isPOL(frame_id, i)) {
            var j;
            for (j = 0; j < connected[roles[i].csv_class].length; j++) {
                var options = [];
		var sch = connected[roles[i].csv_class][j].split("pos")[0];
	        var pos = connected[roles[i].csv_class][j].split("arg")[0];
	        var k;
                for (k = 0; k < schemas_content[sch].display.arguments[0].length; k++) {
                    if (schemas_content[sch].display.arguments[0][k].csv_class == pos) {
			var l;
                        for (l = 0; l < schemas_content[sch].display.arguments[0][k].lex.length; l++) {
			    options.push(schemas_content[sch].display.arguments[0][k].lex[l]);
                        }
                    } 
                } 
                var temp; // TODO: temporal solution for multiple schemata
                if (hasRefl(sch)) {
                    temp = [['się'], options]
                } else {
                    temp = [options]; 
                }
	        lexicalisation.push(temp);
            } 
	} 
    }

    display += getFormForLexicalisation(lexicalisation);

    display += "</div>";

    return display;
}

function getFormForLexicalisation(lexicalisation) {
    var result = "";
    var perms = permutations(lexicalisation);
    var i;
    for (i = 0; i < perms.length; i++) {
        result += lexicalisationForm(cartesian(perms[i]));
    }
    return result;
}

function permutations(llist) {
    return llist;
/*    if (list.length == 0) {
        return [[]];
    }
    var i;
    var result = [];
    for (i = 0; i < list.length; i++) {
        var shortlist = list.slice();
        shortlist.splice(i, 1);
	var perms = permutations(shortlist);
        var j;
        for (j = 0; j < perms.length; j++) {
            var tmp = perms[j];
            tmp.push(list[i]);
            result.push(tmp);
        }
    }
    return result;
*/
}

function cartesian(llist) {
    if (llist.length == 0) {
        return [[]];
    }
    var result = [];
    var shortllist = llist.slice();
    shortllist.splice(shortllist.length - 1, 1);
    var carts = cartesian(shortllist);
    var i;
    for (i = 0; i < llist[llist.length - 1].length; i++) {
        var tail = llist[llist.length - 1][i];
        var heads = carts.slice();
        var j;
        for (j = 0; j < heads.length; j++) {
            var tmp = heads[j].slice();
            tmp.push(tail);
            //alert(tmp);
            result.push(tmp);
        }
    }
    return result;
}

function lexicalisationForm(tokenised) {
    var display = "";
    var i;
    for (i = 0; i < tokenised.length; i++) {
        display += "<input type = \"checkbox\" name = \"mwe\" value = \"" + base + " " + tokenised[i].join(" ") + "\">"; // TODO: unikalne wartości, wartość => dodanie odpowiedniej jednostki (nazwa jednostki w wartości?)
        display += base + " " + tokenised[i].join(" ") + "<br\>";
    }
    return display;
}


// get readable form of lexical unit
function getLexicalUnit(luid) {
    var i = indexOfId(lexical_units, luid);
    // alert("" + luid + " -> " + i);
    var lu = lexical_units[i];
    return lu.base + '-' + lu.sense;
}


function addPhraseologicalUnit(mwe, glossa, relation, to) {
    var lu = {base: mwe, glossa: "" + glossa, definition: "", id: free_luid, luid: -1, refl: "false", glossa: glossa, pos: "czasownik", sense: "A", relation: relation, to: to, location: ""};
    var operation = {operation: 'add_unit', unit:lu};
    lexical_units.push(lu);
    lexical_unit_examples[free_luid] = [];
    frames_operations.push(operation); 
    free_luid -= 1; 
    return (free_luid + 1);
}

function addPhraseologicalUnits(frame_id, old_units, mwes, glossa, relation, to) {
    var i;
    var units = [];
    for (i = 0; i < mwes.length; i++) {
        units.push(addPhraseologicalUnit(mwes[i], glossa, relation, to));
    }
    changeUnits(frame_id, old_units.concat(units));
}