speed_grader.mustache 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. <%
  2. # Copyright (C) 2011 - present Instructure, Inc.
  3. #
  4. # This file is part of Canvas.
  5. #
  6. # Canvas is free software: you can redistribute it and/or modify it under
  7. # the terms of the GNU Affero General Public License as published by the Free
  8. # Software Foundation, version 3 of the License.
  9. #
  10. # Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
  11. # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  12. # A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  13. # details.
  14. #
  15. # You should have received a copy of the GNU Affero General Public License along
  16. # with this program. If not, see <http://www.gnu.org/licenses/>.
  17. %>
  18. <%
  19. js_bundle :speed_grader
  20. css_bundle :speed_grader
  21. js_env({
  22. :RUBRIC_ASSESSMENT => {
  23. :assessor_id => @current_user.id.to_s,
  24. :assessment_type => can_do(@assignment, @current_user, :grade) ? "grading" : "peer_review"
  25. }
  26. })
  27. @show_left_side = false
  28. @show_embedded_chat = false
  29. @body_classes << 'ic-no-flex-layout full-width'
  30. @can_edit_anything = !@context.completed?
  31. %>
  32. <% content_for :page_title, t(:page_title, "%{assignment_name}, SpeedGrader, %{course_name}", :assignment_name => @assignment.title, :course_name => @context.name) %>
  33. <div id="speed_grader_timeout_alert"></div>
  34. <h4 id="speed_grader_loading">
  35. {{#t}}loading...{{/t}}
  36. </h4>
  37. <h1 class="screenreader-only">{{#t}}SpeedGrader{{/t}}</h1>
  38. <div id="gradebook_header_container">
  39. <%= form_tag({ :controller => :gradebooks, :course_id => @context.id, :action => :update_submission }) do %>
  40. <div id="gradebook_header" class="subheadContent" style="display:none;">
  41. <div class="subheadContent subheadContent--flex-start">
  42. <div id="speedgrader-icons" class="gradebookActions">
  43. <a href="<%= polymorphic_url([@context, 'gradebook']) %>" id="speed_grader_gradebook_link" class="Button Button--icon-action gradebookActions__Button gradebook-icon-link" title="{{#t}}Gradebook{{/t}}">
  44. <i class="icon-gradebook" aria-hidden="true"></i>
  45. <span class="screenreader-only" aria-hidden="true">{{#t}}Gradebook{{/t}}</span>
  46. </a>
  47. <button type="button" data-muted="<%= @assignment.muted? %>" id="mute_link" class="Button Button--icon-action gradebookActions__Button" title="{{#t}}Mute/Unmute Assignment{{/t}}">
  48. <i class=<%= @assignment.muted? ? "icon-muted" : "icon-unmuted" %> aria-hidden="true"></i>
  49. <span class="screenreader-only" aria-hidden="true">
  50. <%= @assignment.muted? ? t("Unmute Assignment") : t("Mute Assignment") %>
  51. </span>
  52. </button>
  53. <button id="keyboard-shortcut-info-icon" class="Button Button--icon-action gradebookActions__Button" type="button" title="{{#t}}Keyboard Shortcuts{{/t}}">
  54. <i class="icon-keyboard-shortcuts" aria-hidden="true"></i>
  55. <span class="screenreader-only" aria-hidden="true">{{#t}}Keyboard Shortcuts{{/t}}</span>
  56. </button>
  57. <% if help_link %>
  58. <%= link_to help_link_url,
  59. class: help_link_classes(["Button Button--icon-action gradebookActions__Button exclude_external_icon"]),
  60. title: help_link_name,
  61. data: help_link_data do %>
  62. <span class="gradebookActions__Svg" role="presentation">{{#svg_icon}}help_link_icon{{/svg_icon}}</span>
  63. <span class="screenreader-only" aria-hidden="true"><%= help_link_name %></span>
  64. <% end %>
  65. <% end %>
  66. <button id="settings_link" class="Button Button--icon-action gradebookActions__Button" type="button" title="{{#t}}Settings{{/t}}">
  67. <i class="icon-settings" aria-hidden="true"></i>
  68. <span class="screenreader-only" aria-hidden="true">{{#t}}Speedgrader Settings{{/t}}</span>
  69. </button>
  70. </div>
  71. <div class="assignmentDetails">
  72. <a id="assignment_url" href="<%= context_url(@context, :context_assignment_url, @assignment.id) %>">
  73. <h2 class="assignmentDetails__Title"><%= @assignment.title %></h2>
  74. </a>
  75. <p class="assignmentDetails__Info">
  76. <span tabindex="0"><%= translated_due_date(@assignment) %></span>
  77. - <a id="context_title" href="<%= context_url(@context, :context_url) %>"><%= @context.short_name %></a>
  78. </p>
  79. </div>
  80. </div>
  81. <div class="subheadContent subheadContent--flex-end">
  82. <div class="statsMetric">
  83. <div class="statsMetric__Item" tabindex="0">
  84. <div class="statsMetric__Item-value" id="x_of_x_graded"></div>
  85. <div class="statsMetric__Item-label">{{#t}}Graded{{/t}}</div>
  86. </div>
  87. <div id="average-score-wrapper" class="statsMetric__Item" tabindex="0">
  88. <div class="statsMetric__Item-value" id='average_score'>0.0</div>
  89. <div class="statsMetric__Item-label">{{#t}}Average{{/t}}</div>
  90. </div>
  91. <div class="statsMetric__Item" tabindex="0">
  92. <div class="statsMetric__Item-value" id="x_of_x_students_frd"></div>
  93. <div class="statsMetric__Item-label" id="gradee"></div>
  94. </div>
  95. </div>
  96. <div class="studentSelection">
  97. <button id="prev-student-button" class="Button Button--icon-action gradebookMoveToNext prev" type="button" aria-label="{{#t}}Previous{{/t}}">
  98. <i class="icon-arrow-left prev" aria-hidden="true"></i>
  99. </button>
  100. <% if service_enabled?(:avatars) %>
  101. <div id="avatar" class="gradebookAvatar">
  102. <img src="/images/blank.png" id="avatar_image" alt=""/>
  103. </div>
  104. <% end %>
  105. <div id="combo_box_container"></div>
  106. <button id="next-student-button" class="Button Button--icon-action gradebookMoveToNext next" type="button" aria-label="{{#t}}Next{{/t}}">
  107. <i class="icon-arrow-right next" aria-hidden="true"></i>
  108. </button>
  109. </div>
  110. </div>
  111. <% end %>
  112. </div>
  113. </div>
  114. <div id="moderation_bar">
  115. <div id="moderation_bar_content">
  116. <div id="moderation_tabs" class="ui-tabs-minimal">
  117. <ul>
  118. <li data-pg-index="0"><a href="#dummy_container">
  119. <span class="mark_title">{{#t}}1st Reviewer{{/t}}</span>
  120. <span class="mark_grade"></span>
  121. </a></li>
  122. <li data-pg-index="1"><a href="#dummy_container">
  123. <span class="mark_title">{{#t}}2nd Reviewer{{/t}}</span>
  124. <span class="mark_grade"></span>
  125. </a></li>
  126. <li data-pg-index="final"><a href="#dummy_container">
  127. <span class="mark_title">{{#t}}Moderator{{/t}}</span>
  128. <span class="mark_grade"></span>
  129. </a></li>
  130. </ul>
  131. <div id="dummy_container"></div>
  132. </div>
  133. <div id="new_mark_container">
  134. <a id="new_mark_dropdown_link" href="#dummy_container" class="al-trigger" data-popup-within="#full_width_container" tabindex="0">
  135. {{#t}}Add Review{{/t}}
  136. <i class="icon-mini-arrow-down"></i>
  137. </a>
  138. <ul id="new_mark_dropdown" class="al-options" role="menu" tabindex="0" aria-hidden="true" aria-expanded="false" aria-activedescendant="new_mark_dropdown_link1">
  139. <li role="presentation">
  140. <a href="#" id="new_mark_link" tabindex="-1" role="menuitem">{{#t}}Add 2nd Review{{/t}}</a>
  141. </li>
  142. <li role="presentation">
  143. <a href="#" id="new_mark_final_link" tabindex="-1" role="menuitem">{{#t}}Add Moderator Review (New){{/t}}</a>
  144. </li>
  145. <li role="presentation">
  146. <a href="#" id="new_mark_copy_link1" tabindex="-1" role="menuitem">{{#t}}Add Moderator Review (Copy 1st){{/t}}</a>
  147. </li>
  148. <li role="presentation">
  149. <a href="#" id="new_mark_copy_link2" tabindex="-1" role="menuitem">{{#t}}Add Moderator Review (Copy 2nd){{/t}}</a>
  150. </li>
  151. </ul>
  152. </div>
  153. </div>
  154. </div>
  155. <div id="enrollment_inactive_notice" class="alert alert-info" style="display: none;">
  156. <span><%= t "Notice: Inactive Student" %></span>
  157. </div>
  158. <div id="enrollment_concluded_notice" class="alert alert-info" style="display: none;">
  159. <span><%= t "Notice: Concluded Student" %></span>
  160. </div>
  161. <div id="closed_gp_notice" class="alert alert-info" style="display:none">
  162. <span><%= t "Notice: The grading period is closed for this student" %></span>
  163. </div>
  164. <div id="full_width_container" style="display:none">
  165. <div id="left_side" class="full_height">
  166. <div id="left_side_inner">
  167. <div id="no_annotation_warning" class="alert speedgrader_alert">
  168. <a class="dismiss_alert close" href="#">×</a>
  169. <%= t :no_annotation, "Annotations are not available for this document" %>
  170. </div>
  171. <div id="crocodoc_pending" class="alert speedgrader_alert">
  172. <a class="dismiss_alert close" href="#">×</a>
  173. <%= t :crocodoc_pending, "Crocodoc is still processing this document." %>
  174. </div>
  175. <div id="comment_saved" class="alert alert-success speedgrader_alert">
  176. <button aria-label="<%= t 'Close' %>" class="dismiss_alert close">×</button>
  177. <div id="comment_saved_message">
  178. <%= t 'Your comment was auto-saved as a draft.' %>
  179. </div>
  180. </div>
  181. <div id="comment_submitted" class="alert alert-success speedgrader_alert">
  182. <button aria-label="<%= t 'Close' %>" class="dismiss_alert close">×</button>
  183. <div id="comment_submitted_message">
  184. <%= t :comment_submitted, "Your comment has been submitted." %>
  185. </div>
  186. </div>
  187. <div id='submissions_container'>
  188. <div id="this_student_does_not_have_a_submission">
  189. <h3>
  190. <% if @assignment.grade_as_group? %>
  191. {{#t}}This group does not have a submission for this assignment{{/t}}
  192. <% else %>
  193. {{#t}}This student does not have a submission for this assignment{{/t}}
  194. <% end %>
  195. </h3>
  196. </div>
  197. <div id="this_student_has_a_submission">
  198. <h3>
  199. {{#t}}This student has submitted the assignment{{/t}}
  200. <span class="subheader">{{#t}}This student's responses are hidden because this assignment is anonymous.{{/t}}</span>
  201. </h3>
  202. </div>
  203. <div id="iframe_holder" style="display:none;"></div>
  204. <div id="resize_overlay" style="display:none;"></div>
  205. </div>
  206. </div>
  207. </div>
  208. <div id="right_side" class="full_height">
  209. <div id="not_gradeable_message">{{#t}}This submission has already been graded and is ready for moderation.{{/t}}</div>
  210. <div class="full_height" id="width_resizer"></div>
  211. <div class=right_side_content>
  212. <div id="rightside_inner" class="full_height">
  213. <div id="submission_details" class="content_box">
  214. <div id="multiple_submissions"></div>
  215. <div id="submission_not_newest_notice" title='{{#t}}use the dropdown above to change which submission to look at") %>'><%= t(:not_newest_notice, "Note: This is not the most recent submission{{/t}}</div>
  216. <div id="submission_attachment_viewed_at_container"></div>
  217. <div id="submission_files_container">
  218. <label>{{#t}}Submitted Files") %>: <span class="labelText--not-bold"><%= t("(click to load){{/t}}</span>&nbsp;</label>
  219. <div id="submission_files_list">
  220. <div id="submission_file_hidden" class="submission-file" style='display:none;'>
  221. <a class="submission-file-download icon-download" title="{{#t}}Download this file") %>" href="<%= context_url(@context, :context_assignment_submission_url, @assignment.id, "{{submissionId}}", :download => "{{attachmentId}}{{/t}}"></a>
  222. <span class="turnitin_score_container"></span>
  223. <a class="display_name no-hover" href="<%= context_url(@context, :context_assignment_submission_url, @assignment.id, "{{submissionId}}", :download => "{{attachmentId}}", :inline => 1) %>" title="{{#t}}Preview this File{{/t}}">???</a>
  224. </div>
  225. </div>
  226. <div class="turnitin_info_container"></div>
  227. </div>
  228. </div>
  229. <div class="content_box">
  230. <% if @assignment.rubric_association %>
  231. <a href="<%= context_url(@context, :context_rubric_association_rubric_assessments_url, @assignment.rubric_association) %>" class="update_rubric_assessment_url" style="display: none;">&nbsp;</a>
  232. <div id="rubric_full" style="display: none;">
  233. <div id="rubric_full_resizer">
  234. <div id="rubric_full_resizer_handle"></div>
  235. </div>
  236. <h2>{{#t}}Grading{{/t}}</h2>
  237. <div id="rubric_holder">
  238. {{> views/shared/rubric}}
  239. <div class="button-container">
  240. <% if can_do(@context, @current_user, :manage_grades) %>
  241. <button type="button" class="save_rubric_button Button Button--primary">{{#t}}Save{{/t}}</button>
  242. <% end %>
  243. <button type="button" class="hide_rubric_link Button">{{#t}}Cancel{{/t}}</button>
  244. </div>
  245. <a href="<%= context_url(@context, :context_rubric_association_rubric_assessments_url, @assignment.rubric_association) %>" class="update_rubric_assessment_url" style="display: none;">&nbsp;</a>
  246. {{> views/shared/rubric_criterion_dialog}}
  247. </div>
  248. </div>
  249. <% end %>
  250. <% if @assignment.rubric_association || can_do(@context, @current_user, :manage_grades) || (@context.concluded? && can_do(@context, @current_user, :read_as_admin)) %>
  251. <div id="grading">
  252. <h2 class="gradebookHeader--rightside">{{#t}}Assessment{{/t}}</h2>
  253. <% if can_do(@context, @current_user, :manage_grades) || (@context.concluded? && can_do(@context, @current_user, :read_as_admin)) %>
  254. <div id="grade_container">
  255. <%= render partial: "grading_box_extended",
  256. locals: { assignment: @assignment } %>
  257. <span class="turnitin_score_container"></span>
  258. <a href="#" id="submit_same_score"><br>{{#t}}Use this same grade for the resubmission{{/t}}</a>
  259. <a style="display: none;" title="POST" href="<%= context_url(@context, :update_submission_context_gradebook_url) %>" class="update_submission_grade_url">&nbsp;</a>
  260. <div class="turnitin_info_container"></div>
  261. </div>
  262. <% end %>
  263. <% if @assignment.rubric_association %>
  264. <div id="rubric_summary_holder">
  265. <div id="rubric_assessments_list_and_edit_button_holder">
  266. <span id="rubric_assessments_list">
  267. <%= before_label(:show_assessment_by, "Show Assessment By") %>
  268. <select id="rubric_assessments_select"></select>
  269. </span>
  270. </div>
  271. <div id="rubric_summary_container">
  272. {{> views/shared/rubric_summary}}
  273. </div>
  274. </div>
  275. <% end %>
  276. </div><!-- end #grading -->
  277. <% end %>
  278. </div>
  279. <div class="content_box">
  280. <h2>{{#t}}Assignment Comments{{/t}}</h2>
  281. <div id="discussion">
  282. <div id="comments">
  283. <div class="comment" id="comment_blank" style="display: none;">
  284. <div class="comment_flex">
  285. <img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" class="avatar" alt="" style="display: none;"/>
  286. <span class="draft-marker" aria-label="{{#t}}Draft comment{{/t}}">*</span>
  287. <span class="comment"></span>
  288. <button class="submit_comment_button">
  289. <span>{{#t}}Submit{{/t}}</span>
  290. </button>
  291. <a href="javascript:void 0;" class="delete_comment_link icon-x">
  292. </a>
  293. </div>
  294. <a href="#" class="play_comment_link media-comment" style="display:none;">{{#t}}click here to view{{/t}}</a>
  295. <div class="media_comment_content" style="display:none"></div>
  296. <div class="comment_attachments"></div>
  297. <div class="comment_citation">
  298. <span class="author_name">&nbsp;</span>,
  299. <span class="posted_at">&nbsp;</span>
  300. </div>
  301. </div>
  302. <div class="comment_attachment" id="comment_attachment_blank" style="display: none;">
  303. <a href="<%= context_url(@context, :context_assignment_submission_url, @assignment.id, "{{ submitter_id }}", :comment_id => "{{ comment_id }}", :download => "{{ id }}") %>"><span class="display_name">&nbsp;</span></a>
  304. </div>
  305. </div>
  306. </div>
  307. <% unless @context.completed? || @context_enrollment.try(:completed?) %>
  308. <form id="add_a_comment">
  309. <label for="speedgrader_comment_textarea" class="screenreader-only">{{#t}}Add a Comment{{/t}}</label>
  310. <textarea id="speedgrader_comment_textarea" class="ic-Input" placeholder="{{#t}}Add a Comment{{/t}}"></textarea>
  311. <div id="media_media_recording" style="display: none;">
  312. <div class="media_recording"></div>
  313. </div>
  314. <% if @assignment.has_group_category? %>
  315. <div id="group_comment_wrapper" class="ic-Form-control ic-Form-control--checkbox">
  316. <input type="checkbox" name="group_comment" id="submission_group_comment" class="ic_Input"/>
  317. <label for="submission_group_comment" class="ic-Label">{{#t}}Send Comment to the Whole Group{{/t}}</label>
  318. </div>
  319. <% end %>
  320. <div id="comment_attachments"></div>
  321. <div class="comment_attachment_input" id="comment_attachment_input_blank" style="display: none;">
  322. <input type="file" name="attachments[-1][uploaded_data]"/>
  323. <a href="#">
  324. <i class="icon-end text-error"></i>
  325. <span class="screenreader-only">
  326. {{#t}}Remove Attachment{{/t}}
  327. </span>
  328. </a>
  329. </div>
  330. <div class="ic-Action-header">
  331. <div class="ic-Action-header__Primary attach_things" role="group" aria-labelledby="speedgrader_attach_things_label">
  332. <button class="Button Button--small" id="add_attachment" title="{{#t}}File Attachment{{/t}}" type="button">
  333. <i class="icon-paperclip" aria-hidden="true"></i>
  334. <span class="screenreader-only">
  335. {{#t}}File Attachment{{/t}}
  336. </span>
  337. </button>
  338. <% if feature_enabled?(:kaltura) %>
  339. <button id="media_comment_button" class="Button Button--small media_comment_link" title="{{#t}}Media Comment{{/t}} " type="button">
  340. <i class="icon-media" aria-hidden="true"></i>
  341. <span class="screenreader-only">
  342. {{#t}}Media Comment{{/t}}
  343. </span>
  344. </button>
  345. <% end %>
  346. <div class="speech-recognition" style="display:none">
  347. <a id="speech_recognition_button" title="{{#t}}Speech Recognition{{/t}}" href="#" class="Button Button--small speech_recognition_link">
  348. <i class="icon-audio"></i>
  349. <span class="screenreader-only">
  350. {{#t}}Speech Recognition{{/t}}
  351. </span>
  352. </a>
  353. </div>
  354. </div>
  355. <div class="ic-Action-header__Secondary">
  356. <button id="comment_submit_button" class="Button Button--primary" type="submit">{{#t}}Submit{{/t}}</button>
  357. </div>
  358. </div>
  359. </form>
  360. <% end %>
  361. </div>
  362. </div>
  363. </div>
  364. </div>
  365. </div>
  366. <a style="display:none;" id="assignment_submission_url" href="<%= context_url(@context, :context_assignment_submission_url, @assignment.id, "{{submission_id}}") %>"></a>
  367. <a style="display:none;" id="assignment_submission_turnitin_report_url" href="<%= context_url(@context, :context_assignment_submission_turnitin_report_url, @assignment.id, "{{ user_id }}", "{{ asset_string }}") %>"></a>
  368. <a style="display:none;" id="assignment_submission_originality_report_url" href="<%= context_url(@context, :context_assignment_submission_originality_report_url, @assignment.id, "{{ user_id }}", "{{ asset_string }}")%>"></a>
  369. <a style="display:none;" id="assignment_submission_resubmit_to_turnitin_url" href="<%= context_url(@context, :context_assignment_submission_resubmit_to_turnitin_url, @assignment.id, "{{ user_id }}") %>"></a>
  370. <a style="display:none;" id="assignment_submission_vericite_report_url" href="<%= context_url(@context, :context_assignment_submission_vericite_report_url, @assignment.id, "{{ user_id }}", "{{ asset_string }}") %>"></a>
  371. <a style="display:none;" id="assignment_submission_resubmit_to_vericite_url" href="<%= context_url(@context, :context_assignment_submission_resubmit_to_vericite_url, @assignment.id, "{{ user_id }}") %>"></a>
  372. <form id="settings_form" style="display:none; width:400px;" title="{{#t}}SpeedGrader Options{{/t}}">
  373. <p>
  374. <label for="eg_sort_by">{{#t}}Sort student list{{/t}}</label>
  375. <%= select_tag 'eg_sort_by', options_for_select([
  376. [t('sort_by.student_name', "by student name (alphabetically)"), "alphabetically"],
  377. [t('sort_by.submitted_at', "the date they submitted the assignment"), "submitted_at"],
  378. [t('sort_by.status', "by submission status (needs grading, not submitted, etc)"), "submission_status"]], cookies[:eg_sort_by]) %>
  379. </p>
  380. <p>
  381. <input type="checkbox" id="hide_student_names" name="hide_student_names"
  382. <% if force_anonymous_grading?(@assignment) %>disabled<% end %>
  383. />
  384. <label for="hide_student_names">
  385. {{#t}}Hide student names in the SpeedGrader{{/t}}
  386. </label>
  387. <% if force_anonymous_grading?(@assignment) %>
  388. <i class="icon-info" aria-hidden="true"
  389. data-tooltip='{"tooltipClass":"popover popover-padded", "position":"top"}'
  390. title="<%= force_anonymous_grading_reason(@assignment) %>"></i>
  391. <% end %>
  392. </p>
  393. <p <% unless @assignment.quiz %>class=hidden<% end %>>
  394. <%= check_box_tag :enable_speedgrader_grade_by_question, "1",
  395. @current_user.preferences[:enable_speedgrader_grade_by_question] %>
  396. <%= label_tag :enable_speedgrader_grade_by_question,
  397. t('labels.grade_by_question_beta', 'Grade by question (beta)') %>
  398. </p>
  399. <div class="button-container">
  400. <button class="btn dialog_closer">{{#t}}Cancel{{/t}}</button>
  401. <button type="submit" class="btn btn-primary submit_button">{{#t}}Save Settings{{/t}}</button>
  402. </div>
  403. </form>
  404. {{> views/shared/mute_dialog}}
  405. {{> views/shared/unmute_dialog}}
  406. <ul id="section-menu" class="ui-selectmenu-menu ui-widget ui-widget-content ui-selectmenu-menu-dropdown ui-selectmenu-open" style="display:none;" role="listbox" aria-activedescendant="section-menu-link">
  407. <li role="presentation" class="ui-selectmenu-item">
  408. <a href="#" tabindex="-1" role="option" aria-selected="true" id="section-menu-link">
  409. <span><%= before_label(:showing, "Showing") %> <span id="section_currently_showing">{{#t}}All Sections{{/t}}</span></span>
  410. </a>
  411. <ul>
  412. <li><a class="selected" data-section-id="all" href="#">{{#t}}Show All Sections{{/t}}</a></li>
  413. </ul>
  414. </li>
  415. </ul>
  416. <span id="aria_name_alert" class="screenreader-only" aria-live="polite"></span>
  417. <% keyboard_navigation([
  418. {:key => t('keycodes.next_student', 'j'), :description => t('keycode_descriptions.next_student', 'Next Student')},
  419. {:key => t('keycodes.previous_student', 'k'), :description => t('keycode_descriptions.previous_student', 'Previous Student')},
  420. {:key => t('keycodes.leave_comment', 'c'), :description => t('keycode_descriptions.leave_comment', 'Leave Comment')},
  421. {:key => t('keycodes.change_grade', 'g'), :description => t('keycode_descriptions.change_grade', 'Change Grade')},
  422. {:key => t('keycodes.use_rubric', 'r'), :description => t('keycode_descriptions.use_rubric', 'Use Rubric')}
  423. ]) %>