From 0622523114252d26a5710684bfad7b5811173d66 Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Wed, 13 May 2015 10:29:39 +0800 Subject: Bug 1163326: implement dirty select tracking in bug-modal to address firefox refresh issue --- .../template/en/default/bug_modal/field.html.tmpl | 2 + .../template/en/default/bug_modal/flags.html.tmpl | 1 + .../en/default/bug_modal/tracking_flags.html.tmpl | 1 + extensions/BugModal/web/bug_modal.js | 45 ++++++++++++++++++++++ 4 files changed, 49 insertions(+) (limited to 'extensions') diff --git a/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl b/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl index 9327069da..8317a059f 100644 --- a/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl +++ b/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl @@ -157,6 +157,7 @@ END; [% CASE constants.FIELD_TYPE_SINGLE_SELECT %] [%# single value select %] + [% flag_bug_value = flag.bug_flag(bug_id).value; 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) { -- cgit v1.2.3-24-g4f1b