Skip to content

Commit bed2875

Browse files
committed
fix help dialog in speedgrader, closes #5695
Change-Id: I2f84e8bc2296beb5aa1c33359de538690fdb8487 Reviewed-on: https://gerrit.instructure.com/5890 Reviewed-by: Ryan Florence <ryanf@instructure.com> Tested-by: Hudson <hudson@instructure.com>
1 parent 642e477 commit bed2875

4 files changed

Lines changed: 67 additions & 38 deletions

File tree

app/views/gradebooks/speed_grader.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
</div>
2323
<div class="right">
2424
<a id="settings_link" href="#"><span class="ui-icon ui-icon-wrench"></span><%= t('links.settings', "Settings") %></a>
25-
<% if Setting.get_cached("show_feedback_link", "false") == "true" %>| <a href="#" id="feedback_link"><%= t('links.feedback', "Feedback") %></a><% end %>
25+
<% if Setting.get_cached("show_feedback_link", "false") == "true" %>| <a href="#" id="feedback_link"><%= t('links.help', "Help") %></a><% end %>
2626
<div>
2727
<span id="x_of_x_graded"><%= t(:portion_graded, "%{x} / %{y} Graded", :x => raw('<span>0</span>'), :y => raw("<span>#{@assignment.context.students.length}</span>")) %></span>
2828
<span id='average_score_wrapper' style='display:none; padding-left: 10px;'><%= before_label(:average, "Avg") %> <span id='average_score'>0.0</span></span>

app/views/layouts/application.html.erb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,13 @@
6161
</script>
6262
</head>
6363
<body class="<%= (@body_classes << @active_tab).uniq.join(" ") %>">
64-
<% unless @body_class_no_headers %>
64+
<% if @body_class_no_headers %>
65+
<% if Setting.get_cached("show_feedback_link", "false") == "true" %>
66+
<%- cache([@current_user || 'nobody', 'identity-type-15m'], :expires_in => 15.minutes) do -%>
67+
<div id="identity_feedback" style="display: none" class="feedback <%= @current_user.try(:highest_role) %>"></div>
68+
<%- end -%>
69+
<% end %>
70+
<% else %>
6571
<div id="header" class="no-print <%= 'no-user' unless @current_user %>">
6672
<a href="#content" id="skip_navigation_link"><%= t 'links.skip_to_content', "Skip To Content" %></a>
6773
<a id="header-logo" href="<%= root_url %>"><%= t 'links.dashboard', "My Dashboard" %></a>

