nopaque/app/static/js/CorpusAnalysis/QueryBuilder.js

974 lines
40 KiB
JavaScript
Raw Normal View History

2022-07-13 12:06:22 +00:00
class ConcordanceQueryBuilder {
2022-09-07 07:06:21 +00:00
constructor() {
2022-08-03 14:21:11 +00:00
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
this.elements = {
counter: 0,
yourQueryContent: [],
queryContent:[],
2022-10-12 12:08:42 +00:00
concordanceQueryBuilder: document.querySelector('#concordance-query-builder'),
concordanceQueryBuilderButton: document.querySelector('#concordance-query-builder-button'),
closeQueryBuilder: document.querySelector('#close-query-builder'),
2022-09-07 07:06:21 +00:00
queryBuilderTutorialModal: document.querySelector('#query-builder-tutorial-modal'),
2022-10-20 13:52:25 +00:00
valueValidator: true,
2022-09-07 07:06:21 +00:00
2022-09-07 07:06:21 +00:00
//#region QueryBuilder Elements
positionalAttrButton: document.querySelector('#positional-attr-button'),
positionalAttrArea: document.querySelector('#positional-attr'),
2022-10-12 12:08:42 +00:00
positionalAttr: document.querySelector('#token-attr'),
2022-09-07 07:06:21 +00:00
structuralAttrButton: document.querySelector('#structural-attr-button'),
2022-10-12 12:08:42 +00:00
structuralAttrArea: document.querySelector('#structural-attr'),
2022-09-07 07:06:21 +00:00
queryContainer: document.querySelector('#query-container'),
2022-10-12 12:08:42 +00:00
buttonPreparer: document.querySelector('#button-preparer'),
yourQuery: document.querySelector('#your-query'),
insertQueryButton: document.querySelector('#insert-query-button'),
2022-09-07 07:06:21 +00:00
queryPreview: document.querySelector('#query-preview'),
2022-10-12 12:08:42 +00:00
tokenQuery: document.querySelector('#token-query'),
tokenBuilderContent: document.querySelector('#token-builder-content'),
tokenSubmitButton: document.querySelector('#token-submit'),
2022-09-07 07:06:21 +00:00
extFormQuery: document.querySelector('#concordance-extension-form-query'),
2022-10-12 12:08:42 +00:00
dropButton: '',
2022-09-07 07:06:21 +00:00
queryBuilderTutorialInfoIcon: document.querySelector('#query-builder-tutorial-info-icon'),
2022-10-12 12:08:42 +00:00
tokenTutorialInfoIcon: document.querySelector('#token-tutorial-info-icon'),
2022-09-07 07:06:21 +00:00
editTokenTutorialInfoIcon: document.querySelector('#edit-options-tutorial-info-icon'),
structuralAttributeTutorialInfoIcon: document.querySelector('#add-structural-attribute-tutorial-info-icon'),
generalOptionsQueryBuilderTutorialInfoIcon: document.querySelector('#general-options-query-builder-tutorial-info-icon'),
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
//#endregion QueryBuilder Elements
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
//#region Strucutral Attributes
2022-07-13 12:06:22 +00:00
2022-10-12 12:08:42 +00:00
sentence:document.querySelector('#sentence'),
entity: document.querySelector('#entity'),
textAnnotation: document.querySelector('#text-annotation'),
entityBuilder: document.querySelector('#entity-builder'),
englishEntType: document.querySelector('#english-ent-type'),
germanEntType: document.querySelector('#german-ent-type'),
emptyEntity: document.querySelector('#empty-entity'),
2022-09-07 07:06:21 +00:00
entityAnyType: false,
2022-10-12 12:08:42 +00:00
textAnnotationBuilder: document.querySelector('#text-annotation-builder'),
textAnnotationOptions: document.querySelector('#text-annotation-options'),
textAnnotationInput: document.querySelector('#text-annotation-input'),
textAnnotationSubmit: document.querySelector('#text-annotation-submit'),
2022-09-07 07:06:21 +00:00
noValueMetadataMessage: document.querySelector('#no-value-metadata-message'),
//#endregion Structural Attributes
//#region Token Attributes
tokenQueryFilled: false,
2022-10-12 12:08:42 +00:00
lemma: document.querySelector('#lemma'),
emptyToken: document.querySelector('#empty-token'),
word: document.querySelector('#word'),
lemma: document.querySelector('#lemma'),
pos: document.querySelector('#pos'),
simplePosButton: document.querySelector('#simple-pos-button'),
incidenceModifiers: document.querySelector('[data-target="incidence-modifiers"]'),
or: document.querySelector('#or'),
and: document.querySelector('#and'),
2022-09-07 07:06:21 +00:00
//#region Word and Lemma Elements
2022-10-12 12:08:42 +00:00
wordBuilder: document.querySelector('#word-builder'),
lemmaBuilder: document.querySelector('#lemma-builder'),
inputOptions: document.querySelector('#input-options'),
incidenceModifiersButton: document.querySelector('#incidence-modifiers-button'),
2022-09-07 07:06:21 +00:00
conditionContainer: document.querySelector('#condition-container'),
2022-10-12 12:08:42 +00:00
wordInput: document.querySelector('#word-input'),
lemmaInput: document.querySelector('#lemma-input'),
ignoreCaseCheckbox : document.querySelector('#ignore-case-checkbox'),
ignoreCase: document.querySelector('input[type="checkbox"]'),
wildcardChar: document.querySelector('#wildcard-char'),
optionGroup: document.querySelector('#option-group'),
2022-09-07 07:06:21 +00:00
//#endregion Word and Lemma Elements
//#region posBuilder Elements
2022-10-12 12:08:42 +00:00
englishPosBuilder: document.querySelector('#english-pos-builder'),
englishPos: document.querySelector('#english-pos'),
germanPosBuilder: document.querySelector('#german-pos-builder'),
germanPos: document.querySelector('#german-pos'),
2022-09-07 07:06:21 +00:00
//#endregion posBuilder Elements
//#region simple_posBuilder Elements
2022-10-12 12:08:42 +00:00
simplePosBuilder: document.querySelector('#simplepos-builder'),
simplePos: document.querySelector('#simple-pos'),
2022-09-07 07:06:21 +00:00
//#endregion simple_posBuilder Elements
//#region incidence modifiers
2022-10-12 12:08:42 +00:00
oneOrMore: document.querySelector('#one-or-more'),
zeroOrMore: document.querySelector('#zero-or-more'),
zeroOrOne: document.querySelector('#zero-or-one'),
exactlyN: document.querySelector('#exactlyN'),
betweenNM: document.querySelector('#betweenNM'),
nInput: document.querySelector('#n-input'),
nSubmit: document.querySelector('#n-submit'),
nmInput: document.querySelector('#n-m-input'),
mInput: document.querySelector('#m-input'),
nmSubmit: document.querySelector('#n-m-submit'),
2022-09-07 07:06:21 +00:00
//#endregion incidence modifiers
cancelBool: false,
noValueMessage: document.querySelector('#no-value-message'),
//#endregion Token Attributes
}
2022-07-13 12:06:22 +00:00
2022-10-12 12:08:42 +00:00
this.elements.closeQueryBuilder.addEventListener('click', () => {this.closeQueryBuilderModal(this.elements.concordanceQueryBuilder);});
this.elements.concordanceQueryBuilderButton.addEventListener('click', () => {this.clearAll();});
this.elements.insertQueryButton.addEventListener('click', () => {this.insertQuery();});
this.elements.positionalAttrButton.addEventListener('click', () => {this.showPositionalAttrArea();});
this.elements.structuralAttrButton.addEventListener('click', () => {this.showStructuralAttrArea();});
2022-09-07 07:06:21 +00:00
//#region Structural Attribute Event Listeners
2022-10-12 12:08:42 +00:00
this.elements.sentence.addEventListener('click', () => {this.addSentence();});
this.elements.entity.addEventListener('click', () => {this.addEntity();});
this.elements.textAnnotation.addEventListener('click', () => {this.addTextAnnotation();});
2022-09-07 07:06:21 +00:00
2022-10-12 12:08:42 +00:00
this.elements.englishEntType.addEventListener('change', () => {this.englishEntTypeHandler();});
this.elements.germanEntType.addEventListener('change', () => {this.germanEntTypeHandler();});
this.elements.emptyEntity.addEventListener('click', () => {this.emptyEntityButton();});
2022-07-13 12:06:22 +00:00
2022-10-12 12:08:42 +00:00
this.elements.textAnnotationSubmit.addEventListener('click', () => {this.textAnnotationSubmitHandler();});
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
//#endregion
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
//#region Token Attribute Event Listeners
2022-10-12 12:08:42 +00:00
this.elements.queryBuilderTutorialInfoIcon.addEventListener('click', () => {this.tutorialIconHandler('#query-builder-tutorial-start');});
this.elements.tokenTutorialInfoIcon.addEventListener('click', () => {this.tutorialIconHandler('#add-new-token-tutorial');});
this.elements.editTokenTutorialInfoIcon.addEventListener('click', () => {this.tutorialIconHandler('#edit-options-tutorial');});
this.elements.structuralAttributeTutorialInfoIcon.addEventListener('click', () => {this.tutorialIconHandler('#add-structural-attribute-tutorial');});
this.elements.generalOptionsQueryBuilderTutorialInfoIcon.addEventListener('click', () => {this.tutorialIconHandler('#general-options-query-builder');});
2022-09-07 07:06:21 +00:00
2022-10-12 12:08:42 +00:00
this.elements.positionalAttr.addEventListener('change', () => {this.tokenTypeSelector();});
2023-01-12 14:40:28 +00:00
this.elements.tokenSubmitButton.addEventListener('click', () => {this.addTokenToQuery();});
2022-09-07 07:06:21 +00:00
2023-06-12 09:53:51 +00:00
this.elements.wordInput.addEventListener('input', () => {this.inputFieldHandler();});
this.elements.lemmaInput.addEventListener('input', () => {this.inputFieldHandler();});
2022-10-12 12:08:42 +00:00
this.elements.ignoreCase.addEventListener('change', () => {this.inputOptionHandler(this.elements.ignoreCase);});
this.elements.wildcardChar.addEventListener('click', () => {this.inputOptionHandler(this.elements.wildcardChar);});
this.elements.optionGroup.addEventListener('click', () => {this.inputOptionHandler(this.elements.optionGroup);});
2022-09-07 07:06:21 +00:00
2022-10-12 12:08:42 +00:00
this.elements.oneOrMore.addEventListener('click', () => {this.incidenceModifiersHandler(this.elements.oneOrMore);});
this.elements.zeroOrMore.addEventListener('click', () => {this.incidenceModifiersHandler(this.elements.zeroOrMore);});
this.elements.zeroOrOne.addEventListener('click', () => {this.incidenceModifiersHandler(this.elements.zeroOrOne);});
this.elements.nSubmit.addEventListener('click', () => {this.nSubmitHandler();});
this.elements.nmSubmit.addEventListener('click', () => {this.nmSubmitHandler();});
2022-09-07 07:06:21 +00:00
2022-10-12 12:08:42 +00:00
this.elements.or.addEventListener('click', () => {this.orHandler();});
this.elements.and.addEventListener('click', () => {this.andHandler();});
2022-09-07 07:06:21 +00:00
//#endregion Token Attribute Event Listeners
}
2022-10-12 12:05:01 +00:00
// ##########################################################################
// #################### General Functions ###################################
// ##########################################################################
2022-09-07 07:06:21 +00:00
//#region General Functions
2022-10-12 12:05:01 +00:00
closeQueryBuilderModal(closeInstance) {
2022-09-07 07:06:21 +00:00
let instance = M.Modal.getInstance(closeInstance);
instance.close();
2022-09-07 07:06:21 +00:00
}
2022-10-12 12:05:01 +00:00
showPositionalAttrArea() {
2022-09-07 07:06:21 +00:00
this.elements.positionalAttrArea.classList.remove('hide');
2023-06-12 09:53:51 +00:00
this.wordBuilder();
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = false;
2022-10-12 12:08:42 +00:00
window.location.href = '#token-builder-content';
2022-09-07 07:06:21 +00:00
}
2022-10-12 12:05:01 +00:00
showStructuralAttrArea() {
2022-09-07 07:06:21 +00:00
this.elements.positionalAttrArea.classList.add('hide');
this.elements.structuralAttrArea.classList.remove('hide');
}
2023-01-12 14:40:28 +00:00
queryChipFactory(dataType, prettyQueryText, queryText) {
2023-07-18 12:05:11 +00:00
this.elements.counter++;
2022-10-12 12:08:42 +00:00
window.location.href = '#query-container';
2023-01-12 14:40:28 +00:00
queryText = Utils.escape(queryText);
prettyQueryText = Utils.escape(prettyQueryText);
let queryChipElement = Utils.HTMLToElement(
2022-10-13 13:15:53 +00:00
`
2023-01-12 14:40:28 +00:00
<span class="chip query-component" data-type="${dataType}" data-query="${queryText}" draggable="true">
${prettyQueryText}
<i class="material-icons close">close</i>
2023-01-12 14:40:28 +00:00
</span>
2022-10-13 13:15:53 +00:00
`
);
2023-01-12 14:40:28 +00:00
queryChipElement.addEventListener('click', () => {this.deleteAttr(queryChipElement);});
queryChipElement.addEventListener('dragstart', (event) => {
// selects all nodes without target class
let queryChips = this.elements.yourQuery.querySelectorAll('.query-component');
// Adds a target chip in front of all draggable childnodes
setTimeout(() => {
let targetChipElement = Utils.HTMLToElement('<span class="chip drop-target">Drop here</span>');
for (let element of queryChips) {
if (element === queryChipElement.nextSibling) {continue;}
let targetChipClone = targetChipElement.cloneNode(true);
if (element === queryChipElement) {
// If the dragged element is not at the very end, a target chip is also inserted at the end
if (queryChips[queryChips.length - 1] !== element) {
queryChips[queryChips.length - 1].insertAdjacentElement('afterend', targetChipClone);
}
} else {
element.insertAdjacentElement('beforebegin', targetChipClone);
}
targetChipClone.addEventListener('dragover', (event) => {
event.preventDefault();
});
targetChipClone.addEventListener('dragenter', (event) => {
event.preventDefault();
event.target.style.borderStyle = 'solid dotted';
});
targetChipClone.addEventListener('dragleave', (event) => {
event.preventDefault();
event.target.style.borderStyle = 'hidden';
});
targetChipClone.addEventListener('drop', (event) => {
let dropzone = event.target;
dropzone.parentElement.replaceChild(queryChipElement, dropzone);
this.queryPreviewBuilder();
});
}
}, 0);
});
queryChipElement.addEventListener('dragend', (event) => {
let targets = document.querySelectorAll('.drop-target');
for (let target of targets) {
target.remove();
}
});
2022-09-07 07:06:21 +00:00
// Ensures that metadata is always at the end of the query:
2023-06-12 09:53:51 +00:00
const lastChild = this.elements.yourQuery.lastChild;
const isLastChildTextAnnotation = lastChild && lastChild.dataset.type === 'text-annotation';
if (!isLastChildTextAnnotation) {
2023-01-12 14:40:28 +00:00
this.elements.yourQuery.appendChild(queryChipElement);
2023-06-12 09:53:51 +00:00
} else {
this.elements.yourQuery.insertBefore(queryChipElement, lastChild);
2022-09-07 07:06:21 +00:00
}
2023-06-12 09:53:51 +00:00
2022-10-12 12:08:42 +00:00
this.elements.queryContainer.classList.remove('hide');
2022-09-07 07:06:21 +00:00
this.queryPreviewBuilder();
2022-10-24 13:01:13 +00:00
// Shows a hint about possible functions for editing the query at the first added element in the query
if (this.elements.yourQuery.childNodes.length === 1) {
app.flash('You can edit your query by deleting individual elements or moving them via drag and drop.');
2022-09-07 07:06:21 +00:00
}
}
2022-10-12 12:05:01 +00:00
queryPreviewBuilder() {
2022-09-07 07:06:21 +00:00
this.elements.yourQueryContent = [];
for (let element of this.elements.yourQuery.childNodes) {
let queryElement = decodeURI(element.dataset.query);
2023-01-12 14:40:28 +00:00
queryElement = Utils.escape(queryElement);
2022-10-12 12:08:42 +00:00
if (queryElement !== 'undefined') {
2022-09-07 07:06:21 +00:00
this.elements.yourQueryContent.push(queryElement);
}
2022-08-01 08:00:12 +00:00
}
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
let queryString = this.elements.yourQueryContent.join(' ');
2022-10-12 12:08:42 +00:00
queryString += ';';
2022-09-07 07:06:21 +00:00
this.elements.queryPreview.innerHTML = queryString;
}
2022-07-13 12:06:22 +00:00
2022-08-01 08:00:12 +00:00
2022-09-07 07:06:21 +00:00
deleteAttr(attr) {
this.elements.yourQuery.removeChild(attr);
2022-10-24 13:01:13 +00:00
if (attr.dataset.type === "start-sentence") {
this.elements.sentence.innerHTML = 'Sentence';
} else if (attr.dataset.type === "start-entity" || attr.dataset.type === "start-empty-entity") {
this.elements.entity.innerHTML = 'Entity';
}
2022-09-07 07:06:21 +00:00
this.elements.counter -= 1;
2023-07-21 11:14:29 +00:00
if (this.elements.counter === 0) {
2022-10-12 12:08:42 +00:00
this.elements.queryContainer.classList.add('hide');
2022-07-13 12:06:22 +00:00
}
2022-09-07 07:06:21 +00:00
this.queryPreviewBuilder();
}
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
insertQuery() {
this.elements.yourQueryContent = [];
2022-10-20 13:52:25 +00:00
this.validateValue();
2023-06-12 09:53:51 +00:00
if (this.elements.valueValidator) {
2022-10-20 13:52:25 +00:00
for (let element of this.elements.yourQuery.childNodes) {
let queryElement = decodeURI(element.dataset.query);
if (queryElement !== 'undefined') {
this.elements.yourQueryContent.push(queryElement);
}
}
let queryString = this.elements.yourQueryContent.join(' ');
queryString += ';';
2022-08-01 08:00:12 +00:00
2022-10-20 13:52:25 +00:00
this.elements.concordanceQueryBuilder.classList.add('modal-close');
this.elements.extFormQuery.value = queryString;
}
}
validateValue() {
this.elements.valueValidator = true;
let sentenceCounter = 0;
let sentenceEndCounter = 0;
let entityCounter = 0;
let entityEndCounter = 0;
2022-09-07 07:06:21 +00:00
for (let element of this.elements.yourQuery.childNodes) {
2022-10-20 13:52:25 +00:00
if (element.dataset.type === 'start-sentence') {
sentenceCounter += 1;
}else if (element.dataset.type === 'end-sentence') {
sentenceEndCounter += 1;
}else if (element.dataset.type === 'start-entity' || element.dataset.type === 'start-empty-entity') {
entityCounter += 1;
}else if (element.dataset.type === 'end-entity') {
entityEndCounter += 1;
2022-10-12 12:05:01 +00:00
}
2022-07-13 12:06:22 +00:00
}
2022-10-24 13:01:13 +00:00
// Checks if the same number of opening and closing tags (entity and sentence) are present. Depending on what is missing, the corresponding error message is ejected
if (sentenceCounter > sentenceEndCounter) {
app.flash('Please add the closing sentence tag', 'error');
this.elements.valueValidator = false;
} else if (sentenceCounter < sentenceEndCounter) {
app.flash('Please remove the closing sentence tag', 'error');
2022-10-20 13:52:25 +00:00
this.elements.valueValidator = false;
}
2022-10-24 13:01:13 +00:00
if (entityCounter > entityEndCounter) {
app.flash('Please add the closing entity tag', 'error');
this.elements.valueValidator = false;
} else if (entityCounter < entityEndCounter) {
app.flash('Please remove the closing entity tag', 'error');
2022-10-20 13:52:25 +00:00
this.elements.valueValidator = false;
}
2022-09-07 07:06:21 +00:00
}
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
clearAll() {
// Everything is reset.
2022-09-07 07:06:21 +00:00
let instance = M.Tooltip.getInstance(this.elements.queryBuilderTutorialInfoIcon);
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
this.hideEverything();
this.elements.counter = 0;
this.elements.concordanceQueryBuilder.classList.remove('modal-close');
this.elements.positionalAttrArea.classList.add('hide');
this.elements.structuralAttrArea.classList.add('hide');
this.elements.yourQuery.innerHTML = '';
this.elements.queryContainer.classList.add('hide');
2022-10-24 13:01:13 +00:00
this.elements.entity.innerHTML = 'Entity';
this.elements.sentence.innerHTML = 'Sentence';
2022-09-07 07:06:21 +00:00
// If the Modal is open after 5 seconds for 5 seconds (with 'instance'), a message is displayed indicating that further information can be obtained via the question mark icon
2022-09-07 07:06:21 +00:00
instance.tooltipEl.style.background = '#98ACD2';
instance.tooltipEl.style.borderTop = 'solid 4px #0064A3';
instance.tooltipEl.style.padding = '10px';
instance.tooltipEl.style.color = 'black';
setTimeout(() => {
let modalInstance = M.Modal.getInstance(this.elements.concordanceQueryBuilder);
if (modalInstance.isOpen) {
instance.open();
setTimeout(() => {
instance.close();
}, 5000);
}
2022-09-07 07:06:21 +00:00
}, 5000);
}
tutorialIconHandler(id) {
setTimeout(() => {
window.location.href= id;
}, 0);
}
//#endregion General Functions
2022-10-12 12:05:01 +00:00
// ##########################################################################
// ############## Token Attribute Builder Functions #########################
// ##########################################################################
2022-09-07 07:06:21 +00:00
//#region Token Attribute Builder Functions
2022-10-24 13:01:13 +00:00
//#region General functions of the Token Builder
2022-09-07 07:06:21 +00:00
tokenTypeSelector() {
this.hideEverything();
switch (this.elements.positionalAttr.value) {
2022-10-12 12:08:42 +00:00
case 'word':
2022-09-07 07:06:21 +00:00
this.wordBuilder();
break;
2022-10-12 12:08:42 +00:00
case 'lemma':
2022-09-07 07:06:21 +00:00
this.lemmaBuilder();
break;
2022-10-12 12:08:42 +00:00
case 'english-pos':
2022-09-07 07:06:21 +00:00
this.englishPosHandler();
break;
2022-10-12 12:08:42 +00:00
case 'german-pos':
2022-09-07 07:06:21 +00:00
this.germanPosHandler();
break;
2022-10-12 12:08:42 +00:00
case 'simple-pos-button':
2022-09-07 07:06:21 +00:00
this.simplePosBuilder();
break;
2022-10-12 12:08:42 +00:00
case 'empty-token':
2022-09-07 07:06:21 +00:00
this.emptyTokenHandler();
break;
default:
this.wordBuilder();
break;
}
}
2022-10-12 12:05:01 +00:00
hideEverything() {
2022-09-07 07:06:21 +00:00
2022-10-12 12:08:42 +00:00
this.elements.wordBuilder.classList.add('hide');
this.elements.lemmaBuilder.classList.add('hide');
this.elements.ignoreCaseCheckbox.classList.add('hide');
this.elements.inputOptions.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
this.elements.conditionContainer.classList.add('hide');
this.elements.englishPosBuilder.classList.add('hide');
this.elements.germanPosBuilder.classList.add('hide');
this.elements.simplePosBuilder.classList.add('hide');
this.elements.entityBuilder.classList.add('hide');
this.elements.textAnnotationBuilder.classList.add('hide');
2022-09-07 07:06:21 +00:00
}
2023-01-12 14:40:28 +00:00
tokenChipFactory(prettyQueryText, tokenText) {
2022-09-07 07:06:21 +00:00
tokenText = encodeURI(tokenText);
let builderElement;
2023-01-12 14:40:28 +00:00
let queryChipElement;
2022-09-07 07:06:21 +00:00
builderElement = document.createElement('div');
builderElement.innerHTML = `
2022-10-12 12:08:42 +00:00
<div class='chip col s2 l2' style='margin-top:20px;' data-tokentext='${tokenText}'>
2023-01-12 14:40:28 +00:00
${prettyQueryText}
2022-10-12 12:08:42 +00:00
<i class='material-icons close'>close</i>
2022-09-07 07:06:21 +00:00
</div>`;
2023-01-12 14:40:28 +00:00
queryChipElement = builderElement.firstElementChild;
queryChipElement.addEventListener('click', () => {this.deleteTokenAttr(queryChipElement);});
this.elements.tokenQuery.appendChild(queryChipElement);
2022-09-07 07:06:21 +00:00
}
2022-10-12 12:05:01 +00:00
deleteTokenAttr(attr) {
2022-09-07 07:06:21 +00:00
if (this.elements.tokenQuery.childNodes.length < 2) {
this.elements.tokenQuery.removeChild(attr);
this.wordBuilder();
} else {
this.elements.tokenQuery.removeChild(attr);
}
}
2023-01-12 14:40:28 +00:00
addTokenToQuery() {
2022-09-07 07:06:21 +00:00
let c;
2023-01-12 14:40:28 +00:00
let tokenQueryContent = ''; //for ButtonFactory(prettyQueryText)
2022-10-12 12:08:42 +00:00
let tokenQueryText = ''; //for ButtonFactory(queryText)
2022-09-07 07:06:21 +00:00
this.elements.cancelBool = false;
let tokenIsEmpty = false;
2022-09-07 07:06:21 +00:00
2022-10-12 12:05:01 +00:00
if (this.elements.ignoreCase.checked) {
2022-09-07 07:06:21 +00:00
c = ' %c';
2022-10-12 12:05:01 +00:00
} else {
2022-09-07 07:06:21 +00:00
c = '';
}
2022-10-12 12:05:01 +00:00
for (let element of this.elements.tokenQuery.childNodes) {
2022-09-07 07:06:21 +00:00
tokenQueryContent += ' ' + element.firstChild.data + ' ';
tokenQueryText += decodeURI(element.dataset.tokentext);
if (element.innerText.indexOf('empty token') !== -1) {
tokenIsEmpty = true;
2022-09-07 07:06:21 +00:00
}
2022-08-03 14:21:11 +00:00
}
2022-10-12 12:05:01 +00:00
if (this.elements.tokenQueryFilled === false) {
2022-09-07 07:06:21 +00:00
switch (this.elements.positionalAttr.value) {
2022-10-12 12:08:42 +00:00
case 'word':
if (this.elements.wordInput.value === '') {
2022-09-07 07:06:21 +00:00
this.disableTokenSubmit();
} else {
tokenQueryContent += `word=${this.elements.wordInput.value}${c}`;
2022-10-20 13:52:25 +00:00
tokenQueryText += `word="${this.elements.wordInput.value}"${c}`;
2022-09-07 07:06:21 +00:00
this.elements.wordInput.value = '';
}
break;
2022-10-12 12:08:42 +00:00
case 'lemma':
if (this.elements.lemmaInput.value === '') {
2022-09-07 07:06:21 +00:00
this.disableTokenSubmit();
} else {
tokenQueryContent += `lemma=${this.elements.lemmaInput.value}${c}`;
2022-10-20 13:52:25 +00:00
tokenQueryText += `lemma="${this.elements.lemmaInput.value}"${c}`;
2022-09-07 07:06:21 +00:00
this.elements.lemmaInput.value = '';
}
break;
2022-10-12 12:08:42 +00:00
case 'english-pos':
if (this.elements.englishPos.value === 'default') {
2022-09-07 07:06:21 +00:00
this.disableTokenSubmit();
} else {
tokenQueryContent += `pos=${this.elements.englishPos.value}`;
2022-10-20 13:52:25 +00:00
tokenQueryText += `pos="${this.elements.englishPos.value}"`;
2022-09-07 07:06:21 +00:00
this.elements.englishPos.value = '';
}
break;
2022-10-12 12:08:42 +00:00
case 'german-pos':
if (this.elements.germanPos.value === 'default') {
2022-09-07 07:06:21 +00:00
this.disableTokenSubmit();
} else {
tokenQueryContent += `pos=${this.elements.germanPos.value}`;
2022-10-20 13:52:25 +00:00
tokenQueryText += `pos="${this.elements.germanPos.value}"`;
2022-09-07 07:06:21 +00:00
this.elements.germanPos.value = '';
}
break;
2022-10-12 12:08:42 +00:00
case 'simple-pos-button':
if (this.elements.simplePos.value === 'default') {
2022-09-07 07:06:21 +00:00
this.disableTokenSubmit();
} else {
tokenQueryContent += `simple_pos=${this.elements.simplePos.value}`;
2022-10-20 13:52:25 +00:00
tokenQueryText += `simple_pos="${this.elements.simplePos.value}"`;
2022-09-07 07:06:21 +00:00
this.elements.simplePos.value = '';
}
break;
default:
this.wordBuilder();
break;
}
2022-07-13 12:06:22 +00:00
}
2022-09-07 07:06:21 +00:00
// cancelBool looks in disableTokenSubmit() whether a value is passed. If the input fields/dropdowns are empty (cancelBool === true), no token is added.
2022-10-12 12:05:01 +00:00
if (this.elements.cancelBool === false) {
2022-09-07 07:06:21 +00:00
// Square brackets are added only if it is not an empty token (where they are already present).
2023-01-12 14:40:28 +00:00
if (tokenIsEmpty === false) {
2022-09-07 07:06:21 +00:00
tokenQueryText = '[' + tokenQueryText + ']';
2022-10-20 13:52:25 +00:00
}
2023-01-12 14:40:28 +00:00
this.queryChipFactory('token', tokenQueryContent, tokenQueryText);
2022-09-07 07:06:21 +00:00
this.hideEverything();
this.elements.positionalAttrArea.classList.add('hide');
2022-10-12 12:08:42 +00:00
this.elements.tokenQuery.innerHTML = '';
2022-09-07 07:06:21 +00:00
}
}
disableTokenSubmit() {
this.elements.cancelBool = true;
2022-10-12 12:08:42 +00:00
this.elements.tokenSubmitButton.classList.add('red');
2022-09-07 07:06:21 +00:00
this.elements.noValueMessage.classList.remove('hide');
setTimeout(() => {
2022-10-12 12:08:42 +00:00
this.elements.tokenSubmitButton.classList.remove('red');
2022-09-07 07:06:21 +00:00
}, 500);
setTimeout(() => {
this.elements.noValueMessage.classList.add('hide');
}, 3000);
}
2023-06-12 09:53:51 +00:00
inputFieldHandler() {
let input;
if (this.elements.wordBuilder.classList.contains('hide') === false) {
input = this.elements.wordInput;
} else {
input = this.elements.lemmaInput;
}
if (input.value === '') {
this.elements.incidenceModifiersButton.firstElementChild.classList.add('disabled');
this.elements.or.classList.add('disabled');
this.elements.and.classList.add('disabled');
} else {
this.elements.incidenceModifiersButton.firstElementChild.classList.remove('disabled');
this.elements.or.classList.remove('disabled');
this.elements.and.classList.remove('disabled');
}
}
2022-09-07 07:06:21 +00:00
//#endregion General functions of the Token Builder
//#region Dropdown Select Handler
wordBuilder() {
this.hideEverything();
2022-10-12 12:08:42 +00:00
this.elements.wordInput.value = '';
this.elements.wordBuilder.classList.remove('hide');
this.elements.inputOptions.classList.remove('hide');
2022-09-07 07:06:21 +00:00
this.elements.incidenceModifiersButton.classList.remove('hide');
2022-10-12 12:08:42 +00:00
this.elements.conditionContainer.classList.remove('hide');
this.elements.ignoreCaseCheckbox.classList.remove('hide');
2023-06-12 09:53:51 +00:00
this.elements.incidenceModifiersButton.firstElementChild.classList.add('disabled');
this.elements.or.classList.add('disabled');
this.elements.and.classList.add('disabled');
2022-09-07 07:06:21 +00:00
// Resets materialize select field to default value
let SelectInstance = M.FormSelect.getInstance(this.elements.positionalAttr);
2022-10-12 12:08:42 +00:00
SelectInstance.input.value = 'word';
this.elements.positionalAttr.value = 'word';
2022-09-07 07:06:21 +00:00
}
lemmaBuilder() {
this.hideEverything();
2023-06-12 09:53:51 +00:00
this.elements.lemmaInput.value = '';
2022-10-12 12:08:42 +00:00
this.elements.lemmaBuilder.classList.remove('hide');
this.elements.inputOptions.classList.remove('hide');
2022-09-07 07:06:21 +00:00
this.elements.incidenceModifiersButton.classList.remove('hide');
2023-06-12 09:53:51 +00:00
this.elements.incidenceModifiersButton.firstElementChild.classList.add('disabled');
2022-10-12 12:08:42 +00:00
this.elements.conditionContainer.classList.remove('hide');
this.elements.ignoreCaseCheckbox.classList.remove('hide');
2023-06-12 09:53:51 +00:00
this.elements.incidenceModifiersButton.firstElementChild.classList.add('disabled');
this.elements.or.classList.add('disabled');
this.elements.and.classList.add('disabled');
2022-09-07 07:06:21 +00:00
}
englishPosHandler() {
this.hideEverything();
2022-10-12 12:08:42 +00:00
this.elements.englishPosBuilder.classList.remove('hide');
2023-06-12 09:53:51 +00:00
// this.elements.incidenceModifiersButton.classList.remove('hide');
2022-10-12 12:08:42 +00:00
this.elements.conditionContainer.classList.remove('hide');
2022-09-07 07:06:21 +00:00
// Resets materialize select dropdown
let selectInstance = M.FormSelect.getInstance(this.elements.englishPos);
2022-10-12 12:08:42 +00:00
selectInstance.input.value = 'English pos tagset';
this.elements.englishPos.value = 'default';
2022-09-07 07:06:21 +00:00
}
germanPosHandler() {
this.hideEverything();
2022-10-12 12:08:42 +00:00
this.elements.germanPosBuilder.classList.remove('hide');
2023-06-12 09:53:51 +00:00
// this.elements.incidenceModifiersButton.classList.remove('hide');
2022-10-12 12:08:42 +00:00
this.elements.conditionContainer.classList.remove('hide');
2022-09-07 07:06:21 +00:00
// Resets materialize select dropdown
let selectInstance = M.FormSelect.getInstance(this.elements.germanPos);
2022-10-12 12:08:42 +00:00
selectInstance.input.value = 'German pos tagset';
this.elements.germanPos.value = 'default';
2022-09-07 07:06:21 +00:00
}
simplePosBuilder() {
this.hideEverything();
2022-10-12 12:08:42 +00:00
this.elements.simplePosBuilder.classList.remove('hide');
2023-06-12 09:53:51 +00:00
// this.elements.incidenceModifiersButton.classList.remove('hide');
2022-10-12 12:08:42 +00:00
this.elements.conditionContainer.classList.remove('hide');
2022-09-07 07:06:21 +00:00
this.elements.simplePos.selectedIndex = 0;
// Resets materialize select dropdown
let selectInstance = M.FormSelect.getInstance(this.elements.simplePos);
2022-10-12 12:08:42 +00:00
selectInstance.input.value = 'simple_pos tagset';
this.elements.simplePos.value = 'default';
2022-09-07 07:06:21 +00:00
}
emptyTokenHandler() {
2023-01-12 14:40:28 +00:00
this.tokenChipFactory('empty token', '[]');
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
this.hideEverything();
this.elements.incidenceModifiersButton.classList.remove('hide');
}
//#endregion Dropdown Select Handler
2022-10-12 12:08:42 +00:00
//#region Options to edit your token - Wildcard Charakter, Option Group, Incidence Modifiers, Ignore Case, 'and', 'or'
2022-09-07 07:06:21 +00:00
inputOptionHandler(elem) {
let input;
if (this.elements.wordBuilder.classList.contains('hide') === false) {
input = this.elements.wordInput;
} else {
2023-06-12 09:53:51 +00:00
input = this.elements.lemmaInput;
2022-09-07 07:06:21 +00:00
}
if (elem === this.elements.optionGroup) {
input.value += '( option1 | option2 )';
let firstIndex = input.value.indexOf('option1');
let lastIndex = firstIndex + 'option1'.length;
input.focus();
input.setSelectionRange(firstIndex, lastIndex);
} else if (elem === this.elements.wildcardChar) {
input.value += '.';
}
}
nSubmitHandler() {
let instance = M.Modal.getInstance(this.elements.exactlyN);
instance.close();
switch (this.elements.positionalAttr.value) {
2022-10-12 12:08:42 +00:00
case 'word':
this.elements.wordInput.value += ' {' + this.elements.nInput.value + '}';
2022-09-07 07:06:21 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'lemma':
this.elements.lemmaInput.value += ' {' + this.elements.nInput.value + '}';
2022-09-07 07:06:21 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'english-pos':
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`pos=${this.elements.englishPos.value}`, `pos="${this.elements.englishPos.value}"`);
this.tokenChipFactory('{' + this.elements.nInput.value + '}', '{' + this.elements.nInput.value + '}');
2022-10-12 12:08:42 +00:00
this.elements.englishPosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 07:06:21 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'german-pos':
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`pos=${this.elements.germanPos.value}`, `pos="${this.elements.germanPos.value}"`);
this.tokenChipFactory('{' + this.elements.nInput.value + '}', '{' + this.elements.nInput.value + '}');
2022-10-12 12:08:42 +00:00
this.elements.germanPosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 07:06:21 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'simple-pos-button':
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`simple_pos=${this.elements.simplePos.value}`, `simple_pos="${this.elements.simplePos.value}"`);
this.tokenChipFactory('{' + this.elements.nInput.value + '}', '{' + this.elements.nInput.value + '}');
2022-10-12 12:08:42 +00:00
this.elements.simplePosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 07:06:21 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'empty-token':
2023-01-12 14:40:28 +00:00
this.tokenChipFactory('{' + this.elements.nInput.value + '}', '{' + this.elements.nInput.value + '}');
2022-09-07 07:06:21 +00:00
break;
default:
break;
}
}
nmSubmitHandler() {
let instance = M.Modal.getInstance(this.elements.betweenNM);
instance.close();
2022-09-07 12:22:59 +00:00
switch (this.elements.positionalAttr.value) {
2022-10-12 12:08:42 +00:00
case 'word':
2022-09-07 12:22:59 +00:00
this.elements.wordInput.value += `{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`;
break;
2022-10-12 12:08:42 +00:00
case 'lemma':
2022-09-07 12:22:59 +00:00
this.elements.lemmaInput.value += `{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`;
break;
2022-10-12 12:08:42 +00:00
case 'english-pos':
2022-09-07 12:22:59 +00:00
this.elements.tokenQueryFilled = true;
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`pos=${this.elements.englishPos.value}`, `pos="${this.elements.englishPos.value}"`);
this.tokenChipFactory(`{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`, `{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`);
2022-10-12 12:08:42 +00:00
this.elements.englishPosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 12:22:59 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'german-pos':
2022-09-07 12:22:59 +00:00
this.elements.tokenQueryFilled = true;
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`pos=${this.elements.germanPos.value}`, `pos="${this.elements.germanPos.value}"`);
this.tokenChipFactory(`{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`, `{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`);
2022-10-12 12:08:42 +00:00
this.elements.germanPosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 12:22:59 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'simple-pos-button':
2022-09-07 12:22:59 +00:00
this.elements.tokenQueryFilled = true;
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`simple_pos=${this.elements.simplePos.value}`, `simple_pos="${this.elements.simplePos.value}"`);
this.tokenChipFactory(`{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`, `{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`);
2022-10-12 12:08:42 +00:00
this.elements.simplePosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 12:22:59 +00:00
break;
2022-10-12 12:08:42 +00:00
case 'empty-token':
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`, `{${this.elements.nmInput.value}, ${this.elements.mInput.value}}`);
2022-09-07 12:22:59 +00:00
break;
default:
break;
}
2022-09-07 07:06:21 +00:00
}
incidenceModifiersHandler(elem) {
// For word and lemma, the incidence modifiers are inserted in the input field. For the others, one or two chips are created which contain the respective value of the token and the incidence modifier.
2022-10-12 12:08:42 +00:00
if (this.elements.positionalAttr.value === 'empty-token') {
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(elem.innerText, elem.dataset.token);
2022-10-12 12:08:42 +00:00
} else if (this.elements.positionalAttr.value === 'english-pos') {
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`pos=${this.elements.englishPos.value}`, `pos="${this.elements.englishPos.value}"`);
this.tokenChipFactory(elem.innerText, elem.dataset.token);
2022-10-12 12:08:42 +00:00
this.elements.englishPosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
2022-10-12 12:08:42 +00:00
} else if (this.elements.positionalAttr.value === 'german-pos') {
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`pos=${this.elements.germanPos.value}`, `pos="${this.elements.germanPos.value}"`);
this.tokenChipFactory(elem.innerText, elem.dataset.token);
2022-10-12 12:08:42 +00:00
this.elements.germanPosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
2022-10-12 12:08:42 +00:00
} else if (this.elements.positionalAttr.value === 'simple-pos-button') {
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(`simple_pos=${this.elements.simplePos.value}`, `simple_pos="${this.elements.simplePos.value}"`);
this.tokenChipFactory(elem.innerText, elem.dataset.token);
2022-10-12 12:08:42 +00:00
this.elements.simplePosBuilder.classList.add('hide');
this.elements.incidenceModifiersButton.classList.add('hide');
2022-09-07 07:06:21 +00:00
this.elements.tokenQueryFilled = true;
} else {
let input;
if (this.elements.wordBuilder.classList.contains('hide') === false) {
input = this.elements.wordInput;
} else {
input = this.elements.lemmaInput;
}
2022-07-13 12:06:22 +00:00
2022-09-07 07:06:21 +00:00
input.value += ' ' + elem.dataset.token;
}
}
orHandler() {
2022-10-12 12:08:42 +00:00
this.conditionHandler('or', ' | ');
2022-09-07 07:06:21 +00:00
}
andHandler() {
2022-10-12 12:08:42 +00:00
this.conditionHandler('and', ' & ');
2022-09-07 07:06:21 +00:00
}
conditionHandler(conditionText, conditionQueryContent) {
this.hideEverything();
let tokenQueryContent;
let tokenQueryText;
let c;
2022-10-12 12:05:01 +00:00
if (this.elements.ignoreCase.checked) {
2022-09-07 07:06:21 +00:00
c = ' %c';
2022-10-12 12:05:01 +00:00
} else {
2022-09-07 07:06:21 +00:00
c = '';
}
switch (this.elements.positionalAttr.value) {
2022-10-12 12:08:42 +00:00
case 'word':
2022-09-07 07:06:21 +00:00
tokenQueryContent = `word=${this.elements.wordInput.value}${c}`;
2022-10-20 13:52:25 +00:00
tokenQueryText = `word="${this.elements.wordInput.value}"${c}`;
2022-09-07 07:06:21 +00:00
this.elements.wordInput.value = '';
break;
2022-10-12 12:08:42 +00:00
case 'lemma':
2022-09-07 07:06:21 +00:00
tokenQueryContent = `lemma=${this.elements.lemmaInput.value}${c}`;
2022-10-20 13:52:25 +00:00
tokenQueryText = `lemma="${this.elements.lemmaInput.value}"${c}`;
2022-09-07 07:06:21 +00:00
this.elements.lemmaInput.value = '';
break;
2022-10-12 12:08:42 +00:00
case 'english-pos':
2022-09-07 07:06:21 +00:00
tokenQueryContent = `pos=${this.elements.englishPos.value}`;
2022-10-20 13:52:25 +00:00
tokenQueryText = `pos="${this.elements.englishPos.value}"`;
2022-09-07 07:06:21 +00:00
this.elements.englishPos.value = '';
break;
2022-10-12 12:08:42 +00:00
case 'german-pos':
2022-09-07 07:06:21 +00:00
tokenQueryContent = `pos=${this.elements.germanPos.value}`;
2022-10-20 13:52:25 +00:00
tokenQueryText = `pos="${this.elements.germanPos.value}"`;
2022-09-07 07:06:21 +00:00
this.elements.germanPos.value = '';
break;
2022-10-12 12:08:42 +00:00
case 'simple-pos-button':
2022-09-07 07:06:21 +00:00
tokenQueryContent = `simple_pos=${this.elements.simplePos.value}`;
2022-10-20 13:52:25 +00:00
tokenQueryText = `simple_pos="${this.elements.simplePos.value}"`;
2022-09-07 07:06:21 +00:00
this.elements.simplePos.value = '';
break;
default:
this.wordBuilder();
break;
}
2023-01-12 14:40:28 +00:00
this.tokenChipFactory(tokenQueryContent, tokenQueryText);
this.tokenChipFactory(conditionText, conditionQueryContent);
2022-09-07 07:06:21 +00:00
this.wordBuilder();
}
2022-10-12 12:08:42 +00:00
//#endregion Options to edit your token - Wildcard Charakter, Option Group, Incidence Modifiers, Ignore Case, 'and', 'or'
2022-09-07 07:06:21 +00:00
//#endregion Token Attribute Builder Functions
2022-10-12 12:05:01 +00:00
// ##########################################################################
// ############ Structural Attribute Builder Functions ######################
// ##########################################################################
2022-09-07 07:06:21 +00:00
//#region Structural Attribute Builder Functions
addSentence() {
this.hideEverything();
2022-10-12 12:05:01 +00:00
if (this.elements.sentence.text === 'End Sentence') {
2023-01-12 14:40:28 +00:00
this.queryChipFactory('end-sentence', 'Sentence End', '</s>');
2022-09-07 07:06:21 +00:00
this.elements.sentence.innerHTML = 'Sentence';
} else {
2023-01-12 14:40:28 +00:00
this.queryChipFactory('start-sentence', 'Sentence Start', '<s>');
2022-09-07 07:06:21 +00:00
this.elements.queryContent.push('sentence');
this.elements.sentence.innerHTML = 'End Sentence';
}
}
addEntity() {
if (this.elements.entity.text === 'End Entity') {
let queryText;
if (this.elements.entityAnyType === false) {
queryText = '</ent_type>';
} else {
queryText = '</ent>';
}
2023-01-12 14:40:28 +00:00
this.queryChipFactory('end-entity', 'Entity End', queryText);
2022-09-07 07:06:21 +00:00
this.elements.entity.innerHTML = 'Entity';
} else {
this.hideEverything();
2022-10-12 12:08:42 +00:00
this.elements.entityBuilder.classList.remove('hide');
window.location.href = '#entity-builder';
2022-09-07 07:06:21 +00:00
}
}
englishEntTypeHandler() {
2023-01-12 14:40:28 +00:00
this.queryChipFactory('start-entity', 'Entity Type=' + this.elements.englishEntType.value, '<ent_type="' + this.elements.englishEntType.value + '">');
2022-09-07 07:06:21 +00:00
this.elements.entity.innerHTML = 'End Entity';
this.hideEverything();
this.elements.entityAnyType = false;
// Resets materialize select dropdown
let SelectInstance = M.FormSelect.getInstance(this.elements.englishEntType);
2022-10-12 12:08:42 +00:00
SelectInstance.input.value = 'English ent_type';
this.elements.englishEntType.value = 'default';
2022-09-07 07:06:21 +00:00
}
germanEntTypeHandler() {
2023-01-12 14:40:28 +00:00
this.queryChipFactory('start-entity', 'Entity Type=' + this.elements.germanEntType.value, '<ent_type="' + this.elements.germanEntType.value + '">');
2022-09-07 07:06:21 +00:00
this.elements.entity.innerHTML = 'End Entity';
this.hideEverything();
this.elements.entityAnyType = false;
// Resets materialize select dropdown
let SelectInstance = M.FormSelect.getInstance(this.elements.germanEntType);
2022-10-12 12:08:42 +00:00
SelectInstance.input.value = 'German ent_type';
this.elements.germanEntType.value = 'default';
2022-09-07 07:06:21 +00:00
}
emptyEntityButton() {
2023-01-12 14:40:28 +00:00
this.queryChipFactory('start-empty-entity', 'Entity Start', '<ent>');
2022-09-07 07:06:21 +00:00
this.elements.entity.innerHTML = 'End Entity';
this.hideEverything();
this.elements.entityAnyType = true;
}
addTextAnnotation() {
this.hideEverything();
2022-10-12 12:08:42 +00:00
this.elements.textAnnotationBuilder.classList.remove('hide');
window.location.href = '#text-annotation-builder';
2022-09-07 07:06:21 +00:00
// Resets materialize select dropdown
let SelectInstance = M.FormSelect.getInstance(this.elements.textAnnotationOptions);
2022-10-12 12:08:42 +00:00
SelectInstance.input.value = 'address';
this.elements.textAnnotationOptions.value = 'address';
this.elements.textAnnotationInput.value= '';
2022-09-07 07:06:21 +00:00
}
textAnnotationSubmitHandler() {
if (this.elements.textAnnotationInput.value === '') {
this.elements.textAnnotationSubmit.classList.add('red');
this.elements.noValueMetadataMessage.classList.remove('hide');
setTimeout(() => {
this.elements.textAnnotationSubmit.classList.remove('red');
}, 500);
setTimeout(() => {
this.elements.noValueMetadataMessage.classList.add('hide');
}, 3000);
} else {
2022-10-24 13:01:13 +00:00
let queryText = `:: match.text_${this.elements.textAnnotationOptions.value}="${this.elements.textAnnotationInput.value}"`;
2023-01-12 14:40:28 +00:00
this.queryChipFactory('text-annotation', `${this.elements.textAnnotationOptions.value}=${this.elements.textAnnotationInput.value}`, queryText);
2022-09-07 07:06:21 +00:00
this.hideEverything();
}
}
2022-10-13 13:15:53 +00:00
//#endregion Structural Attribute Builder Functions
2022-07-13 12:06:22 +00:00
}