Add sticky footer to account and course.
closes OUT-6263 OUT-6336 flag=none Test Plan - Navigate to account settings and verify a sticky footer - Navigate to course settings and verify a sticky footer Change-Id: Ia6ecf5f7c3179d51c42a6724309be63f3d0ab1b8 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/347067 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Angela Gomba <angela.gomba@instructure.com> QA-Review: Angela Gomba <angela.gomba@instructure.com> Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
This commit is contained in:
parent
284593172a
commit
83be46a9b0
|
@ -415,7 +415,22 @@ This is the standard form actions button bar at the bottom of every content form
|
|||
@include clearfix(); // Adding clearfix to allow for .pull-right button containers
|
||||
}
|
||||
|
||||
.sticky-footer {
|
||||
background: #F5F5F5;
|
||||
position: fixed;
|
||||
z-index: 999;
|
||||
right: 0;
|
||||
left: 270px;
|
||||
bottom: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.form-actions-sticky-footer {
|
||||
text-align: direction(right);
|
||||
padding: 10px 10px 11px;
|
||||
border-top: 1px solid #C7CDD1;
|
||||
@include clearfix(); // Adding clearfix to allow for .pull-right button containers
|
||||
}
|
||||
|
||||
// HELP TEXT
|
||||
// ---------
|
||||
|
|
|
@ -998,9 +998,11 @@ acknowledge that you have read and agreed to the
|
|||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
<div class="button-container">
|
||||
<button type="submit" class="Button Button--primary"><%= t(:update_settings_button, "Update Settings") %></button>
|
||||
</div>
|
||||
<footer class="sticky-footer">
|
||||
<div class="form-actions-sticky-footer">
|
||||
<button type="submit" class="Button Button--primary"><%= t(:update_settings_button, "Update Settings") %></button>
|
||||
</div>
|
||||
</footer>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
|
|
@ -712,19 +712,19 @@
|
|||
</div>
|
||||
</div>
|
||||
<% if can_manage %>
|
||||
<div class="form-row">
|
||||
<div colspan="4">
|
||||
<footer class="sticky-footer">
|
||||
<div>
|
||||
<% if Setting.get('cross_root_account_course_moves', 'false') == 'true' &&
|
||||
Account.site_admin.grants_any_right?(@current_user, :manage_courses, :manage_courses_admin) && Account.root_accounts.length > 1 %>
|
||||
<a href="#" class="move_course_link btn"><i class="icon-arrow-right"></i> <%= t('links.move_course', %{Move To Another Account}) %></a>
|
||||
<% end %>
|
||||
<span class="course_form">
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary"><%= t('buttons.update_course', %{Update Course Details}) %></button>
|
||||
</div>
|
||||
</span>
|
||||
<span class="course_form">
|
||||
<div class="form-actions-sticky-footer">
|
||||
<button type="submit" class="btn btn-primary"><%= t('buttons.update_course', %{Update Course Details}) %></button>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
|
|
@ -36,7 +36,9 @@ describe "root account basic settings" do
|
|||
user_session(@admin)
|
||||
get account_settings_url
|
||||
|
||||
f("#account_services_avatars").click
|
||||
avatars = f("#account_services_avatars")
|
||||
avatars.location_once_scrolled_into_view
|
||||
avatars.click
|
||||
f("#account_settings_enable_gravatar").click
|
||||
|
||||
submit_form("#account_settings")
|
||||
|
@ -50,7 +52,9 @@ describe "root account basic settings" do
|
|||
|
||||
user_session(@admin)
|
||||
get account_settings_url
|
||||
f("#account_settings_kill_joy").click
|
||||
el = f("#account_settings_kill_joy")
|
||||
el.location_once_scrolled_into_view
|
||||
el.click
|
||||
submit_form("#account_settings")
|
||||
wait_for_ajaximations
|
||||
expect(Account.default.reload.settings[:kill_joy]).to be true
|
||||
|
@ -69,7 +73,9 @@ describe "root account basic settings" do
|
|||
get account_settings_url
|
||||
|
||||
# click then close restrict quantitative data helper dialog
|
||||
fj("button:contains('About restrict quantitative data')").click
|
||||
button = fj("button:contains('About restrict quantitative data')")
|
||||
button.location_once_scrolled_into_view
|
||||
button.click
|
||||
expect(fj("div.ui-dialog-titlebar:contains('Restrict Quantitative Data')")).to be_present
|
||||
force_click(".ui-dialog-titlebar-close")
|
||||
|
||||
|
@ -93,7 +99,9 @@ describe "root account basic settings" do
|
|||
expect(is_checked("#account_settings_restrict_quantitative_data_locked")).to be_falsey
|
||||
|
||||
# restrict_quantitative_data true, then locked is enabled
|
||||
f("#account_settings_restrict_quantitative_data_value").click
|
||||
el = f("#account_settings_restrict_quantitative_data_value")
|
||||
el.location_once_scrolled_into_view
|
||||
el.click
|
||||
expect(f("#account_settings_restrict_quantitative_data_locked")).to be_enabled
|
||||
f("#account_settings_restrict_quantitative_data_locked").click
|
||||
expect(is_checked("#account_settings_restrict_quantitative_data_locked")).to be_truthy
|
||||
|
@ -118,7 +126,9 @@ describe "root account basic settings" do
|
|||
|
||||
user_session(@admin)
|
||||
get account_settings_url
|
||||
f("#account_settings_suppress_notifications").click
|
||||
el = f("#account_settings_suppress_notifications")
|
||||
el.location_once_scrolled_into_view
|
||||
el.click
|
||||
driver.switch_to.alert.accept
|
||||
submit_form("#account_settings")
|
||||
expect(Account.default.reload.settings[:suppress_notifications]).to be true
|
||||
|
@ -130,6 +140,7 @@ describe "root account basic settings" do
|
|||
user_session(@admin)
|
||||
get account_settings_url
|
||||
expect(is_checked(allow_observers_in_appointments_checkbox)).to be false
|
||||
allow_observers_in_appointments_checkbox.location_once_scrolled_into_view
|
||||
allow_observers_in_appointments_checkbox.click
|
||||
expect_new_page_load { submit_form("#account_settings") }
|
||||
expect(is_checked(allow_observers_in_appointments_checkbox)).to be true
|
||||
|
@ -326,7 +337,9 @@ describe "root account basic settings" do
|
|||
expect(account.settings[:ip_filters]).to be_present # should not have cleared them if we didn't do anything
|
||||
|
||||
filter = ff(".ip_filter").detect(&:displayed?)
|
||||
filter.find_element(:css, ".delete_filter_link").click
|
||||
el = filter.find_element(:css, ".delete_filter_link")
|
||||
el.location_once_scrolled_into_view
|
||||
el.click
|
||||
|
||||
expect_new_page_load { submit_form("#account_settings") }
|
||||
|
||||
|
@ -376,10 +389,20 @@ describe "root account basic settings" do
|
|||
account.save!
|
||||
|
||||
get account_settings_url
|
||||
f("input[type='radio'][name='account[settings][teachers_can_create_courses_anywhere]'][value='1'] + label").click
|
||||
f("input[type='checkbox'][name='account[settings][students_can_create_courses]'] + label").click
|
||||
f("input[type='radio'][name='account[settings][students_can_create_courses_anywhere]'][value='0'] + label").click
|
||||
f("input[type='checkbox'][name='account[settings][no_enrollments_can_create_courses]'] + label").click
|
||||
teacher = f("input[type='radio'][name='account[settings][teachers_can_create_courses_anywhere]'][value='1'] + label")
|
||||
scroll_into_view(teacher)
|
||||
teacher.click
|
||||
|
||||
student = f("input[type='checkbox'][name='account[settings][students_can_create_courses]'] + label")
|
||||
scroll_into_view(student)
|
||||
student.click
|
||||
|
||||
radio = f("input[type='radio'][name='account[settings][students_can_create_courses_anywhere]'][value='0'] + label")
|
||||
scroll_into_view(radio)
|
||||
radio.click
|
||||
check = f("input[type='checkbox'][name='account[settings][no_enrollments_can_create_courses]'] + label")
|
||||
scroll_into_view(check)
|
||||
check.click
|
||||
expect_new_page_load { submit_form("#account_settings") }
|
||||
|
||||
account.reload
|
||||
|
|
|
@ -73,7 +73,7 @@ describe "course settings" do
|
|||
|
||||
sync_checkbox = f(".sync_enrollments_from_homeroom_checkbox")
|
||||
expect(sync_checkbox).to be_displayed
|
||||
|
||||
sync_checkbox.location_once_scrolled_into_view
|
||||
sync_checkbox.click
|
||||
|
||||
homeroom_selection = f("#course_homeroom_course_id")
|
||||
|
@ -186,6 +186,7 @@ describe "course settings" do
|
|||
|
||||
it "does not show archived grading schemes" do
|
||||
get "/courses/#{@course.id}/settings"
|
||||
scroll_into_view(".grading_standard_checkbox")
|
||||
f(".grading_standard_checkbox").click unless is_checked(".grading_standard_checkbox")
|
||||
f("[data-testid='grading-schemes-selector-dropdown']").click
|
||||
expect(f("[data-testid='grading-schemes-selector-option-#{@active_grading_standard.id}']")).to include_text(@active_grading_standard.title)
|
||||
|
@ -197,16 +198,19 @@ describe "course settings" do
|
|||
get "/courses/#{@course.id}/settings"
|
||||
f(".grading_standard_checkbox").click unless is_checked(".grading_standard_checkbox")
|
||||
expect(f("[data-testid='grading-schemes-selector-dropdown']").attribute("value")).to eq(@archived_grading_standard.title)
|
||||
scroll_into_view("[data-testid='grading-schemes-selector-dropdown']")
|
||||
f("[data-testid='grading-schemes-selector-dropdown']").click
|
||||
expect(f("[data-testid='grading-schemes-selector-option-#{@course.grading_standard.id}']")).to include_text(@course.grading_standard.title)
|
||||
end
|
||||
|
||||
it "doesn't let you edit an account level grading scheme" do
|
||||
get "/courses/#{@course.id}/settings"
|
||||
scroll_into_view(".grading_standard_checkbox")
|
||||
f(".grading_standard_checkbox").click unless is_checked(".grading_standard_checkbox")
|
||||
f("[data-testid='grading-schemes-selector-dropdown']").click
|
||||
expect(f("[data-testid='grading-schemes-selector-option-#{@account_grading_standard.id}']")).to include_text(@account_grading_standard.title)
|
||||
f("[data-testid='grading-schemes-selector-option-#{@account_grading_standard.id}']").click
|
||||
scroll_into_view("[data-testid='grading-schemes-selector-view-button']")
|
||||
f("[data-testid='grading-schemes-selector-view-button']").click
|
||||
wait_for_ajaximations
|
||||
expect(f("[data-testid='grading-scheme-#{@account_grading_standard.id}-edit-button']").attribute("disabled")).to eq("true")
|
||||
|
@ -216,8 +220,10 @@ describe "course settings" do
|
|||
@course.update!(grading_standard_id: @active_grading_standard.id)
|
||||
get "/courses/#{@course.id}/settings"
|
||||
f(".grading_standard_checkbox").click unless is_checked(".grading_standard_checkbox")
|
||||
scroll_into_view("[data-testid='grading-schemes-selector-dropdown']")
|
||||
f("[data-testid='grading-schemes-selector-dropdown']").click
|
||||
f("[data-testid='grading-schemes-selector-option-#{@course.grading_standard.id}']").click
|
||||
scroll_into_view("[data-testid='grading-schemes-selector-view-button']")
|
||||
f("[data-testid='grading-schemes-selector-view-button']").click
|
||||
wait_for_ajaximations
|
||||
f("[data-testid='grading-scheme-#{@course.grading_standard.id}-edit-button']").click
|
||||
|
@ -234,6 +240,7 @@ describe "course settings" do
|
|||
archived_gs2 = @course.grading_standards.create!(title: "Archived Grading Scheme 2", data: { "A" => 0.9, "F" => 0 }, scaling_factor: 1.0, points_based: false, workflow_state: "archived")
|
||||
archived_gs3 = @course.grading_standards.create!(title: "Archived Grading Scheme 3", data: { "A" => 0.9, "F" => 0 }, scaling_factor: 1.0, points_based: false, workflow_state: "archived")
|
||||
get "/courses/#{@course.id}/settings"
|
||||
scroll_into_view(".grading_standard_checkbox")
|
||||
f(".grading_standard_checkbox").click unless is_checked(".grading_standard_checkbox")
|
||||
f("[data-testid='manage-all-grading-schemes-button']").click
|
||||
wait_for_ajaximations
|
||||
|
@ -259,7 +266,9 @@ describe "course settings" do
|
|||
a.settings[:self_enrollment] = "manually_created"
|
||||
a.save!
|
||||
get "/courses/#{@course.id}/settings"
|
||||
f("#course_self_enrollment").click
|
||||
el = f("#course_self_enrollment")
|
||||
el.location_once_scrolled_into_view
|
||||
el.click
|
||||
wait_for_ajaximations
|
||||
wait_for_new_page_load { submit_form("#course_form") }
|
||||
|
||||
|
@ -299,6 +308,7 @@ describe "course settings" do
|
|||
expect(is_checked(course_show_announcements_on_home_page)).not_to be_truthy
|
||||
expect(home_page_announcement_limit).to be_disabled
|
||||
|
||||
course_show_announcements_on_home_page.location_once_scrolled_into_view
|
||||
course_show_announcements_on_home_page.click
|
||||
expect(home_page_announcement_limit).not_to be_disabled
|
||||
end
|
||||
|
@ -316,7 +326,7 @@ describe "course settings" do
|
|||
|
||||
caution_text = "Course Pacing is in active development."
|
||||
course_paces_checkbox = f("#course_enable_course_paces")
|
||||
|
||||
course_paces_checkbox.location_once_scrolled_into_view
|
||||
course_paces_checkbox.click
|
||||
wait_for_ajaximations
|
||||
expect(f(".course-paces-row")).to include_text caution_text
|
||||
|
|
Loading…
Reference in New Issue