Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Record Granular Data: Your custom web activity will be responsible for a legitimate academic exercise, and it should keep records of users’ interactions, responses, and submissions. By doing so, your custom web activity will help ensure the integrity of students’ coursework.  

  • Check if the Launch Token has Previously Been Used: When configuring a custom web activity in Terracotta, there is a checkbox: Tool allows students to view past submissions. If this box is checked, Terracotta will assume that the tool is able to display a past submission to a student. In this situation, if the external webpage receives a launch token that has previously been used, this indicates that a student is attempting to review their responses from a past submission. Check if the launch token has previously been used, and that the anonymous_id and assignment_id of the current launch matches the anonymous_id and assignment_id of the past submission associated with the launch_token. If so, the external page should display the data from the past submission associated with the provided launch token, with no interactivity.  

    • NOTE: There is a reserved launch_token: "000000000000000-0000-4000-B000-000000000000". This launch token is issued by Terracotta when previewing a custom web activity. 

  • Communicate When There are Limited Remaining Attempts: When the teacher has placed restrictions on the number of attempts that a student may submit in response to an assignment, it may be helpful for the custom web activity to communicate this to the student (e.g., if there is only 1 attempt remaining). If there are unlimited attempts available to the student, remaining_attempts = u. A custom web activity will never need to handle a situation where remaining_attempts = 0, because in this situation, Terracotta will not generate a launch_token and will not launch the student into an activity. 

  • Respect Due Dates: Consider warning users when they are accessing the webpage after the due date. Submissions made after the due date will be delivered into Canvas, but will be flagged as late. 

  • Score Calculation: The custom web activity is responsible for determining the student’s score on the activity, which should be returned to Terracotta as a URL parameter value with the name “score.” 

...

Code Block
languagehtml
<script> 
     // Get URL parameters 
     const queryString = window.location.search; 
     const urlParams = new URLSearchParams(queryString); 
     let url_launch_token = urlParams.get('launch_token'); // Single-use launch token 
     const url_pid = urlParams.get('anonymous_id') // Participant ID 
 
     // If there is no launch_token provided, assume that this is a preview
     if (url_launch_token == "" || url_launch_token == null || url_launch_token == undefined) {
          url_launch_token = "000000000000000-0000-4000-B000-000000000000"; // reserved preview token
     }
 
     // Variable for the student's score 
     let score = 0; 
     // Container for responses 
     let responses = []; 
 
     function checkAnswer() { 
          // Get timestamp 
          var timestamp = Date.now(); 
 
          // Correct answer 
          const correctAnswer = 2; // (2x + 3 = 7, x = 2) 
 
          // Get the user's answer from the input field 
          const userAnswer = document.getElementById("answer").value; 
 
          // Evaluate answer correctness 
          var correctness = parseFloat(userAnswer) === correctAnswer; 
          if (correctness) score += 1;  
           
          // Push the response 
          responses.push({ 
               pid: url_pid, 
               question: "2x + 3 = 7", 
               correctAnswer: correctAnswer, 
               response: userAnswer, 
               correctness: correctness, 
               datetime: timestamp 
          }); 
 
          // Display feedback and enable submit button 
          const feedback = document.getElementById("feedback"); 
          feedback.textContent = JSON.stringify(responses); // save this 
          document.getElementById("answer-btn").disabled = true; 
          document.getElementById("submit-btn").style.display = 'inline-block'; 
     } 
 
     function submit() { 
          window.location.href = `https://app.terracotta.education/integrations?launch_token=${url_launch_token}&score=${score}` 
     } 
</script> 

...

  1. The script receives the launch_token and the anonymous_id from URL parameters.

  2. If the launch_token is missing, it assumes that the activity is a preview and assigns the reserved preview token ("000000000000000-0000-4000-B000-000000000000").

  3. It then initializes the user’s score (0), and a container to record the user’s responses ([]).

  4. A function is defined, checkAnswer(), which is called when the answer button (answer-btn) is pressed. The checkAnswer() function…

    1. records a timestamp of the user’s response (in Unix timestamp format, the number of milliseconds since January 1, 1970)

    2. establishes the correct answer

    3. evaluates the correctness of the user’s response

    4. updates the user’s score

    5. pushes the user’s response into the response container

    6. displays the contents of the response container and enables a final submit button

  5. The function submit() is called when the user presses the submit button, which redirects the user back to Terracotta with the provided launch_token and calculated score.