summaryrefslogtreecommitdiffstats
path: root/extensions/BugModal/web
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/BugModal/web')
-rw-r--r--extensions/BugModal/web/bug_modal.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/extensions/BugModal/web/bug_modal.js b/extensions/BugModal/web/bug_modal.js
index 419ac1e84..87324f2f5 100644
--- a/extensions/BugModal/web/bug_modal.js
+++ b/extensions/BugModal/web/bug_modal.js
@@ -246,6 +246,26 @@ $(function() {
if (BUGZILLA.user.id === 0) return;
+ // dirty field tracking
+ $('#changeform select').each(function() {
+ var that = $(this);
+ var dirty = $('#' + that.attr('id') + '-dirty');
+ if (!dirty) return;
+ var isMultiple = that.attr('multiple');
+
+ // store the option that had the selected attribute when we
+ // initially loaded
+ var value = that.find('option[selected]').map(function() { return this.value; }).toArray();
+ if (value.length === 0 && !that.attr('multiple'))
+ value = that.find('option:first').map(function() { return this.value; }).toArray();
+ that.data('preselected', value);
+
+ // if the user hasn't touched a field, override the browser's choice
+ // with bugzilla's
+ if (!dirty.val())
+ that.val(value);
+ });
+
// edit/save mode button
$('#mode-btn')
.click(function(event) {
@@ -963,6 +983,31 @@ $(function() {
);
last_comment_text = comment.val();
});
+
+ // dirty field tracking
+ $('#changeform select')
+ .change(function() {
+ var that = $(this);
+ var dirty = $('#' + that.attr('id') + '-dirty');
+ if (!dirty) return;
+ if (that.attr('multiple')) {
+ var preselected = that.data('preselected');
+ var selected = that.val();
+ var isDirty = preselected.length != selected.length;
+ if (!isDirty) {
+ for (var i = 0, l = preselected.length; i < l; i++) {
+ if (selected[i] != preselected[i]) {
+ isDirty = true;
+ break;
+ }
+ }
+ }
+ dirty.val(isDirty ? '1' : '');
+ }
+ else {
+ dirty.val(that.val() === that.data('preselected')[0] ? '' : '1');
+ }
+ });
});
function confirmUnsafeURL(url) {