Skip to content

Commit e1509eb

Browse files
committed
Bug 1129283: "suggested reviewers" missing, due to missing YAHOO.widget.Menu
1 parent fe77847 commit e1509eb

File tree

6 files changed

+81
-88
lines changed

6 files changed

+81
-88
lines changed

extensions/Review/template/en/default/hook/attachment/create-end.html.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
[% END %]
1212

1313
<script>
14-
YAHOO.util.Event.onDOMReady(function() {
14+
$(function() {
1515
[% IF bug.product_obj.reviewer_required %]
1616
REVIEW.init_mandatory();
1717
[% END %]

extensions/Review/template/en/default/hook/attachment/edit-end.html.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
[% IF attachment.bug.product_obj.reviewer_required %]
1010
<script>
11-
YAHOO.util.Event.onDOMReady(function() {
11+
$(function() {
1212
REVIEW.init_mandatory();
1313
});
1414
</script>

extensions/Review/template/en/default/hook/bug/create/create-end.html.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#%]
88

99
<script>
10-
YAHOO.util.Event.onDOMReady(function() {
10+
$(function() {
1111
[% IF product.reviewer_required %]
1212
REVIEW.init_mandatory();
1313
[% END %]

extensions/Review/template/en/default/hook/flag/list-requestee.html.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
[% RETURN UNLESS type.name == 'review' %]
1010

11-
<span id="[% fid FILTER none %]_suggestions" class="bz_default_hidden">
12-
&nbsp;&nbsp;(<a href="#" id="[% fid FILTER none %]_suggestions_link">suggested reviewers</a>)
11+
<span id="[% fid FILTER none %]_suggestions" style="display: none">
12+
&nbsp;&nbsp;<a href="#" id="[% fid FILTER none %]_suggestions_link">suggested reviewers &#9662;</a>
1313
</span>
1414

1515
<script>

extensions/Review/web/js/review.js

Lines changed: 74 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -5,66 +5,64 @@
55
* This Source Code Form is "Incompatible With Secondary Licenses", as
66
* defined by the Mozilla Public License, v. 2.0. */
77

8-
var Dom = YAHOO.util.Dom;
9-
var Event = YAHOO.util.Event;
10-
118
var REVIEW = {
129
widget: false,
1310
target: false,
1411
fields: [],
1512
use_error_for: false,
1613
ispatch_override: false,
1714
description_override: false,
15+
ignore_patch_event: true,
1816

1917
init_review_flag: function(fid, flag_name) {
2018
var idx = this.fields.push({ 'fid': fid, 'flag_name': flag_name, 'component': '' }) - 1;
21-
this.flag_change(false, idx);
22-
Event.addListener(fid, 'change', this.flag_change, idx);
19+
this.flag_change({ data: idx });
20+
$('#' + fid).on('change', null, idx, this.flag_change);
2321
},
2422

2523
init_mandatory: function() {
2624
var form = this.find_form();
2725
if (!form) return;
28-
Event.addListener(form, 'submit', this.check_mandatory);
26+
$(form).on('submit', this.check_mandatory);
2927
for (var i = 0; i < this.fields.length; i++) {
3028
var field = this.fields[i];
3129
// existing reviews that have empty requestee shouldn't force a
3230
// reviewer to be selected
33-
field.old_empty_review = Dom.get(field.fid).value == '?'
34-
&& Dom.get(field.flag_name).value == '';
31+
field.old_empty_review = $('#' + field.fid).val() == '?'
32+
&& $('#' + field.flag_name).val() == '';
3533
if (!field.old_empty_review)
36-
Dom.addClass(field.flag_name, 'required');
34+
$('#' + field.flag_name).addClass('required');
3735
}
3836
},
3937

4038
init_enter_bug: function() {
41-
Event.addListener('component', 'change', REVIEW.component_change);
39+
$('#component').on('change', REVIEW.component_change);
4240
BUGZILLA.string['reviewer_required'] = 'A reviewer is required.';
4341
this.use_error_for = true;
4442
this.init_create_attachment();
4543
},
4644

4745
init_create_attachment: function() {
48-
Event.addListener('data', 'change', REVIEW.attachment_change);
49-
Event.addListener('description', 'change', REVIEW.description_change);
50-
Event.addListener('ispatch', 'change', REVIEW.ispatch_change);
46+
$('#data').on('change', REVIEW.attachment_change);
47+
$('#description').on('change', REVIEW.description_change);
48+
$('#ispatch').on('change', REVIEW.ispatch_change);
5149
},
5250

5351
component_change: function() {
5452
for (var i = 0; i < REVIEW.fields.length; i++) {
55-
REVIEW.flag_change(false, i);
53+
REVIEW.flag_change({ data: i });
5654
}
5755
},
5856

5957
attachment_change: function() {
60-
var filename = Dom.get('data').value.split('/').pop().split('\\').pop();
61-
var description = Dom.get('description');
62-
if (description.value == '' || !REVIEW.description_override) {
63-
description.value = filename;
58+
var filename = $('#data').val().split('/').pop().split('\\').pop();
59+
var description = $('#description').first();
60+
if (description.val() == '' || !REVIEW.description_override) {
61+
description.val(filename);
6462
}
6563
if (!REVIEW.ispatch_override) {
66-
Dom.get('ispatch').checked =
67-
REVIEW.endsWith(filename, '.diff') || REVIEW.endsWith(filename, '.patch');
64+
$('#ispatch').prop('checked',
65+
REVIEW.endsWith(filename, '.diff') || REVIEW.endsWith(filename, '.patch'));
6866
}
6967
setContentTypeDisabledState(this.form);
7068
description.select();
@@ -76,76 +74,86 @@ var REVIEW = {
7674
},
7775

7876
ispatch_change: function() {
77+
// the attachment template triggers this change event onload
78+
// as we only want to set ispatch_override when the user clicks on the
79+
// checkbox, we ignore this first event
80+
if (REVIEW.ignore_patch_event) {
81+
REVIEW.ignore_patch_event = false;
82+
return;
83+
}
7984
REVIEW.ispatch_override = true;
8085
},
8186

82-
flag_change: function(e, field_idx) {
83-
var field = REVIEW.fields[field_idx];
84-
var suggestions_span = Dom.get(field.fid + '_suggestions');
87+
flag_change: function(e) {
88+
var field = REVIEW.fields[e.data];
89+
var suggestions_span = $('#' + field.fid + '_suggestions');
8590

8691
// for requests only
87-
if (Dom.get(field.fid).value != '?') {
88-
Dom.addClass(suggestions_span, 'bz_default_hidden');
92+
if ($('#' + field.fid).val() != '?') {
93+
suggestions_span.hide();
8994
return;
9095
}
9196

9297
// find selected component
93-
var component = static_component || Dom.get('component').value;
98+
var component = static_component || $('#component').val();
9499
if (!component) {
95-
Dom.addClass(suggestions_span, 'bz_default_hidden');
100+
suggestions_span.hide();
96101
return;
97102
}
98103

99-
// init menu and events
100-
if (!field.menu) {
101-
field.menu = new YAHOO.widget.Menu(field.fid + '_menu');
102-
field.menu.render(document.body);
103-
field.menu.subscribe('click', REVIEW.suggestion_click);
104-
Event.addListener(field.fid + '_suggestions_link', 'click', REVIEW.suggestions_click, field_idx)
105-
}
106-
107-
// build review list
104+
// add the menu
108105
if (field.component != component) {
109-
field.menu.clearContent();
106+
var items = [];
110107
for (var i = 0, il = review_suggestions._mentors.length; i < il; i++) {
111-
REVIEW.add_menu_item(field_idx, review_suggestions._mentors[i], true);
108+
REVIEW.add_menu_item(items, review_suggestions._mentors[i], true);
112109
}
113110
if (review_suggestions[component] && review_suggestions[component].length) {
114-
REVIEW.add_menu_items(field_idx, review_suggestions[component]);
115-
} else if (review_suggestions._product) {
116-
REVIEW.add_menu_items(field_idx, review_suggestions._product);
111+
REVIEW.add_menu_items(items, review_suggestions[component]);
112+
}
113+
else if (review_suggestions._product) {
114+
REVIEW.add_menu_items(items, review_suggestions._product);
115+
}
116+
if (items.length) {
117+
suggestions_span.show();
118+
$.contextMenu('destroy', '#' + field.fid + '_suggestions');
119+
$.contextMenu({
120+
selector: '#' + field.fid + '_suggestions',
121+
trigger: 'left',
122+
events: {
123+
show: function() {
124+
REVIEW.target = $('#' + field.flag_name);
125+
}
126+
},
127+
items: items
128+
});
129+
}
130+
else {
131+
suggestions_span.hide();
117132
}
118-
field.menu.render();
119-
field.component = component;
120-
}
121-
122-
// show (or hide) the menu
123-
if (field.menu.getItem(0)) {
124-
Dom.removeClass(suggestions_span, 'bz_default_hidden');
125-
} else {
126-
Dom.addClass(suggestions_span, 'bz_default_hidden');
127133
}
128134
},
129135

130-
add_menu_item: function(field_idx, user, is_mentor) {
131-
var menu = REVIEW.fields[field_idx].menu;
132-
var items = menu.getItems();
136+
add_menu_item: function(items, user, is_mentor) {
133137
for (var i = 0, il = items.length; i < il; i++) {
134-
if (items[i].cfg.config.url.value == '#' + user.login) {
138+
if (items[i].login == user.login)
135139
return;
136-
}
137140
}
141+
138142
var queue = '';
139143
if (user.review_count == 0) {
140144
queue = 'empty queue';
141145
} else {
142146
queue = user.review_count + ' review' + (user.review_count == 1 ? '' : 's') + ' in queue';
143147
}
144-
var item = menu.addItem(
145-
{ text: user.identity + ' (' + queue + ')', url: '#' + user.login }
146-
);
147-
if (is_mentor)
148-
item.cfg.setProperty('classname', 'mentor');
148+
149+
items.push({
150+
name: user.identity + ' (' + queue + ')',
151+
login: user.login,
152+
className: (is_mentor ? 'mentor' : ''),
153+
callback: function() {
154+
REVIEW.target.val(user.login);
155+
}
156+
});
149157
},
150158

151159
add_menu_items: function(field_idx, users) {
@@ -158,39 +166,24 @@ var REVIEW = {
158166
}
159167
},
160168

161-
suggestions_click: function(e, field_idx) {
162-
var field = REVIEW.fields[field_idx];
163-
field.menu.cfg.setProperty('xy', Event.getXY(e));
164-
field.menu.show();
165-
Event.stopEvent(e);
166-
REVIEW.target = field.flag_name;
167-
},
168-
169-
suggestion_click: function(type, args) {
170-
if (args[1]) {
171-
Dom.get(REVIEW.target).value = decodeURIComponent(args[1].cfg.getProperty('url')).substr(1);
172-
}
173-
Event.stopEvent(args[0]);
174-
},
175-
176169
check_mandatory: function(e) {
177-
if (Dom.get('data') && !Dom.get('data').value
178-
&& Dom.get('attach_text') && !Dom.get('attach_text').value)
170+
if ($('#data').length && !$('#data').val()
171+
&& $('#attach_text').length && !$('#attach_text').val())
179172
{
180173
return;
181174
}
182175
for (var i = 0; i < REVIEW.fields.length; i++) {
183176
var field = REVIEW.fields[i];
184177
if (!field.old_empty_review
185-
&& Dom.get(field.fid).value == '?'
186-
&& Dom.get(field.flag_name).value == '')
178+
&& $('#' + field.fid).val() == '?'
179+
&& $('#' + field.flag_name).val() == '')
187180
{
188181
if (REVIEW.use_error_for) {
189-
_errorFor(Dom.get(REVIEW.fields[i].flag_name), 'reviewer');
182+
_errorFor($('#' + REVIEW.fields[i].flag_name)[0], 'reviewer');
190183
} else {
191184
alert('You must provide a reviewer for review requests.');
192185
}
193-
Event.stopEvent(e);
186+
e.preventDefault();
194187
}
195188
}
196189
},

js/jquery/plugins/contextMenu/contextMenu.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
margin:0;
1717
padding:0;
1818
min-width: 120px;
19-
max-width: 250px;
2019
display: inline-block;
2120
position: absolute;
2221
list-style-type: none;
@@ -30,7 +29,8 @@
3029
}
3130

3231
.context-menu-item {
33-
padding: 2px 2px 2px 24px;
32+
padding: 4px 8px;
33+
white-space: nowrap;
3434
background-color: #EEE;
3535
position: relative;
3636
-webkit-user-select: none;

0 commit comments

Comments
 (0)