diff --git a/entries/static/entries/js/components/LexicalUnitEdit.js b/entries/static/entries/js/components/LexicalUnitEdit.js index 9558ba987411a222d67954b623aa20dd0300831f..59f99fa63c38a7e61b09807ddf68ce714579b329 100644 --- a/entries/static/entries/js/components/LexicalUnitEdit.js +++ b/entries/static/entries/js/components/LexicalUnitEdit.js @@ -5,6 +5,8 @@ import ExamplesComponent from "./frame-components/ExamplesComponent.js"; import SlowalFrameComponent from "./frame-components/SlowalFrameComponent.js"; import SemanticsSchemataComponent from "./frame-components/SemanticsSchemataComponent.js"; import MeaningComponent from "./frame-components/MeaningComponent.js"; +import SelectionalPreference from "../selectional_preference.js"; + let LexicalUnitEdit = {}; @@ -114,6 +116,11 @@ Object.assign(LexicalUnitEdit, { this.loadFrame(); } }, + computed: { + selectionalPreference() { + return new SelectionalPreference(); + } + }, methods: { hasWhiteSpace(s) { return /\s/g.test(s); @@ -202,12 +209,15 @@ Object.assign(LexicalUnitEdit, { } }, addSelectivePreference () { - if (!this.active_unified_frame_argument) { - alert(gettext("Zaznacz argument, do którego chcesz dodać preferencję.")); - } else { - window.addSelectivePreference(this.unified_frame, this.active_unified_frame_argument.id, this.frames, function () { - this.loadFrame(); - }.bind(this)); + if (!this.active_unified_frame_argument) { + alert(gettext("Zaznacz argument, do którego chcesz dodać preferencję.")); + } else { + this.selectionalPreference.addSelectivePreference(this.unified_frame, this.active_unified_frame_argument.id, this.frames, function () { + this.loadFrame(); + }.bind(this)); + // window.addSelectivePreference(this.unified_frame, this.active_unified_frame_argument.id, this.frames, function () { + // this.loadFrame(); + // }.bind(this)); } }, removeSelectionalPreference () { diff --git a/entries/static/entries/js/entries.js b/entries/static/entries/js/entries.js index 05f31b5944955b960ebe076398f1acf832b7d138..a218b24fe6e98f44d5bd4bf553a3b3f16fb43b15 100644 --- a/entries/static/entries/js/entries.js +++ b/entries/static/entries/js/entries.js @@ -1113,7 +1113,7 @@ $(document).ready(function() { bind_settings(); - initialize_entries_list(); + // initialize_entries_list(); // $('#id_filter_schema_').change(function() { // get_entry(curr_entry, curr_no_filters); @@ -1124,22 +1124,22 @@ $(document).ready(function() { // }); initialize_main_form(); - + initialize_frames_form(); - + initialize_schemata_form(); //$('.local-filter').hide(); - getPredefinedSelections(); + // getPredefinedSelections(); - getRoles(); - - getRoleAttributes(); + // getRoles(); + // + // getRoleAttributes(); - $.getJSON('relations', function(data){ - memorizeRelations(data.relations); - }); + // $.getJSON('relations', function(data){ + // memorizeRelations(data.relations); + // }); $('#main-form').submit(); }); diff --git a/entries/static/entries/js/selectional_preference.js b/entries/static/entries/js/selectional_preference.js index 1ee7f992de301db2d6d0d359f70eb64e7f9db68f..f4afa793e13fb85a9a396fc3c7384c96e6fe8ebd 100644 --- a/entries/static/entries/js/selectional_preference.js +++ b/entries/static/entries/js/selectional_preference.js @@ -1,337 +1,369 @@ -var predefined = []; -var relations = []; -var synsets = []; -var change = false; +export default class SelectionalPreference { -function predefinedSelect() { - let display = ""; + predefined = []; + relations = []; + synsets = []; + change = false; - let i; - for (i = 0; i < predefined.length; i++) { - display += "<input type = \"checkbox\" name = \"predef\" value = \"" + predefined[i].id + "\">" + predefined[i].content + "<br>"; + constructor() { + this.loadPredefinedSelections(); + this.loadRelations(); } - return display; -} + loadPredefinedSelections() { + $.ajax({ + dataType: "json", + url: 'predefined_preferences', + success: (data) => { + this.predefined = data.predefined; + }, + async: false + }); + } -function getPredefinedSelections() { - $.ajax({ - dataType: "json", - url: 'predefined_preferences', - success: function(data){ - predefined = data.predefined; - }, - async: false - }); -} + loadRelations(new_relations) { + $.ajax({ + dataType: "json", + url: 'relations', + success: (data) => { + this.relations = data.relations; + }, + async: false + }); + } -function memorizeRelations(new_relations) { - relations = new_relations; -} + getSynsets(context, pos) { -function relationsSelect() { - let display = "<select name = \"rel\">"; + if ((typeof pos) == 'undefined') { + pos = '_'; + } - let i; - for (i = 0; i < relations.length; i++) { - display += "<option value = \"" + relations[i].id + "\">" + relations[i].content + "</option>"; + $.ajax({ + dataType: "json", + url: 'synsets', + data: {base: context, pos: pos}, + success: function (data) { + this.synsets = data.synsets + }.bind(this), + async: false + }); + + let display = ""; + + let i; + for (i = 0; i < this.synsets.length; i++) { + display += "<input type = \"radio\" name = \"synset\" value = \"" + this.synsets[i].id + "\"><div>"; + let j; + for (j = 0; j < this.synsets[i].content.length; j++) { + const lexical_unit = this.synsets[i].content[j]; + display += lexical_unit.base + "-" + lexical_unit.sense + ": <i>" + lexical_unit.glossa + "</i><br>"; + } + display += "</div>"; + } + + return display; } - display += "</select>" - return display; -} -function argumentSelect(frame, complement_id) { - let display = "<select name = \"arg\">"; + predefinedSelect() { + let display = ""; - let i; - for (i = 0; i < frame.arguments.length; i++) { - var local_complement_id = frame.arguments[i].argument_id; - if (local_complement_id && local_complement_id !== String(complement_id)) { - display += "<option value = \"" + local_complement_id + "\">" + frame.arguments[i].role + "</option>"; + let i; + for (i = 0; i < this.predefined.length; i++) { + display += "<input type = \"checkbox\" name = \"predef\" value = \"" + this.predefined[i].id + "\">" + this.predefined[i].content + "<br>"; } - } - - display += "</select>" - return display; -} + return display; + } -function getSynsets(context, pos) { + relationsSelect() { + let display = "<select name = \"rel\">"; - if ((typeof pos) == 'undefined') { - pos = '_'; + let i; + for (i = 0; i < this.relations.length; i++) { + display += "<option value = \"" + this.relations[i].id + "\">" + this.relations[i].content + "</option>"; + } + display += "</select>" + return display; } - $.ajax({ - dataType: "json", - url: 'synsets', - data: {base: context, pos: pos}, - success: function(data){ synsets = data.synsets }, - async: false - }); - - let display = ""; - - let i; - for (i = 0; i < synsets.length; i++) { - display += "<input type = \"radio\" name = \"synset\" value = \"" + synsets[i].id + "\"><div>"; - let j; - for (j = 0; j < synsets[i].content.length; j++) { - const lexical_unit = synsets[i].content[j]; - display += lexical_unit.base + "-" + lexical_unit.sense + ": <i>" + lexical_unit.glossa + "</i><br>"; + argumentSelect(frame, complement_id) { + let display = "<select name = \"arg\">"; + + let i; + for (i = 0; i < frame.arguments.length; i++) { + var local_complement_id = frame.arguments[i].id; + if (local_complement_id && local_complement_id !== complement_id && frame.arguments[i].role) { + display += "<option value = \"" + local_complement_id + "\">" + frame.arguments[i].role.str + "</option>"; + } } - display += "</div>"; - } - return display; + display += "</select>" -} + return display; + } -function relationArgument(frame, complement_id) { - return relationsSelect() + "<br><br>" + argumentSelect(frame, complement_id); -} + relationArgument(frame, complement_id) { + return this.relationsSelect() + "<br><br>" + this.argumentSelect(frame, complement_id); + } -function attachPlWNContextAutocomplete() { - $('#plWN_context_selection').autocomplete({ - select: function(event, ui){ - }, - source: function(req, add){ - $.getJSON('plWN_context_lookup', req, function(data) { - const suggestions = []; - $.each(data['result'], function(i, val){ - suggestions.push(val); + attachPlWNContextAutocomplete() { + $('#plWN_context_selection').autocomplete({ + select: function (event, ui) { + }, + source: function (req, add) { + $.getJSON('plWN_context_lookup', req, function (data) { + const suggestions = []; + $.each(data['result'], function (i, val) { + suggestions.push(val); + }); + add(suggestions); }); - add(suggestions); - }); - }, - }); -} + }, + }); + } -function addSelectivePreference(unified_frame, unified_frame_active_argument_id, frames, callbackFunction) { - if (!unified_frame_active_argument_id) return; - addSelectivePreferenceBase(unified_frame, frames, unified_frame_active_argument_id, callbackFunction); -} + addSelectivePreference(unified_frame, unified_frame_active_argument_id, frames, callbackFunction) { + if (!unified_frame_active_argument_id) return; + this.addSelectivePreferenceBase(unified_frame, frames, unified_frame_active_argument_id, callbackFunction); + } -function addSelectivePreferenceBase(unified_frame, frames, complement_id, callbackFunction) { - let unified_frame_id = unified_frame.id; + addSelectivePreferenceBase(unified_frame, frames, complement_id, callbackFunction) { + let unified_frame_id = unified_frame.id; - const submitSynsetSelection = function(e,v,m,f){ - if (v == -1) { - e.preventDefault(); - $.prompt.goToState('state2'); - } - if (v == 1) { - e.preventDefault(); - const synset = normalizeFormData(f.synset); + const submitSynsetSelection = (e, v, m, f) => { + if (v == -1) { + e.preventDefault(); + $.prompt.goToState('state2'); + } + if (v == 1) { + e.preventDefault(); + const synset = normalizeFormData(f.synset); - let i; - for (i = 0; i < synset.length; i++) { - saveSynsetPreference(unified_frame_id, complement_id, synset[i]) + let i; + for (i = 0; i < synset.length; i++) { + this.saveSynsetPreference(unified_frame_id, complement_id, synset[i]) + } + $.prompt.goToState('state0'); } - $.prompt.goToState('state0'); } - } - const existingSelect = function () { - let availablePreferencies = slowal_frames2selecional_preferencies(unified_frame, frames)[complement_id]; - if (!availablePreferencies) { - return gettext('Brak preferencji selekcyjnych do wyboru.') - } - return availablePreferencies.map(preference => { - return `<label><input type="checkbox" name="existing" value="${preference.type}:${preference.id}" /> ${preference.str}</label><br />`; - }).join(""); - }; - - const select_preference = { - state0: { - title: 'Typ preferencji selekcyjnej', - html: 'Wybierz typ preferencji selekcyjnej', - buttons: { Istniejąca: 0, Predefiniowana: 1, Słowosieć: 2, Relacja: 3, Koniec: -1 }, - focus: -1, - submit: function(e,v,m,f){ - if (v == -1) { - e.preventDefault(); - $.prompt.close(); - - callbackFunction(); - } - if (v === 0) { - e.preventDefault(); - $.prompt.goToState('state4'); - } - if (v == 1) { - e.preventDefault(); - $.prompt.goToState('state1'); - } - if (v == 2) { - e.preventDefault(); - $.prompt.goToState('state2'); - } - if (v == 3) { - e.preventDefault(); - $.prompt.goToState('state3'); - } + const existingSelect = function () { + let availablePreferencies = slowal_frames2selecional_preferencies(unified_frame, frames)[complement_id]; + if (!availablePreferencies) { + return gettext('Brak preferencji selekcyjnych do wyboru.') } - }, - state1: { - title: 'Wybierz preferencję selekcyjną', - html: predefinedSelect(), - buttons: { Anuluj: -1, Zatwierdź: 1 }, - focus: 1, - submit: function(e,v,m,f){ - - if (v == -1) { - e.preventDefault(); - $.prompt.goToState('state0'); - } - if (v == 1) { - e.preventDefault(); - const predef = normalizeFormData(f.predef); - - let i; - for (i = 0; i < predef.length; i++) { - savePredefinedPreference(unified_frame_id, complement_id, predef[i]) - // addPreference(unified_frame_id, complement_id, { type: 'g', content: predef[i], text: predefined[indexOfId(predefined, predef[i])].content }); + return availablePreferencies.map(preference => { + return `<label><input type="checkbox" name="existing" value="${preference.type}:${preference.id}" /> ${preference.str}</label><br />`; + }).join(""); + }; + + const select_preference = { + state0: { + title: 'Typ preferencji selekcyjnej', + html: 'Wybierz typ preferencji selekcyjnej', + buttons: {Istniejąca: 0, Predefiniowana: 1, Słowosieć: 2, Relacja: 3, Koniec: -1}, + focus: -1, + submit: (e, v, m, f) => { + if (v == -1) { + e.preventDefault(); + $.prompt.close(); + + callbackFunction(); + } + if (v === 0) { + e.preventDefault(); + $.prompt.goToState('state4'); + } + if (v == 1) { + e.preventDefault(); + $.prompt.goToState('state1'); + } + if (v == 2) { + e.preventDefault(); + $.prompt.goToState('state2'); + } + if (v == 3) { + e.preventDefault(); + $.prompt.goToState('state3'); } - $.prompt.goToState('state0'); - } - } - }, - state2: { - title: 'Wybierz preferencję selekcyjną', - html: "<input id=\"plWN_context_selection\" type=\"text\" name=\"context\">", - buttons: { Anuluj: -1, Wyszukaj: 1 }, - focus: 1, - submit: function(e,v,m,f){ - if (v == -1) { - e.preventDefault(); - $.prompt.goToState('state0'); } - if (v == 1) { - e.preventDefault(); - $.prompt.removeState('state21'); - $.prompt.addState('state21', {title: 'Znaczenia', html: getSynsets(f.context), buttons: {Anuluj: -1, Zatwierdź: 1}, focus: 1, submit: submitSynsetSelection}, 'state2'); - $.prompt.goToState('state21'); + }, + state1: { + title: 'Wybierz preferencję selekcyjną', + html: this.predefinedSelect(), + buttons: {Anuluj: -1, Zatwierdź: 1}, + focus: 1, + submit: (e, v, m, f) => { + + if (v == -1) { + e.preventDefault(); + $.prompt.goToState('state0'); + } + if (v == 1) { + e.preventDefault(); + const predef = normalizeFormData(f.predef); + + let i; + for (i = 0; i < predef.length; i++) { + this.savePredefinedPreference(unified_frame_id, complement_id, predef[i]) + } + $.prompt.goToState('state0'); + } } - } - }, - state3: { - title: 'Wybierz relację i argument', - html: relationArgument(unified_frame, complement_id), - buttons: { Anuluj: -1, Zatwierdź: 1 }, - focus: 1, - submit: function(e,v,m,f){ - if (v == -1) { - e.preventDefault(); - $.prompt.goToState('state0'); + }, + state2: { + title: 'Wybierz preferencję selekcyjną', + html: "<input id=\"plWN_context_selection\" type=\"text\" name=\"context\">", + buttons: {Anuluj: -1, Wyszukaj: 1}, + focus: 1, + submit: (e, v, m, f) => { + if (v == -1) { + e.preventDefault(); + $.prompt.goToState('state0'); + } + if (v == 1) { + e.preventDefault(); + $.prompt.removeState('state21'); + $.prompt.addState('state21', { + title: 'Znaczenia', + html: this.getSynsets(f.context), + buttons: {Anuluj: -1, Zatwierdź: 1}, + focus: 1, + submit: submitSynsetSelection + }, 'state2'); + $.prompt.goToState('state21'); + } } - if (v == 1) { - e.preventDefault(); + }, + state3: { + title: 'Wybierz relację i argument', + html: this.relationArgument(unified_frame, complement_id), + buttons: {Anuluj: -1, Zatwierdź: 1}, + focus: 1, + submit: (e, v, m, f) => { + if (v == -1) { + e.preventDefault(); + $.prompt.goToState('state0'); + } + if (v == 1) { + e.preventDefault(); - const rel = normalizeFormData(f.rel); - const args = normalizeFormData(f.arg); + const rel = normalizeFormData(f.rel); + const args = normalizeFormData(f.arg); - let i, j; - for (i = 0; i < rel.length; i++) { - for (j = 0; j < args.length; j++) { - saveRelationalSelectionalPreference(unified_frame_id, complement_id, args[j], rel[i]) - // addPreference(unified_frame_id, complement_id, {type: 'r', content: { relation: rel[i], to: args[j] }, text: relations[indexOfId(relations, rel[i])].content + "<br>-> [" + text + "]" }); + let i, j; + for (i = 0; i < rel.length; i++) { + for (j = 0; j < args.length; j++) { + this.saveRelationalSelectionalPreference(unified_frame_id, complement_id, args[j], rel[i]) + } } - } - $.prompt.goToState('state0'); - } - } - }, - state4: { - title: 'Wybierz z istniejących', - html: existingSelect(), - buttons: { Anuluj: -1, Zatwierdź: 1 }, - focus: 1, - submit: function(e,v,m,f){ - if (v == -1) { - e.preventDefault(); - $.prompt.goToState('state0'); + $.prompt.goToState('state0'); + } } - if (v == 1) { - e.preventDefault(); - normalizeFormData(f.existing).map(choice => { - let [type, id] = choice.split(':'); - switch (type) { - case 'meanings.Synset': - saveSynsetPreference(unified_frame_id, complement_id, id); - case 'semantics.PredefinedSelectionalPreference': - savePredefinedPreference(unified_frame_id, complement_id, id); - case 'semantics.RelationalSelectionalPreference': - saveRelationalSelectionalPreference(unified_frame_id, complement_id, null, null); // TODO - } - }); - $.prompt.goToState('state0'); + }, + state4: { + title: 'Wybierz z istniejących', + html: existingSelect(), + buttons: {Anuluj: -1, Zatwierdź: 1}, + focus: 1, + submit: (e, v, m, f) => { + if (v == -1) { + e.preventDefault(); + $.prompt.goToState('state0'); + } + if (v == 1) { + e.preventDefault(); + normalizeFormData(f.existing).map(choice => { + let [type, id] = choice.split(':'); + switch (type) { + case 'meanings.Synset': + this.saveSynsetPreference(unified_frame_id, complement_id, id); + break; + case 'semantics.PredefinedSelectionalPreference': + this.savePredefinedPreference(unified_frame_id, complement_id, id); + break; + case 'semantics.RelationalSelectionalPreference': + this.saveRelationalSelectionalPreference(unified_frame_id, complement_id, null, null); // TODO + break; + } + }); + $.prompt.goToState('state0'); + } } - } - }, - }; - if (change == true) { - alertSemantics(); - } else { - $.prompt(select_preference); - attachPlWNContextAutocomplete(); - } - -} - + }, + }; + if (this.change == true) { + this.alertSemantics(); + } else { + $.prompt(select_preference); + this.attachPlWNContextAutocomplete(); + } + } + saveSynsetPreference(frame_id, complement_id, synset_preference_id) { + const data = { + 'frame_id': frame_id, + 'complement_id': complement_id, + 'synset_preference_id': synset_preference_id + }; + $.ajax({ + type: 'post', + url: '/' + lang + '/unifier/save_synset_preference/', + dataType: 'json', + data: data, + timeout: 60000, + success: function (response) { + show_info('Preferencja zosała zapisana'); + }, + error: function (request, errorType, errorMessage) { + show_error(errorType + ' (' + errorMessage + ')'); + } + }); + } -function saveSynsetPreference(frame_id, complement_id, synset_preference_id) { - const data = { 'frame_id' : frame_id, 'complement_id' : complement_id, 'synset_preference_id' : synset_preference_id }; - $.ajax({ - type : 'post', - url : '/' + lang + '/unifier/save_synset_preference/', - dataType : 'json', - data : data, - timeout : 60000, - success : function(response) { - show_info('Preferencja zosała zapisana'); - }, - error: function(request, errorType, errorMessage) { - show_error(errorType + ' (' + errorMessage + ')'); - } - }); -} + savePredefinedPreference(frame_id, complement_id, predefined_preference_id) { + const data = { + 'frame_id': frame_id, + 'complement_id': complement_id, + 'predefined_preference_id': predefined_preference_id + }; + $.ajax({ + type: 'post', + url: '/' + lang + '/unifier/save_predefined_preference/', + dataType: 'json', + data: data, + timeout: 60000, + success: function (response) { + show_info('Preferencja zosała zapisana'); + }, + error: function (request, errorType, errorMessage) { + show_error(errorType + ' (' + errorMessage + ')'); + } + }); + } -function savePredefinedPreference(frame_id, complement_id, predefined_preference_id) { - const data = { 'frame_id' : frame_id, 'complement_id' : complement_id, 'predefined_preference_id' : predefined_preference_id }; - $.ajax({ - type : 'post', - url : '/' + lang + '/unifier/save_predefined_preference/', - dataType : 'json', - data : data, - timeout : 60000, - success : function(response) { - show_info('Preferencja zosała zapisana'); - }, - error: function(request, errorType, errorMessage) { - show_error(errorType + ' (' + errorMessage + ')'); - } - }); -} + saveRelationalSelectionalPreference(frame_id, complement_id_from, complement_id_to, relation_id) { + const data = { + 'frame_id': frame_id, + 'complement_id_from': complement_id_from, + 'complement_id_to': complement_id_to, + 'relation_id': relation_id + }; + $.ajax({ + type: 'post', + url: '/' + lang + '/unifier/save_relational_selectional_preference/', + dataType: 'json', + data: data, + timeout: 60000, + success: function (response) { + show_info('Preferencja zosała zapisana'); + }, + error: function (request, errorType, errorMessage) { + show_error(errorType + ' (' + errorMessage + ')'); + } + }); + } -function saveRelationalSelectionalPreference(frame_id, complement_id_from, complement_id_to, relation_id) { - const data = { 'frame_id' : frame_id, 'complement_id_from' : complement_id_from, 'complement_id_to' : complement_id_to, 'relation_id': relation_id }; - $.ajax({ - type : 'post', - url : '/' + lang + '/unifier/save_relational_selectional_preference/', - dataType : 'json', - data : data, - timeout : 60000, - success : function(response) { - show_info('Preferencja zosała zapisana'); - }, - error: function(request, errorType, errorMessage) { - show_error(errorType + ' (' + errorMessage + ')'); - } - }); } - - diff --git a/entries/templates/entries.html b/entries/templates/entries.html index 6100d20eb38bdd28ec675ca9fc8cd51d0640f9d7..cb1455a803ce1ef31488da84906c724c455af2cd 100644 --- a/entries/templates/entries.html +++ b/entries/templates/entries.html @@ -12,7 +12,6 @@ <script src="{% static 'entries/js/unification_frames_list.js' %}"></script> <script src="{% static 'entries/js/unification_entries_for_frames_list.js' %}"></script> <script src="{% static 'entries/js/unification.js' %}"></script> - <script src="{% static 'entries/js/selectional_preference.js' %}"></script> <script src="{% static 'entries/js/jquery-impromptu.min.js' %}"></script> <script src="https://unpkg.com/vue@3"></script> <script type="module" src="{% static 'entries/js/entries_index.js' %}"></script> diff --git a/entries/templates/entries_base.html b/entries/templates/entries_base.html index 25996851a9006507414ce8e3ad617ff48cdc2649..2df1529b641a36758ffc1203af32ba0a50385d8d 100644 --- a/entries/templates/entries_base.html +++ b/entries/templates/entries_base.html @@ -25,7 +25,6 @@ <!--script src="{% static 'entries/js/panels.js' %}"></script--> <script src="{% static 'entries/js/forms.js' %}"></script> <script src="{% static 'entries/js/utils.js' %}"></script> - <script src="{% static 'entries/js/selectional_preference.js' %}"></script> <script src="{% static 'entries/js/entries.js' %}"></script> {% endblock %} diff --git a/entries/templates/unification.html b/entries/templates/unification.html index af416ac21b4f9bb522b8ce565ef9b9b19ec9e07a..fd0aba6b0e8d78ae6fb1454e4f01257dcd4ada26 100644 --- a/entries/templates/unification.html +++ b/entries/templates/unification.html @@ -13,7 +13,6 @@ <script src="{% static 'entries/js/unification_frames_list.js' %}"></script> <script src="{% static 'entries/js/unification_entries_for_frames_list.js' %}"></script> <script src="{% static 'entries/js/unification.js' %}"></script> - <script src="{% static 'entries/js/selectional_preference.js' %}"></script> <script src="{% static 'entries/js/jquery-impromptu.min.js' %}"></script> <script src="https://unpkg.com/vue@3"></script> <script>