12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <template>
- <div>
- <slot></slot>
- </div>
- </template>
- <script>
- import './style.css'
- import ExperimentBase from '@/mixins/ExperimentBase'
- import { mapGetters } from 'vuex'
- import { rand } from '@/functions'
- import { EXPERIMENT as experimentMsgId } from '@/../config.messagesId'
- export default {
- name: 'ExperimentBaseAreSameImages',
- mixins: [ExperimentBase],
- data() {
- return {
- maxTestCount: null,
- testCount: 1,
- leftImage: { link: null, quality: null },
- rightImage: { link: null, quality: null }
- }
- },
- computed: {
- ...mapGetters(['getHostURI'])
- },
- methods: {
- scrollToChoiceButtons() {
- const ele = document.querySelector('#choice')
- if (ele) ele.scrollIntoView({ behavior: 'smooth' })
- },
- async getTest(leftQuality, rightQuality) {
- const left = this.qualities[leftQuality]
- const right = this.qualities[rightQuality]
- const res = await Promise.all([this.getImage(left), this.getImage(right)])
- const [leftImage, rightImage] = res.map(x => {
- x.link = `${this.getHostURI}${x.link}`
- return x
- })
- return { leftImage, rightImage }
- },
- getRandomTest() {
- return this.getTest(rand(0, this.qualities.length - 1), rand(0, this.qualities.length - 1))
- },
- // An action was triggered, load extracts and save progression
- async areTheSameActionRandom(areTheSame) {
- this.loadingMessage = 'Loading new test...'
- this.loadingErrorMessage = null
- try {
- this.testCount++
- const obj = {
- leftImage: this.leftImage,
- rightImage: this.rightImage,
- areTheSame,
- experimentName: this.experimentName,
- sceneName: this.sceneName
- }
- this.sendMessage({ msgId: experimentMsgId.DATA, msg: obj })
- const { leftImage, rightImage } = await this.getRandomTest()
- this.leftImage = leftImage
- this.rightImage = rightImage
- // Experiment end
- if (this.testCount > this.maxTestCount) return this.finishExperiment()
- }
- catch (err) {
- console.error('Failed to load new test', err)
- this.loadingErrorMessage = 'Failed to load new test. ' + err.message
- }
- finally {
- this.loadingMessage = null
- this.saveProgress()
- }
- },
- // Finish an experiment, sending full data to the server
- // Don't forget to surcharge this function when using this mixin to add more data
- finishExperiment() {
- const obj = {
- experimentName: this.experimentName,
- sceneName: this.sceneName
- }
- this.sendMessage({ msgId: experimentMsgId.VALIDATED, msg: obj })
- this.setExperimentDone({ experimentName: this.experimentName, sceneName: this.sceneName, done: true })
- this.$router.push(`/experiments/${this.experimentName}`)
- }
- }
- }
- </script>
|