mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-25 10:54:18 +00:00
Locking end-tag of structural attributes, ...
This commit is contained in:
parent
9ccab8657a
commit
f56e951b71
@ -7,6 +7,10 @@
|
|||||||
margin-top: 23px;
|
margin-top: 23px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#corpus-analysis-concordance-query-builder-input-field-placeholder {
|
||||||
|
color: #9E9E9E;
|
||||||
|
}
|
||||||
|
|
||||||
.modal-content {
|
.modal-content {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
@ -109,10 +113,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
[data-type="start-empty-entity"], [data-type="start-entity"], [data-type="end-entity"] {
|
[data-type="start-empty-entity"], [data-type="start-entity"], [data-type="end-entity"] {
|
||||||
background-color: #A6E22D;
|
background-color: #a6e22d;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-type="start-text-annotation"]{
|
[data-type="text-annotation"]{
|
||||||
background-color: #2FBBAB;
|
background-color: #2FBBAB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ class CorpusAnalysisConcordance {
|
|||||||
|
|
||||||
async submitForm(queryModeId) {
|
async submitForm(queryModeId) {
|
||||||
this.app.disableActionElements();
|
this.app.disableActionElements();
|
||||||
let queryBuilderQuery = document.querySelector('#corpus-analysis-concordance-query-preview').innerHTML.trim();
|
let queryBuilderQuery = Utils.unescape(document.querySelector('#corpus-analysis-concordance-query-preview').innerHTML.trim());
|
||||||
let expertModeQuery = this.elements.expertModeForm.query.value.trim();
|
let expertModeQuery = this.elements.expertModeForm.query.value.trim();
|
||||||
let query = queryModeId === 'corpus-analysis-concordance-expert-mode-form' ? expertModeQuery : queryBuilderQuery;
|
let query = queryModeId === 'corpus-analysis-concordance-expert-mode-form' ? expertModeQuery : queryBuilderQuery;
|
||||||
let form = queryModeId === 'corpus-analysis-concordance-expert-mode-form' ? this.elements.expertModeForm : this.elements.queryBuilderForm;
|
let form = queryModeId === 'corpus-analysis-concordance-expert-mode-form' ? this.elements.expertModeForm : this.elements.queryBuilderForm;
|
||||||
|
@ -7,26 +7,28 @@ class ConcordanceQueryBuilder {
|
|||||||
this.tokenAttributeBuilderFunctions = new TokenAttributeBuilderFunctionsQueryBuilder(this.elements);
|
this.tokenAttributeBuilderFunctions = new TokenAttributeBuilderFunctionsQueryBuilder(this.elements);
|
||||||
this.structuralAttributeBuilderFunctions = new StructuralAttributeBuilderFunctionsQueryBuilder(this.elements);
|
this.structuralAttributeBuilderFunctions = new StructuralAttributeBuilderFunctionsQueryBuilder(this.elements);
|
||||||
|
|
||||||
|
// Eventlisteners for the incidence modifiers. There are two different types of incidence modifiers: token and character incidence modifiers.
|
||||||
document.querySelectorAll('.incidence-modifier-selection').forEach(button => {
|
document.querySelectorAll('.incidence-modifier-selection').forEach(button => {
|
||||||
if (button.parentNode.parentNode.id === 'corpus-analysis-concordance-token-incidence-modifiers-dropdown') {
|
let dropdownId = button.parentNode.parentNode.id;
|
||||||
button.addEventListener('click', () => {
|
if (dropdownId === 'corpus-analysis-concordance-token-incidence-modifiers-dropdown') {
|
||||||
this.generalFunctions.tokenIncidenceModifierHandler(button.dataset.token, button.innerHTML);});
|
button.addEventListener('click', () => this.generalFunctions.tokenIncidenceModifierHandler(button.dataset.token, button.innerHTML));
|
||||||
} else if (button.parentNode.parentNode.id === 'corpus-analysis-concordance-character-incidence-modifiers-dropdown') {
|
} else if (dropdownId === 'corpus-analysis-concordance-character-incidence-modifiers-dropdown') {
|
||||||
button.addEventListener('click', () => {this.tokenAttributeBuilderFunctions.characterIncidenceModifierHandler(button);});
|
button.addEventListener('click', () => this.tokenAttributeBuilderFunctions.characterIncidenceModifierHandler(button));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Eventlisteners for the submit of n- and m-values of the incidence modifier modal for "exactly n" or "between n and m".
|
||||||
document.querySelectorAll('.n-m-submit-button').forEach(button => {
|
document.querySelectorAll('.n-m-submit-button').forEach(button => {
|
||||||
if (button.dataset.modalId === 'corpus-analysis-concordance-exactly-n-token-modal' || button.dataset.modalId === 'corpus-analysis-concordance-between-nm-token-modal') {
|
let modalId = button.dataset.modalId;
|
||||||
button.addEventListener('click', () => {
|
if (modalId === 'corpus-analysis-concordance-exactly-n-token-modal' || modalId === 'corpus-analysis-concordance-between-nm-token-modal') {
|
||||||
this.generalFunctions.tokenNMSubmitHandler(button.dataset.modalId);
|
button.addEventListener('click', () => this.generalFunctions.tokenNMSubmitHandler(modalId));
|
||||||
});
|
} else if (modalId === 'corpus-analysis-concordance-exactly-n-character-modal' || modalId === 'corpus-analysis-concordance-between-nm-character-modal') {
|
||||||
} else if (button.dataset.modalId === 'corpus-analysis-concordance-exactly-n-character-modal' || button.dataset.modalId === 'corpus-analysis-concordance-between-nm-character-modal') {
|
button.addEventListener('click', () => this.generalFunctions.characterNMSubmitHandler(modalId));
|
||||||
button.addEventListener('click', () => {
|
|
||||||
this.generalFunctions.characterNMSubmitHandler(button.dataset.modalId);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.querySelector('#corpus-analysis-concordance-text-annotation-submit').addEventListener('click', () => this.structuralAttributeBuilderFunctions.textAnnotationSubmitHandler());
|
||||||
|
|
||||||
this.elements.positionalAttrModal = M.Modal.init(
|
this.elements.positionalAttrModal = M.Modal.init(
|
||||||
document.querySelector('#corpus-analysis-concordance-positional-attr-modal'),
|
document.querySelector('#corpus-analysis-concordance-positional-attr-modal'),
|
||||||
{
|
{
|
||||||
|
@ -9,6 +9,9 @@ class ElementReferencesQueryBuilder {
|
|||||||
this.sentenceElement = document.querySelector('[data-structural-attr-modal-action-button="sentence"]');
|
this.sentenceElement = document.querySelector('[data-structural-attr-modal-action-button="sentence"]');
|
||||||
this.entityElement = document.querySelector('[data-structural-attr-modal-action-button="entity"]');
|
this.entityElement = document.querySelector('[data-structural-attr-modal-action-button="entity"]');
|
||||||
this.textAnnotationElement = document.querySelector('[data-structural-attr-modal-action-button="text-annotation"]');
|
this.textAnnotationElement = document.querySelector('[data-structural-attr-modal-action-button="text-annotation"]');
|
||||||
|
this.englishEntTypeSelection = document.querySelector('#corpus-analysis-concordance-english-ent-type-selection');
|
||||||
|
this.germanEntTypeSelection = document.querySelector('#corpus-analysis-concordance-german-ent-type-selection');
|
||||||
|
this.textAnnotationSelection = document.querySelector('#corpus-analysis-concordance-text-annotation-options');
|
||||||
|
|
||||||
// Token Attribute Builder Elements
|
// Token Attribute Builder Elements
|
||||||
this.positionalAttrModal = M.Modal.getInstance(document.querySelector('#corpus-analysis-concordance-positional-attr-modal'));
|
this.positionalAttrModal = M.Modal.getInstance(document.querySelector('#corpus-analysis-concordance-positional-attr-modal'));
|
||||||
|
@ -10,36 +10,96 @@ class GeneralFunctionsQueryBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateChipList() {
|
updateChipList() {
|
||||||
this.elements.queryChipElements = this.elements.queryInputField.querySelectorAll('.chip');
|
this.elements.queryChipElements = this.elements.queryInputField.querySelectorAll('.query-component');
|
||||||
}
|
}
|
||||||
|
|
||||||
queryChipFactory(dataType, prettyQueryText, queryText, index = null) {
|
removePlaceholder() {
|
||||||
|
let placeholder = this.elements.queryInputField.querySelector('#corpus-analysis-concordance-query-builder-input-field-placeholder');
|
||||||
|
if (placeholder) {
|
||||||
|
this.elements.queryInputField.innerHTML = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addPlaceholder() {
|
||||||
|
let placeholder = Utils.HTMLToElement('<span id="corpus-analysis-concordance-query-builder-input-field-placeholder">Click on a button to add a query component</span>');
|
||||||
|
this.elements.queryInputField.appendChild(placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
|
resetMaterializeSelection(selectionElements, value = "default") {
|
||||||
|
selectionElements.forEach(selectionElement => {
|
||||||
|
selectionElement.querySelector(`option[value=${value}]`).selected = true;
|
||||||
|
let instance = M.FormSelect.getInstance(selectionElement);
|
||||||
|
instance.destroy();
|
||||||
|
M.FormSelect.init(selectionElement);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
queryChipFactory(dataType, prettyQueryText, queryText, index = null, isClosingTag = false) {
|
||||||
|
// Creates a new query chip element, adds Eventlisteners for selection, deletion and drag and drop and appends it to the query input field.
|
||||||
|
|
||||||
queryText = Utils.escape(queryText);
|
queryText = Utils.escape(queryText);
|
||||||
prettyQueryText = Utils.escape(prettyQueryText);
|
prettyQueryText = Utils.escape(prettyQueryText);
|
||||||
let queryChipElement = Utils.HTMLToElement(
|
let queryChipElement = Utils.HTMLToElement(
|
||||||
`
|
`
|
||||||
<span class="chip query-component" data-type="${dataType}" data-query="${queryText}" draggable="true">
|
<span class="chip query-component" data-type="${dataType}" data-query="${queryText}" draggable="true" data-closing-tag="${isClosingTag}">
|
||||||
${prettyQueryText}
|
${prettyQueryText}
|
||||||
<i class="material-icons close">close</i>
|
${isClosingTag ? '<i class="material-icons" style="padding-top:5px; font-size:20px; cursor:pointer;">lock_open</i>' : '<i class="material-icons close">close</i>'}
|
||||||
</span>
|
</span>
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
|
this.actionListeners(queryChipElement, isClosingTag);
|
||||||
queryChipElement.addEventListener('click', () => this.selectChipElement(queryChipElement));
|
|
||||||
queryChipElement.querySelector('i').addEventListener('click', () => this.deleteChipElement(queryChipElement));
|
|
||||||
|
|
||||||
queryChipElement.addEventListener('dragstart', this.handleDragStart.bind(this, queryChipElement));
|
queryChipElement.addEventListener('dragstart', this.handleDragStart.bind(this, queryChipElement));
|
||||||
queryChipElement.addEventListener('dragend', this.handleDragEnd);
|
queryChipElement.addEventListener('dragend', this.handleDragEnd);
|
||||||
if (index !== null) {
|
|
||||||
this.elements.queryInputField.insertBefore(queryChipElement, this.elements.queryChipElements[index]);
|
// Ensures that metadata is always at the end of the query and if an index is given, inserts the query chip at the given index and if there is a closing tag, inserts the query chip before the closing tag.
|
||||||
|
this.removePlaceholder();
|
||||||
|
let lastChild = this.elements.queryInputField.lastChild;
|
||||||
|
let isLastChildTextAnnotation = lastChild && lastChild.dataset.type === 'text-annotation';
|
||||||
|
if (!index) {
|
||||||
|
let closingTagElement = this.elements.queryInputField.querySelector('[data-closing-tag="true"]');
|
||||||
|
if (closingTagElement) {
|
||||||
|
index = Array.from(this.elements.queryInputField.children).indexOf(closingTagElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (index || isLastChildTextAnnotation) {
|
||||||
|
let insertingElement = isLastChildTextAnnotation ? lastChild : this.elements.queryChipElements[index];
|
||||||
|
this.elements.queryInputField.insertBefore(queryChipElement, insertingElement);
|
||||||
} else {
|
} else {
|
||||||
this.elements.queryInputField.appendChild(queryChipElement);
|
this.elements.queryInputField.appendChild(queryChipElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.updateChipList();
|
this.updateChipList();
|
||||||
this.queryPreviewBuilder();
|
this.queryPreviewBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actionListeners(queryChipElement, isClosingTag) {
|
||||||
|
let notQuantifiableDataTypes = ['start-sentence', 'end-sentence', 'start-entity', 'start-empty-entity', 'end-entity', 'token-incidence-modifier'];
|
||||||
|
queryChipElement.addEventListener('click', (event) => {
|
||||||
|
if (event.target.classList.contains('chip')) {
|
||||||
|
if (!notQuantifiableDataTypes.includes(queryChipElement.dataset.type)) {
|
||||||
|
this.selectChipElement(queryChipElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
queryChipElement.querySelector('i').addEventListener('click', () => {
|
||||||
|
if (isClosingTag) {
|
||||||
|
this.lockClosingChipElement(queryChipElement);
|
||||||
|
} else {
|
||||||
|
this.deleteChipElement(queryChipElement);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
lockClosingChipElement(queryChipElement) {
|
||||||
|
let chipIndex = Array.from(this.elements.queryInputField.children).indexOf(queryChipElement);
|
||||||
|
this.queryChipFactory(queryChipElement.dataset.type, queryChipElement.firstChild.textContent, queryChipElement.dataset.query, chipIndex+1);
|
||||||
|
this.deleteChipElement(queryChipElement);
|
||||||
|
this.updateChipList();
|
||||||
|
}
|
||||||
|
|
||||||
handleDragStart(queryChipElement, event) {
|
handleDragStart(queryChipElement, event) {
|
||||||
|
// is called when a query chip is dragged. It creates a dropzone (in form of a chip) for the dragged chip and adds it to the query input field.
|
||||||
let queryChips = this.elements.queryInputField.querySelectorAll('.query-component');
|
let queryChips = this.elements.queryInputField.querySelectorAll('.query-component');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
let targetChipElement = Utils.HTMLToElement('<span class="chip drop-target">Drop here</span>');
|
let targetChipElement = Utils.HTMLToElement('<span class="chip drop-target">Drop here</span>');
|
||||||
@ -81,6 +141,7 @@ class GeneralFunctionsQueryBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
queryPreviewBuilder() {
|
queryPreviewBuilder() {
|
||||||
|
// Builds the query preview in the form of pure CQL and displays it in the query preview field.
|
||||||
let queryPreview = document.querySelector('#corpus-analysis-concordance-query-preview');
|
let queryPreview = document.querySelector('#corpus-analysis-concordance-query-preview');
|
||||||
let queryInputFieldContent = [];
|
let queryInputFieldContent = [];
|
||||||
this.elements.queryChipElements.forEach(element => {
|
this.elements.queryChipElements.forEach(element => {
|
||||||
@ -92,17 +153,15 @@ class GeneralFunctionsQueryBuilder {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let queryString = queryInputFieldContent.join(' ');
|
let queryString = queryInputFieldContent.join(' ');
|
||||||
if (queryString.includes(' +')) {
|
let replacements = {
|
||||||
queryString = queryString.replace(/ \+/g, '+');
|
' +': '+',
|
||||||
}
|
' *': '*',
|
||||||
if (queryString.includes(' *')) {
|
' ?': '?',
|
||||||
queryString = queryString.replace(/ \*/g, '*');
|
' {': '{'
|
||||||
}
|
};
|
||||||
if (queryString.includes(' ?')) {
|
|
||||||
queryString = queryString.replace(/ \?/g, '?');
|
for (let key in replacements) {
|
||||||
}
|
queryString = queryString.replace(key, replacements[key]);
|
||||||
if (queryString.includes(' {')) {
|
|
||||||
queryString = queryString.replace(/ \{/g, '{');
|
|
||||||
}
|
}
|
||||||
queryString += ';';
|
queryString += ';';
|
||||||
|
|
||||||
@ -117,6 +176,9 @@ class GeneralFunctionsQueryBuilder {
|
|||||||
this.elements.entityElement.innerHTML = 'Entity';
|
this.elements.entityElement.innerHTML = 'Entity';
|
||||||
}
|
}
|
||||||
this.elements.queryInputField.removeChild(attr);
|
this.elements.queryInputField.removeChild(attr);
|
||||||
|
if (this.elements.queryInputField.children.length === 0) {
|
||||||
|
this.addPlaceholder();
|
||||||
|
}
|
||||||
this.updateChipList();
|
this.updateChipList();
|
||||||
this.queryPreviewBuilder();
|
this.queryPreviewBuilder();
|
||||||
}
|
}
|
||||||
@ -135,6 +197,7 @@ class GeneralFunctionsQueryBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tokenIncidenceModifierHandler(incidenceModifier, incidenceModifierPretty) {
|
tokenIncidenceModifierHandler(incidenceModifier, incidenceModifierPretty) {
|
||||||
|
// Adds a token incidence modifier to the query input field.
|
||||||
let selectedChip = this.elements.queryInputField.querySelector('.chip.teal');
|
let selectedChip = this.elements.queryInputField.querySelector('.chip.teal');
|
||||||
let selectedChipIndex = Array.from(this.elements.queryInputField.children).indexOf(selectedChip);
|
let selectedChipIndex = Array.from(this.elements.queryInputField.children).indexOf(selectedChip);
|
||||||
this.queryChipFactory('token-incidence-modifier', incidenceModifierPretty, incidenceModifier, selectedChipIndex+1);
|
this.queryChipFactory('token-incidence-modifier', incidenceModifierPretty, incidenceModifier, selectedChipIndex+1);
|
||||||
@ -142,6 +205,7 @@ class GeneralFunctionsQueryBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tokenNMSubmitHandler(modalId) {
|
tokenNMSubmitHandler(modalId) {
|
||||||
|
// Adds a token incidence modifier (exactly n or between n and m) to the query input field.
|
||||||
let modal = document.querySelector(`#${modalId}`);
|
let modal = document.querySelector(`#${modalId}`);
|
||||||
let input_n = modal.querySelector('.n-m-input[data-value-type="n"]').value;
|
let input_n = modal.querySelector('.n-m-input[data-value-type="n"]').value;
|
||||||
let input_m = modal.querySelector('.n-m-input[data-value-type="m"]') || undefined;
|
let input_m = modal.querySelector('.n-m-input[data-value-type="m"]') || undefined;
|
||||||
|
@ -10,24 +10,22 @@ class StructuralAttributeBuilderFunctionsQueryBuilder extends GeneralFunctionsQu
|
|||||||
});
|
});
|
||||||
document.querySelector('.ent-type-selection-action[data-ent-type="any"]').addEventListener('click', () => {
|
document.querySelector('.ent-type-selection-action[data-ent-type="any"]').addEventListener('click', () => {
|
||||||
this.queryChipFactory('start-empty-entity', 'Entity Start', '<ent>');
|
this.queryChipFactory('start-empty-entity', 'Entity Start', '<ent>');
|
||||||
this.queryChipFactory('end-entity', 'Entity End', '</ent>');
|
this.queryChipFactory('end-entity', 'Entity End', '</ent>', null, true);
|
||||||
this.elements.structuralAttrModal.close();
|
this.resetAndCloseStructuralAttrModal();
|
||||||
});
|
});
|
||||||
document.querySelector('.ent-type-selection-action[data-ent-type="english"]').addEventListener('change', (event) => {
|
document.querySelector('.ent-type-selection-action[data-ent-type="english"]').addEventListener('change', (event) => {
|
||||||
this.queryChipFactory('start-entity', `Entity Type=${event.target.value}`, `<ent_type="${event.target.value}">`);
|
this.queryChipFactory('start-entity', `Entity Type=${event.target.value}`, `<ent_type="${event.target.value}">`);
|
||||||
this.queryChipFactory('end-entity', 'Entity End', '</ent_type>');
|
this.queryChipFactory('end-entity', 'Entity End', '</ent_type>', null, true);
|
||||||
this.elements.structuralAttrModal.close();
|
this.resetAndCloseStructuralAttrModal();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
actionButtonInStrucAttrModalHandler(action) {
|
actionButtonInStrucAttrModalHandler(action) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case 'sentence':
|
case 'sentence':
|
||||||
this.queryChipFactory('start-sentence', 'Sentence Start', '<s>');
|
this.queryChipFactory('start-sentence', 'Sentence Start', '<s>');
|
||||||
this.queryChipFactory('end-sentence', 'Sentence End', '</s>');
|
this.queryChipFactory('end-sentence', 'Sentence End', '</s>', null, true);
|
||||||
this.elements.structuralAttrModal.close();
|
this.resetAndCloseStructuralAttrModal();
|
||||||
break;
|
break;
|
||||||
case 'entity':
|
case 'entity':
|
||||||
this.toggleClass(['entity-builder'], 'hide', 'toggle');
|
this.toggleClass(['entity-builder'], 'hide', 'toggle');
|
||||||
@ -42,4 +40,36 @@ class StructuralAttributeBuilderFunctionsQueryBuilder extends GeneralFunctionsQu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
textAnnotationSubmitHandler() {
|
||||||
|
let noValueMetadataMessage = document.querySelector('#corpus-analysis-concordance-no-value-metadata-message');
|
||||||
|
let textAnnotationSubmit = document.querySelector('#corpus-analysis-concordance-text-annotation-submit');
|
||||||
|
let textAnnotationInput = document.querySelector('#corpus-analysis-concordance-text-annotation-input');
|
||||||
|
let textAnnotationOptions = document.querySelector('#corpus-analysis-concordance-text-annotation-options');
|
||||||
|
|
||||||
|
if (textAnnotationInput.value === '') {
|
||||||
|
textAnnotationSubmit.classList.add('red');
|
||||||
|
noValueMetadataMessage.classList.remove('hide');
|
||||||
|
setTimeout(() => {
|
||||||
|
textAnnotationSubmit.classList.remove('red');
|
||||||
|
}, 500);
|
||||||
|
setTimeout(() => {
|
||||||
|
noValueMetadataMessage.classList.add('hide');
|
||||||
|
}, 3000);
|
||||||
|
} else {
|
||||||
|
let queryText = `:: match.text_${textAnnotationOptions.value}="${textAnnotationInput.value}"`;
|
||||||
|
this.queryChipFactory('text-annotation', `${textAnnotationOptions.value}=${textAnnotationInput.value}`, queryText);
|
||||||
|
this.resetAndCloseStructuralAttrModal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resetAndCloseStructuralAttrModal() {
|
||||||
|
let textAnnotatinInput = document.querySelector('#corpus-analysis-concordance-text-annotation-input');
|
||||||
|
textAnnotatinInput.value = '';
|
||||||
|
this.resetMaterializeSelection([this.elements.englishEntTypeSelection, this.elements.germanEntTypeSelection]);
|
||||||
|
this.resetMaterializeSelection([this.elements.textAnnotationSelection], 'address');
|
||||||
|
|
||||||
|
this.toggleClass(['entity-builder', 'text-annotation-builder'], 'hide', 'add');
|
||||||
|
this.elements.structuralAttrModal.close();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -331,13 +331,4 @@ class TokenAttributeBuilderFunctionsQueryBuilder extends GeneralFunctionsQueryBu
|
|||||||
this.resetMaterializeSelection([this.elements.englishPosSelection, this.elements.germanPosSelection, this.elements.simplePosSelection]);
|
this.resetMaterializeSelection([this.elements.englishPosSelection, this.elements.germanPosSelection, this.elements.simplePosSelection]);
|
||||||
this.resetMaterializeSelection([this.elements.positionalAttrSelection], "word");
|
this.resetMaterializeSelection([this.elements.positionalAttrSelection], "word");
|
||||||
}
|
}
|
||||||
|
|
||||||
resetMaterializeSelection(selectionElements, value = "default") {
|
|
||||||
selectionElements.forEach(selectionElement => {
|
|
||||||
selectionElement.querySelector(`option[value=${value}]`).selected = true;
|
|
||||||
let instance = M.FormSelect.getInstance(selectionElement);
|
|
||||||
instance.destroy();
|
|
||||||
M.FormSelect.init(selectionElement);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,26 @@ class Utils {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static unescape(escapedText) {
|
||||||
|
var table = {
|
||||||
|
'lt': '<',
|
||||||
|
'gt': '>',
|
||||||
|
'quot': '"',
|
||||||
|
'apos': "'",
|
||||||
|
'amp': '&',
|
||||||
|
'#10': '\r',
|
||||||
|
'#13': '\n'
|
||||||
|
};
|
||||||
|
|
||||||
|
return escapedText.replace(/&(#?\w+);/g, (match, entity) => {
|
||||||
|
if (table.hasOwnProperty(entity)) {
|
||||||
|
return table[entity];
|
||||||
|
}
|
||||||
|
|
||||||
|
return match;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static HTMLToElement(HTMLString) {
|
static HTMLToElement(HTMLString) {
|
||||||
let templateElement = document.createElement('template');
|
let templateElement = document.createElement('template');
|
||||||
templateElement.innerHTML = HTMLString.trim();
|
templateElement.innerHTML = HTMLString.trim();
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
<form id="corpus-analysis-concordance-query-builder-form">
|
<form id="corpus-analysis-concordance-query-builder-form">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s9" id="corpus-analysis-concordance-query-builder-input-field-container">
|
<div class="col s9" id="corpus-analysis-concordance-query-builder-input-field-container">
|
||||||
<div id="corpus-analysis-concordance-query-builder-input-field"></div>
|
<div id="corpus-analysis-concordance-query-builder-input-field">
|
||||||
|
<p id="corpus-analysis-concordance-query-builder-input-field-placeholder">Click on the buttons below to build your query.</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field col s3">
|
<div class="input-field col s3">
|
||||||
<i class="material-icons prefix">arrow_forward</i>
|
<i class="material-icons prefix">arrow_forward</i>
|
||||||
@ -75,8 +77,8 @@
|
|||||||
<a class="btn waves-effect waves-light col ent-type-selection-action" data-ent-type="any">Add Entity of any type</a>
|
<a class="btn waves-effect waves-light col ent-type-selection-action" data-ent-type="any">Add Entity of any type</a>
|
||||||
<p class="col s1 l1"></p>
|
<p class="col s1 l1"></p>
|
||||||
<div class= "input-field col s3">
|
<div class= "input-field col s3">
|
||||||
<select name="englishenttype" class="ent-type-selection-action" data-ent-type="english">
|
<select id="corpus-analysis-concordance-english-ent-type-selection" name="englishenttype" class="ent-type-selection-action" data-ent-type="english">
|
||||||
<option value="" disabled selected>English ent_type</option>
|
<option value="default" disabled selected>English ent_type</option>
|
||||||
<option value="CARDINAL">CARDINAL</option>
|
<option value="CARDINAL">CARDINAL</option>
|
||||||
<option value="DATE">DATE</option>
|
<option value="DATE">DATE</option>
|
||||||
<option value="EVENT">EVENT</option>
|
<option value="EVENT">EVENT</option>
|
||||||
@ -99,8 +101,8 @@
|
|||||||
<label>Entity Type</label>
|
<label>Entity Type</label>
|
||||||
</div>
|
</div>
|
||||||
<div class= "input-field col s3">
|
<div class= "input-field col s3">
|
||||||
<select name="germanenttype" class="ent-type-selection-action" data-ent-type="german">
|
<select id="corpus-analysis-concordance-german-ent-type-selection" name="germanenttype" class="ent-type-selection-action" data-ent-type="german">
|
||||||
<option value="" disabled selected>German ent_type</option>
|
<option value="default" disabled selected>German ent_type</option>
|
||||||
<option value="LOC">LOC</option>
|
<option value="LOC">LOC</option>
|
||||||
<option value="MISC">MISC</option>
|
<option value="MISC">MISC</option>
|
||||||
<option value="ORG">ORG</option>
|
<option value="ORG">ORG</option>
|
||||||
|
Loading…
Reference in New Issue
Block a user