Exemple #1
0
          $.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();
            }
          });
Exemple #2
0
    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();
      });
    },
Exemple #3
0
            {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'))
      })
  }
Exemple #5
0
    $("#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)
Exemple #9
0
    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