2011-02-01 09:57:29 +08:00
/ * *
* Copyright ( C ) 2011 Instructure , Inc .
*
* This file is part of Canvas .
*
* Canvas is free software : you can redistribute it and / or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation , version 3 of the License .
*
* Canvas is distributed in the hope that it will be useful , but WITHOUT ANY
* WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE . See the GNU Affero General Public License for more
* details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
2012-03-06 01:37:09 +08:00
define ( [
2011-11-11 00:31:45 +08:00
'i18n!quizzes.show' ,
'jquery' /* $ */ ,
2012-08-15 03:59:38 +08:00
'quiz_arrows' ,
'quiz_inputs' ,
2011-11-11 00:31:45 +08:00
'jquery.instructure_date_and_time' /* dateString, time_field, datetime_field */ ,
2012-04-07 01:02:00 +08:00
'jqueryui/dialog' ,
2011-11-11 00:31:45 +08:00
'jquery.instructure_misc_helpers' /* scrollSidebar */ ,
'jquery.instructure_misc_plugins' /* ifExists, confirmDelete */ ,
2013-02-28 07:07:34 +08:00
'jquery.disableWhileLoading' ,
2011-11-11 00:31:45 +08:00
'message_students' /* messageStudents */
2012-09-05 00:32:49 +08:00
] , function ( I18n , $ , showAnswerArrows , inputMethods ) {
2011-06-23 06:26:54 +08:00
2011-02-01 09:57:29 +08:00
$ ( document ) . ready ( function ( ) {
2012-08-15 03:59:38 +08:00
2013-02-28 07:07:34 +08:00
function loadStudents ( callback ) {
return ensureStudentsLoaded ( function ( ) {
var students = $ ( '#quiz_details .student_list .student' ) . not ( '.blank' ) . map ( function ( ) {
return {
id : $ ( this ) . attr ( 'data-id' ) ,
name : $ . trim ( $ ( this ) . find ( ".name" ) . text ( ) ) ,
submitted : $ ( this ) . closest ( ".student_list" ) . hasClass ( 'submitted' )
} ;
} ) ;
callback ( students )
} ) ;
}
function ensureStudentsLoaded ( callback ) {
if ( $ ( '#quiz_details' ) . length ) {
return callback ( ) ;
} else {
return $ . get ( $ ( "#quiz_details_wrapper" ) . data ( 'url' ) , function ( data ) {
$ ( "#quiz_details_wrapper" ) . html ( data ) ;
callback ( ) ;
} ) ;
} ;
}
function showMessageStudentsForm ( students ) {
var title = $ ( "#quiz_title" ) . text ( ) ;
window . messageStudents ( {
options : [
{ text : I18n . t ( 'have_taken_the_quiz' , "Have taken the quiz" ) } ,
{ text : I18n . t ( 'have_not_taken_the_quiz' , "Have NOT taken the quiz" ) }
] ,
title : title ,
students : students ,
callback : function ( selected , cutoff , students ) {
students = $ . grep ( students , function ( $student , idx ) {
var student = $student . user _data ;
if ( selected == I18n . t ( 'have_taken_the_quiz' , "Have taken the quiz" ) ) {
return student . submitted ;
} else if ( selected == I18n . t ( 'have_not_taken_the_quiz' , "Have NOT taken the quiz" ) ) {
return ! student . submitted ;
}
} ) ;
return $ . map ( students , function ( student ) { return student . user _data . id ; } ) ;
}
2011-03-16 03:47:11 +08:00
} ) ;
}
2012-08-15 03:59:38 +08:00
showAnswerArrows ( ) ;
2012-09-05 00:32:49 +08:00
inputMethods . disableInputs ( '[type=radio], [type=checkbox]' ) ;
inputMethods . setWidths ( ) ;
2011-03-16 03:47:11 +08:00
2011-02-01 09:57:29 +08:00
$ ( ".delete_quiz_link" ) . click ( function ( event ) {
event . preventDefault ( ) ;
2011-06-23 06:26:54 +08:00
var deleteConfirmMessage = I18n . t ( 'confirms.delete_quiz' , "Are you sure you want to delete this quiz?" ) ;
2013-02-28 07:07:34 +08:00
submittedCount = parseInt ( $ ( '#quiz_details_wrapper' ) . data ( 'submitted-count' ) ) ;
if ( submittedCount > 0 ) {
2011-06-23 06:26:54 +08:00
deleteConfirmMessage += "\n\n" + I18n . t ( 'confirms.delete_quiz_submissions_warning' ,
{ 'one' : "Warning: 1 student has already taken this quiz. If you delete it, any completed submissions will be deleted and no longer appear in the gradebook." ,
'other' : "Warning: %{count} students have already taken this quiz. If you delete it, any completed submissions will be deleted and no longer appear in the gradebook." } ,
{ 'count' : submittedCount } ) ;
}
2011-02-01 09:57:29 +08:00
$ ( "nothing" ) . confirmDelete ( {
url : $ ( this ) . attr ( 'href' ) ,
2011-06-23 06:26:54 +08:00
message : deleteConfirmMessage ,
2011-02-01 09:57:29 +08:00
success : function ( ) {
2013-03-05 04:08:05 +08:00
window . location . href = ENV . QUIZZES _URL ;
2011-02-01 09:57:29 +08:00
}
} ) ;
} ) ;
2013-03-21 05:22:29 +08:00
var hasOpenedQuizDetails = false ;
2011-02-01 09:57:29 +08:00
$ ( ".quiz_details_link" ) . click ( function ( event ) {
event . preventDefault ( ) ;
2013-03-21 05:22:29 +08:00
$ ( "#quiz_details_wrapper" ) . disableWhileLoading (
2013-02-28 07:07:34 +08:00
ensureStudentsLoaded ( function ( ) {
2013-03-21 05:22:29 +08:00
var $quizResultsText = $ ( '#quiz_results_text' ) ;
2013-02-28 07:07:34 +08:00
$ ( "#quiz_details" ) . slideToggle ( ) ;
2013-03-21 05:22:29 +08:00
if ( hasOpenedQuizDetails ) {
if ( ENV . IS _SURVEY ) {
$quizResultsText . text ( I18n . t ( 'links.show_student_survey_results' ,
'Show Student Survey Results' ) ) ;
} else {
$quizResultsText . text ( I18n . t ( 'links.show_student_quiz_results' ,
'Show Student Quiz Results' ) ) ;
}
} else {
if ( ENV . IS _SURVEY ) {
$quizResultsText . text ( I18n . t ( 'links.hide_student_survey_results' ,
'Hide Student Survey Results' ) ) ;
} else {
$quizResultsText . text ( I18n . t ( 'links.hide_student_quiz_results' ,
'Hide Student Quiz Results' ) ) ;
}
}
hasOpenedQuizDetails = ! hasOpenedQuizDetails ;
2013-02-28 07:07:34 +08:00
} )
) ;
2011-02-01 09:57:29 +08:00
} ) ;
$ ( ".message_students_link" ) . click ( function ( event ) {
event . preventDefault ( ) ;
2013-02-28 07:07:34 +08:00
$ ( this ) . disableWhileLoading ( loadStudents ( showMessageStudentsForm ) ) ;
2011-02-01 09:57:29 +08:00
} ) ;
$ . scrollSidebar ( ) ;
$ ( "#let_students_take_this_quiz_button" ) . ifExists ( function ( $link ) {
var $unlock _for _how _long _dialog = $ ( "#unlock_for_how_long_dialog" ) ;
$link . click ( function ( ) {
$unlock _for _how _long _dialog . dialog ( 'open' ) ;
return false ;
} ) ;
$unlock _for _how _long _dialog . dialog ( {
autoOpen : false ,
modal : true ,
resizable : false ,
width : 400 ,
buttons : {
'Unlock' : function ( ) {
var dateString = $ ( this ) . find ( '.datetime_suggest' ) . text ( ) ;
2013-03-07 08:02:31 +08:00
$ ( '#quiz_unlock_form' )
2012-09-25 02:51:47 +08:00
// append this back to the form since it got moved to be a child of body when we called .dialog('open')
2011-02-01 09:57:29 +08:00
. append ( $ ( this ) . dialog ( 'destroy' ) )
2013-03-07 08:02:31 +08:00
. find ( '#quiz_lock_at' ) . val ( dateString ) . end ( )
2011-02-01 09:57:29 +08:00
. submit ( ) ;
}
}
} ) . find ( '.datetime_field' ) . datetime _field ( ) ;
} ) ;
2013-02-14 03:37:17 +08:00
$ ( '#lock_this_quiz_now_link' ) . ifExists ( function ( $link ) {
$link . click ( function ( e ) {
e . preventDefault ( ) ;
2013-03-07 08:02:31 +08:00
$ ( '#quiz_lock_form' ) . submit ( ) ;
2013-02-14 03:37:17 +08:00
} )
} ) ;
if ( $ ( 'ul.page-action-list' ) . find ( 'li' ) . length > 0 ) {
$ ( 'ul.page-action-list' ) . show ( ) ;
}
$ ( '#publish_quiz_form' ) . formSubmit ( {
beforeSubmit : function ( data ) {
$ ( this ) . find ( 'button' ) . attr ( 'disabled' , true ) . text ( I18n . t ( 'buttons.publishing' , "Publishing..." ) ) ;
} ,
success : function ( data ) {
$ ( this ) . find ( 'button' ) . text ( I18n . t ( 'buttons.published' , "Published!" ) ) ;
location . reload ( ) ;
}
} ) ;
2011-02-01 09:57:29 +08:00
} ) ;
2011-06-23 06:26:54 +08:00
} ) ;