publish_grades refactor

fixes SIS-600
partially reverses g/32659

test plan:
- for a course with and integration id and post grades feature enabled
  post grades button in gradebook should open dialog
- remove due dates for assignments in course
- confirm you're able to add dates in post grades dialog

Notes:
- regression test

Change-Id: I7c7b2109ef083750289290fbb161e47b47bfc4b9
Reviewed-on: https://gerrit.instructure.com/43293
Reviewed-by: Ken Romney <kromney@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Duane Johnson <duane@instructure.com>
This commit is contained in:
Nick Houle 2014-10-24 14:13:56 -06:00 committed by Duane Johnson
parent 73e6d2ecc6
commit eee3b09cbd
19 changed files with 2 additions and 640 deletions

View File

@ -5,8 +5,8 @@ define [
'jquery'
'underscore'
'Backbone'
'jst/publish_grades/IndexView'
'jst/publish_grades/NoAssignmentsSearch'
'jst/assignments/IndexView'
'jst/assignments/NoAssignmentsSearch'
'compiled/views/publish_grades/AssignmentKeyBindingsMixin'
], (I18n, KeyboardNavDialog, keyboardNavTemplate, $, _, Backbone, template, NoAssignments, AssignmentKeyBindingsMixin) ->
class PublishGradesIndexView extends Backbone.View

View File

