QuizWiz: Enhancements to SpeedGrader and Quizzes

James
Community Champion
132
44489

QuizWiz is a user script developed by  @James   and  @avi_naiman  that adds speed enhancements to quizzes, assignments, and discussions within SpeedGrader. It also provides alternative scoring methods for certain types of quiz questions. It runs in SpeedGrader and on the Quiz Moderation pages.

Installation instructions are near the bottom, but please read and understand this document before you install QuizWiz, especially if you choose regrading options.

Feature Overview

Currently, all of the following features are configurable except for duplicating the information from the bottom at the top.

Speed Improvements

Some of the speed improvements are specific to quizzes and will work from either SpeedGrader or the Quiz Moderation page. Other enhancements are specific to SpeedGrader, but will work for quizzes, assignments, and discussions.

  • Can assign zero points to any unanswered Essay or File Upload quiz questions.
  • Can assign full points to any answered, but ungraded, Essay or File Upload quiz questions.
  • Duplicates the Final Score, Fudge Points input, and Update Scores button at the top of a quiz page when the user is not using SpeedGrader's Grade by Question mode.
  • Duplicates the question header of question number and point values at the bottom of each quiz question.
  • Automatically expands a quiz question's Additional Comments textbox when you start typing in it.
  • Adds a button next to the Update Scores button quizzes that will update scores and automatically advance to the next user.
  • Adds a button next to a submission comment's Submit button that will submit the submission comment and automatically advance to the next user.
  • Adds a button next to a rubric's Save button that will save the rubric and automatically advance to the next user.
  • Automatically expands a rubric when you advance to the next user. This feature depends on the Save Rubric and Advance feature.

Regrading Features

The following features are specific to quizzes.

Each of these methods adds a button at the top of the quiz to invoke the method. Each button contains the number of questions on the student's quiz that would be affected by clicking the button and buttons will not show if they would not make any changes to the quiz. Buttons are disabled after being run, but left visible on the screen so that you can see how many questions were affected. Any of these methods can be configured to automatically execute once the quiz has loaded.

  • Can regrade Multiple-Answers questions, which are also known as multiple-select questions, using different approaches than Canvas. Only one of the following can be enabled at a time.
    • All or Nothing provides the ability to grade questions without any partial credit – all of the parts must be correct to receive any points.
    • Partial Credit based off the percentage of items that are correctly answered. An item is correctly answered when the student selects a correct response or does not select an incorrect response.
    • The Difference between the number of items correctly answered and the number of items incorrectly answered. This is sometimes called right minus wrong method. It invokes a penalty for guessing, like the Canvas-native approach method does, but bases it on whether a response is correctly answered and considers all items, not just those that are selected.
  • Can regrade Fill-in-Multiple-Blanks questions using the All or Nothing technique of no partial credit. Canvas currently grades these questions based on the percentage of items that are correctly answered.
  • Can regrade Multiple-Dropdowns questions using the All or Nothing technique of no partial credit. Canvas currently grades these questions based on the percentage of items that are correctly answered.
  • Can assign zero points to any unanswered Essay or File Upload quiz questions. Although this was listed as a speed enhancement, it still changes the default grading of Canvas and so it is listed here as well.
  • Can assign full points to any answered, but ungraded, Essay or File Upload quiz questions. This is another speed enhancement that provides an alternative to the Canvas default and is invoked via a button.

Videos

QuizWiz Introduction

This video demonstrates how Avi Naiman used QuizWiz to reduce grading time on mathematics homework by 75%. Grading a typical student's quiz submission went from 22 clicks in SpeedGrader to 5 clicks in QuizWiz. Like many math teachers, he takes points off rather than adding points up. By assigning full points to all essay questions, he can skip the majority of the questions and then only click on the ones that missed points.

The video also illustrates many of the problems with SpeedGrader: the Additional Comments box is small and often needs to be expanded; the points for a question are only at the top so you have to scroll back and forth with long essay questions to grade; assigning a 0 requires two clicks, one up and one down; essay and file upload questions must be manually graded, even if they are unanswered.

He had QuizWiz automatically assign 0's to unanswered questions and full points to the answered essay questions. He also enabled the automatic expansion of comment boxes, and duplicated the question headers at the bottom of the question to minimize scrolling. The advance to next student upon updating scores was not available at the time he used it in his classes.

Canvancement Installation

This video shows how to install a Canvancement, including how to install a script manager like Greasemonkey or Tampermonkey if you have not already done so. Once your script manager is installed, it shows how to install and edit a script as well.

Note that QuizWiz requires you to select a flavor based on your desired usage whereas many of the Canvancements only have a single script.

This video is for Safari on a Mac, but the process is similar for Windows.

QuizWiz Regrading Methods

This video explains how Multiple-Answers questions are graded in Canvas and then how they would be graded using the All or Nothing approach and the Partial Credit based on the percentage of correct responses method.

The video also mentions the all or nothing approach for Fill-in-Multiple-Blanks and Multiple-Dropdowns questions.

Regrading Methods

There are several methods of regrading that are available with QuizWiz. It is important that you understand how the process works before you use them.

Canvas does not know about QuizWiz – QuizWiz knows about Canvas.

Canvas is going to do what Canvas does. Quizzes will be scored the way they normally are. When Quizzes 2.0 become available you may have more options available to you. QuizWiz is something that you can use while you wait on changes to happen to Canvas.

If you choose one of the regrade methods that changes how grades are calculated, then you need to let your students know that their grades are subject to change or they will think that the grade Canvas gives them will be the grade they get.


If you regrade a question using Canvas, it may override changes that you made using QuizWiz and you may need to reapply QuizWiz.

No grading changes in QuizWiz are saved until you click Update Scores.

But there is also no easy way to undo what it does once it has done it. There is no "Regrade the Canvas Way" button. You might want to play around in your test or beta instance before using it in production.

You must make the updates to each student, there is no bulk "apply to entire class" option.

When Avi Naiman first approached me, my first idea was to write a script that would just automatically do what he wanted for every student in the class. As we fleshed things out, we decided it would be better to incorporate it directly within SpeedGrader so that the grader could see what was happening.

However, if you want to grade the entire class using the All or Nothing approach for multiple-answers questions, then you can make that method automatic in the configuration file and then use the update scores and advance to next student button and then it's only one click per student. Maybe not ideal, especially if you have 1000 students in a class, but much faster than the current method of manually regrading each question.

