Use same URI for both types of fieldvaluecontrol.cgi -- they're identical
parent
c2c97c06af
commit
fddf47e859
11
Bugzilla.pm
11
Bugzilla.pm
|
@ -981,17 +981,6 @@ sub fieldvaluecontrol
|
|||
return $cache->{fieldvaluecontrol};
|
||||
}
|
||||
|
||||
sub full_json_visibility
|
||||
{
|
||||
my $class = shift;
|
||||
my $qv = {};
|
||||
for ($class->get_fields({ is_select => 1, obsolete => 0 }))
|
||||
{
|
||||
$qv->{$_->name} = $_->json_visibility;
|
||||
}
|
||||
return $qv;
|
||||
}
|
||||
|
||||
sub active_custom_fields
|
||||
{
|
||||
my $class = shift;
|
||||
|
|
|
@ -22,7 +22,7 @@ my $ctype = 'text/javascript'.(Bugzilla->params->{utf8} ? '; charset=utf-8' : ''
|
|||
Bugzilla->cache_fields;
|
||||
my $touched = datetime_from(Bugzilla->request_cache->{fields_delta_ts})->epoch;
|
||||
|
||||
my $user_tag = 'JS'.($args->{type}||'x').($user->id||0);
|
||||
my $user_tag = 'JSmeta'.($user->id||0);
|
||||
my ($req_tag) = ($ENV{HTTP_IF_NONE_MATCH} || '') =~ /(JS[a-z0-9_]{3,})/iso;
|
||||
|
||||
if ($ENV{HTTP_IF_MODIFIED_SINCE} && $user_tag eq $req_tag)
|
||||
|
@ -49,23 +49,14 @@ Bugzilla->send_header(
|
|||
-cache_control => 'private, no-cache, must-revalidate',
|
||||
);
|
||||
|
||||
# FIXME Use same URI for both types, because they are basically identical
|
||||
$args->{type} ||= '';
|
||||
if ($args->{type} eq 'search')
|
||||
my $json = {};
|
||||
for (Bugzilla->get_fields({ is_select => 1, obsolete => 0 }))
|
||||
{
|
||||
my $json = bz_encode_json(Bugzilla->full_json_visibility);
|
||||
print "var qfVisCached = '$user_tag-".time."';
|
||||
var qfVisibility = $json;
|
||||
addListener(window, 'load', initQueryformFields);
|
||||
";
|
||||
}
|
||||
elsif ($args->{type} eq 'bug')
|
||||
{
|
||||
my $json = bz_encode_json(Bugzilla->full_json_visibility);
|
||||
print "var show_fields_cached = '$user_tag-".time."';
|
||||
var show_fields = $json;
|
||||
addListener(window, 'load', initControlledFields);
|
||||
";
|
||||
$json->{$_->name} = $_->json_visibility;
|
||||
}
|
||||
|
||||
$json = bz_encode_json($json);
|
||||
print "var field_metadata_cached = '$user_tag-".time."';
|
||||
var field_metadata = $json;
|
||||
";
|
||||
exit;
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
* Author(s): Vitaliy Filippov <vitalif@mail.ru>
|
||||
*/
|
||||
|
||||
// This is set to window.onload event from fieldvaluecontrol.cgi
|
||||
addListener(window, 'load', initControlledFields);
|
||||
|
||||
function initControlledFields()
|
||||
{
|
||||
// Initialise fields in correct order (starting with top-most controller fields)
|
||||
|
@ -13,14 +14,14 @@ function initControlledFields()
|
|||
if (f && !initialised[f])
|
||||
{
|
||||
initialised[f] = true;
|
||||
doInit(show_fields[f].visibility_field);
|
||||
doInit(show_fields[f].value_field);
|
||||
doInit(show_fields[f].null_field);
|
||||
doInit(show_fields[f].default_field);
|
||||
doInit(field_metadata[f].visibility_field);
|
||||
doInit(field_metadata[f].value_field);
|
||||
doInit(field_metadata[f].null_field);
|
||||
doInit(field_metadata[f].default_field);
|
||||
initControllerField(f);
|
||||
}
|
||||
};
|
||||
for (var i in show_fields)
|
||||
for (var i in field_metadata)
|
||||
{
|
||||
doInit(i);
|
||||
}
|
||||
|
@ -31,10 +32,10 @@ function initControllerField(i)
|
|||
var f = document.getElementById(i);
|
||||
if (f)
|
||||
{
|
||||
if (document.forms['Create'] && show_fields[i].default_value)
|
||||
if (document.forms['Create'] && field_metadata[i].default_value)
|
||||
{
|
||||
// Select global default value before selecting dependent ones
|
||||
f._oldDefault = setFieldValue(f, show_fields[i].default_value);
|
||||
f._oldDefault = setFieldValue(f, field_metadata[i].default_value);
|
||||
}
|
||||
handleControllerField(document.forms['Create'] ? null : 'INITIAL', f);
|
||||
addListener(f, 'change', handleControllerField_this);
|
||||
|
@ -131,9 +132,9 @@ function handleControllerField(e, controller)
|
|||
var vis, field_container, id;
|
||||
var opt = getSelectedIds(controller);
|
||||
// Show/hide fields
|
||||
for (var controlled_id in show_fields[controller.id]['fields'])
|
||||
for (var controlled_id in field_metadata[controller.id]['fields'])
|
||||
{
|
||||
vis = checkValueVisibility(opt, show_fields[controller.id]['fields'][controlled_id]);
|
||||
vis = checkValueVisibility(opt, field_metadata[controller.id]['fields'][controlled_id]);
|
||||
for (var i in { row: 1, container: 1, label: 1 })
|
||||
{
|
||||
field_container = document.getElementById('field_' + i + '_' + controlled_id);
|
||||
|
@ -148,21 +149,21 @@ function handleControllerField(e, controller)
|
|||
return;
|
||||
}
|
||||
var item, controlled, copt, controlled_value;
|
||||
for (var controlled_id in show_fields[controller.id]['values'])
|
||||
for (var controlled_id in field_metadata[controller.id]['values'])
|
||||
{
|
||||
// It is more correct to match selected values on name, because a
|
||||
// target_milestone/version/component with the same name may exist for a different product
|
||||
controlled = document.getElementById(controlled_id);
|
||||
copt = getSelectedNames(controlled);
|
||||
bz_clearOptions(controlled);
|
||||
if (show_fields[controlled.id].nullable && !controlled.multiple)
|
||||
if (field_metadata[controlled.id].nullable && !controlled.multiple)
|
||||
{
|
||||
bz_createOptionInSelect(controlled, '---', '');
|
||||
}
|
||||
for (var i in show_fields[controlled.id]['legal'])
|
||||
for (var i in field_metadata[controlled.id]['legal'])
|
||||
{
|
||||
controlled_value = show_fields[controlled.id]['legal'][i];
|
||||
vis = checkValueVisibility(opt, show_fields[controller.id]['values'][controlled_id][controlled_value[0]]);
|
||||
controlled_value = field_metadata[controlled.id]['legal'][i];
|
||||
vis = checkValueVisibility(opt, field_metadata[controller.id]['values'][controlled_id][controlled_value[0]]);
|
||||
if (vis)
|
||||
{
|
||||
item = bz_createOptionInSelect(controlled, controlled_value[1], controlled_value[1]);
|
||||
|
@ -175,12 +176,12 @@ function handleControllerField(e, controller)
|
|||
}
|
||||
}
|
||||
// Enable/disable NULL in single-select fields
|
||||
for (var controlled_id in show_fields[controller.id]['null'])
|
||||
for (var controlled_id in field_metadata[controller.id]['null'])
|
||||
{
|
||||
controlled = document.getElementById(controlled_id);
|
||||
if (controlled && !controlled.multiple && show_fields[controlled.id] && show_fields[controlled.id].nullable)
|
||||
if (controlled && !controlled.multiple && field_metadata[controlled.id] && field_metadata[controlled.id].nullable)
|
||||
{
|
||||
vis = checkValueVisibility(opt, show_fields[controller.id]['null'][controlled_id]);
|
||||
vis = checkValueVisibility(opt, field_metadata[controller.id]['null'][controlled_id]);
|
||||
item = controlled.options[0].value == '';
|
||||
if (vis && !item)
|
||||
{
|
||||
|
@ -195,7 +196,7 @@ function handleControllerField(e, controller)
|
|||
}
|
||||
// Select default values in controlled fields
|
||||
var v;
|
||||
for (var controlled_id in show_fields[controller.id]['defaults'])
|
||||
for (var controlled_id in field_metadata[controller.id]['defaults'])
|
||||
{
|
||||
controlled = document.getElementById(controlled_id);
|
||||
if (!controlled)
|
||||
|
@ -235,10 +236,10 @@ function handleControllerField(e, controller)
|
|||
// else means we are on creation form, so also select
|
||||
if (!diff)
|
||||
{
|
||||
v = show_fields[controller.id].default_value;
|
||||
v = field_metadata[controller.id].default_value;
|
||||
for (var i in opt)
|
||||
{
|
||||
v = show_fields[controller.id]['defaults'][controlled_id][i];
|
||||
v = field_metadata[controller.id]['defaults'][controlled_id][i];
|
||||
}
|
||||
if (v)
|
||||
{
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
|
||||
JavaScript code to hide and show values of select fields on the query form.
|
||||
I.e. hide dependent values when their controlling value is hidden.
|
||||
This code uses client-side cached qfVisibility hash data generated by
|
||||
fieldvaluecontrol.cgi?type=search.
|
||||
This code uses client-side cached field_metadata hash data generated by
|
||||
fieldvaluecontrol.cgi.
|
||||
|
||||
qfVisibility format: {
|
||||
field_metadata format: {
|
||||
// for each field:
|
||||
field_name : {
|
||||
// all legal values for the field:
|
||||
|
@ -51,10 +51,11 @@ respecting this "list of active IDs".
|
|||
|
||||
var qfHandling = {};
|
||||
|
||||
// This is set to onload event from fieldvaluecontrol.cgi
|
||||
addListener(window, 'load', initQueryformFields);
|
||||
|
||||
function initQueryformFields()
|
||||
{
|
||||
for (var i in qfVisibility)
|
||||
for (var i in field_metadata)
|
||||
{
|
||||
if (!qfHandling[i])
|
||||
{
|
||||
|
@ -163,7 +164,7 @@ function handleQueryformField(event, controller)
|
|||
var controlled, controlled_selected;
|
||||
var vis, item, legal, name2id, name2id_order, valueVD;
|
||||
qfHandling[controller.id] = true; // prevent double-action during init
|
||||
var VD = qfVisibility[controller.id];
|
||||
var VD = field_metadata[controller.id];
|
||||
var visibility_selected = getQueryformSelectedIds(controller);
|
||||
var ids = {};
|
||||
for (var i in VD.fields)
|
||||
|
@ -199,7 +200,7 @@ function handleQueryformField(event, controller)
|
|||
// Loop over all legal values and remember currently
|
||||
// visible IDs inside name2id preserving their original
|
||||
// order using name2id_order
|
||||
legal = qfVisibility[controlled_id].legal;
|
||||
legal = field_metadata[controlled_id].legal;
|
||||
name2id = {};
|
||||
name2id_order = [];
|
||||
if (qfCheckVisibility(VD.fields[controlled_id], visibility_selected))
|
||||
|
@ -221,7 +222,7 @@ function handleQueryformField(event, controller)
|
|||
}
|
||||
}
|
||||
// Create NULL option
|
||||
if (name2id_order.length > 0 && qfVisibility[controlled_id].nullable)
|
||||
if (name2id_order.length > 0 && field_metadata[controlled_id].nullable)
|
||||
{
|
||||
item = bz_createOptionInSelect(controlled, '---', '---');
|
||||
if (controlled_selected['---'])
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
style_urls = [ 'skins/standard/create_attachment.css', 'skins/standard/calendar.css' ]
|
||||
javascript_urls = [
|
||||
"js/attachment.js", "js/bug.js", "js/enter_bug.js", "js/field.js", "js/calendar.js",
|
||||
"js/TUI.js", "js/bug-visibility.js", "fieldvaluecontrol.cgi?type=bug&user=${Bugzilla.user.id}"
|
||||
"js/TUI.js", "js/bug-visibility.js", "fieldvaluecontrol.cgi?user=${Bugzilla.user.id}"
|
||||
]
|
||||
%]
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
[% title = "$terms.Bug $bug.bug_id – $filtered_desc – $filtered_prodcomp – $filtered_stat" %]
|
||||
[% header = "$terms.Bug $bug.bug_id" %]
|
||||
[% header_addl_info = "Last modified: $filtered_timestamp" %]
|
||||
[% javascript_urls = [ "js/field.js", "js/calendar.js", "js/bug-visibility.js?rev=1397", "fieldvaluecontrol.cgi?type=bug&user=${Bugzilla.user.id}" ] %]
|
||||
[% javascript_urls = [ "js/field.js", "js/calendar.js", "js/bug-visibility.js?rev=1397", "fieldvaluecontrol.cgi?user=${Bugzilla.user.id}" ] %]
|
||||
[% style_urls = [ "skins/standard/calendar.css", "skins/standard/show_bug.css", "skins/standard/comments.css" ] %]
|
||||
[% doc_section = "bug_page.html" %]
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
<script type="text/javascript" src="js/query-visibility.js"></script>
|
||||
<script type="text/javascript" src="js/field.js"></script>
|
||||
<script type="text/javascript" src="fieldvaluecontrol.cgi?type=search&user=[% Bugzilla.user.id %]"></script>
|
||||
<script type="text/javascript" src="fieldvaluecontrol.cgi?user=[% Bugzilla.user.id %]"></script>
|
||||
<script type="text/javascript" src="js/query-form.js"></script>
|
||||
|
||||
[% SET checkwidths = [] %]
|
||||
|
|
Loading…
Reference in New Issue