@ -1,17 +0,0 @@
{{#if collection.length }}
<ul class="collectionViewItems ig-list"></ul>
{{else}}
{{#if firstResetLanded}}
<ul class="collectionViewItems ig-list">
<li>
<div class="ig-row ig-row-empty">
<div class="ig-empty-msg">
{{#t "no_assignment_groups"}}No Assignment Groups found{{/t}}
</div>
</div>
</li>
</ul>
{{else}}
<div class="loadingIndicator"></div>
{{/if}}
{{/if}}

View File

@ -1,50 +0,0 @@
<div id="assignment_group_{{id}}" data-id="{{id}}" class="assignment_group">
<div class="ig-header" style="position:relative;">
<h2
class="ig-header-title element_toggler"
aria-controls="assignment_group_{{id}}_assignments"
aria-expanded="true"
aria-label="{{name}} {{toggleMessage}}"
role="button"
tabindex="0"
>
<i class="icon-mini-arrow-down"></i>
{{name}}
</h2>
<div class="ag-header-controls" style="position: absolute; top: 0; right: 0;">
{{#ifAny showWeight showRules}}
<ul class="pill">
{{#if showWeight}}
<li>{{#t "group_weight"}}{{groupWeight}}% of Total{{/t}}</li>
{{/if}}
{{#if showRules}}
<li>
<a
href='#'
title='{{#toSentence displayableRules}}{{this}}{{/toSentence}}'
class="tooltip_link"
data-tooltip-selector="#ag_{{id}}_rules_tooltip"
>{{rulesText}}<i class="icon-mini-arrow-down"></i></a>
<div id="ag_{{id}}_rules_tooltip" style="display:none;">
{{#each displayableRules}}
<span>{{this}}</span><br/>
{{/each}}
</div>
</li>
{{/if}}
</ul>
{{/ifAny}}
<a id="ag_{{id}}_manage_link" class="al-trigger btn" href="#" tabindex="0">
<span class="screenreader-only">{{#t "manage"}}Manage{{/t}}</span>
<i class="icon-publish"></i>
</a>
</div>
</div>
<div id="assignment_group_{{id}}_assignments" >
<ul class="collectionViewItems ig-list draggable"></ul>
</div>
</div>

View File

@ -1,69 +0,0 @@
<div
id="assignment_{{id}}"
class="ig-row {{#ifAll canManage published}}ig-published{{/ifAll}}"
data-item-id="{{labelId}}"
>
<a href="{{htmlUrl}}" class="ig-title ellipses">
<i class='icon-{{iconType}}'></i>
{{name}}
</a>
<div class="ig-details row-fluid">
{{#if canManage}}
<div class="{{spanWidth}} ellipses modules">
{{#if has_modules}}
{{#ifEqual module_count 1}}
{{module_name}} {{#t "module"}}Module{{/t}}
{{else}}
<a
href='#'
title='{{joined_names}}'
class="tooltip_link"
data-tooltip-selector="#module_tooltip_{{labelId}}"
>{{#t "multiple_modules"}}Multiple Modules{{/t}}</a>
{{/ifEqual}}
<div id="module_tooltip_{{labelId}}" style="display:none;">
{{#each modules}}
<span>{{this}}</span><br/>
{{/each}}
</div>
{{/if}}
</div>
{{/if}}
<div class="{{spanWidth}} ellipses" data-view="date-due"></div>
<div class="{{spanWidth}} ellipses js-score {{alignTextClass}}">
<span class="screenreader-only">
{{#if pointsPossible}}
{{#t "points_possible_screen_reader"}}{{pointsPossible}} Points Possible{{/t}}
{{else}}
{{#t "no_points_possible"}}No Points Possible{{/t}}
{{/if}}
</span>
<span class="non-screenreader" aria-hidden="true">
{{#if pointsPossible}}{{#t "points_possible"}}{{pointsPossible}} pts{{/t}}{{/if}}
</span>
</div>
</div>
{{#if canManage}}
<div class="ig-admin">
<span class="publish-icon" data-view="publish-icon"></span>
<span class="screenreader-only">{{#t "settings"}}Edit Assignment{{/t}}</span>
<a
href="#"
class="icon-edit edit_assignment"
id="assignment_{{id}}_settings_edit_item"
tabindex="0"
role="menuitem"
aria-label="{{#t 'assignment_edit'}}Edit Assignment{{/t}}"
data-focus-returns-to="assign_{{id}}_manage_link">
</a>
</div>
<form data-view="edit-assignment" class="form-dialog"></form>
{{/if}}
</div>

View File

@ -1,36 +0,0 @@
<div class="form-dialog-content">
<div class="form-horizontal">
<label class="checkbox" id="weight-groups" >
{{checkbox "apply_assignment_group_weights"}}
{{#t "weight_groups"}}Weight final grade based on assignment groups{{/t}}
</label>
<div id="ag_weights_wrapper">
<table id="assignment_groups_weights">
<tbody>
</tbody>
<tfoot>
<tr>
<td>Total</td>
<td id="percent_total" class="right-align"></td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<div class="form-controls">
<button
id="cancel-assignment-settings"
class="btn dialog_closer"
type="button"
>{{#t "cancel"}}Cancel{{/t}}</button>
<button
id="update-assignment-settings"
class="btn btn-primary"
data-text-while-loading='{{#t "validating"}}Saving...{{/t}}'
type="submit"
>{{#t "save"}}Save{{/t}}</button>
</div>

View File

@ -1,106 +0,0 @@
<div class="form-dialog-content create_assignment_dialog">
<div class="form-horizontal">
{{#if canChooseType}}
<div class="control-group">
<label class="control-label" for="{{uniqLabel}}_assignment_type">
{{#t "assignment_type"}}Type:{{/t}}
</label>
<div class="controls">
<select type="text" id="{{uniqLabel}}_assignment_type" name="submission_types">
<option value>{{#t "assignment"}}Assignment{{/t}}</option>
<option value="discussion_topic">{{#t "discussion_type"}}Discussion{{/t}}</option>
<option value="online_quiz">{{#t "quiz_type"}}Quiz{{/t}}</option>
<option value="external_tool">{{#t "external_tool_type"}}External Tool{{/t}}</option>
<option value="not_graded">{{#t "not_graded_type"}}Not Graded{{/t}}</option>
</select>
</div>
</div>
{{/if}}
<div class="control-group">
<label class="control-label" for="{{uniqLabel}}_assignment_name">
{{#t "assignment_name"}}Name:{{/t}}
</label>
<div class="controls">
<input
id="{{uniqLabel}}_assignment_name"
type="text"
name="name"
value="{{name}}"
{{disabledIfIncludes frozenAttributes "title"}}/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="{{uniqLabel}}_assignment_due_at">
{{#t "assignment_due_at"}}Due:{{/t}}
</label>
<div class="controls">
{{#if multipleDueDates}}
<span class="datetime_field multiple_due_dates" title
data-tooltip-selector="#vdd_tooltip_{{uniqLabel}}"
aria-labelledby="vdd_tooltip_{{uniqLabel}}">
<input
class="input-medium"
type="text"
value="{{#t 'multiple_due_dates'}}Multiple due dates{{/t}}"
disabled="disabled" />
</span>
<div id="vdd_tooltip_{{uniqLabel}}" style="display:none;">
<dl class="vdd_tooltip_content dl-horizontal">
{{#each allDates}}
<div class="clearfix">
<dt>{{dueFor}}</dt>
<dd>{{#if dueAt}} {{strftime dueAt "%b %-d"}} {{else}} - {{/if}}</dd>
</div>
{{/each}}
</dl>
</div>
{{else}}
<input
id="{{uniqLabel}}_assignment_due_at"
class="datetime_field input-medium"
type="text"
name="due_at"
value="{{datetimeFormatted dueAt}}"
{{disabledIfIncludes frozenAttributes "due_at"}}/>
{{/if}}
</div>
</div>
{{#unless isQuiz}}
<div class="control-group">
<label class="control-label" for="{{uniqLabel}}_assignment_points">
{{#t "assignment_points"}}Points:{{/t}}
</label>
<div class="controls">
<input
id="{{uniqLabel}}_assignment_points"
class="input-small"
type="text"
name="points_possible"
value="{{pointsPossible}}"
{{disabledIfIncludes frozenAttributes "points_possible"}}/>
</div>
</div>
{{/unless}}
</div>
</div>
<div class="form-controls">
<button
class="more_options btn pull-left"
type="button"
>{{#t "more"}}Go To {{objectType}}{{/t}}</button>
<button
class="cancel_button btn dialog_closer"
type="button"
>{{#t "cancel"}}Cancel{{/t}}</button>
<button
class="create_assignment btn btn-primary"
data-text-while-loading='{{#t "saving"}}Saving...{{/t}}'
type="submit"
>{{#t "save"}}Save{{/t}}</button>
</div>

View File

@ -1,35 +0,0 @@
{{#if multipleDueDates}}
<strong>{{#t "available"}}Available{{/t}}</strong>
<a title class="vdd_tooltip_link"
aria-labelledby="vdd_tooltip_{{selector}}"
data-tooltip-selector="#vdd_tooltip_{{selector}}"
{{#if linkHref}}href="{{linkHref}}"{{/if}}
>{{#t "multiple_dates"}}Multiple Dates{{/t}}</a>
<div id="vdd_tooltip_{{selector}}" style="display:none;">
<dl class="vdd_tooltip_content dl-horizontal">
{{#each allDates}}
<div class="clearfix">
<dt>{{dueFor}}</dt>
<dd>
<dd>
{{#if available}}
{{#t "available"}}Available{{/t}}
{{/if}}
{{>[assignments/available_date_description]}}
</dd>
</dd>
</div>
{{/each}}
</dl>
</div>
{{else}}
<span class="default-dates">
{{#with defaultDates}}
{{>[assignments/available_date_description]}}
{{/with}}
</span>
{{/if}}

View File

@ -1,26 +0,0 @@
{{#if multipleDueDates}}
<strong>{{#t "due"}}Due{{/t}}</strong>
<a title class="vdd_tooltip_link"
aria-labelledby="vdd_tooltip_{{selector}}"
data-tooltip-selector="#vdd_tooltip_{{selector}}"
{{#if linkHref}}href="{{linkHref}}"{{/if}}
>{{#t "multiple_dates"}}Multiple Dates{{/t}}</a>
<div id="vdd_tooltip_{{selector}}" style="display:none;">
<dl class="vdd_tooltip_content dl-horizontal">
{{#each allDates}}
<div class="clearfix">
<dt>{{dueFor}}</dt>
<dd>{{#if dueAt}} {{strftime dueAt "%b %-d"}} {{else}} - {{/if}}</dd>
</div>
{{/each}}
</dl>
</div>
{{else}}
{{#if singleSectionDueDate}}
<strong>{{#t "due_date"}}Due{{/t}}</strong>
{{datetimeFormatted singleSectionDueDate}}
{{/if}}
{{/if}}

View File

@ -1,32 +0,0 @@
<form>
{{#with assignment_override}}
<select class="section-list input-small" name="course_section_id" aria-labelledby="overrides_course_section">
</select>
<div class="date_field_container">
<input value="{{datetimeFormatted due_at}}" name="due_at" type="text"
class="input-small date_field" aria-labelledby="overrides_due_date">
</div>
<div class="date_field_container">
<input name="unlock_at" value="{{datetimeFormatted unlock_at}}" type="text"
class="date_field" aria-labelledby="overrides_unlock_at">
</div>
<div class="date_field_container to">
<input name="lock_at" value="{{datetimeFormatted lock_at}}" type="text"
class="date_field" aria-labelledby="overrides_lock_at">
</div>
<div>
<a
href="#"
class="remove-link"
role="button"
title='{{#t "overrides.remove_these_dates"}}Remove These Dates{{/t}}'
aria-label='{{#t "overrides.remove_these_dates"}}Remove These Dates{{/t}}'
><i class="icon-end"></i>
</a>
</div>
{{/with}}
</form>

View File

@ -1,31 +0,0 @@
<div class="header-bar-right">
<div class="header-group-left" role="heading" tabindex="0">
{{#if published}}
<span id='assignment-draft-state' class='published-status published'>
<i class="icon-publish"></i>
{{#t "buttons.published"}}Published{{/t}}
</span>
{{else}}
<span id='assignment-draft-state' class='published-status unpublished'>
<i class="icon-unpublished"></i>
{{#t "buttons.not_published"}}Not Published{{/t}}
</span>
{{/if}}
</div>
<div class="header-bar-right">
<div class="admin-links">
<a class="al-trigger btn" href="#">
<span class="screenreader-only">{{#t "manage"}}Manage{{/t}}</span>
<i class="icon-settings"></i><i class="icon-mini-arrow-down"></i>
</a>
<ul class="al-options">
<li>
<a href="#" class="delete_assignment_link">
<i class="icon-trash"></i>
{{#t "titles.delete"}}Delete{{/t}}
</a>
</li>
</ul>
</div>
</div>
</div>

View File

@ -1,55 +0,0 @@
<div class="form-column-left">
{{#t 'group_assignment_header'}}Group Assignment{{/t}}
</div>
<div class="form-column-right">
<div class="border border-trbl border-round">
{{!-- Group Assignment selection --}}
<label class="checkbox flush">
{{checkbox "has_group_category"
id="assignment_has_group_category"
prefix=prefix
checked=groupCategoryId
disabled=groupCategoryIdFrozen}}
{{#t "is_group_assignment"}}This is a Group Assignment{{/t}}
</label>
{{!-- Individual grading? --}}
<div class="nested">
<div class="group_submission_warning alert" style="display:none">
{{#t "students_already_submitted_warning"}}Prior individual submissions will
not be counted as group submissions and will show incorrectly in
speedgrader.{{/t}}
</div>
<div id="group_category_options" style="{{hiddenUnless groupCategoryId}}">
<label class="checkbox" >
{{checkbox "grade_group_students_individually"
id=null
prefix=prefix
checked=gradeGroupStudentsIndividually
disabled=groupCategoryIdFrozen}}
{{#t "grade_group_students_individually"}}
Assign Grades to Each Student Individually
{{/t}}
</label>
{{!-- Group selection --}}
<label for="group_category_id">
{{#t "group_set"}}Group Set{{/t}}
</label>
<select id="assignment_group_category_id"
name="{{#if nested}}assignment[group_category_id]{{else}}group_category_id{{/if}}"
{{disabledIfIncludes frozenAttributes "group_category_id"}}>
{{#each groupCategories}}
<option value="{{id}}" {{selectedIf ../groupCategoryId this.id}}>
{{name}}
</option>
{{/each}}
<option value="new">
[ {{#t "group_category_options"}}New Group Category{{/t}} ]
</option>
</select>
</div>
</div>
</div>

View File

@ -1,30 +0,0 @@
<h1 class="screenreader-only">
{{#t "assignments"}}Assignments{{/t}}
</h1>
<div class="header-bar">
<div class="header-bar-left form-inline">
<input
id="search_term"
name="search_term"
type="search"
value=""
disabled
placeholder="{{#t "search_for_assignment"}}Search for Assignment{{/t}}"
aria-label="{{#t "search_for_assignment"}}Search for Assignment{{/t}}"
>
</div>
<div class="header-bar-right">
<a
href="#"
class="btn icon-publish"
id="addGroup"
role="button"
title='{{#t "title_add_group"}}Add Assignment Group{{/t}}'
aria-label='{{#t "title_add_group"}}Add Assignment Group{{/t}}'
>{{#t "add_group"}}Publish Assignment Grades{{/t}}</a>
</div>
</div>
<div data-view="assignmentGroups" class="item-group-container" id="ag-list"></div>

View File

@ -1,18 +0,0 @@
<a
href="#"
class="remove_never_drop"
title="{{#t "remove_rule"}}Remove Rule{{/t}}"
><i class="icon-end"></i></a>
{{#unless chosen}}
<select name="rules[never_drop][]" aria-labelledby="ag_{{label_id}}_never_drop">
{{#each assignments}}
<option {{selectedIf id ../chosen_id}} value="{{id}}">{{name}}</option>
{{/each}}
</select>
{{/unless}}
{{#if chosen}}
<span>{{chosen}}</span>
<input type="hidden" name="rules[never_drop][]" value="{{chosen_id}}"/>
{{/if}}

View File

@ -1,10 +0,0 @@
<div class="never_drop collectionViewItems"> </div>
{{#if hasAssignments}}
<a href="#" class="add_never_drop icon-add">
{{#if hasNeverDrops}}
{{#t "add_another_assignment"}}Add another assignment{{/t}}
{{else}}
{{#t "add_first_assignment"}}Add an assignment{{/t}}
{{/if}}
</a>
{{/if}}

View File

@ -1,5 +0,0 @@
<div class="ig-row ig-row-empty">
<div class="ig-empty-msg">
{{#t "no_assignments_in_this_group"}}No assignments in this group{{/t}}
</div>
</div>

View File

@ -1,17 +0,0 @@
<div>
<div class="ig-header">
<h2 class="ig-header-title" aria-label="{{#t "aria_assignments"}}Assignments{{/t}}">
<i class="icon-mini-arrow-down"></i>
{{#t "assignments"}}Assignments{{/t}}
</h2>
</div>
<ul class="ig-list">
<li>
<div class="ig-row ig-row-empty">
<div class="ig-empty-msg">
{{#t "no_assignments_found"}}No assignments found{{/t}}
</div>
</div>
</li>
</ul>
</div>

View File

@ -1,6 +0,0 @@
{{#each sections}}
<option value="{{id}}"
{{selectedIf this.id ../override.course_section_id}}>
{{name}}
</option>
{{/each}}

View File

@ -1,82 +0,0 @@
<span class="non-screenreader" aria-hidden=true>
{{#unless hideGrade}}
{{#ifAll submission submission.submitted_or_graded}}
{{#with submission}}
{{#if notYetGraded}}
<span class="score-display span5 text-right ellipsis">
{{#t "empty_points_possible"}}
-/{{pointsPossible}} pts
{{/t}}
</span>
<span class="grade-display span6 text-left ellipsis">
{{#t "not_yet_graded"}}
<em>Not Yet Graded</em>
{{/t}}
</span>
{{else}}
<span class="score-display span5 text-right ellipsis">
{{#t "score_with_points_possible"}}
<b>{{score}}</b>/{{pointsPossible}} pts
{{/t}}
</span>
<span class="grade-display span6 text-left ellipsis">
<strong>
{{gradeDisplay}}
</strong>
</span>
{{/if}}
{{/with}}
{{else}}
<span data-tooltip="" class="span5 score-display ellipsis text-right" title='{{#t "no_submission"}}No Submission{{/t}}'>
{{#t "empty_points_possible"}}
-/{{pointsPossible}} pts
{{/t}}
</span>
{{/ifAll}}
{{/unless}}
</span>
<span class="screenreader-only">
{{#if hideGrade}}
{{#t "assignment_grading_type_is_not_graded"}}
This assignment will not be assigned a grade.
{{/t}}
{{else}}
{{#ifAll submission submission.submitted_or_graded}}
{{#with submission}}
{{#if notYetGraded}}
{{#t "assignment_not_yet_graded_screenreader"}}
Assignment not yet graded. {{pointsPossible}} points possible.
{{/t}}
{{else}}
{{#t "score_with_points_possible_screenreader"}}
Score: {{score}} out of {{pointsPossible}} points.
{{/t}}
{{gradeDisplayForScreenreader}}
{{/if}}
{{/with}}
{{else}}
{{#t "no_submission_for_assignment_screenreader"}}
No submission for this assignment. {{pointsPossible}} points possible.
{{/t}}
{{/ifAll}}
{{/if}}
</span>

View File

@ -1,13 +0,0 @@
{{#if pending}}
<span class="status-description">{{#t "not_available_until"}}Not available until{{/t}}</span>
{{strftime unlockAt "%b %-d"}}
{{/if}}
{{#if open}}
<span class="status-description">{{#t "available_until"}}Available until{{/t}}</span>
{{strftime lockAt "%b %-d"}}
{{/if}}
{{#if closed}}
<span class="status-description">{{#t "closed"}}Closed{{/t}}</span>
{{/if}}