Buttons only appear when they would make changes.

This allows you to see what is going to happen before it happens. The buttons are also labeled with badges that show how many quiz questions will be affected.

Using the buttons will change every quiz question affected by that method. If you only want to grade, for example, question 5 using a different method, you'll still need to do that manually, but you can take advantage of other features like update scores and advance to next student.

Regrade methods may be disabled, enabled, or autorun.

You choose how you want it to work. Conflicting methods, like grading Multiple-Answers questions All or Nothing and also Partial Credit cannot be used at the same time.

Feature Descriptions, Rationales, and Use Cases

Show counts on buttons

This will show you how many quiz questions will be affected by clicking the button. Once you click the button, the button becomes disabled, but the count remains so you can tell how many quiz questions were affected.

Button Count

You'll never see a badge with a 0 on it – the button just won't show up at all.

Assign 0 points to unanswered essay and file upload questions

Essay and File Upload questions must be manually graded. That sounds like a reasonable expectation, but when a student doesn't even bother to answer the essay question or upload the file, then the grader still needs to enter a 0 for those questions. If the grader is using the mouse, then it requires two clicks of the mouse to change the score to 0.

This regrading method automatically assigns a 0 to essay and file upload questions that do not have an answer and have not yet been graded. If, for some reason, the instructor decides that a non-answer should be worth 5 points, QuizWiz will honor that decision.

Since most people who have essay questions don't award points for blank answers, automatically assigning 0's for them speeds up the process.

This button will be labeled "Unanswered" when it is available.

Assign full points to answered essay and file upload questions

Essay and File Upload questions must be manually graded. Some professors like to assume that the questions are correct and then deduct points as needed. This regrading method automatically assigns full points to essay and file upload questions that have been answered but not yet graded. Once there is a score for an essay or file upload question, then QuizWiz will honor that grade.

This method allows graders to deduct points quickly for incorrect answers and skip questions that would get the full points. Many professors grade this way - by subtracting points when the answers are incorrect, rather than adding points when the answers are correct.

This button will be labeled "Full Points" when it is available.

Multiple-Answers All or Nothing

Multiple-Answers or multiple-select questions are normally graded in Canvas by dividing the points for the question by the number of correct items and then awarding points when a correct item is selected and deducting points when an incorrect item is selected. See Understanding Multiple Answers Questions for more information.

Sometimes it is desirable to grade these questions using an all or nothing without partial credit. This feature will go through and automatically assign 0 points to any question that did not select all of the correct items or did select any of the incorrect items.

Certain national licensing exams are based this way and instructors currently have to go through and manually regrade the quizzes or find other ways to ask the questions.

This button will be labeled "MA All/None" when it is available.

Multiple-Answers Partial Credit based on the percentage of correctly answered responses

This grades Multiple-Answers questions based on the number of items that are correctly answered. This essentially turns a Multiple-Answers question into a set of true-false or yes-no questions. The student is awarded points for selecting a correct item and for not selecting an incorrect item. Each item's point value is found by dividing the total points for the question by the number of possible responses.

This is a very popular method of grading. If the student correctly chooses 80% of the responses, then they get 80% of the points. One often-overlooked issue of this method is that students are awarded points even if they skip answering the question.

This button will be labeled "MA Correct" when it is available.

Multiple-Answers Difference between correctly answered and incorrectly answered responses

This approach, sometimes called "right minus wrong", scores Multiple-Answers questions by taking the number of correctly answered items and subtracting the number of incorrectly answered items. Each item's point value is found by dividing the total points for the question by the number of possible responses.

I can't provide a direct use-case for this one, but it invokes a penalty for answering incorrectly, so it is less likely that a student would get points for leaving a question blank. It was available in other learning management systems, which means that some people probably use it, and it was easy to add.

This button will be labeled "MA Difference" when it is available.

Fill-in-Multiple-Blanks

This method grades Fill-in-Multiple-Blanks questions as an all or nothing approach without partial credit. Canvas currently awards partial credit based on the percent of items that people have correctly answered.

I have never seen a request for this in the Community, so there may not be much demand for this. But it seemed logical that if someone wanted to grade Multiple-Answers as all or nothing, that they might want to do the same thing for fill in the blanks questions.

This button will be labeled "Fill in Blanks" when it is available.

Multiple-Dropdowns

This method grades Multiple-Dropdown questions using an all or nothing approach without partial credit. Canvas currently awards partial credit based on the percent of items that people have correctly answered.

I have never seen a request for this in the Community, so there may not be much demand for this. But it seemed logical that if someone wanted to grade Multiple-Answers as all or nothing, that they might want to do the same thing for fill in the blanks questions.

This button will be labeled "Dropdowns" when it is available.

Duplicating the footer at the top

When grading quizzes, there is currently a footer at the bottom that allows you to adjust the fudge points, shows the final scores, and then allows you to update the scores.

Quiz Footer

People complained about having to scroll all the way to the bottom of the question to make these adjustments. This feature duplicates the information at the top of the quiz so that you don't have to scroll to see the information or make the changes.

Quiz Custom Top Footer

This feature is currently the only one that is not configurable. If you use QuizWiz, you get this. Note that if you are using the Grade by Question feature, that the footer remains on the screen at all times and so it is not needlessly duplicated at the top.

Duplicating the Question Header at the bottom

The top of each question has the question number and the points awarded for that question. This feature duplicates that header at the bottom of the question.

Duplicating Question Header

Without this feature, in long essay questions, instructors have to scroll back to the top to award points and then scroll back past the answer to move to the next question. This feature minimizes scrolling.

If you're interested in showing the question name after the question number, then install the Show Question Names script as well (click on the Raw button once you go to that page).

Automatically expand the additional comments box

The Additional Comments box is quite tiny and people often have to expand it. This feature will automatically expand the box when you start typing in it and shrink it back down if you delete the comment. It will also automatically expand if you paste the clipboard contents into the box.

Auto Expand Additional Comments (gif)

Update Scores and Advance to Next User

Quizzes have an Update Scores button at the bottom. A common complaint when grading quizzes in SpeedGrader was that graders would have to scroll to the bottom to update the scores and then move the mouse back to the top to press the advance to next student triangle.

Canvas has addressed some of those issues with the August 2016 facelift, but all they really did was move the arrow from the left side to the right side at the top. The Update Scores button is still at the bottom and the next user is still at the top.

