UNPKG

gazeplotter

Version:

Gazeplotter is a Svelte application for visualizing eye-tracking data.

51 lines (50 loc) 2.39 kB
import { getStimulusHighestEndTime, updateMultipleAoiVisibility } from '../../stores/dataStore.ts'; export class AoiVisibilityParser { addVisInfo(stimulusId, participantId, xml) { const aoiNodes = xml.getElementsByTagName('DynamicAOI'); const multipleAoiNames = []; const multipleAoiVisibilityArrays = []; for (let i = 0; i < aoiNodes.length; i++) { const aoiName = aoiNodes[i].querySelector('Name')?.innerHTML; if (aoiName === undefined) continue; const aoiKeyFrames = aoiNodes[i].getElementsByTagName('KeyFrame'); const aoiVisibilityArr = this.processKeyFrames(aoiKeyFrames, stimulusId); multipleAoiNames.push(aoiName); multipleAoiVisibilityArrays.push(aoiVisibilityArr); } updateMultipleAoiVisibility(stimulusId, multipleAoiNames, multipleAoiVisibilityArrays, participantId); } processKeyFrames(keyFrames, stimulusId) { const visibilityArr = []; let isAoiCurrentlyVisible = false; for (let i = 0; i < keyFrames.length; i++) { const frame = keyFrames[i]; const visibility = frame.querySelector('Visible')?.innerHTML; if (visibility === undefined) continue; if (visibility === 'true' && !isAoiCurrentlyVisible) { const timestampNode = frame.querySelector('Timestamp'); if (timestampNode === null) continue; const timestamp = Number(timestampNode.innerHTML) / 1000; // ms visibilityArr.push(timestamp); isAoiCurrentlyVisible = true; } if ((visibility === 'false' && isAoiCurrentlyVisible)) { const timestampNode = frame.querySelector('Timestamp'); if (timestampNode === null) continue; const timestamp = Number(timestampNode.innerHTML) / 1000; // ms visibilityArr.push(timestamp); isAoiCurrentlyVisible = false; } if ((visibility === 'true' && i === keyFrames.length - 1)) { const timestamp = getStimulusHighestEndTime(stimulusId); visibilityArr.push(timestamp); isAoiCurrentlyVisible = false; } } return visibilityArr; } }