class RecognizeController < ApplicationController #4 states: c means correct answer was given, autorefresh was on # C means correct answer was given, autorefresh was off # w means wrong answer was given, autorefresh was on # W means wrong answer was given, autorefresh was off def highlight_selected_item false end def get_answer session[:answer] || '?' end def filechoices? false end def start_choices choices=random_pics(get_folder(get_folder_index),get_nitems) session[:answer]=choices[rand(choices.size)] unless choices.empty? choices end def process_params p=params[:id] if p && p.match(/(\d)$/) #e.g. Vegetables5 #(which means give me 5 choices from Vegetables folder) nitems=$1.to_i picfold=$` #pre match if ix=get_folder_list.index(picfold) session[:folder_index]=ix end session[:nitems] = nitems unless nitems==0 elsif p && p=~/\+/ #e.g. Rose+Lily+Dandelion choices= p.split('+') if choices.size > 1 session[:choices]=choices session[:answer]=choices[rand(choices.size)] end end end def get_question session[:question] || '' end def first_time session[:state]= nil session[:answer]=session[:displayed]=nil session[:correct]=session[:wrong]=0 session[:choices]=nil session[:question_no]=0 session[:question]=nil # n= get_nitems process_params what_next end def displaypic get_pic_file get_answer end def get_title '' end def extras # session[:spoken]= "#{session[:spoken] || # ''}. #{translate('Now recognize')} #{session[:answer]}" correct=translate('correct') wrong=translate('wrong') c=get_correct w=get_wrong @title= get_title+ "
#{get_correct} #{correct}, #{get_wrong} #{wrong}:" @title+= "#{'*' * (c>w ? c-w : 0)}" @answer=get_answer @question=get_question @answerpic=displaypic @displayed=get_displayed+(session[:spoken] ||'') case session[:spoken] when correct @answerpic='right.jpg' when wrong @answerpic='wrong.jpg' end # logger.info "answer #{@answer} pic #{@answerpic}" # logger.info "choices #{@choices.inspect}" # logger.info "extras state #{session[:state]}" session[:displayed]=nil # session[:question]=nil if session[:state] if session[:state].upcase == 'C' session[:choices]=nil end session[:auto_refresh]=false unless session[:state]=~ /[cw]/ end session[:state]=nil end #some derived controllers, such as choices, first select a file, #which is done in preprocessing def preprocessing str return nil end def selected str #logger.info #"selected #{str} answer #{session[:answer]}" if preprocessing str session[:answer]=session[:displayed]=nil return nil end cs=session[:choices].collect {|c| strip_href c} session[:selected_item]=cs.index(str) || 0 # teacherlog "selected #{str} choices #{cs}" if str.upcase == strip_href(get_answer).upcase session[:correct]=get_correct+1 logcorrect(str,"#{get_question}:- #{cs.join(',')}") session[:spoken]=translate('correct') session[:state]='c' session[:question_no]+= 1 else session[:wrong]=get_wrong+1 logwrong(str,"#{get_question}:- #{cs.join(',')}") session[:spoken]=translate('wrong') session[:state]= 'w' end # an upper case state means autoscroll was off session[:state].upcase! unless get_autorefresh # logger.info "session[:state] #{session[:state]}" session[:auto_refresh]=true session[:choices] end end