Many people probably felt they also had to wait for the quiz to fully load before clicking the Next student button. While technically not true, if you click it too quickly, then the scores aren't updated and if you return to that student, then it kept the original score in the grade box, causing concern about whether or not the change had been made. Those who noticed this probably consciously decided to slow down until the grade had changed, which took some of the speed out of SpeedGrader. For those who wondered, the grade was actually changed when this happened, it just wasn't reflected in SpeedGrader until you reloaded SpeedGrader.

This feature adds an update scores and advance to the next user button next to the Update Scores button. Of course, it does this at both the bottom and the top.

Update Scores

If you press the Update Scores button, then it will update the scores and remain on the current student as is the current behavior.

If you press the right arrow button, then it will first update the scores, wait long enough for the changes to be made to the grade in the right panel, and then advance to the next user. This means that if you return to this student, you will see the correct grade in the right panel.

This feature only applies to quizzes when viewed from within SpeedGrader. Discussions and Assignments don't have an Update Scores button and there is no concept of Next student from the Quiz Moderation page.

Submit Comment and Advance to Next User

There is an Assignment Comments box in the right panel of SpeedGrader. There is a  Submit button next to it that will submit your comments and leave you on the page to continue grading.

If submitting the comment is the last thing you need to do, then you have to go click on the Next student button in the top navigation bar. Luckily, submitting a comment doesn't affect the score, which requires a quiz or assignment to reload, so the delay is minimal, but it's still extra mouse movement.

This feature adds a submit comments and advance to the next user button. This button is available whenever SpeedGrader is: assignments, discussions, or quizzes.

Assignment Comments

Clicking the right arrow next to the Submit button will submit the comment, wait for it to show in the comment panel, and then advance. If you press the button when there is no comment, then it just moves to the next student.

Save Rubric and Advance to Next User

If your assignment, discussion, or quiz has a rubric assigned to it, then there will be a View Rubric button in the right panel of SpeedGrader. Clicking this button will open up the rubric where you can make your changes and click Save. If the rubric is used for grading, then saving the rubric forces the user to wait while the page is reloaded on the left.

This feature adds a Save a rubric and advance to the next user button.

Save Rubric and Advance

Clicking the Save button will save the rubric and leave you on the current user so that you can perform additional grading like leaving a comment.

Clicking the right arrow next to the Save button will save the rubric and wait for any changes to be reflected in the grade and then advance to the next user.

Automatically expand a rubric when advancing to the next student

Many people use rubrics in SpeedGrader to grade the assignment without leaving comments. The flow process is normally to 1) click on View Rubric, 2) complete the rubric, 3) click Save, 4) wait while the page reloads, 5) move to the top and click the next student button. This five-step process is repeated for each student.

This feature will automatically expand the rubric when using the save rubric and advance to next user button. When both of these options are enabled, the process the first time is 1) click on View Rubric, 2) complete the rubric, 3) click Save and Advance. For the students after that, it's just 1) complete the rubric, 2) click Save and Advance.

It was a conscious decision to have the rubric automatically open only when clicking on the save rubric and advance to next user button. It would be possible to have the rubric automatically open anytime the SpeedGrader was loaded or the user was advanced; however, as the rubric hides the grade, it would take extra steps to close the window to see what the grade was.

Installation

QuizWiz has been tested on Firefox, Chrome, and Safari.

Installation instructions can be found on the QuizWiz Canvancement site. The quick install is

  1. Install a browser add-on: Greasemonkey for Firefox or Tampermonkey for Chrome/Safari.
  2. Choose one of the QuizWiz Installation Scripts. Do not install more than one script.

Normally, the link in step 2 of the Quick Install directions will install the script for you. However, this time there are multiple varieties of QuizWiz from which to choose. Listed below are short descriptions; clicking on one of these links will install the script after you've completed step 1. Do not install more than one script.

Features common to all of these scripts include enabling the automatic expansion of the comment box, duplicating the question headers, and duplicating the footer at the top when not using Grade by Question. Do not install more than one script, regardless of the type. Instead, find the one closest to what you want and then edit the configuration (see the second video).

Scripts that focus on speed enhancements

All of these scripts enable the automatic expansion of the comment box, duplicate the question headers, and duplicate the footer at the top when not using Grade by Question. Do not install more than one script, regardless of the type. Instead, find the one closest to what you want and then edit the configuration (see the second video).

  • Speed enhancements only contains just the common features listed above.
  • Auto Advance includes the common features and adds the advance to next users buttons, but does not automatically show the rubrics on advance.
  • Math Whiz is the configuration used by Avi Naiman in the first video. It takes the common features and adds automatically assigning 0 points to unanswered questions and full points to answered essay and file-upload questions.
  • Rubrics is a configuration that may be useful for those who grade with rubrics. It includes the common features, the advance to next user buttons, and automatically opens the rubrics when you advance via the save rubric and advance to next user button. It also includes automatically assigning 0 points to unanswered essay questions.

Scripts that focus on regrading

All of these scripts enable the automatic expansion of the comment box, duplicate the question headers, and duplicate the footer at the top when not using Grade by Question. Do not install more than one script, regardless of the type. Instead, find the one closest to what you want and then edit the configuration (see the second video).

  • All or Nothing includes those common features and adds buttons for regrading multiple-answers, fill-in-multiple-blanks, and multiple-dropdown questions as all or nothing.
  • Partial Credit includes those common features and adds a button for assigning partial credit based on the percentage of responses correctly answered.

Custom domains and other configuration changes

The scripts run on any pages that look like SpeedGrader or Quiz Moderation pages on Canvas instances, including test and beta, that use .instructure.com as their domain name.

However, if you use a custom domain, like canvas.institution.edu, then you will need to edit the configuration file so that it recognizes your Canvas instance.

If you do not know how to edit a user script, please see the instructions on the Users Scripts page on the Canvancement site.

There are two lines near the top of the script that look like:

// @include     https://*.instructure.com/courses/*/gradebook/speed_grader?*
// @include https://*.instructure.com/courses/*/quizzes/*/history?*

You will need to change *.instructure.com to match your Canvas instance. For example, if your production site is canvas.institution.edu, then you would use:

// @include     https://canvas*.institution.edu/courses/*/gradebook/speed_grader?*
// @include https://canvas*.institution.edu/courses/*/
quizzes/*/history?*

The wildcard character * is necessary if you want to run on your test and beta instances. If you only wish to run on the production site, then you could leave off the *, but I recommend testing this in your test or beta instance.

By they way, the second include line is for the Quiz Moderation page. If you don't want QuizWiz to run there, you can delete that line.

If you would like to modify the installed script to select different features, you may edit the user script and make the changes. The names of the configuration variables have been chosen to somewhat match the feature with perhaps an exception for ma_correct, which is the partial credit based on the percentage of items correctly answered. There are multiple ways that you could give partial credit, so I felt I needed to include a different word.


There are brief instructions on how to edit the configuration file in the file itself. The second video shows editing a Tampermonkey script.

Updating

The scripts that you install basically contain a configuration and then execute the main program. This is similar to an installation profile where you choose the features you want and then install those. You can make changes to the features after it is installed.

The decision here was to manage one version of the code while allowing people to use it as they desire. By separating the configuration from the code, it makes it easier to accomplish this. This approach also allows me to make bug fixes and have them automatically appear on your end while preserving any changes to the configuration that might be lost if I tried to put everything into one file.

The QuizWiz engine is fetched by the installed script when you visit the SpeedGrader page. It only loads the engine once per SpeedGrader session.

The good news is that you probably won't have to do anything to make sure you're running the latest version of the code. If new features are added, you might need to edit the configuration settings or reinstall the script to obtain them, but I'm going to try to keep those breaking changes to a minimum in order to preserve your configuration.

Multiple Versions

There may be a need for multiple versions of QuizWiz. For instance, you may want to grade multiple-answers questions as all or nothing in one course but partial credit in another. This is, of course, totally unsupported at this time. There was a period of about two months where development on QuizWiz was stalemated because I was working on a fancy graphical interface that would allow users to choose their default options for a course or even for a quiz. Once we decided to go with coded configurations, the process picked back up and we finally have a release.

You could change the @name and @include lines in the metadata at the top of the configuration and specify that those configurations run only on specific courses. You would need to obtain the Canvas course ID (available in the location bar of your browser).

Script 1: Run in BIOL 101 course – Canvas course id 12345

// @name        QuizWiz : BIOL 101
// @include https://*.instructure.com/courses/12345/gradebook/speed_grader?*
// @include https://*.instructure.com/courses/12345/quizzes/*/
history?*

Script 2: Run in BIOL 201 course – Canvas course id 56789

// @name        QuizWiz : BIOL 201
// @include https://*.instructure.com/courses/56789/gradebook/speed_grader?*
// @include https://*.instructure.com/courses/56789/quizzes/*/
history?*

You can have multiple // @include lines, so if you have multiple courses that need the same configuration, just add extra lines to include those courses. The second include line is for the Quiz Moderation page. If you don't want QuizWiz to run there, you can delete that line.

Another solution is to use one browser for one configuration and a different browser for another. You could also use two separate computers like a desktop and a laptop or the home computer and the office computer.

References

The original intent was to have a system that would speed up the process of manually grading mathematics homework by reducing the number of clicks needed in SpeedGrader. From there, it grew to include some other requests that had been made in the Community.

Canvas marked many of the advance to next user requests as deployed with the 2016-08-06 production release, referred to as SpeedGrader 1.25 in Canvas Studio: Speedgrader™ Facelift, but that was just a layout redesign of SpeedGrader and doesn't actually advance to the next user.

132 Comments
MattHanes
Community Champion

Very cool script, guys! Well done!

kmeeusen
Community Champion

Awesome!

scottdennis
Instructure
Instructure

Pretty amazing guys!  Thank you for contributing this tool for our users!

James
Community Champion

Thanks  @scottdennis ​.

It will be more amazing once people see what it can do. I think there's so much there that it does that it's easy for parts to get lost.

For example, the "save rubric, advance to next user, and open up the rubric for them" can now be 1 click instead of 3 and it saves more time by advancing as soon as possible rather than waiting for the current user's content to fully reload before advancing.

Avi and I also discovered a lot of bugs in SpeedGrader while we were developing this; this doesn't attempt to fix those.

I really hope the regrading portions, like All or Nothing or Partial Credit, become redundant with Quizzes 2.0; I don't anticipate there will be as much demand for those aspects.

The name might be a little misleading, it works with assignments, discussions, and quizzes, not just quizzes. It's more like a SpeedGrader 1.5, but Canvas already had that name taken and "SpeedierGrader" just didn't resonate.

I really need to make some videos, but I also need to get caught up on some things. If anyone wants to share a before/after video, please do.

canvas_admin
Community Champion

:smileyshocked: wow

Beth_Young
Community Contributor

I'm pretty excited about this! Along with "Highlight Short Answer" (installed earlier, and I love it), I have just installed Math Wiz and Speed Enhancements, and so far they are really helping to put the "speed" in "speed grader." Just the feature that automatically expands the comment box practically makes me swoon. I have lost years of my life expanding comment boxes!

There's one thing I wish were added. I wish that Math Wiz would put a different color on the answered essay question boxes.

The reason is that some of my assessments are pretty long (50 - 75 questions) and they contain a mix of assessment types. If I click the button to give, say, questions 21, 40 and 41 full points automatically, then I have to remember which questions those were so I can zoom to them (by clicking them on the number line in the top margin) and review the answers.

I can only click the "full points" and "zero points" buttons at the beginning of the quiz, so it's not like I can zoom down to the essay question section and then decide whether or not to click the button. And sometimes I have more than one "essay question section" depending on the topic of the assessment.

If MathWiz turned the boxes on the number line blue or purple or something (like "Highlight Short Answer" turns those boxes for incorrect short answer questions red), then I wouldn't have to remember which of my questions were essay questions. It's not such a big deal for the unanswered questions, because I don't need to look at those, but the answered ones do need me to look at them.

Maybe the coloring could be added to an updated version? Just a thought! In the meantime, I'll just make a note of the question numbers before I click the "full points" button.

