import API from "../../api.js"; import BusinessObjects from "../../lib/business_objects/business_objects.js"; import DOM from "../../dom.js"; import Events from "../../lib/events.js"; import TableBasePage from "../base_table.js"; import Utils from "../../lib/utils.js"; import Validation from "../../lib/validation.js"; import DogTableMixinPage from "./mixin_table.js"; var _rowBlankDistraction; var _rowBlankAssessmentCommandModalityLink; export default class PageDogAssessment extends TableBasePage { static hash = hashPageDogAssessment; static attrIdRowObject = attrIdAssessment; callSaveTableContent = API.saveAssessmentsDistractionsAndResponses; constructor(router) { super(router); this.dogMixin = new DogTableMixinPage(this); } initialize() { this.sharedInitialize(); } hookupFilters() { } loadRowTable(rowJson) { if (rowJson == null) return; if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); } } getTableRecords(dirtyOnly = false) { dirtyOnly = true; let row = document.querySelector(idTableAssessment + ' tbody tr.' + flagAssessment); return [this.getJsonRow(row)]; } getJsonRow(row) { console.log("getJsonRow: ", row); if (row == null) return; let inputWeather = row.querySelector(idTableAssessment + ' td.' + flagWeather + ' .' + flagWeather); let inputLightingLevel = row.querySelector(idTableAssessment + ' td.' + flagLightingLevel + ' .' + flagLightingLevel); let inputTemeratureCelcius = row.querySelector(idTableAssessment + ' td.' + flagTemperatureCelcius + ' .' + flagTemperatureCelcius); let inputLocation = row.querySelector(idTableAssessment + ' td.' + flagLocation + ' .' + flagLocation); let inputUserHandler = row.querySelector(idTableAssessment + ' td.' + flagUserHandler + ' .' + flagUserHandler); let inputNotes = row.querySelector(idTableAssessment + ' td.' + flagNotes + ' .' + flagNotes); // let buttonActive = row.querySelector(idTableAssessment + ' td.' + flagActive + ' .' + flagButton + '.' + flagIcon + '.' + flagActive); let idAssessment = row.getAttribute(attrIdAssessment); let jsonRow = {}; jsonRow[attrIdAssessment] = idAssessment; jsonRow[attrIdWeather] = DOM.getElementAttributeValueCurrent(inputWeather); jsonRow[attrIdLightingLevel] = DOM.getElementAttributeValueCurrent(inputLightingLevel); jsonRow[flagTemperatureCelcius] = DOM.getElementAttributeValueCurrent(inputTemeratureCelcius); jsonRow[attrIdLocation] = DOM.getElementAttributeValueCurrent(inputLocation); jsonRow[flagUserHandler] = DOM.getElementAttributeValueCurrent(inputUserHandler); jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes); jsonRow[flagActive] = true; // buttonActive.classList.contains(flagDelete); jsonRow[flagDistraction] = this.getDirtyDistractions(idAssessment); jsonRow[flagAssessmentCommandModalityLink] = this.getDirtyAssessmentCommandModalityLinks(idAssessment); console.log({ jsonRow }); return jsonRow; } getDirtyDistractions(idAssessment) { let dirtyRows = document.querySelectorAll(idTableDistractions + ' tbody tr.' + flagDistraction + '.' + flagDirty); if (dirtyRows == null || dirtyRows.length == 0) return []; // dirtyRows = Array.from(dirtyRows); let dirtyRow, inputDistractionType, distractionType, inputIntensityLevelEmotional, intensityLevelEmotional, inputIntensityLevelScent, intensityLevelScent, inputIntensityLevelSight, intensityLevelSight, inputIntensityLevelSound, intensityLevelSound, inputIntensityLevelTouch, intensityLevelTouch, inputQuantity, quantity, inputProximityMetres, proximityMetres, inputNotes, notes, buttonActive, active; console.log('getDirtyDistractions'); console.log({ dirtyRows }); let dirtyDistractions = []; for(let indexRow = 0; indexRow < dirtyRows.length; indexRow++) { dirtyRow = dirtyRows[indexRow]; inputDistractionType = dirtyRow.querySelector('td.' + flagDistractionType + ' .' + flagDistractionType); distractionType = DOM.getElementAttributeValueCurrent(inputDistractionType); inputIntensityLevelEmotional = dirtyRow.querySelector('td.' + flagDistractionIntensityLevelEmotional + ' .' + flagDistractionIntensityLevelEmotional); intensityLevelEmotional = DOM.getElementAttributeValueCurrent(inputIntensityLevelEmotional); inputIntensityLevelScent = dirtyRow.querySelector('td.' + flagDistractionIntensityLevelScent + ' .' + flagDistractionIntensityLevelScent); intensityLevelScent = DOM.getElementAttributeValueCurrent(inputIntensityLevelScent); inputIntensityLevelSight = dirtyRow.querySelector('td.' + flagDistractionIntensityLevelSight + ' .' + flagDistractionIntensityLevelSight); intensityLevelSight = DOM.getElementAttributeValueCurrent(inputIntensityLevelSight); inputIntensityLevelSound = dirtyRow.querySelector('td.' + flagDistractionIntensityLevelSound + ' .' + flagDistractionIntensityLevelSound); intensityLevelSound = DOM.getElementAttributeValueCurrent(inputIntensityLevelSound); inputIntensityLevelTouch = dirtyRow.querySelector('td.' + flagDistractionIntensityLevelTouch + ' .' + flagDistractionIntensityLevelTouch); intensityLevelTouch = DOM.getElementAttributeValueCurrent(inputIntensityLevelTouch); inputQuantity = dirtyRow.querySelector('td.' + flagQuantity + ' .' + flagQuantity); quantity = DOM.getElementAttributeValueCurrent(inputQuantity); inputProximityMetres = dirtyRow.querySelector('td.' + flagProximityMetres + ' .' + flagProximityMetres); proximityMetres = DOM.getElementAttributeValueCurrent(inputProximityMetres); inputNotes = dirtyRow.querySelector('td.' + flagNotes + ' .' + flagNotes); notes = DOM.getElementAttributeValueCurrent(inputNotes); buttonActive = dirtyRow.querySelector(idTableDistractions + ' td.' + flagActive + ' .' + flagButton + '.' + flagIcon + '.' + flagActive); active = buttonActive.classList.contains(flagDelete); dirtyDistractions.push({ [attrIdDistraction]: dirtyRow.getAttribute(attrIdDistraction) , [attrIdAssessment]: idAssessment , [attrIdDistractionType]: distractionType , [flagDistractionIntensityLevelEmotional]: intensityLevelEmotional , [flagDistractionIntensityLevelScent]: intensityLevelScent , [flagDistractionIntensityLevelSight]: intensityLevelSight , [flagDistractionIntensityLevelSound]: intensityLevelSound , [flagDistractionIntensityLevelTouch]: intensityLevelTouch , [flagQuantity]: quantity , [flagProximityMetres]: proximityMetres , [flagNotes]: notes , [flagActive]: active }); }; return dirtyDistractions; } getDirtyAssessmentCommandModalityLinks(idAssessment) { let dirtyRows = document.querySelectorAll(idTableAssessmentCommandModalityLinks + ' > tbody > tr.' + flagAssessmentCommandModalityLink + '.' + flagDirty); if (dirtyRows == null || dirtyRows.length == 0) return []; dirtyRows = Array.from(dirtyRows); let dirtyRow, idAssessmentCommandModalityLink, inputCommand, command, inputCommandModality, commandModality, inputBribe, bribe, inputDistanceFromHandler, distanceFromhandler, inputIsInHearingRangeOfHandler, isInHearingRangeOfHandler, inputIsInScentRangeOfHandler, isInScentRangeOfHandler, inputIsInSightOfHandler, isInSightOfHandler, inputIsOnLead, isOnLead, inputNotes, notes, buttonActive, active; console.log('getDirtyAssessmentCommandModalityLinks'); console.log({ dirtyRows }); let dirtyLinks = []; for(let indexRow = 0; indexRow < dirtyRows.length; indexRow++) { dirtyRow = dirtyRows[indexRow]; idAssessmentCommandModalityLink = dirtyRow.getAttribute(attrIdAssessmentCommandModalityLink); inputCommand = dirtyRow.querySelector('td.' + flagCommand + ' .' + flagCommand); command = DOM.getElementAttributeValueCurrent(inputCommand); inputCommandModality = dirtyRow.querySelector('td.' + flagCommandModality + ' .' + flagCommandModality); commandModality = DOM.getElementAttributeValueCurrent(inputCommandModality); inputBribe = dirtyRow.querySelector('td.' + flagBribe + ' .' + flagBribe); bribe = DOM.getElementAttributeValueCurrent(inputBribe); inputDistanceFromHandler = dirtyRow.querySelector('td.' + flagDistanceFromHandlerMetres + ' .' + flagDistanceFromHandlerMetres); distanceFromhandler = DOM.getElementAttributeValueCurrent(inputDistanceFromHandler); inputIsInHearingRangeOfHandler = dirtyRow.querySelector('td.' + flagIsInHearingRangeOfHandler + ' .' + flagIsInHearingRangeOfHandler); isInHearingRangeOfHandler = DOM.getElementAttributeValueCurrent(inputIsInHearingRangeOfHandler); inputIsInScentRangeOfHandler = dirtyRow.querySelector('td.' + flagIsInScentRangeOfHandler + ' .' + flagIsInScentRangeOfHandler); isInScentRangeOfHandler = DOM.getElementAttributeValueCurrent(inputIsInScentRangeOfHandler); inputIsInSightOfHandler = dirtyRow.querySelector('td.' + flagIsInSightOfHandler + ' .' + flagIsInSightOfHandler); isInSightOfHandler = DOM.getElementAttributeValueCurrent(inputIsInSightOfHandler); inputIsOnLead = dirtyRow.querySelector('td.' + flagIsOnLead + ' .' + flagIsOnLead); isOnLead = DOM.getElementAttributeValueCurrent(inputIsOnLead); inputNotes = dirtyRow.querySelector('td.' + flagNotes + ' .' + flagNotes); notes = DOM.getElementAttributeValueCurrent(inputNotes); buttonActive = dirtyRow.querySelector(idTableAssessmentCommandModalityLinks + ' td.' + flagActive + ' .' + flagButton + '.' + flagIcon + '.' + flagActive); active = buttonActive.classList.contains(flagDelete); dirtyLinks.push({ [attrIdAssessmentCommandModalityLink]: idAssessmentCommandModalityLink , [attrIdAssessment]: idAssessment , [attrIdCommand]: command , [attrIdCommandModality]: commandModality , [attrIdBribe]: bribe , [flagDistanceFromHandlerMetres]: distanceFromhandler , [flagIsInHearingRangeOfHandler]: isInHearingRangeOfHandler , [flagIsInScentRangeOfHandler]: isInScentRangeOfHandler , [flagIsInSightOfHandler]: isInSightOfHandler , [flagIsOnLead]: isOnLead , [flagNotes]: notes , [flagActive]: active , [flagAssessmentResponse]: this.getDirtyAssessmentResponses(dirtyRow, idAssessmentCommandModalityLink) }); } return dirtyLinks; } getDirtyAssessmentResponses(rowAssessmentCommandModalityLink, idAssessmentCommandModalityLink) { let dirtyRows = rowAssessmentCommandModalityLink.querySelectorAll(idTableAssessmentResponses + ' tbody tr.' + flagAssessmentResponse + '.' + flagDirty); if (dirtyRows == null || dirtyRows.length == 0) return []; dirtyRows = Array.from(dirtyRows); let dirtyRow, inputResponseQualityMetric, responseQualityMetric, inputObedienceLevel, obedienceLevel, inputValueMeasured, valueMeasured, inputNotes, notes, buttonActive, active; console.log('getDirtyAssessmentResponses'); console.log({ dirtyRows }); let dirtyResponses = []; for(let indexRow = 0; indexRow < dirtyRows.length; indexRow++) { dirtyRow = dirtyRows[indexRow]; inputResponseQualityMetric = dirtyRow.querySelector('td.' + flagResponseQualityMetric + ' .' + flagResponseQualityMetric); responseQualityMetric = DOM.getElementAttributeValueCurrent(inputResponseQualityMetric); inputObedienceLevel = dirtyRow.querySelector('td.' + flagObedienceLevel + ' .' + flagObedienceLevel); obedienceLevel = DOM.getElementAttributeValueCurrent(inputObedienceLevel); inputValueMeasured = dirtyRow.querySelector('td.' + flagValueMeasured + ' .' + flagValueMeasured); valueMeasured = DOM.getElementAttributeValueCurrent(inputValueMeasured); inputNotes = dirtyRow.querySelector('td.' + flagNotes + ' .' + flagNotes); notes = DOM.getElementAttributeValueCurrent(inputNotes); buttonActive = dirtyRow.querySelector(idTableAssessmentResponses + ' td.' + flagActive + ' .' + flagButton + '.' + flagIcon + '.' + flagActive); active = buttonActive.classList.contains(flagDelete); dirtyResponses.push({ [attrIdAssessmentResponse]: dirtyRow.getAttribute(attrIdAssessmentResponse) , [attrIdAssessmentCommandModalityLink]: idAssessmentCommandModalityLink , [attrIdResponseQualityMetric]: responseQualityMetric , [attrIdObedienceLevel]: obedienceLevel , [flagValueMeasured]: valueMeasured , [flagNotes]: notes , [flagActive]: active }); } return dirtyResponses; } initialiseRowNew(tbody, row) { } postInitialiseRowNewCallback(tbody) { let newRows = tbody.querySelectorAll('tr.' + flagRowNew); let newestRow = newRows[0]; let clickableElementsSelector = [ 'td.' + flagWeather + ' div.' + flagWeather , ',td.' + flagLightingLevel + ' div.' + flagLightingLevel , ',td.' + flagLocation + ' div.' + flagLocation , ',td.' + flagUserHandler + ' div.' + flagUserHandler ].join(''); newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => { clickableElement.click(); }); } callFilterTableContent() { if (assessment[attrIdAssessment] < 1) { let formFilters = TableBasePage.getFormFilters(); let filterAssessment = formFilters.querySelector('#' + attrIdAssessment); DOM.setElementValueCurrent(filterAssessment, ''); } super.callFilterTableContent(); } hookupTableMain() { super.hookupTableMain(); this.hookupTableAssessmentHeader(); this.hookupTableDistractions(); this.hookupTableAssessmentCommandModalityLinks(); } hookupTableAssessmentHeader() { this.hookupTableAssessmentFieldWeather(); this.hookupTableAssessmentFieldLightingLevel(); this.hookupTableAssessmentFieldTemperature(); this.hookupTableAssessmentFieldLocation(); this.hookupTableAssessmentFieldUserHandler(); this.hookupTableAssessmentFieldNotes(); if (assessment[attrIdAssessment] < 1) { let tbody = document.querySelector(idTableAssessment + ' tbody'); let row = tbody.querySelector('tr'); row.classList.add(flagRowNew); this.postInitialiseRowNewCallback(tbody); } } hookupTableAssessmentFieldWeather() { let fieldFlag = flagWeather; let optionList = Utils.getListFromDict(filterWeathers); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessment + ' td.' + flagWeather; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentFieldLightingLevel() { let fieldFlag = flagLightingLevel; let optionList = Utils.getListFromDict(filterLightingLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessment + ' td.' + flagLightingLevel; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentFieldTemperature() { this.hookupChangeHandlerTableCells(idTableAssessment + ' td.' + flagTemperatureCelcius + ' .' + flagTemperatureCelcius); } hookupTableAssessmentFieldLocation() { let fieldFlag = flagLocation; let optionList = Utils.getListFromDict(filterLocations); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessment + ' td.' + flagLocation; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentFieldUserHandler() { let fieldFlag = flagUserHandler; let optionList = Utils.getListFromDict(filterUserHandlers); // .sort((a, b) => a[flagName].localeCompare(b[flagName])); let cellSelector = idTableAssessment + ' td.' + flagUserHandler; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentFieldNotes() { this.hookupChangeHandlerTableCells(idTableAssessment + ' td.' + flagNotes + ' .' + flagNotes); } hookupTableDistractions() { Events.initialiseEventHandler(idTableDistractions, flagInitialised, (table) => { let selectorRowNew = idTableDistractions + ' tbody tr.' + flagRowNew; let rowBlankTemp = document.querySelector(selectorRowNew); Utils.consoleLogIfNotProductionEnvironment("row blank temp: ", rowBlankTemp); let countRows = document.querySelectorAll(idTableDistractions + ' > tbody > tr').length; _rowBlankDistraction = rowBlankTemp.cloneNode(true); document.querySelectorAll(selectorRowNew).forEach(function(row) { row.remove(); }); _rowBlankDistraction.setAttribute(attrIdDistraction, -1 - countRows); }); this.hookupTableDistractionsFieldsDistractionType(); this.hookupTableDistractionsFieldsIntensityLevelEmotional(); this.hookupTableDistractionsFieldsIntensityLevelScent(); this.hookupTableDistractionsFieldsIntensityLevelSight(); this.hookupTableDistractionsFieldsIntensityLevelSound(); this.hookupTableDistractionsFieldsIntensityLevelTouch(); this.hookupTableDistractionsFieldsQuantity(); this.hookupTableDistractionsFieldsProximityMetres(); this.hookupTableDistractionsFieldsNotes(); this.hookupTableDistractionsFieldsActive(); } hookupTableDistractionsFieldsDistractionType() { let fieldFlag = flagDistractionType; let optionList = Utils.getListFromDict(filterDistractionTypes); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableDistractions + ' td.' + flagDistractionType; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableDistractionsFieldsIntensityLevelEmotional() { let fieldFlag = flagDistractionIntensityLevelEmotional; let optionList = Utils.getListFromDict(filterDistractionIntensityLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableDistractions + ' td.' + flagDistractionIntensityLevelEmotional; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableDistractionsFieldsIntensityLevelScent() { let fieldFlag = flagDistractionIntensityLevelScent; let optionList = Utils.getListFromDict(filterDistractionIntensityLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableDistractions + ' td.' + flagDistractionIntensityLevelScent; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableDistractionsFieldsIntensityLevelSight() { let fieldFlag = flagDistractionIntensityLevelSight; let optionList = Utils.getListFromDict(filterDistractionIntensityLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableDistractions + ' td.' + flagDistractionIntensityLevelSight; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableDistractionsFieldsIntensityLevelSound() { let fieldFlag = flagDistractionIntensityLevelSound; let optionList = Utils.getListFromDict(filterDistractionIntensityLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableDistractions + ' td.' + flagDistractionIntensityLevelSound; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableDistractionsFieldsIntensityLevelTouch() { let fieldFlag = flagDistractionIntensityLevelTouch; let optionList = Utils.getListFromDict(filterDistractionIntensityLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableDistractions + ' td.' + flagDistractionIntensityLevelTouch; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableDistractionsFieldsQuantity() { this.hookupChangeHandlerTableCells(idTableDistractions + ' td.' + flagQuantity + ' .' + flagQuantity); } hookupTableDistractionsFieldsProximityMetres() { this.hookupChangeHandlerTableCells(idTableDistractions + ' td.' + flagProximityMetres + ' .' + flagProximityMetres); } hookupTableDistractionsFieldsNotes() { this.hookupChangeHandlerTableCells(idTableDistractions + ' td.' + flagNotes + ' .' + flagNotes); } hookupTableDistractionsFieldsActive() { this.hookupFieldsActive(flagDistraction, (event, element) => { this.handleClickAddRowTableDistractions(event, element); }); } handleClickAddRowTableDistractions(event, button) { event.stopPropagation(); _rowBlankDistraction.setAttribute(attrIdDistraction, -1 - _rowBlankDistraction.getAttribute(attrIdDistraction)); let tbody = document.querySelector(idTableDistractions + ' tbody'); if (tbody.classList.contains(flagIsCollapsed)) return; let row = _rowBlankDistraction.cloneNode(true); row.classList.remove(flagInitialised); row.querySelectorAll('.' + flagInitialised).forEach(function(element) { element.classList.remove(flagInitialised); }); let countRows = document.querySelectorAll(idTableDistractions + ' > tbody > tr').length; row.setAttribute(attrIdDistraction, -1 - countRows); tbody.prepend(row); tbody.scrollTop = 0; this.hookupTableDistractions(); this.postInitialiseDistractionRowNewCallback(tbody); } postInitialiseDistractionRowNewCallback(tbody) { let newRows = tbody.querySelectorAll('tr.' + flagRowNew); let newestRow = newRows[0]; let clickableElementsSelector = [ 'td.' + flagDistractionType + ' div.' + flagDistractionType , ',td.' + flagDistractionIntensityLevelEmotional + ' div.' + flagDistractionIntensityLevelEmotional , ',td.' + flagDistractionIntensityLevelScent + ' div.' + flagDistractionIntensityLevelScent , ',td.' + flagDistractionIntensityLevelSight + ' div.' + flagDistractionIntensityLevelSight , ',td.' + flagDistractionIntensityLevelSound + ' div.' + flagDistractionIntensityLevelSound , ',td.' + flagDistractionIntensityLevelTouch + ' div.' + flagDistractionIntensityLevelTouch ].join(''); newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => { clickableElement.click(); }); } hookupTableAssessmentCommandModalityLinks() { Events.initialiseEventHandler(idTableAssessmentCommandModalityLinks, flagInitialised, (table) => { let selectorRowNew = idTableAssessmentCommandModalityLinks + ' tbody tr.' + flagRowNew; let rowBlankTemp = document.querySelector(selectorRowNew); Utils.consoleLogIfNotProductionEnvironment("row blank temp: ", rowBlankTemp); let countRows = document.querySelectorAll(idTableAssessmentCommandModalityLinks + ' > tbody > tr').length; _rowBlankAssessmentCommandModalityLink = rowBlankTemp.cloneNode(true); document.querySelectorAll(selectorRowNew).forEach(function(row) { row.remove(); }); _rowBlankAssessmentCommandModalityLink.setAttribute(attrIdAssessmentCommandModalityLink, -1 - countRows); }); this.hookupTableAssessmentCommandModalityLinksFieldsCommandCategory(); this.hookupTableAssessmentCommandModalityLinksFieldsCommand(); this.hookupTableAssessmentCommandModalityLinksFieldsCommandModality(); this.hookupTableAssessmentCommandModalityLinksFieldsBribe(); this.hookupTableAssessmentCommandModalityLinksFieldsDistanceFromHandlerMetres(); this.hookupTableAssessmentCommandModalityLinksFieldsIsInHearingRangeOfHandler(); this.hookupTableAssessmentCommandModalityLinksFieldsIsInScentRangeOfHandler(); this.hookupTableAssessmentCommandModalityLinksFieldsIsInSightOfHandler(); this.hookupTableAssessmentCommandModalityLinksFieldsIsOnLead(); this.hookupTableAssessmentCommandModalityLinksFieldsTrialCount(); this.hookupTableAssessmentCommandModalityLinksFieldsNotes(); this.hookupTableAssessmentCommandModalityLinksFieldsResponses(); this.hookupTableAssessmentCommandModalityLinksFieldsActive(); } hookupTableAssessmentCommandModalityLinksFieldsCommandCategory() { this.hookupFieldsCommandCategory(idTableAssessmentCommandModalityLinks); /* let fieldFlag = flagCommandCategory; let optionList = Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName])); let cellSelector = idTableAssessmentCommandModalityLinks + ' td.' + flagCommandCategory; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector , (tdSelector) => { this.hookupTableAssessmentCommandModalityLinksDdlsCommandCategory(tdSelector); } , (event, element) => { this.handleChangeTableAssessmentCommandModalityLinksDdlCommandCategory(event, element); } ); */ } /* hookupTableAssessmentCommandModalityLinksDdlsCommandCategory(ddlSelector) { this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeTableAssessmentCommandModalityLinksDdlCommandCategory(event, element); }); } handleChangeTableAssessmentCommandModalityLinksDdlCommandCategory(event, ddlCategory) { let row = DOM.getRowFromElement(ddlCategory); let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory); this.handleChangeNestedElementCellTable(event, ddlCategory); let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory); if (idCommandCategoryRowOld == idCommandCategoryRowNew) return; let divCommand = row.querySelector('td.' + flagCommand + ' div'); if (divCommand) divCommand.dispatchEvent(new Event('click')); let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand); ddlCommand.innerHTML = ''; ddlCommand.appendChild(DOM.createOption(null)); let optionJson, option; let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => ( command[attrIdCommandCategory] == idCommandCategoryRowNew || idCommandCategoryRowNew == 0 ) ); let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName])); sortedCommands.forEach((command) => { optionJson = BusinessObjects.getOptionJsonFromObjectJson(command); option = DOM.createOption(optionJson); ddlCommand.appendChild(option); }); this.handleChangeNestedElementCellTable(event, ddlCommand); } */ hookupTableAssessmentCommandModalityLinksFieldsCommand() { this.hookupFieldsCommand(idTableAssessmentCommandModalityLinks); } hookupTableAssessmentCommandModalityLinksFieldsCommandModality() { let fieldFlag = flagCommandModality; let optionList = Utils.getListFromDict(filterCommandModalities); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessmentCommandModalityLinks + ' td.' + flagCommandModality; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentCommandModalityLinksFieldsBribe() { let fieldFlag = flagBribe; let optionList = Utils.getListFromDict(filterBribes); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessmentCommandModalityLinks + ' td.' + flagBribe; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentCommandModalityLinksFieldsDistanceFromHandlerMetres() { this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' td.' + flagDistanceFromHandlerMetres + ' .' + flagDistanceFromHandlerMetres); } hookupTableAssessmentCommandModalityLinksFieldsIsInHearingRangeOfHandler() { this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' td.' + flagIsInHearingRangeOfHandler + ' .' + flagIsInHearingRangeOfHandler); } hookupTableAssessmentCommandModalityLinksFieldsIsInScentRangeOfHandler() { this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' td.' + flagIsInScentRangeOfHandler + ' .' + flagIsInScentRangeOfHandler); } hookupTableAssessmentCommandModalityLinksFieldsIsInSightOfHandler() { this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' td.' + flagIsInSightOfHandler + ' .' + flagIsInSightOfHandler); } hookupTableAssessmentCommandModalityLinksFieldsIsOnLead() { this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' td.' + flagIsOnLead + ' .' + flagIsOnLead); } hookupTableAssessmentCommandModalityLinksFieldsTrialCount() { // this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' td.' + flagTrialCount + ' .' + flagTrialCount); } hookupTableAssessmentCommandModalityLinksFieldsNotes() { this.hookupChangeHandlerTableCells(idTableAssessmentCommandModalityLinks + ' > tbody > tr > td.' + flagNotes + ' .' + flagNotes); } hookupTableAssessmentCommandModalityLinksFieldsResponses() { let eventType = "click"; let selector = idTableAssessmentCommandModalityLinks + ' td.' + flagAssessmentResponse + ' div.' + flagAssessmentResponse; let handler = (event, element) => { let parentTd = DOM.getCellFromElement(element); let rowAssessmentCommandModalityLink = parentTd.closest('tr.' + flagAssessmentCommandModalityLink); let idAssessmentCommandModalityLink = rowAssessmentCommandModalityLink.getAttribute(attrIdAssessmentCommandModalityLink); let responsesTable = document.createElement("table"); responsesTable.id = idTableAssessmentResponses.replace("#", ""); responsesTable.classList.add(flagTableMain, flagAssessmentResponse); let head = document.createElement("thead"); let headRow = document.createElement("tr"); let thResponseQualityMetric = document.createElement("th"); thResponseQualityMetric.classList.add(flagResponseQualityMetric); thResponseQualityMetric.innerText = 'Response Quality Metric'; headRow.appendChild(thResponseQualityMetric); let thObedienceLevel = document.createElement("th"); thObedienceLevel.classList.add(flagObedienceLevel); thObedienceLevel.innerText = 'Obedience Level'; headRow.appendChild(thObedienceLevel); let thValueMeasured = document.createElement("th"); thValueMeasured.classList.add(flagValueMeasured); thValueMeasured.innerText = 'Value Measured'; headRow.appendChild(thValueMeasured); let thNotes = document.createElement("th"); thNotes.classList.add(flagNotes); thNotes.innerText = 'Notes'; headRow.appendChild(thNotes); let thActive = document.createElement("th"); thActive.classList.add(flagActive); let templateAddIcon = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagIcon + '.' + flagActive + '.' + flagAdd); thActive.appendChild(templateAddIcon.cloneNode(true)); headRow.appendChild(thActive); head.appendChild(headRow); responsesTable.appendChild(head); let body = document.createElement("tbody"); let assessmentCommandModalityLinks = assessment[flagAssessmentCommandModalityLink].filter(link => link[attrIdAssessmentCommandModalityLink] == idAssessmentCommandModalityLink); let assessmentCommandModalityLink = (assessmentCommandModalityLinks == null || assessmentCommandModalityLinks.length == 0) ? null : assessmentCommandModalityLinks[0]; let responses = (assessmentCommandModalityLink == null) ? null : assessmentCommandModalityLink[flagAssessmentResponse]; console.log({ assessmentCommandModalityLinks, responses }); if (responses != null && responses.length > 0) { for (let responseKey in Object.keys(responses)) { let response = responses[responseKey]; let row = PageDogAssessment.createNewRowTableAssessmentResponses(response); body.appendChild(row); } } responsesTable.appendChild(body); parentTd.innerHTML = responsesTable.outerHTML; let responseRows = parentTd.querySelectorAll('tbody tr.' + flagAssessmentResponse); if (responseRows != null && responseRows.length > 0) { for (let indexRow = 0; indexRow < responseRows.length; indexRow++) { let row = responseRows[indexRow]; // let idAssessmentResponse = row.getAttribute(attrIdAssessmentResponse); let response = responses[indexRow]; // idAssessmentResponse]; console.log({ indexRow, row, response }); // idAssessmentResponse, let inputValueMeasured = row.querySelector('td.' + flagValueMeasured + ' .' + flagValueMeasured); DOM.setElementValueCurrent(inputValueMeasured, response[flagValueMeasured]); let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes); DOM.setElementValueCurrent(inputNotes, response[flagNotes]); } } this.hookupTablesAssessmentResponses(); }; Events.hookupEventHandler( eventType , selector , handler ); this.hookupTablesAssessmentResponses(); } static createNewRowTableAssessmentResponses(response) { if (response == null) response = { [attrIdAssessmentResponse]: null , [attrIdResponseQualityMetric]: { [attrIdResponseQualityMetric]: 0 } , [attrIdObedienceLevel]: { [attrIdObedienceLevel]: 0 } , [flagValueMeasured]: '' , [flagNotes]: '' , [flagActive]: true }; console.log({ response }); let isNew = (response[attrIdAssessmentResponse] == null || response[attrIdAssessmentResponse] < 1); let row = document.createElement("tr"); row.classList.add(flagAssessmentResponse); if (isNew) row.classList.add(flagRowNew); row.setAttribute(attrIdAssessmentResponse, response[attrIdAssessmentResponse]); let tdResponseQualityMetric = document.createElement("td"); tdResponseQualityMetric.classList.add(flagResponseQualityMetric, flagDdlPreview); let divResponseQualityMetric = document.createElement("div"); divResponseQualityMetric.classList.add(flagResponseQualityMetric); let idResponseQualityMetric = response[attrIdResponseQualityMetric][attrIdResponseQualityMetric]; let responseQualityMetric = filterResponseQualityMetrics[idResponseQualityMetric]; DOM.setElementAttributesValuesCurrentAndPrevious(divResponseQualityMetric, idResponseQualityMetric); divResponseQualityMetric.innerText = (responseQualityMetric == null) ? '' : responseQualityMetric[flagName]; tdResponseQualityMetric.appendChild(divResponseQualityMetric); row.appendChild(tdResponseQualityMetric); let tdObedienceLevel = document.createElement("td"); tdObedienceLevel.classList.add(flagObedienceLevel, flagDdlPreview); let divObedienceLevel = document.createElement("div"); divObedienceLevel.classList.add(flagObedienceLevel); let idObedienceLevel = response[attrIdObedienceLevel][attrIdObedienceLevel]; let obedienceLevel = filterObedienceLevels[idObedienceLevel]; DOM.setElementAttributesValuesCurrentAndPrevious(divObedienceLevel, idObedienceLevel); divObedienceLevel.innerText = (obedienceLevel == null) ? '' : obedienceLevel[flagName]; tdObedienceLevel.appendChild(divObedienceLevel); row.appendChild(tdObedienceLevel); let tdValueMeasured = document.createElement("td"); tdValueMeasured.classList.add(flagValueMeasured, flagDdlPreview); let inputValueMeasured = document.createElement("input"); inputValueMeasured.type = "number"; inputValueMeasured.classList.add(flagValueMeasured); let valueMeasured = response[flagValueMeasured]; DOM.setElementValueCurrent(inputValueMeasured, valueMeasured); DOM.setElementAttributeValuePrevious(inputValueMeasured, valueMeasured); tdValueMeasured.appendChild(inputValueMeasured); row.appendChild(tdValueMeasured); let tdNotes = document.createElement("td"); tdNotes.classList.add(flagNotes, flagDdlPreview); let inputNotes = document.createElement("textarea"); inputNotes.classList.add(flagNotes); let notes = response[flagNotes]; DOM.setElementValueCurrent(inputNotes, notes); DOM.setElementAttributeValuePrevious(inputNotes, notes); tdNotes.appendChild(inputNotes); row.appendChild(tdNotes); console.log(inputValueMeasured.tagName); console.log(inputNotes.tagName); console.log({ valueMeasured, notes }); let tdActive = document.createElement("td"); tdActive.classList.add(flagActive, flagDdlPreview); let templateAddIcon = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagIcon + '.' + flagActive + '.' + flagAdd); let templateDeleteIcon = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagIcon + '.' + flagActive + '.' + flagDelete); let buttonActive = (response[flagActive]) ? templateDeleteIcon.cloneNode(true) : templateAddIcon.cloneNode(true); tdActive.appendChild(buttonActive); row.appendChild(tdActive); return row; } hookupTablesAssessmentResponses() { this.hookupTableAssessmentResponsesFieldsResponseQualityMetric(); this.hookupTableAssessmentResponsesFieldsObedienceLevel(); this.hookupTableAssessmentResponsesFieldsValueMeasured(); this.hookupTableAssessmentResponsesFieldsNotes(); this.hookupTableAssessmentResponsesFieldsActive(); } hookupTableAssessmentResponsesFieldsResponseQualityMetric() { let fieldFlag = flagResponseQualityMetric; let optionList = Utils.getListFromDict(filterResponseQualityMetrics); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessmentResponses + ' td.' + flagResponseQualityMetric; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentResponsesFieldsObedienceLevel() { let fieldFlag = flagObedienceLevel; let optionList = Utils.getListFromDict(filterObedienceLevels); // .sort((a, b) => a[flagName].localeCompare(b[flagName])) let cellSelector = idTableAssessmentResponses + ' td.' + flagObedienceLevel; this.hookupTableCellDdlPreviews( fieldFlag , optionList , cellSelector ); } hookupTableAssessmentResponsesFieldsValueMeasured() { this.hookupChangeHandlerTableCells(idTableAssessmentResponses + ' td.' + flagValueMeasured + ' .' + flagValueMeasured); } hookupTableAssessmentResponsesFieldsNotes() { this.hookupChangeHandlerTableCells(idTableAssessmentResponses + ' td.' + flagNotes + ' .' + flagNotes); } hookupTableAssessmentResponsesFieldsActive() { this.hookupFieldsActive(flagAssessmentResponse, (event, element) => { this.handleClickAddRowTableAssessmentResponses(event, element); }); } handleClickAddRowTableAssessmentResponses(event, button) { event.stopPropagation(); let tableResponses = DOM.getClosestParent(button, "table"); let tbody = tableResponses.querySelector(":scope > tbody"); let row = PageDogAssessment.createNewRowTableAssessmentResponses(null); if (tbody.classList.contains(flagIsCollapsed)) return; row.classList.remove(flagInitialised); row.querySelectorAll('.' + flagInitialised).forEach(function(element) { element.classList.remove(flagInitialised); }); let countRows = document.querySelectorAll(idTableAssessmentResponses + ' > tbody > tr').length; row.setAttribute(attrIdAssessmentResponse, -1 - countRows); tbody.prepend(row); tbody.scrollTop = 0; this.hookupTablesAssessmentResponses(); this.postInitialiseAssessmentResponseRowNewCallback(tbody); } postInitialiseAssessmentResponseRowNewCallback(tbody) { let newRows = tbody.querySelectorAll('tr.' + flagRowNew); let newestRow = newRows[0]; let clickableElementsSelector = [ 'td.' + flagResponseQualityMetric + ' div.' + flagResponseQualityMetric , ',td.' + flagObedienceLevel + ' div.' + flagObedienceLevel , ',td.' + flagValueMeasured + ' div.' + flagValueMeasured , ',td.' + flagNotes + ' div.' + flagNotes ].join(''); newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => { clickableElement.click(); }); let countActiveRows = tbody.querySelectorAll('td.' + flagActive + ' .' + flagButton + '.' + flagIcon + '.' + flagActive + '.' + flagDelete).length; /* newRows.filter(row => { let activeButton = row.querySelector('td.' + flagActive + ' .' + flagButton + '.' + flagIcon + '.' + flagActive); return activeButton.classList.contains(flagDelete); }).length; */ let rowAssessmentCommandModalityLink = DOM.getRowFromElement(tbody); let divTrialCount = rowAssessmentCommandModalityLink.querySelector('td.' + flagTrialCount + ' div.' + flagTrialCount); divTrialCount.innerText = countActiveRows; } hookupTableAssessmentCommandModalityLinksFieldsActive() { this.hookupFieldsActive(flagAssessmentCommandModalityLink, (event, element) => { this.handleClickAddRowTableAssessmentCommandModalityLinks(event, element); }); } handleClickAddRowTableAssessmentCommandModalityLinks(event, button) { event.stopPropagation(); _rowBlankAssessmentCommandModalityLink.setAttribute(attrIdAssessmentCommandModalityLink, -1 - _rowBlankAssessmentCommandModalityLink.getAttribute(attrIdAssessmentCommandModalityLink)); let tbody = document.querySelector(idTableAssessmentCommandModalityLinks + ' tbody'); if (tbody.classList.contains(flagIsCollapsed)) return; let row = _rowBlankAssessmentCommandModalityLink.cloneNode(true); row.classList.remove(flagInitialised); row.querySelectorAll('.' + flagInitialised).forEach(function(element) { element.classList.remove(flagInitialised); }); let countRows = document.querySelectorAll(idTableAssessmentCommandModalityLinks + ' > tbody > tr').length; row.setAttribute(attrIdAssessmentCommandModalityLink, -1 - countRows); tbody.prepend(row); tbody.scrollTop = 0; this.hookupTableAssessmentCommandModalityLinks(); this.postInitialiseAssessmentCommandModalityLinkRowNewCallback(tbody); } postInitialiseAssessmentCommandModalityLinkRowNewCallback(tbody) { let newRows = tbody.querySelectorAll('tr.' + flagRowNew); let newestRow = newRows[0]; let clickableElementsSelector = [ 'td.' + flagCommandCategory + ' div.' + flagCommandCategory , ',td.' + flagCommand + ' div.' + flagCommand , ',td.' + flagCommandModality + ' div.' + flagCommandModality , ',td.' + flagBribe + ' div.' + flagBribe ].join(''); newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => { clickableElement.click(); }); } leave() { super.leave(); } }