from ._builtin import Page from .models import Constants, Slider from slider_task.pages import SliderTaskPage import random class Error(Page): def is_displayed(self): is_mobile = False if self.round_number == 1: user_agent = self.request.META['HTTP_USER_AGENT'] for substring in ['Mobi', 'Android']: if substring in user_agent: is_mobile = True return self.round_number == 1 and is_mobile class Consent(Page): form_model = 'player' form_fields = ['consent'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): if (self.player.id_in_group % 2) != 0: self.player.reciprocity = "Positive" if (self.player.id_in_group % 2) == 0: self.player.reciprocity = "Negative" self.player.colors_reversed = random.randint(0, 1) class End1(Page): def is_displayed(self): return self.round_number == 1 and self.player.consent == 2 class GeneralInstructions1(Page): def is_displayed(self): return self.round_number == 1 class GeneralInstructions2(Page): def is_displayed(self): return self.round_number == 1 class Instructions1(Page): def is_displayed(self): return self.round_number == 1 class ComprehensionQuestions(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.q1_error = False if self.player.q1 != 2: self.player.q1_error = True self.player.q2_error = False if self.player.q2 != 420: self.player.q2_error = True self.player.q3_error = False if self.player.q3 != 780: self.player.q3_error = True self.player.cq_error = False if self.player.q1_error or self.player.q2_error or self.player.q3_error: self.player.cq_error = True if self.player.cq_error: self._is_frozen = False self._index_in_pages -= 2 self.participant._index_in_pages -= 2 class Instructions2(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.prepare_sliders(num=25, min=0, max=100) class Sliders1(SliderTaskPage): Constants = Constants Slider = Slider def is_displayed(self): return self.round_number == 1 class Choice(Page): form_model = 'player' form_fields = ['choice'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): if self.player.choice == 1: if self.player.reciprocity == "Positive": self.player.sliders = 150 if self.player.reciprocity == "Negative": self.player.sliders = 50 if self.player.choice == 2: self.player.sliders = 100 self.player.participant.vars['sliders'] = self.player.sliders class Questionnaire(Page): form_model = 'player' form_fields = ['question1a', 'question1b', 'question2a', 'question2b', 'question3a', 'question3b'] def is_displayed(self): return self.round_number == 1 class Feedback(Page): def is_displayed(self): return self.round_number == 2 def vars_for_template(self): sliders = self.player.participant.vars.get('sliders') return dict( sliders=sliders ) def before_next_page(self): self.player.sliders = self.player.participant.vars.get('sliders') self.player.prepare_sliders(num=self.player.sliders, min=0, max=100) class Sliders2(SliderTaskPage): Constants = Constants Slider = Slider def is_displayed(self): return self.round_number == 2 class End2(Page): def is_displayed(self): return self.round_number == 2 page_sequence = [ Error, Consent, End1, GeneralInstructions1, GeneralInstructions2, Instructions1, ComprehensionQuestions, Instructions2, Sliders1, Choice, Questionnaire, Feedback, Sliders2, End2 ]