(And in case it isn't abundantly clear from my numerous "fan" notes:  THANK YOU THANK YOU THANK YOU for writing these scripts and sharing them with us!)

James
Community Champion

I have just installed Math Wiz and Speed Enhancements,

I can't tell for sure from what you wrote, but you should just install one version of QuizWiz. Installing multiple versions for the same quizzes is likely to cause problems somewhere down the road as both of them try to execute the same thing. Avi and I noticed issues when we were testing and it was running an old version at the same time it was running a new one. I imagine the same problem may happen if you try to run two versions.

Highlighting the essay questions would probably be something that would go into a stand-alone script like the one that highlights the short answer questions. It seems like it fits better with that than with QuizWiz. I thought about incorporating it into QuizWiz when we developed it, but felt it could stand alone.

You don't have to click the award full points for essay questions if it's not consistent with your work flow. We encourage people to start with the profile that most closely matches their workflow and then go in and tweak the configuration settings if needed.

dhulsey
Community Champion

QuizWiz: Enhancements to SpeedGrader and Quizzes has definitely started saving me time. Thanks, James and Avi!

Beth_Young
Community Contributor

Uh oh, I'm going to have to uninstall something then. I see now that the Speed Enhancements features are also part of MathWiz (the description says MathWiz includes "the common features") . . . and I assume I can keep Highlight Short Answers running along with MathWiz. I'll turn off Speed Enhancements.

I really like the "award full points" feature. It's just that at some point I have to look at the answers to confirm that I don't have to take points off, and to do that I need to find them amidst all my other questions. There are several ways to address that, fortunately.

Thank you for writing these scripts! You have saved me lots of time. 

James
Community Champion

I believe I tested both the highlighting of the short answer questions and the adding of the question name scripts with QuizWiz during development, so yes, it should still work. If not, let me know.

The common features are those things that are turned on in all of the scripts. It's really easy to miss in a document that long, but at the end of the first block of the "Installation" section (right before the "Scripts that focus on speed enhancements" heading), there is a sentence that lists the common features:

All of these scripts enable the automatic expansion of the comment box, duplicate the question headers, and duplicate the footer at the top when not using Grade by Question.

kblack
Community Champion

This verifies that you ARE indeed the Genius-in-Residence in the Canvas Community!  What a fantastic script to answer so many issues!  I didn't even see this document until now, so thanks to Kona for posting a comment in the Speedgrader 2.0 discussion earlier today.  I cannot imagine the amount of time that you and Avi spent developing this and am in awe of the things that it does.  If Instructure has not already awarded you with "free travel and accommodations to all future InstructureCons" and your institution with "free Canvas for a lifetime," as well, they should!

James
Community Champion

 @kblack ​, I just hope that most people find it useful and a few get inspired to do something.

kona
Community Champion

James might be modest, but on behalf of his Institution I'll take the "free Canvas for a lifetime." Smiley Happy

Beth_Young
Community Contributor

I removed the Speed Enhancements script and left Highlight Short Answers and QuizWiz:MathWiz in place. Everything seemed to be working fine . . . and then suddenly, the buttons for "full points" and "no points" started pushing themselves. In other words, when I opened up someone's quiz in the speedgrader, the points had already been awarded and the buttons were faded.

So, I went into the Tampermonkey dashboard, turned the QuizWiz:MathWiz script off, reloaded the speedgrader, turned the script back on, reloaded the speedgrader, and voila! Everything back to the way it should be.

I mention this here in case any other script newbie runs into a similar problem. Smiley Happy

Beth_Young
Community Contributor

Ack, no, I spoke too soon! In the amount of time it took to write the message above, when I went back to the speedgrader, the buttons had pushed themselves again. I'm not sure what else to try to troubleshoot, so I'll turn off QuizWiz:MathWiz for awhile.

James
Community Champion

 @Beth_Young ​,

Of course it does. You told it to do this when you chose Math Whiz:

Math Whiz is the configuration used by Avi Naiman in the first video. It takes the common features and adds automatically assigning 0 points to unanswered questions and full points to answered essay and file-upload questions.

Math Whiz was Avi's solution for grading his problems. It's where the whole thing started but then grew to incorporate everything else that it does. He wanted those two features to automatically happen when the script is ran. So that's what it does. It automatically executes those two functions (clicks on the buttons) for you as soon as it can.

It sounds like you really should be using something other than Math Whiz. Either that or you need to edit the configuration and change the settings to change "autorun" to "enabled" for the full points -- see the second video.

I think you'd be happier with Rubrics instead of Math Whiz, but you would have to edit the configuration to enable the full points option.

Rubrics is a configuration that may be useful for those who grade with rubrics. It includes the common features, the advance to next user buttons, and automatically opens the rubrics when you advance via the save rubric and advance to next user button. It also includes automatically assigning 0 points to unanswered essay questions.

Beth_Young
Community Contributor

Well, when all else fails, RTFM. That's what I should have done. Clearly I did not read your documentation carefully enough. Sorry! And thank you for explaining. (See, not only are you a hero for writing and sharing these scripts, you are a hero for following up with people like me. You deserve free Canvas for TWO lifetimes, I say!)  (P.S. I really like the fact that I can 'autorun' the unanswered question button and just 'enable' the full points question.)

James
Community Champion

I'd prefer people read the fine manual first rather than waiting until all else fails Smiley Happy

Unfortunately, this piece of software is so complicated and we're limited by the interface available to us, that it's more than just install and forget about it. I got stalled for about 2 months out of the 6 months I spent working on it trying to get a fancy web-interface so people could pick what to do at the instructor level or the course level or even at the quiz level. We finally decided that we would have to release it and let people edit the configuration file or otherwise no one would ever get to benefit from it.

In fact, it's so complicated that it does things it doesn't even do. For example,  @kona ​ mentioned that it doesn't autoexpand comments when you paste a comment into the box. So I fixed that and now it does. Except it doesn't. The problem is in the auto-updating of the engine. We had the same problem the weekend before we released it and I thought I had found a site that promised to deliver the "latest" version, but it turns out that it doesn't, it's still delivering the old version that doesn't autoexpand when pasting. So, the engine has been updated, but I can't get it to be delivered to people to take advantage of it. All that people install is the configuration and it is supposed to load the engine each time to make sure it's running the latest version with all of the updates.

I'm still working on that one. Hopefully I can get it figured out before too many people get it installed and customized -- if you don't customize it, then it should be fine when I update it, otherwise it should give you a warning and let you redo your customization.

But thanks for being on the bleeding edge of testing this, that's how we find out things that need improvement.

Of course, the goal is still to get Canvas to do some of this natively and for QuizWiz to become obsolete.

James
Community Champion

I think (hope) I have fixed the issue with the engine not being updated. At some point, QuizWiz will likely auto update and recognize the change and most people will not be aware that anything has happened.

For those who have customized their configuration from one of the installs, you will probably need to go through and reconfigure. Greasemonkey gave me a message about it looking like I had made local changes and asking if I wished to overwrite them and this couldn't be undone.

For those who want to pre-emptively change the file to get the new QuizWiz engine, I'll explain below what to do.

I normally use rawgit.com to deliver content. However, it turns out that rawgit.com uses MaxCDN, which permanently caches a file based on its URL alone. That means that updates are never recognized and that you always get the same version, but it may not even be the version you thought you were getting. They want you to link using the unique SHA1 code for a revision in GitHub. That would defeat the purpose of having it autoupdate when I fixed bugs, so that was out. I may need to go through some of my other Canvancements and remove references to rawgit.com as well.

So I found gitcdn.link (orginally gitcdn.xyz) which does the same thing except it uses Cloudflare instead of MaxCDN and caches the latest version for up 2 hours. I was scrambling the day before we released this to get it working and at that time, gitcdn.link was serving a minimized version of the engine and it wasn't working, but cdn.gitcdn.link was returning the full version and it worked. So I mistakenly thought I needed to use cdn.gitcdn.link instead of gitcdn.link. It turns out that there was just something wrong at that particular moment (not encouraging news when you're about to release software) and gitcdn.link does not automatically minimize.

