From 966842dba39639720103cc10de922479550a970b Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Mon, 2 Sep 2013 15:48:30 +0800 Subject: Bug 909843: trackingflags do not support "Can be set on bug creation" --- extensions/TrackingFlags/Extension.pm | 17 + extensions/TrackingFlags/lib/Admin.pm | 5 + extensions/TrackingFlags/lib/Flag.pm | 8 +- .../pages/tracking_flags_admin_edit.html.tmpl | 6 + .../pages/tracking_flags_admin_list.html.tmpl | 11 +- extensions/TrackingFlags/web/js/admin.js | 570 +++++++++++---------- 6 files changed, 338 insertions(+), 279 deletions(-) (limited to 'extensions/TrackingFlags') diff --git a/extensions/TrackingFlags/Extension.pm b/extensions/TrackingFlags/Extension.pm index e3b8bb4e7..42b3b9f03 100644 --- a/extensions/TrackingFlags/Extension.pm +++ b/extensions/TrackingFlags/Extension.pm @@ -59,6 +59,7 @@ sub template_before_process { { $vars->{'tracking_flags'} = Bugzilla::Extension::TrackingFlags::Flag->match({ product => $vars->{'product'}->name, + enter_bug => 1, is_active => 1, }); @@ -169,6 +170,11 @@ sub db_schema_abstract_schema { NOTNULL => 1, DEFAULT => '0', }, + enter_bug => { + TYPE => 'BOOLEAN', + NOTNULL => 1, + DEFAULT => 'TRUE', + }, is_active => { TYPE => 'BOOLEAN', NOTNULL => 1, @@ -265,11 +271,22 @@ sub db_schema_abstract_schema { sub install_update_db { my $dbh = Bugzilla->dbh; + my $fk = $dbh->bz_fk_info('tracking_flags', 'field_id'); if ($fk and !defined $fk->{DELETE}) { $fk->{DELETE} = 'CASCADE'; $dbh->bz_alter_fk('tracking_flags', 'field_id', $fk); } + + $dbh->bz_add_column( + 'tracking_flags', + 'enter_bug', + { + TYPE => 'BOOLEAN', + NOTNULL => 1, + DEFAULT => 'TRUE', + } + ); } sub active_custom_fields { diff --git a/extensions/TrackingFlags/lib/Admin.pm b/extensions/TrackingFlags/lib/Admin.pm index 3529d30a7..c87570632 100644 --- a/extensions/TrackingFlags/lib/Admin.pm +++ b/extensions/TrackingFlags/lib/Admin.pm @@ -110,6 +110,7 @@ sub admin_edit { } $flag->set_sortkey(_next_unique_sortkey($flag->sortkey)); $flag->set_type($flag->flag_type); + $flag->set_enter_bug($flag->enter_bug); # always default new flags as active, even when copying an inactive one $flag->set_is_active(1); @@ -122,6 +123,7 @@ sub admin_edit { $vars->{mode} = 'new'; $vars->{flag} = { sortkey => 0, + enter_bug => 1, is_active => 1, }; $vars->{values} = _flag_values_to_json([ @@ -149,10 +151,12 @@ sub _load_from_input { description => trim($input->{flag_desc} || ''), sortkey => $input->{flag_sort} || 0, type => trim($input->{flag_type} || ''), + enter_bug => $input->{flag_enter_bug} ? 1 : 0, is_active => $input->{flag_active} ? 1 : 0, }; detaint_natural($flag->{id}); detaint_natural($flag->{sortkey}); + detaint_natural($flag->{enter_bug}); detaint_natural($flag->{is_active}); # values @@ -289,6 +293,7 @@ sub _update_db_flag { description => $flag->{description}, sortkey => $flag->{sortkey}, type => $flag->{type}, + enter_bug => $flag->{enter_bug}, is_active => $flag->{is_active}, }; diff --git a/extensions/TrackingFlags/lib/Flag.pm b/extensions/TrackingFlags/lib/Flag.pm index f35b661eb..b7abe97d2 100644 --- a/extensions/TrackingFlags/lib/Flag.pm +++ b/extensions/TrackingFlags/lib/Flag.pm @@ -35,6 +35,7 @@ use constant DB_COLUMNS => qw( description type sortkey + enter_bug is_active ); @@ -45,6 +46,7 @@ use constant UPDATE_COLUMNS => qw( description type sortkey + enter_bug is_active ); @@ -53,8 +55,8 @@ use constant VALIDATORS => { description => \&_check_description, type => \&_check_type, sortkey => \&_check_sortkey, + enter_bug => \&Bugzilla::Object::check_boolean, is_active => \&Bugzilla::Object::check_boolean, - }; use constant UPDATE_VALIDATORS => { @@ -62,6 +64,7 @@ use constant UPDATE_VALIDATORS => { description => \&_check_description, type => \&_check_type, sortkey => \&_check_sortkey, + enter_bug => \&Bugzilla::Object::check_boolean, is_active => \&Bugzilla::Object::check_boolean, }; @@ -338,6 +341,7 @@ sub set_name { $_[0]->set('name', $_[1]); } sub set_description { $_[0]->set('description', $_[1]); } sub set_type { $_[0]->set('type', $_[1]); } sub set_sortkey { $_[0]->set('sortkey', $_[1]); } +sub set_enter_bug { $_[0]->set('enter_bug', $_[1]); } sub set_is_active { $_[0]->set('is_active', $_[1]); } ############################### @@ -349,6 +353,7 @@ sub name { return $_[0]->{'name'}; } sub description { return $_[0]->{'description'}; } sub flag_type { return $_[0]->{'type'}; } sub sortkey { return $_[0]->{'sortkey'}; } +sub enter_bug { return $_[0]->{'enter_bug'}; } sub is_active { return $_[0]->{'is_active'}; } sub values { @@ -421,7 +426,6 @@ sub legal_values { return $_[0]->values; } sub custom { return 1; } sub in_new_bugmail { return 1; } sub obsolete { return 0; } -sub enter_bug { return 1; } sub buglist { return 1; } sub is_select { return 1; } sub is_abnormal { return 1; } diff --git a/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_edit.html.tmpl b/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_edit.html.tmpl index 0c4a443f9..f239791c7 100644 --- a/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_edit.html.tmpl +++ b/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_edit.html.tmpl @@ -97,6 +97,12 @@ var selected_components = [ + + Enter [% terms.Bug %] + + can be set on [% terms.bug %] creation + + Active diff --git a/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_list.html.tmpl b/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_list.html.tmpl index 6c2ecc915..e310bcee5 100644 --- a/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_list.html.tmpl +++ b/extensions/TrackingFlags/template/en/default/pages/tracking_flags_admin_list.html.tmpl @@ -9,9 +9,10 @@ [% PROCESS global/header.html.tmpl title = "Release Tracking Flags" style_urls = [ 'extensions/TrackingFlags/web/styles/admin.css' ] + javascript_urls = [ 'extensions/TrackingFlags/web/js/admin.js' ] %] - +
@@ -23,7 +24,9 @@ [% FOREACH flag = flags %] - +
Name
[% flag.name FILTER html %] @@ -50,7 +53,9 @@
-Add Flag + Add Flag | + +
[% INCLUDE global/footer.html.tmpl %] diff --git a/extensions/TrackingFlags/web/js/admin.js b/extensions/TrackingFlags/web/js/admin.js index 461ef7c63..e3eb81714 100644 --- a/extensions/TrackingFlags/web/js/admin.js +++ b/extensions/TrackingFlags/web/js/admin.js @@ -12,22 +12,26 @@ var Event = YAHOO.util.Event; Event.onDOMReady(function() { try { - if (!JSON) - JSON = YAHOO.lang.JSON; - - Event.addListener('flag_name', 'change', change_flag_name, Dom.get('flag_name')); - Event.addListener('flag_desc', 'change', change_string_value, Dom.get('flag_desc')); - Event.addListener('flag_type', 'change', change_select_value, Dom.get('flag_type')); - Event.addListener('flag_sort', 'change', change_int_value, Dom.get('flag_sort')); - - Event.addListener('product', 'change', function() { - if (Dom.get('product').value == '') - Dom.get('component').options.length = 0; - }); - - update_flag_values(); - update_flag_visibility(); - tag_missing_values(); + if (Dom.get('flag_list')) { + filter_flag_list(Dom.get('filter').checked); + } + else { + if (!JSON) + JSON = YAHOO.lang.JSON; + Event.addListener('flag_name', 'change', change_flag_name, Dom.get('flag_name')); + Event.addListener('flag_desc', 'change', change_string_value, Dom.get('flag_desc')); + Event.addListener('flag_type', 'change', change_select_value, Dom.get('flag_type')); + Event.addListener('flag_sort', 'change', change_int_value, Dom.get('flag_sort')); + + Event.addListener('product', 'change', function() { + if (Dom.get('product').value == '') + Dom.get('component').options.length = 0; + }); + + update_flag_values(); + update_flag_visibility(); + tag_missing_values(); + } } catch(e) { console.error(e); } @@ -36,349 +40,367 @@ Event.onDOMReady(function() { // field function change_flag_name(e, o) { - change_string_value(e, o); - if (o.value == '') - return; - o.value = o.value.replace(/[^a-z0-9_]/g, '_'); - if (!o.value.match(/^cf_/)) - o.value = 'cf_' + o.value; - if (Dom.get('flag_desc').value == '') { - var desc = o.value; - desc = desc.replace(/^cf_/, ''); - desc = desc.replace(/_/g, '-'); - Dom.get('flag_desc').value = desc; - tag_missing_value(Dom.get('flag_desc')); - } + change_string_value(e, o); + if (o.value == '') + return; + o.value = o.value.replace(/[^a-z0-9_]/g, '_'); + if (!o.value.match(/^cf_/)) + o.value = 'cf_' + o.value; + if (Dom.get('flag_desc').value == '') { + var desc = o.value; + desc = desc.replace(/^cf_/, ''); + desc = desc.replace(/_/g, '-'); + Dom.get('flag_desc').value = desc; + tag_missing_value(Dom.get('flag_desc')); + } } function inc_field(id, amount) { - var el = Dom.get(id); - el.value = el.value.match(/-?\d+/) * 1 + amount; - change_int_value(null, el); + var el = Dom.get(id); + el.value = el.value.match(/-?\d+/) * 1 + amount; + change_int_value(null, el); } // values function update_flag_values() { - // update the values table from the flag_values global + // update the values table from the flag_values global - var tbl = Dom.get('flag_values'); - if (!tbl) - return; - - // remove current entries - while (tbl.rows.length > 3) { - tbl.deleteRow(2); - } + var tbl = Dom.get('flag_values'); + if (!tbl) + return; - // add all entries - - for (var i = 0, l = flag_values.length; i < l; i++) { - var value = flag_values[i]; - - var row = tbl.insertRow(2 + i); - var cell; - - // value - cell = row.insertCell(0); - if (value.value == '---') { - cell.innerHTML = '---'; - } else { - var inputEl = document.createElement('input'); - inputEl.id = 'value_' + i; - inputEl.type = 'text'; - inputEl.className = 'option_value'; - inputEl.value = value.value; - Event.addListener(inputEl, 'change', change_string_value, inputEl); - Event.addListener(inputEl, 'change', function(e, o) { - flag_values[o.id.match(/\d+$/)].value = o.value; - tag_invalid_values(); - }, inputEl); - Event.addListener(inputEl, 'keyup', function(e, o) { - if ((e.key || e.keyCode) == 27 && o.value == '') - remove_value(o.id.match(/\d+$/)); - }, inputEl); - cell.appendChild(inputEl); + // remove current entries + while (tbl.rows.length > 3) { + tbl.deleteRow(2); } - // setter - cell = row.insertCell(1); - var selectEl = document.createElement('select'); - selectEl.id = 'setter_' + i; - Event.addListener(selectEl, 'change', change_select_value, selectEl); - var optionEl = document.createElement('option'); - optionEl.value = ''; - selectEl.appendChild(optionEl); - for (var j = 0, m = groups.length; j < m; j++) { - var group = groups[j]; - optionEl = document.createElement('option'); - optionEl.value = group.id; - optionEl.innerHTML = YAHOO.lang.escapeHTML(group.name); - optionEl.selected = group.id == value.setter_group_id; - selectEl.appendChild(optionEl); - } - Event.addListener(selectEl, 'change', function(e, o) { - flag_values[o.id.match(/\d+$/)].setter_group_id = o.value; - tag_invalid_values(); - }, selectEl); - cell.appendChild(selectEl); - - // active - cell = row.insertCell(2); - if (value.value == '---') { - cell.innerHTML = 'Yes'; - } else { - var inputEl = document.createElement('input'); - inputEl.type = 'checkbox'; - inputEl.id = 'is_active_' + i; - inputEl.checked = value.is_active; - Event.addListener(inputEl, 'change', function(e, o) { - flag_values[o.id.match(/\d+$/)].is_active = o.checked; - }, inputEl); - cell.appendChild(inputEl); + // add all entries + + for (var i = 0, l = flag_values.length; i < l; i++) { + var value = flag_values[i]; + + var row = tbl.insertRow(2 + i); + var cell; + + // value + cell = row.insertCell(0); + if (value.value == '---') { + cell.innerHTML = '---'; + } + else { + var inputEl = document.createElement('input'); + inputEl.id = 'value_' + i; + inputEl.type = 'text'; + inputEl.className = 'option_value'; + inputEl.value = value.value; + Event.addListener(inputEl, 'change', change_string_value, inputEl); + Event.addListener(inputEl, 'change', function(e, o) { + flag_values[o.id.match(/\d+$/)].value = o.value; + tag_invalid_values(); + }, inputEl); + Event.addListener(inputEl, 'keyup', function(e, o) { + if ((e.key || e.keyCode) == 27 && o.value == '') + remove_value(o.id.match(/\d+$/)); + }, inputEl); + cell.appendChild(inputEl); + } + + // setter + cell = row.insertCell(1); + var selectEl = document.createElement('select'); + selectEl.id = 'setter_' + i; + Event.addListener(selectEl, 'change', change_select_value, selectEl); + var optionEl = document.createElement('option'); + optionEl.value = ''; + selectEl.appendChild(optionEl); + for (var j = 0, m = groups.length; j < m; j++) { + var group = groups[j]; + optionEl = document.createElement('option'); + optionEl.value = group.id; + optionEl.innerHTML = YAHOO.lang.escapeHTML(group.name); + optionEl.selected = group.id == value.setter_group_id; + selectEl.appendChild(optionEl); + } + Event.addListener(selectEl, 'change', function(e, o) { + flag_values[o.id.match(/\d+$/)].setter_group_id = o.value; + tag_invalid_values(); + }, selectEl); + cell.appendChild(selectEl); + + // active + cell = row.insertCell(2); + if (value.value == '---') { + cell.innerHTML = 'Yes'; + } + else { + var inputEl = document.createElement('input'); + inputEl.type = 'checkbox'; + inputEl.id = 'is_active_' + i; + inputEl.checked = value.is_active; + Event.addListener(inputEl, 'change', function(e, o) { + flag_values[o.id.match(/\d+$/)].is_active = o.checked; + }, inputEl); + cell.appendChild(inputEl); + } + + // actions + cell = row.insertCell(3); + var html = + '[' + + (i == 0 + ? ' - ' + : ' Δ ' + ) + + '|' + + (i == l - 1 + ? ' - ' + : '' + ); + if (value.value != '---') + html += '| Remove'; + html += ']'; + cell.innerHTML = html; } - // actions - cell = row.insertCell(3); - var html = - '[' + - (i == 0 - ? ' - ' - : ' Δ ' - ) + - '|' + - ( i == l - 1 - ? ' - ' - : '' - ); - if (value.value != '---') - html += '| Remove'; - html += ']'; - cell.innerHTML = html; - } - - tag_invalid_values(); + tag_invalid_values(); } function tag_invalid_values() { - // reset - for (var i = 0, l = flag_values.length; i < l; i++) { - Dom.removeClass('value_' + i, 'admin_error'); - } + // reset + for (var i = 0, l = flag_values.length; i < l; i++) { + Dom.removeClass('value_' + i, 'admin_error'); + } - for (var i = 0, l = flag_values.length; i < l; i++) { - // missing - if (flag_values[i].value == '') - Dom.addClass('value_' + i, 'admin_error'); - if (!flag_values[i].setter_group_id) - Dom.addClass('setter_' + i, 'admin_error'); - - // duplicate values - for (var j = i; j < l; j++) { - if (i != j && flag_values[i].value == flag_values[j].value) { - Dom.addClass('value_' + i, 'admin_error'); - Dom.addClass('value_' + j, 'admin_error'); - } + for (var i = 0, l = flag_values.length; i < l; i++) { + // missing + if (flag_values[i].value == '') + Dom.addClass('value_' + i, 'admin_error'); + if (!flag_values[i].setter_group_id) + Dom.addClass('setter_' + i, 'admin_error'); + + // duplicate values + for (var j = i; j < l; j++) { + if (i != j && flag_values[i].value == flag_values[j].value) { + Dom.addClass('value_' + i, 'admin_error'); + Dom.addClass('value_' + j, 'admin_error'); + } + } } - } } function value_move_up(idx) { - if (idx == 0) - return; - var tmp = flag_values[idx]; - flag_values[idx] = flag_values[idx - 1]; - flag_values[idx - 1] = tmp; - update_flag_values(); + if (idx == 0) + return; + var tmp = flag_values[idx]; + flag_values[idx] = flag_values[idx - 1]; + flag_values[idx - 1] = tmp; + update_flag_values(); } function value_move_down(idx) { - if (idx == flag_values.length - 1) - return; - var tmp = flag_values[idx]; - flag_values[idx] = flag_values[idx + 1]; - flag_values[idx + 1] = tmp; - update_flag_values(); + if (idx == flag_values.length - 1) + return; + var tmp = flag_values[idx]; + flag_values[idx] = flag_values[idx + 1]; + flag_values[idx + 1] = tmp; + update_flag_values(); } function add_value() { - var value = new Object(); - value.id = 0; - value.value = ''; - value.setter_group_id = ''; - value.is_active = true; - var idx = flag_values.length; - flag_values[idx] = value; - update_flag_values(); - Dom.get('value_' + idx).focus(); + var value = new Object(); + value.id = 0; + value.value = ''; + value.setter_group_id = ''; + value.is_active = true; + var idx = flag_values.length; + flag_values[idx] = value; + update_flag_values(); + Dom.get('value_' + idx).focus(); } function remove_value(idx) { - flag_values.splice(idx, 1); - update_flag_values(); + flag_values.splice(idx, 1); + update_flag_values(); } function update_value(e, o) { - var i = o.value.match(/\d+/); - flag_values[i].value = o.value; + var i = o.value.match(/\d+/); + flag_values[i].value = o.value; } // visibility function update_flag_visibility() { - // update the visibility table from the flag_visibility global + // update the visibility table from the flag_visibility global - var tbl = Dom.get('flag_visibility'); - if (!tbl) - return; + var tbl = Dom.get('flag_visibility'); + if (!tbl) + return; - // remove current entries - while (tbl.rows.length > 3) { - tbl.deleteRow(2); - } + // remove current entries + while (tbl.rows.length > 3) { + tbl.deleteRow(2); + } - // show something if there aren't any components + // show something if there aren't any components - if (!flag_visibility.length) { - var row = tbl.insertRow(2); - var cell = row.insertCell(0); - cell.innerHTML = 'missing'; - } + if (!flag_visibility.length) { + var row = tbl.insertRow(2); + var cell = row.insertCell(0); + cell.innerHTML = 'missing'; + } - // add all entries + // add all entries - for (var i = 0, l = flag_visibility.length; i < l; i++) { - var visibility = flag_visibility[i]; + for (var i = 0, l = flag_visibility.length; i < l; i++) { + var visibility = flag_visibility[i]; - var row = tbl.insertRow(2 + i); - var cell; + var row = tbl.insertRow(2 + i); + var cell; - // product - cell = row.insertCell(0); - cell.innerHTML = visibility.product; + // product + cell = row.insertCell(0); + cell.innerHTML = visibility.product; - // component - cell = row.insertCell(1); - cell.innerHTML = visibility.component - ? visibility.component - : '-- Any --'; + // component + cell = row.insertCell(1); + cell.innerHTML = visibility.component + ? visibility.component + : '-- Any --'; - // actions - cell = row.insertCell(2); - cell.innerHTML = '[ Remove ]'; - } + // actions + cell = row.insertCell(2); + cell.innerHTML = '[ Remove ]'; + } } function add_visibility() { - // validation - var product = Dom.get('product').value; - var component = Dom.get('component').value; - if (!product) { - alert('Please select a product.'); - return; - } + // validation + var product = Dom.get('product').value; + var component = Dom.get('component').value; + if (!product) { + alert('Please select a product.'); + return; + } - // don't allow duplicates - for (var i = 0, l = flag_visibility.length; i < l; i++) { - if (flag_visibility[i].product == product && flag_visibility[i].component == component) { - Dom.get('product').value = ''; - Dom.get('component').options.length = 0; - return; + // don't allow duplicates + for (var i = 0, l = flag_visibility.length; i < l; i++) { + if (flag_visibility[i].product == product && flag_visibility[i].component == component) { + Dom.get('product').value = ''; + Dom.get('component').options.length = 0; + return; + } } - } - if (component == '') { - // if we're adding an "any" component, remove non-any components - for (var i = 0; i < flag_visibility.length; i++) { - var visibility = flag_visibility[i]; - if (visibility.product == product) { - flag_visibility.splice(i, 1); - i--; - } + if (component == '') { + // if we're adding an "any" component, remove non-any components + for (var i = 0; i < flag_visibility.length; i++) { + var visibility = flag_visibility[i]; + if (visibility.product == product) { + flag_visibility.splice(i, 1); + i--; + } + } } - } else { - // don't add non-any components if an "any" component exists - for (var i = 0, l = flag_visibility.length; i < l; i++) { - var visibility = flag_visibility[i]; - if (visibility.product == product && !visibility.component) { - return; - } + else { + // don't add non-any components if an "any" component exists + for (var i = 0, l = flag_visibility.length; i < l; i++) { + var visibility = flag_visibility[i]; + if (visibility.product == product && !visibility.component) + return; + } } - } - // add to model - var visibility = new Object(); - visibility.id = 0; - visibility.product = product; - visibility.component = component; - flag_visibility[flag_visibility.length] = visibility; - - // update ui - update_flag_visibility(); - Dom.get('product').value = ''; - Dom.get('component').options.length = 0; + // add to model + var visibility = new Object(); + visibility.id = 0; + visibility.product = product; + visibility.component = component; + flag_visibility[flag_visibility.length] = visibility; + + // update ui + update_flag_visibility(); + Dom.get('product').value = ''; + Dom.get('component').options.length = 0; } function remove_visibility(idx) { - flag_visibility.splice(idx, 1); - update_flag_visibility(); + flag_visibility.splice(idx, 1); + update_flag_visibility(); } // validation and submission function tag_missing_values() { - var els = document.getElementsByTagName('input'); - for (var i = 0, l = els.length; i < l; i++) { - var el = els[i]; - if (el.id.match(/^(flag|value)_/)) - tag_missing_value(el); - } - tag_missing_value(Dom.get('flag_type')); + var els = document.getElementsByTagName('input'); + for (var i = 0, l = els.length; i < l; i++) { + var el = els[i]; + if (el.id.match(/^(flag|value)_/)) + tag_missing_value(el); + } + tag_missing_value(Dom.get('flag_type')); } function tag_missing_value(el) { - el.value == '' - ? Dom.addClass(el, 'admin_error') - : Dom.removeClass(el, 'admin_error'); + el.value == '' + ? Dom.addClass(el, 'admin_error') + : Dom.removeClass(el, 'admin_error'); } function delete_confirm(flag) { - if (confirm('Are you sure you want to delete the flag ' + flag + ' ?')) { - Dom.get('delete').value = 1; - return true; - } else { - return false; - } + if (confirm('Are you sure you want to delete the flag ' + flag + ' ?')) { + Dom.get('delete').value = 1; + return true; + } + else { + return false; + } } function on_submit() { - if (Dom.get('delete') && Dom.get('delete').value) - return; - // let perl manage most validation errors, because they are clearly marked - // the exception is an empty visibility list, so catch that here as well - if (!flag_visibility.length) { - alert('You must provide at least one product for visibility.'); - return false; - } + if (Dom.get('delete') && Dom.get('delete').value) + return; + // let perl manage most validation errors, because they are clearly marked + // the exception is an empty visibility list, so catch that here as well + if (!flag_visibility.length) { + alert('You must provide at least one product for visibility.'); + return false; + } - Dom.get('values').value = JSON.stringify(flag_values); - Dom.get('visibility').value = JSON.stringify(flag_visibility); - return true; + Dom.get('values').value = JSON.stringify(flag_values); + Dom.get('visibility').value = JSON.stringify(flag_visibility); + return true; +} + +// flag list + +function filter_flag_list(show_disabled) { + var rows = Dom.getElementsByClassName('flag_row', 'tr', 'flag_list'); + for (var i = 0, l = rows.length; i < l; i++) { + if (Dom.hasClass(rows[i], 'is_disabled')) { + if (show_disabled) { + Dom.removeClass(rows[i], 'bz_default_hidden'); + } + else { + Dom.addClass(rows[i], 'bz_default_hidden'); + } + } + } } // utils function change_string_value(e, o) { - o.value = YAHOO.lang.trim(o.value); - tag_missing_value(o); + o.value = YAHOO.lang.trim(o.value); + tag_missing_value(o); } function change_int_value(e, o) { - o.value = o.value.match(/-?\d+/); - tag_missing_value(o); + o.value = o.value.match(/-?\d+/); + tag_missing_value(o); } function change_select_value(e, o) { - tag_missing_value(o); + tag_missing_value(o); } - -- cgit v1.2.3-24-g4f1b