define(['i18n!attendance', 'jquery', 'datagrid', 'str/htmlEscape', 'jquery.ajaxJSON', 'jquery.dropdownList', 'jquery.instructure_date_and_time', 'jquery.instructure_forms', 'jqueryui/dialog', 'jquery.instructure_misc_helpers', 'jquery.instructure_misc_plugins', 'jquery.keycodes', 'vendor/jquery.scrollTo', 'jqueryui/position'] , function (I18n, $, datagrid, htmlEscape){ var attendance = { saveKeyIndex: 0, toggleState: function (cell, forceState, skipSave){ if (cell.hasClass('false_submission')) { return ; } var vals = cell.attr('id').split("_"); var user_id = vals[1]; var assignment_id = vals[2]; cell.addClass('saving'); var grade = ""; if (forceState) { if (forceState == 'fail') { cell.removeClass('pass').addClass('fail'); grade = "fail"; } else if (forceState == 'pass') { cell.removeClass('fail').addClass('pass'); grade = "pass"; } else { cell.removeClass('fail').removeClass('pass'); grade = ""; } } else { if (cell.hasClass('pass')) { cell.removeClass('pass').addClass('fail'); grade = "fail"; } else if (cell.hasClass('fail')) { cell.removeClass('fail').removeClass('pass'); grade = ""; } else { cell.removeClass('fail').addClass('pass'); grade = "pass"; } } var key = attendance.saveKeyIndex++ ; if (!skipSave) { _AN_Call_settimeout("setTimeout", window, function (){ if (cell.data('save_key') == key) { var url = $.replaceTags($.replaceTags($(".grade_submission_url").attr('href'), "user_id", user_id), "assignment_id", assignment_id); var data = { 'submission[assignment_id]': assignment_id, 'submission[user_id]': user_id, 'submission[grade]': grade} ; $.ajaxJSON(url, "POST", data, function (data){ cell.removeClass('saving'); for (var idx in data){ var submission = data[idx].submission; var $cell = $("#submission_" + submission.user_id + "_" + submission.assignment_id); var key = attendance.toggleState($cell, submission.grade || "clear", true ); attendance.clearSavingState($cell, key); } } , function (data){ cell.removeClass('saving'); } ); } } , 1000); } cell.data('save_key', key); return key; } , clearSavingState: function ($cell, key){ if ($cell.data('save_key') == key) { $cell.removeClass('saving'); $cell.data('save_key', null ); } } , toggleColumnState: function (column, forceState){ var assignment_id = datagrid.cells[0 + ',' + column].attr('id').split("_")[1]; var keys = { } ; for (var idx = 1; idx < _AN_Read_length("length", datagrid.rows); idx++ ){ var key = attendance.toggleState(datagrid.cells[idx + ',' + column], forceState, true ); keys[idx] = key; } var clearSaving = function (){ for (var idx = 1; idx < _AN_Read_length('length', datagrid.rows); idx++ ){ var key = keys[idx]; attendance.clearSavingState(datagrid.cells[idx + ',' + column], keys[idx]); } } ; var url = $.replaceTags($(".set_default_grade_url").attr('href'), "assignment_id", assignment_id); var grade = forceState; if (grade != "pass" && grade != "fail") { grade = ""; } var data = { 'assignment[default_grade]': grade, 'assignment[overwrite_existing_grades]': '1'} ; $.ajaxJSON(url, "PUT", data, function (data){ clearSaving(); } , function (data){ clearSaving(); } ); } } ; $(document).ready(function (){ var errorCount = 0; $(".datetime_field").datetime_field(); $(".help_link").click(function (event){ event.preventDefault(); $("#attendance_how_to_dialog").dialog({ width: 400, title: I18n.t('titles.attendance_help', "Attendance Help")} ); } ); $(".submission").addClass('loading'); var getClump = function (url, assignment_ids, user_ids){ $.ajaxJSON(url, "GET", { } , function (data){ for (var idx in assignment_ids){ for (var jdx in user_ids){ $("#submission_" + user_ids[jdx] + "_" + assignment_ids[idx]).removeClass('loading'); } } for (var idx in data){ if (data[idx] && data[idx].submission) { var grade = data[idx].submission.grade; var $submission = $("#submission_" + data[idx].submission.user_id + "_" + data[idx].submission.assignment_id); $submission.removeClass('loading'); if (grade != "pass" && grade != "fail") { grade = "clear"; } var key = attendance.toggleState($submission, grade, true ); attendance.clearSavingState($submission, key); } } } , function (){ if (errorCount < 5) { errorCount++ ; getClump(url); } } ); } ; var clump_size = Math.round(200 / (_AN_Read_length("length", $("#attendance .student")) || 1)); var clump = [] ; var pre = $(".gradebook_url").attr('href'); _AN_Call_settimeout('setTimeout', window, function (){ var assignment_ids = [] ; $("#attendance .assignment").each(function (){ var id = ($(this).attr('id') || "").split("_").pop(); assignment_ids.push(id); } ); $("#attendance .student").each(function (){ var id = ($(this).attr('id') || "").split("_").pop(); if (id) { clump.push(id); } if (_AN_Read_length("length", clump) > clump_size) { getClump(pre + "?init=1&submissions=1&user_ids=" + clump.join(",") + "&assignment_ids=" + assignment_ids.join(","), assignment_ids, clump); clump = [] ; } } ); if (_AN_Read_length("length", clump) > 0) { getClump(pre + "?init=1&submissions=1&user_ids=" + clump.join(",") + "&assignment_ids=" + assignment_ids.join(","), assignment_ids, clump); } } , 500); $("#comment_link").click(function (event){ event.preventDefault(); event.stopPropagation(); } ); $(".options_dropdown").click(function (event){ event.preventDefault(); } ); $("#attendance").bind('entry_over', function (event, grid){ var keys = grid.cell.attr('id').split("_"); var user_id = keys[1]; var assignment_id = keys[2]; } ).bind('entry_out', function (event, grid){ } ).bind('entry_click', function (event, grid){ grid.trueEvent.preventDefault(); datagrid.focus(grid.cell.row, grid.cell.column); } ).bind('entry_focus', function (event, grid){ if (grid.cell.row == 0) { var options = { } ; options['  ' + htmlEscape(I18n.t('options.edit_assignment', 'Edit Assignment'))] = function (){ _AN_Write_href('href', _AN_Read_location('location', window), false , "/"); } ; options['  ' + htmlEscape(I18n.t('options.mark_all_as_present', 'Mark Everyone Present'))] = function (){ attendance.toggleColumnState(grid.cell.column, 'pass'); } ; options['  ' + htmlEscape(I18n.t('options.mark_all_as_absent', 'Mark Everyone Absent'))] = function (){ attendance.toggleColumnState(grid.cell.column, 'fail'); } ; options['  ' + htmlEscape(I18n.t('options.clear_attendance_marks', 'Clear Attendance Marks'))] = function (){ attendance.toggleColumnState(grid.cell.column, 'clear'); } ; grid.cell.find(".options_dropdown").dropdownList({ options: options} ); } else { attendance.toggleState(grid.cell); } datagrid.blur(); } ).bind('entry_blur', function (event, grid){ } ); $(document).keycodes('return p f del', function (event){ if (datagrid.currentFocus || !datagrid.currentHover) { return ; } if (_AN_Read_length('length', $(_AN_Read_target('target', event)).closest(".ui-dialog")) > 0) { return ; } var $current = datagrid.currentHover; if (event.keyString == "return") { if ($current.hasClass('submission')) { datagrid.focus($current.row, $current.column); } } else if (event.keyString == "p") { } else if (event.keyString == "f") { } else if (event.keyString == "del") { } } ); _AN_Call_init("init", datagrid, $("#attendance"), { borderSize: 2, onViewable: function (){ $("#attendance_loading_message").hide(); $(document).fragmentChange(function (event, hash){ if (_AN_Read_length("length", hash) > 1) { hash = hash.substring(1); } hash = _AN_Call_replace("replace", hash, /\/|%2F/g, "_"); if (hash.indexOf("student") == 0 || hash.indexOf("assignment") == 0 || hash.indexOf("submission") == 0) { var $div = $("#" + hash), position = datagrid.position($div), row = position.row, col = position.column; datagrid.scrollTo(row, col); $div.trigger('mouseover'); } } ); } , onReady: function (){ } } ); } ); } );