public/javascripts/feedback.js

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,46 +20,44 @@ I18n.scoped('feedback', function(I18n) {
2020
$(document).ready(function() {
2121
var dialogOpened = false;
2222
var $dialog = $("#feedback_dialog");
23+
var $helpDialog = $("#help_dialog");
2324
var courses = [];
24-
function helpInit() {
25-
var $column = $("#menu .menu-item-drop-column:first")
26-
var text = $column.find("h2:first").text();
27-
if(text && text.match(/courses/i)) {
28-
var added_ids = {};
29-
$column.find("li").each(function() {
30-
var type = $(this).find(".subtitle").text();
31-
if(type && type.match(/student/i)) {
32-
var name = $(this).find(".name").text();
33-
var id = $(this).find("a:first").attr('href').split(/\//).pop();
34-
if(name && id) {
35-
if(name.length > 60) {
36-
name = name.substring(0, 60) + "...";
37-
}
38-
courses.push({
39-
name: name,
40-
id: id
41-
});
42-
added_ids[id] = true;
43-
}
44-
}
45-
});
46-
}
47-
var role = 'user';
48-
if($("#identity_feedback").hasClass('admin')) {
49-
role = 'admin';
50-
} else if($("#identity_feedback").hasClass('teacher')) {
51-
role = 'teacher';
52-
} else if($("#identity_feedback").hasClass('student') && courses.length) {
53-
role = 'student';
54-
}
55-
$("#help_dialog").children("ul").addClass(role).end()
56-
.dialog('close').dialog({
25+
var inited = false;
26+
function openHelp() {
27+
helpInit(function() {
28+
$helpDialog.dialog('close').dialog({
5729
autoOpen: false,
5830
resizable: false
59-
}).dialog('open')
31+
}).dialog('open');
32+
});
33+
}
34+
function helpInit(callback) {
35+
var needsCourseData = false;
36+
if (!inited) {
37+
var $identity_feedback = $("#identity_feedback");
38+
var role = 'user';
39+
if($identity_feedback.hasClass('admin')) {
40+
role = 'admin';
41+
} else if($identity_feedback.hasClass('teacher')) {
42+
role = 'teacher';
43+
} else if($identity_feedback.hasClass('student')) {
44+
role = 'student';
45+
needsCourseData = true;
46+
}
47+
$helpDialog.children("ul").addClass(role);
48+
}
49+
if (needsCourseData) {
50+
$.ajaxJSON('/courses', 'GET', {}, function(data) {
51+
courses = data;
52+
callback();
53+
});
54+
} else {
55+
callback();
56+
}
57+
inited = true;
6058
}
6159
var feedbackInit = function(open) {
62-
$("#help_dialog").dialog('close');
60+
$helpDialog.dialog('close');
6361
if(feedbackInit.already_initialized) {
6462
$dialog.triggerHandler('feedback_click');
6563
return;
@@ -172,7 +170,7 @@ $(document).ready(function() {
172170
});
173171
$("#feedback_link").click(function(event) {
174172
event.preventDefault();
175-
helpInit();
173+
openHelp();
176174
});
177175
$("#help_dialog .message_teacher_link").click(function(event) {
178176
event.preventDefault();

spec/selenium/feedback_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,31 @@
1414
driver.find_element(:css, '#feedback_link').should be_displayed
1515
driver.find_element(:css, "#help_dialog").should_not be_displayed
1616
driver.find_element(:css, '#feedback_link').click
17+
wait_for_ajaximations
1718
driver.find_element(:css, "#help_dialog").should be_displayed
1819
driver.find_element(:css, "#help_dialog .message_teacher_link").should be_displayed
1920
end
2021

22+
it "should show the Help dialog on the speedgrader when 'help' is clicked and feedback is enabled" do
23+
course_with_teacher_logged_in(:active_all => true)
24+
@course.enroll_student(User.create).accept!
25+
@assignment = @course.assignments.create
26+
27+
get "/courses/#{@course.id}/gradebook/speed_grader?assignment_id=#{@assignment.id}"
28+
driver.find_elements(:css, '#feedback_link').length.should == 0
29+
30+
Setting.set('show_feedback_link', 'true')
31+
get "/courses/#{@course.id}/gradebook/speed_grader?assignment_id=#{@assignment.id}"
32+
feedback_link = driver.find_element(:css, '#feedback_link')
33+
feedback_link.location_once_scrolled_into_view
34+
feedback_link.should be_displayed
35+
driver.find_element(:css, "#help_dialog").should_not be_displayed
36+
feedback_link.click
37+
wait_for_ajaximations
38+
driver.find_element(:css, "#help_dialog").should be_displayed
39+
driver.find_element(:css, "#help_dialog .file_ticket_link").should be_displayed
40+
end
41+
2142
it "should allow sending the teacher a message" do
2243
course_with_student_logged_in(:active_all => true)
2344

@@ -26,6 +47,7 @@
2647
driver.find_element(:css, '#feedback_link').should be_displayed
2748
driver.find_element(:css, "#help_dialog").should_not be_displayed
2849
driver.find_element(:css, '#feedback_link').click
50+
wait_for_ajaximations
2951
driver.find_element(:css, "#help_dialog").should be_displayed
3052
driver.find_element(:css, "#help_dialog .message_teacher_link").should be_displayed
3153
driver.find_element(:css, "#help_dialog .message_teacher_link").click
@@ -46,6 +68,7 @@
4668
driver.find_element(:css, '#feedback_link').should be_displayed
4769
driver.find_element(:css, "#help_dialog").should_not be_displayed
4870
driver.find_element(:css, '#feedback_link').click
71+
wait_for_ajaximations
4972
driver.find_element(:css, "#help_dialog").should be_displayed
5073
driver.find_element(:css, "#help_dialog .file_ticket_link").should be_displayed
5174
driver.find_element(:css, "#help_dialog .file_ticket_link").click
@@ -75,6 +98,7 @@
7598
Setting.set('show_feedback_link', 'true')
7699
get "/dashboard"
77100
driver.find_element(:css, '#feedback_link').click
101+
wait_for_ajaximations
78102
driver.find_element(:css, "#help_dialog").should be_displayed
79103
driver.find_element(:css, "#help_dialog .file_ticket_link").click
80104
keep_trying_until{ driver.find_elements(:css, '#feedback_dialog #feedback_form_subject').first.try(:displayed?) }
@@ -106,6 +130,7 @@
106130
Setting.set('show_feedback_link', 'true')
107131
get "/dashboard"
108132
driver.find_element(:css, '#feedback_link').click
133+
wait_for_ajaximations
109134
driver.find_element(:css, "#help_dialog").should be_displayed
110135
driver.find_element(:css, "#help_dialog .message_teacher_link").click
111136
keep_trying_until{ driver.find_elements(:css, '#feedback_dialog #feedback_form_subject').first.try(:displayed?) }

0 commit comments

Comments
 (0)