$.each({previous:'.prev', next:'.next'}, function(label, cssClass) { var $link = $sequence_footer.find(cssClass); if (data[label + '_item'] || data[label + '_module']) { var tag = (data[label + '_item'] && data[label + '_item'].content_tag) || (data[label + '_module'] && data[label + '_module'].context_module); if (!data[label + '_item']) { tag.title = tag.title || tag.name; if( tag.workflow_state === "unpublished" ){ tag.title += " (" + I18n.t("draft", "Draft") + ")" } tag.text = (label == 'previous' ? I18n.t('buttons.previous_module', "Previous Module") : I18n.t('buttons.next_module', "Next Module")); $link.addClass('module_button'); } $link.fillTemplateData({ data: tag }); if (data[label + '_item']) { $link.attr('href', $.replaceTags($sequence_footer.find('.module_item_url').attr('href'), 'id', tag.id)); } else { $link.attr('href', $.replaceTags($sequence_footer.find('.module_url').attr('href'), 'id', tag.id) + '/items/' + (label === 'previous' ? 'last' : 'first')); } } else { $link.hide(); } });
loadFolder: function(node) { node.data('includes_files', true); var url = $.replaceTags($("#editor_tabs_3 #folder_url").attr('href'), 'id', node.data('id')); var $loading = $tree1.find(">.loading").clone(); $loading.show(); node.append($loading); $.ajaxJSON(url, 'GET', {}, function(data) { $loading.remove(); var children = node.find('ul'); // Update folder level for accessiblity children.data('level', children.parents('ul:first').data('level') + 1); for(var idx in data.sub_folders) { var folder = data.sub_folders[idx].folder; var $folder = $tree1.find(".folder_blank").clone(true); $folder.attr('class', 'folder').data('id', folder.id).addClass('folder_' + folder.id); $folder.find('.name').html(" <span class='screenreader-only'>" + htmlEscape(folder.name) + " " + htmlEscape(I18n.t('aria_tree.folder', 'folder')) + "</span>" + htmlEscape(folder.name) ); $folder.attr('aria-level', children.data('level')) .attr('id', wikiSidebar.generateTreeItemID('folder')); children.append($folder); $folder.show(); } for(var idx in data.files) { wikiSidebar.fileAdded(data.files[idx].attachment, children); } node.addClass('initialized'); $tree1.instTree.InitInstTree($tree1); }, function() { $loading.remove(); }); },
{courses.sort(natcompare.byKey('name')).map((course) => { const urlsForCourse = { USER_LISTS_URL: $.replaceTags(this.props.addUserUrls.USER_LISTS_URL, 'id', course.id), ENROLL_USERS_URL: $.replaceTags(this.props.addUserUrls.ENROLL_USERS_URL, 'id', course.id) } const courseSections = this.state.sections.filter(section => section.course_id === parseInt(course.id, 10)) return ( <CoursesListRow key={course.id} courseModel={courses} roles={this.props.roles} urls={urlsForCourse} sections={courseSections} {...course} /> ) })}
promptDeleteGradingPeriod = event => { event.stopPropagation() const confirmMessage = I18n.t('Are you sure you want to delete this grading period?') if (!window.confirm(confirmMessage)) return null const url = $.replaceTags(this.props.deleteGradingPeriodURL, 'id', this.props.period.id) axios .delete(url) .then(() => { $.flashMessage(I18n.t('The grading period was deleted')) this.props.onDelete(this.props.period.id) }) .catch(() => { $.flashError(I18n.t('An error occured while deleting the grading period')) }) }
$("#crosslist_course_form").bind('id_entered', function(event, course) { if(course.id == latest_course_id) { return; } $("#crosslist_course_form .submit_button").attr('disabled', true); $("#course_autocomplete_id").val(""); if(!course.id) { $("#sis_id_holder,#account_name_holder").hide(); $("#course_autocomplete_name").text(""); return; } course.name = course.name || I18n.t('default_course_name', "Course ID \"%{course_id}\"", {course_id: course.id}); $("#course_autocomplete_name_holder").show(); var confirmingText = I18n.t('status.confirming_course', "Confirming %{course_name}...", {course_name: course.name}); $("#course_autocomplete_name").text(confirmingText); $.screenReaderFlashMessage(confirmingText); $("#sis_id_holder,#account_name_holder").hide(); $("#course_autocomplete_account_name").hide(); var url = $.replaceTags($("#course_confirm_crosslist_url").attr('href'), 'id', course.id); latest_course_id = course.id; var course_id_before_get = latest_course_id; $.ajaxJSON(url, 'GET', {}, function(data) { if(course_id_before_get != latest_course_id) { return; } if(data && data.allowed) { var template_data = { sis_id: data.course && data.course.sis_source_id, account_name: data.account && data.account.name }; $("#course_autocomplete_name_holder").fillTemplateData({data: template_data}); $("#course_autocomplete_name").text(data.course.name); $.screenReaderFlashMessage(data.course.name); $("#sis_id_holder").showIf(template_data.sis_id); $("#account_name_holder").showIf(template_data.account_name); $("#course_autocomplete_id").val(data.course.id); $("#crosslist_course_form .submit_button").attr('disabled', false); } else { var errorText = I18n.t('errors.course_not_authorized_for_crosslist', "%{course_name} not authorized for cross-listing", {course_name: course.name}); $("#course_autocomplete_name").text(errorText); $.screenReaderFlashError(errorText); $("#sis_id_holder,#account_name_holder").hide(); } }, function(data) { $("#course_autocomplete_name").text(I18n.t('errors.confirmation_failed', "Confirmation Failed")); }); });
$('.assign_peer_review_link').click(function(event) { event.preventDefault() // if the form is there and is being shown, then slide it up. if ( $(this) .parents('.student_reviews') .find('.form_content form:visible').length ) { $(this) .parents('.student_reviews') .find('.form_content form:visible') .slideUp() } else { // otherwise make it and inject it then slide it down const $form = $('#assign_peer_review_form') .clone(true) .removeAttr('id') let url = $('.assign_peer_review_url').attr('href') let user_id = $(this) .parents('.student_reviews') .getTemplateData({textValues: ['student_review_id']}).student_review_id url = $.replaceTags(url, 'reviewer_id', user_id) $form.find(`select option.student_${user_id}`).attr('disabled', true) $(this) .parents('.student_reviews') .find('.peer_review') .each(function() { ;({user_id} = $(this).getTemplateData({textValues: ['user_id']})) $form.find(`select option.student_${user_id}`).attr('disabled', true) }) $form.attr('action', url) $(this) .parents('.student_reviews') .find('.form_content') .empty() .append($form) $form.slideDown() } })
initialize(selector, event, contextChangeCB, closeCB) { this.event = event this.contextChangeCB = contextChangeCB this.closeCB = closeCB super.initialize({ title: this.event.title, contexts: this.event.possibleContexts(), date: this.event.startDate(), postToSISEnabled: ENV.POST_TO_SIS, postToSISName: ENV.SIS_NAME, postToSIS: this.event.eventType === 'assignment' ? this.event.assignment.post_to_sis : undefined, datePickerFormat: this.event.allDay ? 'medium_with_weekday' : 'full_with_weekday' }) this.currentContextInfo = null if (this.event.override) { this.template = editAssignmentOverrideTemplate } $(selector).append(this.render().el) this.setupTimeAndDatePickers() this.$el.find('select.context_id').triggerHandler('change', false) if (this.model == null) { this.model = this.generateNewEvent() } if (!this.event.isNewEvent()) { this.$el.find('.context_select').hide() this.$el.attr('method', 'PUT') return this.$el.attr( 'action', $.replaceTags(this.event.contextInfo.assignment_url, 'id', this.event.object.id) ) } }
const batchUpdateUrl = id => $.replaceTags(ENV.GRADING_PERIODS_UPDATE_URL, 'set_id', id)
fileAdded: function(attachment, newUploadOrCallbackOrParent, fileCallback) { var children, newUpload, imageCallback, $file; if($.isFunction(newUploadOrCallbackOrParent)) { newUpload = true; imageCallback = newUploadOrCallbackOrParent; } else if(typeof newUploadOrCallbackOrParent == "object") { children = newUploadOrCallbackOrParent; } else { newUpload = newUploadOrCallbackOrParent; } if(children == null) { children = $tree1.find('.initialized.folder_' + attachment.folder_id + '>ul'); } if(children.length || fileCallback) { var file = attachment; var displayName = "<span class='screenreader-only'>" + htmlEscape(file.display_name) + " " + htmlEscape(I18n.t('aria_tree.file', 'file')) + "</span>" + htmlEscape(file.display_name); $file = $tree1.find(".file_blank").clone(true); $file .attr('class', 'file') .attr('title', htmlEscape(file.display_name)) .attr('data-tooltip', '') .attr('aria-level', children.data('level')) .attr('id', this.generateTreeItemID('file')) .addClass(file.mime_class) .toggleClass('scribdable', !!(file.canvadoc_session_url)); if(file.media_entry_id) { $file .addClass('kalturable') .attr('data-media-entry-id', file.media_entry_id) .addClass(file.content_type && file.content_type.match(/video/) ? 'video_playback' : 'audio_playback'); } file.name = displayName; $file.fillTemplateData({ data: file, hrefValues: ['id'], htmlValues: ['name'] }); if (children) { children.append($file); $file.show(); $tree1.instTree.InitInstTree($tree1); } if (fileCallback) { fileCallback($file); } } if(newUpload && (attachment.mime_class == 'image' || attachment.content_type.match(/^image/)) && $image_list.hasClass('initialized')) { var url = $.replaceTags($("#editor_tabs_4 .file_url").attr('href'), 'id', attachment.id); var $img = $editor_tabs.find("#wiki_sidebar_image_uploads .img_link").clone(); $img.find(".img") .attr({'src': attachment.thumbnail_url || url, 'alt': attachment.display_name}) .data('url', url).end() .fillTemplateData({data: attachment}) .prependTo($image_list); if (imageCallback) { $img.slideDown(imageCallback); } else { $img.slideDown(); } } },
const updateUrl = id => $.replaceTags(ENV.GRADING_PERIOD_SET_UPDATE_URL, 'id', id)
readOnly: Types.bool.isRequired, permissions: Types.shape({ read: Types.bool.isRequired, create: Types.bool.isRequired, update: Types.bool.isRequired, delete: Types.bool.isRequired }).isRequired, onDelete: Types.func.isRequired, deleteGradingPeriodURL: Types.string.isRequired }, promptDeleteGradingPeriod(event) { event.stopPropagation(); const confirmMessage = I18n.t("Are you sure you want to delete this grading period?"); if (!window.confirm(confirmMessage)) return null; const url = $.replaceTags(this.props.deleteGradingPeriodURL, 'id', this.props.period.id); axios.delete(url) .then(() => { $.flashMessage(I18n.t('The grading period was deleted')); this.props.onDelete(this.props.period.id); }) .catch(() => { $.flashError(I18n.t("An error occured while deleting the grading period")); }); }, onEdit(e) { e.stopPropagation(); this.props.onEdit(this.props.period); },
constructor (assignment, reuploadUrlTemplate) { this.assignment = assignment; this.reuploadUrl = $.replaceTags(reuploadUrlTemplate, 'assignment_id', assignment.id); this.showDialog = this.showDialog.bind(this); }
onContextExternalToolSelect : function(e) { e.preventDefault(); var $tool = $(this); if($(this).hasClass('selected') && !$(this).hasClass('resource_selection')) { $(this).removeClass('selected'); return; } $tool.parents(".tools").find(".tool.selected").removeClass('selected'); $tool.addClass('selected'); if($tool.hasClass('resource_selection')) { var tool = $tool.data('tool'); var frameHeight = Math.max(Math.min($(window).height() - 100, 550), 100); var placement_type = (tool.placements.resource_selection && 'resource_selection') || (tool.placements.assignment_selection && 'assignment_selection') || (tool.placements.link_selection && 'link_selection'); var placement = tool.placements[placement_type] var width = placement.selection_width; var height = placement.selection_height; var $dialog = $("#resource_selection_dialog"); var beforeUnloadHandler = function(e) { return (e.returnValue = I18n.t("Changes you made may not be saved.")); }; var dialogCancelHandler = function(event, ui) { var r = confirm(I18n.t("Are you sure you want to cancel? Changes you made may not be saved.")); if (r == false){ event.preventDefault(); } }; if($dialog.length == 0) { $dialog = $("<div/>", {id: 'resource_selection_dialog', style: 'padding: 0; overflow-y: hidden;'}); $dialog.append($("<iframe/>", { id: 'resource_selection_iframe', style: 'width: 800px; height: ' + frameHeight + 'px; border: 0;', src: '/images/ajax-loader-medium-444.gif', borderstyle: '0', tabindex: '0' })); var tabHelperHeight = 35; $dialog.append( $('<div/>', {id: 'tab-helper', style: 'height: ' + tabHelperHeight + 'px;padding:5px', tabindex: '0'} ).focus(function () { $(this).height(tabHelperHeight + 'px') var joke = document.createTextNode(I18n.t('Q: What goes black, white, black, white? A: A panda rolling down a hill.')) this.appendChild(joke) var currentHeight = $dialog.dialog('option', 'height'); $dialog.dialog('option', 'height', currentHeight + tabHelperHeight) }).blur(function () { $(this).html('').height('0px'); var currentHeight = $dialog.dialog('option', 'height'); $dialog.dialog('option', 'height', currentHeight - tabHelperHeight) })) $("body").append($dialog.hide()); $dialog.on("dialogbeforeclose", dialogCancelHandler); $dialog .dialog({ autoOpen: false, width: 'auto', resizable: true, close: function() { $(window).off('beforeunload', beforeUnloadHandler); $dialog.find("iframe").attr('src', '/images/ajax-loader-medium-444.gif'); }, title: I18n.t('link_from_external_tool', "Link Resource from External Tool") }) .bind('dialogresize', function() { $(this).find('iframe').add('.fix_for_resizing_over_iframe').height($(this).height()).width($(this).width()); }) .bind('dialogresizestop', function() { $(".fix_for_resizing_over_iframe").remove(); }) .bind('dialogresizestart', function() { $(this).find('iframe').each(function(){ $('<div class="fix_for_resizing_over_iframe" style="background: #fff;"></div>') .css({ width: this.offsetWidth+"px", height: this.offsetHeight+"px", position: "absolute", opacity: "0.001", zIndex: 10000000 }) .css($(this).offset()) .appendTo("body"); }); }) .bind('selection', function(event) { var item = event.contentItems[0]; if(item["@type"] === 'LtiLinkItem' && item.url) { $("#external_tool_create_url").val(item.url); $("#external_tool_create_title").val(item.title || tool.name); $("#context_external_tools_select .domain_message").hide(); } else { alert(I18n.t('invalid_lti_resource_selection', "There was a problem retrieving a valid link from the external tool")); $("#external_tool_create_url").val(''); $("#external_tool_create_title").val(''); } $("#resource_selection_dialog iframe").attr('src', 'about:blank'); $dialog.off("dialogbeforeclose", dialogCancelHandler); $("#resource_selection_dialog").dialog('close'); if (item.placementAdvice.presentationDocumentTarget.toLowerCase() === 'window') { document.querySelector('#external_tool_create_new_tab').checked = true } }); } $dialog.dialog('close') .dialog('option', 'width', width || 800) .dialog('option', 'height', height || frameHeight || 400) .dialog('open'); $dialog.triggerHandler('dialogresize'); var url = $.replaceTags($("#select_content_resource_selection_url").attr('href'), 'id', tool.definition_id); url = url + '?placement=' + placement_type + '&secure_params=' + $('#secure_params').val(); $dialog.find("iframe").attr('src', url); $(window).on('beforeunload', beforeUnloadHandler); } else { var placements = $tool.data('tool').placements var placement = placements.assignment_selection || placements.link_selection $("#external_tool_create_url").val(placement.url || ''); $("#context_external_tools_select .domain_message").showIf($tool.data('tool').domain) .find(".domain").text($tool.data('tool').domain); $("#external_tool_create_title").val(placement.title); } }
} else { return "not_submitted"; } }, plagiarismResubmitHandler: (event, resubmitUrl, anonymizableUserId = "") => { event.preventDefault(); const params = anonymizableUserId === 'anonymous_id' ? { anonymous: true } : {} $(event.target).attr('disabled', true).text(I18n.t('turnitin.resubmitting', 'Resubmitting...')); $.ajaxJSON(resubmitUrl, "POST", params, () => { speedGraderHelpers.reloadPage(); }); }, plagiarismResubmitUrl (submission, anonymizableUserId) { return $.replaceTags($('#assignment_submission_resubmit_to_turnitin_url').attr('href'), { user_id: submission[anonymizableUserId] }) }, reloadPage() { window.location.reload(); }, setupIsAnonymous, setupAnonymousGraders, setupAnonymizableId, setupAnonymizableUserId, setupAnonymizableStudentId, setupAnonymizableAuthorId } export default speedGraderHelpers