The big issue, and this was undocumented, is that cdn.gitcdn.link caches your file for a year and gitcdn.link caches it for up to 2 hours and then it checks for updates from GitHub. By my using cdn.gitcdn.link, I inadvertently caused it to stick with the release version for a year and updates weren't getting pushed through to the users. By switching to gitcdn.link, then bug fixes and updates can be pushed through within 2 hours of being fixed.

There are other CDN services out there, but they assume that the library is its own repository rather than being part of a larger one. I didn't organize the Canvancement site that way, so I have a bunch of tiny projects all in one place rather than one big one (QuizWiz is the most involved one so far).

For those who have customized their version of QuizWiz, the change to get the updated engine is really simple to make:

Edit the QuizWiz script and change the requirejs line (line 11). Take out the cdn. from the hostname

     requirejs([ 'https://cdn.gitcdn.link/repo/jamesjonesmath/canvancement/master/quizzes/quizwiz/src/qw-engine.js' ], function(QuizWiz) {

becomes

     requirejs([ 'https://gitcdn.link/repo/jamesjonesmath/canvancement/master/quizzes/quizwiz/src/qw-engine.js' ], function(QuizWiz) {

Then save your file and you should, hopefully, be good to go.

Again, for those who haven't customized the file, you don't need to do anything. The other option is to wait until it updates and then redo your configuration by editing the file again.

As I write this, the only change that has been made to the engine is to autoexpand quiz question comments when you paste into the comment box. In its initial release, it would only autoexpand when you typed in the box.

mjennings
Community Contributor

 @James ​ I just copied the code for qw-all_or_nothing.user.js into my test instance global .js file because it will drastically improve things for all my nursing faculty. Everything looks good except that it seems to duplicate the buttons as pictured below:

9-29-2016 1-06-53 PM.png

Any thoughts on what I may be doing wrong?

James
Community Champion

 @mjennings ​,

You don't also have it enabled as a user script through Greasemonkey or Tampermonkey do you? It looks like it's running twice. It is known to have issues if you load it twice. That includes installing two different flavors without following the "multiple installations" instructions to make sure they don't run on the same page.

I did just verify that what you're seeing happens if you're running the script more than once.

I will also say that it was not designed to be added to a global JavaScript file and it was not tested in that scenario at all. It was heavily tested on Firefox, Chrome, and Safari, but always from within a user script. Each teacher would possibly have different requirements, so it really is not suitable for global installation. It might be okay in a subaccount where everyone could agree, but even then individual preferences could exist.

Beth_Young
Community Contributor

My script was automatically updated sometime in the last day or so. I noticed it had stopped working and re-customized it. It was easy to do with your very clear directions, and it's working great again. Thank you!

mjennings
Community Contributor

 @James 

Thanks for getting back with me. I was out sick on Friday and am just getting back in to catch up. I actually am just a subaccount admin and we are only using the option to do the "all or nothing" option due to very high demand with our program. I was thinking that it may have been a caching issue, but I have cleared that a few times. I'll keep playing with it.

mjennings
Community Contributor

Another thing I am finding is that it does work perfectly in Tampermonkey as stated. I have cleared all cache again, and loaded just the script as the only .js to a testing subaccount. Is seems that the problem is the class "header-bar-right" is being written twice (the class "header-bar-left" is also duplicated but does not seem to be causing an issue).

10-3-2016 8-54-54 AM.png

This doesn't seem to be happening when using Tampermonkey. I know that I am not duplicating the script so I am not sure what is happening. The userscript option is not very usable for our faculty, there are too many to manage this for, and my institution is not very friendly towards this approach. This is a wonderful tool and really hope there is a way around the issue.

James
Community Champion

 @mjennings ​,

The script is running twice.

The user script version is designed to filter what pages it runs on by the // @include line. It also has a statement on line 7 for // @noframes. Within a user script, that // @noframes makes sure that it runs only on the SpeedGrader and not on the content that is loaded within the iFrame (the actual quiz).

I did that because I wanted people to be able to use it on either SpeedGrader or the Quiz Moderation page. However, what you're experiencing is that the script is running twice, once for SpeedGrader and once for the Quiz Moderation page that is loaded within the iFrame. Canvas loads the entire Quiz Moderation (quiz history) page within the iFrame and that includes all of the JavaScript.

If you are going to deploy this within a global JavaScript file then you have several choices available.

  • Lose the SpeedGrader enhancements and just go with the All or Nothing that gets loaded on the Quiz Moderation page. That will load the content for every quiz within an iFrame, so there's a little overhead and you miss out on all of the advance to next user stuff except for Update and Advance.
  • Lose the ability to grade anything other than the latest revision by keeping the SpeedGrader portion and disabling the loading on the Quiz Moderation pages.
  • Add a check to see if the script is already running inside an iFrame and if so, then don't run it because it is presumably already running on the parent (SpeedGrader). This mimics the \\ @noframes behavior of the user script manager.

The third way is probably the way that I would go, except it's necessary that I keep the // @noframes in there to make sure that it doesn't waste time re-downloading the script needlessly on every quiz within SpeedGrader.

mjennings
Community Contributor

Thanks again  @James ​!

I must admit that I am not familiar enough with userscripts vs .js, nor do I know how to write .js. I am pretty good at reading and modifying existing code and also very good at following instructions. I like the idea of option 3 but don't really know how to write that. As for the other options, I am willing to try but am not sure what you mean by "Lose the SpeedGrader enhancements" and how that translates to the .js file that I am using.

James
Community Champion

This is totally untested (I'm teaching today and don't have time to look at it). Here's what Mozilla Developer Network says:

Window.parent - Web APIs | MDN . It's for more than one level down, though, so I think I should use window.self instead of window.parent.

I would start by wrapping the line 35 that invokes QuizWiz(config) in something like this:

if (window.self === window.top) {

     QuizWiz(config);

}

If it works, let me know and I'll see if I can incorporate it into the engine itself.

You might also be able to use window.self === window.parent

mjennings
Community Contributor

Initial testing seems like this is working. I have one of my other guys putting it through some paces with mock students in our testing environment and I will report back if there are problems.

Thanks again!!!

awesome.gif

Beth_Young
Community Contributor

The "question header of question number and point values at the bottom of each quiz question" are no longer being duplicated for me. I'm running Highlight Short Answer and Math Whiz.

example question with header not duplicated.JPG

I looked carefully at the Math Whiz script and confirmed that "duplicateQuestionHeader" is set to true.   "AutoExpandComments" is also set to true and is working just fine, as are all the other features as far as I can tell.  The only customizing I've done is to change the URLs in the include statements, and to change "unanswered" and "fullpoints" to "enabled" instead of "autorun". The script has already updated to the new engine.

math whiz script.JPG

Also, I did a "find" for "duplicate" on this page to make sure I hadn't overlooked any instructions, and I did not see (recognize) anything that would indicate that I'd misunderstood the script or that I needed to change a setting or update something.

Also, I tried reloading the page, restarting the browser, restarting my computer.

It could be that the duplicate headers went away when the update happened and I just didn't notice until now. But I don't understand why duplicateQuestionHeader would stop working when autoExpandComments is still working. Any ideas about what I should try next?

I hope it is obvious that I love these scripts! If I didn't love them so much, I wouldn't keep asking all these questions about them. I'd just give up and go back to the old way. Sorry I couldn't figure this one out by myself.

James
Community Champion

 @Beth_Young ​,

I'm not seeing anything obvious. I just pulled it up and reconfigured it to be what I think you have and I'm seeing the question headers duplicated.

Which browser/platform are you using?

It also looks like you're grading one question at a time (or the highlight short answers wouldn't make sense).

I think that was an essay question.

Grasping for straws here--

Are there questions that are pulled from a question bank?

Do you have anything other scripts running?

Does it work for some quizzes (even if they're already graded) and not for others?

Does your school do anything custom that might cause the code to not work -- custom branding or custom javascript. I know that one might be difficult to answer.

If you are using a Mac, have you applied the Sierra update or are you still running OSX?

There were major updates to both Windows and MacOS in the last month. Safari is tied to MacOS, but Chrome/Firefox should be independent of Windows (other than my Windows update reset my browser to Edge without asking). The next Canvas update isn't until this weekend, so it's probably not something that Changed in Canvas.

I'm grasping because I haven't changed anything related to that portion of the code in a long time and it's still working on my end. I haven't tried a Mac or Linux, but I did try Firefox and Chrome on a PC.

Have you tried forcibly clearing the cache (Shift-Ctrl-Del on Firefox or Chrome on a PC) and then clearing the cache (you can leave the rest of the stuff). Closing the browser and restarting doesn't necessarily clear the cache. You can also try Shift-Ctrl-R to force a page reload.

Beth_Young
Community Contributor

Thanks,  @James   You've given me lots of directions to try. We're getting ready for a hurricane here so it might be a few days, depending on power outages and whatnot. I am running the latest Chrome on a Win10 desktop, I think I am grading by question, yes that was an essay question, no questions are coming from a question bank, and I forgot to try forcibly clearing my cache! Sorry, I should have tried that before writing in, rather than just relying on restarting. So that is the first thing I will do when I get a chance, then IF that doesn't work, I'll poke around with investigating other quizzes, local scripts, and so on. I'll let you know what happens. THANK YOU.

Beth_Young
Community Contributor

 @James  OK, I've had some time to look around some more. But I'm not encouraged, because I can't see any patterns for when the whole Math Whiz script works, when part of it works, or when none of it works. I'll tell you what I have done so far, just FYI.

First, I force-cleared my cache. It was nearly empty, so apparently I had cleared it at some point, either by restarting or force-clearing (but forgetting that I force-cleared it). Anyway, I cleared the whole thing out again, temporary files, browsing history, etc.  Doing this made no difference.

Next, I tried turning off the Highlight Short Answer script and reloading. The red boxes on the numberline (indicating incorrect answers to short answer questions) disappeared, but the duplicate question headings, expand autocomment, etc. did not appear. So I don't think the problem is an interaction between Highlight Short Answer and Math Whiz.

Then, I hunted through my three courses to find patterns for when the scripts worked and when they did not. I looked through all the quizzes that had essay questions in them, and that had student attempts. I checked: Were the questions randomly pulled from a group? Did the questions have a "general answer comment"? Were the quiz settings different? Did the types of questions on the quiz make a difference (e.g., all essay, some essay + some multiple choice, etc.)? Did it matter whether the essay questions came first or last or somewhere in the middle? I could not find any patterns.

In one class, the Math Whiz features never seemed to appear. I never saw duplicate question headings. The comments box did not expand when I typed in it. I never saw "unanswered" or "full points" buttons (but that could be because the grading for those quizzes was already complete). In the other two classes, Math Whiz worked on some quizzes but not others. Sometimes Math Whiz seemed to work partially, i.e., expand comments worked but duplicate headers did not.

The weirdest thing I saw was that on one quiz, the Math Whiz script did not give duplicate headers for the first student, but did for all the other students. (I'll upload screen shots below. You can't tell in the screenshots, but expand comments did work for everyone, even the student with no duplicate headers).

When I get time, I will make a spreadsheet of all possible variations I can think of, and I'll look through everything again even more systematically. By then I should be able to look at new submissions and not just already-graded ones, which will give me a better view of what is working. In the meantime, I will just resign myself to the fact that the script works sometimes and not other times. I don't expect you (or anyone) to be able to troubleshoot a haphazard problem from a distance. I think I just need to keep my eyes open and maybe I will figure out when this is happening. If I do, I'll ask you for advice about how to fix it.

A Math Whiz script that works only some of the time is still way better than no script at all!

student 1 ch 5 quiz no dupe headers.JPG student 2 ch 5 quiz dupe headers.JPG

James
Community Champion

Thanks for looking into it,  @Beth_Young .

I'll have to see if I can look at the code and see something. The only thing I can think of is that it might be a timing issue. Do you have a fast computer or a fast connection (or maybe a slow computer or slow connection)? I don't use timers, but I waited for certain things to happen before I do things and it may be that I've got the wrong things to look for. I think I just waited for the page to load before doing the duplicate headers and that it's one of the first things it does, so if it's not firing, it may be that it's trying to execute before the header is even present.

I didn't look at the Canvas source code when I wrote it, I just played around until I got it to work. That means that it may work for one person but not another, or that it may work unreliably, like we're experiencing.

If I find something and it doesn't jump out at me as the obvious solution (sometimes they do), I may ask you to do try a special test version before I release it to see if it works.

Beth_Young
Community Contributor

I think I do have a fast computer on a fast connection, so maybe that's it. I'm happy to test new versions any time. Thanks!

James
Community Champion

 @Beth_Young ​, I've reached out to you via email to help track this down. Thanks for your help.

James
Community Champion

 @mjennings ​,

Now that I've had some time to think about it, you may find it beneficial if you move the check for an iFrame before the requirejs statement. That would keep it from loading the engine when it's not needed. It's a small savings (about 7.5 kb compressed), but it's not needed and part of the goal is to maximize the speed.

This is untested code, but I think it should work. I'm showing just the wrapper portion, you'll still need to copy the contents of the script into this.

(function() {

  if (window.self !== window.top) {

    return;

  }

  // Copy everything in original configuration script here [except for comments at top]

})();

If it works, then you wouldn't need the iframe check around QuizWiz(config);

mjennings
Community Contributor

Thanks  @James ​!! We are testing it with one course in production this evening. I have every confidence that it will work flawlessly.

James
Community Champion

This is an update for the Community.

 @Beth_Young  and I have found the issue and fixed it and she now has the duplicated header. The change has already been pushed to the web, so people do not need to do anything to get the fixed version.

The problem turned out to be related to question feedback provided as part of the question itself (correct, incorrect, or general feedback). I had not even thought to test that scenario since I never use it. Assuming that there would always be just a single quiz_comment container caused the program to crash before it ever got to the duplication portion. I added some lines of code to ensure an element actually existed before I tried to modify it.

dhulsey
Community Champion

James, I have been using the QuizWiz Rubrics script and have hit a few bumps when using the save and advance button on a rubric. I made you a screencast, but it has FERPA protected information, so I don't want to post it here, and I can't send you a message in the community because you are not following me. What is the most convenient way for me to send you the screencast?

Thanks!

James
Community Champion

Contact me at my work email with a link (email shown when you mouse over my name).

dhulsey
Community Champion

Done!

James
Community Champion

With the help of  @dhulsey ​, I was able to track down the latest issue. The item I was checking to see when it was safe to auto advance changed, or actually stopped changing, and I had to find another item to watch for when it was safe to advance after updating a quiz or saving a rubric.

Changes have been made to the engine and pushed out. Dallas has confirmed that it is once again working.

ericksonk
Community Novice

I am looking for the fastest way to make a quiz available to a student who had a medical emergency when the quiz was originally open for the class. Early today, when I re-opened the quiz for the student, I put her name in the right box, changed the availability and due dates, but when I went to the gradebook, I noticed "test student" and a blank face icon on the bottom of the column for the quiz. The make-up quiz student's name appears in the column with no grade because she hasn't taken it yet.

What is the "test student" all about? Did I do something wrong? The quiz is the same one all other students have taken, so I did not create a new quiz for the student in question.  Also, I went into student mode and the others in the class cannot see the quiz, which is what I wanted. I just wonder about "test student" and whether I need to do something different or leave it alone.

Thank you!

Kathryn 

James
Community Champion

Test Student shows up whenever you go into settings and choose Student View. It's nothing to freak out over, but if it bothers you, you might be able to delete it (Deleting the Test Student from a Course ) but it will come back if you go back into the Student View. It does not count in the class averages. This page from the Instructor's Guide may provide additional insight: How do I view a course using a test student? 

ericksonk
Community Novice

Many thanks!

Ms. Kathryn Erickson, M.A. English; Literature

Composition Instructor

English and Humanities Department

eLearning@ Eastern Florida

ericksonk
Community Novice

Thank you so much!

Ms. Kathryn Erickson, M.A. English; Literature

Composition Instructor

English and Humanities Department

eLearning@ Eastern Florida

James
Community Champion

Canvas announced in the https://community.canvaslms.com/docs/DOC-8833  that they have stopped using the RequireJS library to manage script dependencies. QuizWiz was relying on require() to load the engine before trying to execute it. Canvas has said that jQuery will remain available, so I've switched to using jQuery to load the QuizWiz engine.

Most users of QuizWiz should not need to do anything to get the update and continue using the program as the user script managers have an auto-update feature. There are a couple of exceptions:

  • If you have customized your version, you will need to install the new version and reapply your changes. The user script manager may warn you that there is an update but you have made changes to your local version.
  • If QuizWiz stops working after February 18, you are most likely still using the old version that required require() and will need to update your script. The user script managers have a check for updates feature, but you can also uninstall it and then reinstall it. Remember that although you can have more than one version of QuizWiz installed, you should never have more than one version enabled at a time.

I apologize in advance for those who have to update their installation of QuizWiz. I did not foresee Canvas dropping RequireJS when I wrote it as it was what Canvas was using for their scripts.

Beth_Young
Community Contributor

Thanks for this alert. The script updated on Chrome automatically and it was easy to manually update my include statements and the other settings. 

dhulsey
Community Champion

QuizWiz suddenly stopped working for me this morning in Chrome. I tried to update and then I uninstalled and reinstalled it. No luck. Smiley Sad Any troubleshooting tips for me, James?

kona
Community Champion

Not sure what options you're using, but I just checked and it's working ok for me in Firefox.