/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * This Source Code Form is "Incompatible With Secondary Licenses", as * defined by the Mozilla Public License, v. 2.0. */ var flagEl; var productEl; var trackingEl; var selectedFields; // events function onFieldToggle(cbEl, id) { if (cbEl.checked) { $('#field_' + id + '_td').removeClass('disabled'); selectedFields['field_' + id] = id; } else { $('#field_' + id + '_td').addClass('disabled'); selectedFields['field_' + id] = false; } $('#field_' + id + '_select').attr('disabled', !cbEl.checked); serialiseForm(); } function onProductChange() { var product = productEl.value; var productData = product == '0' ? getFlagByName(flagEl.value) : getProductById(product); var html = ''; selectedFields = []; if (productData) { // update status fields html = ''; for(var i = 0, l = productData.fields.length; i < l; i++) { var field = getFieldById(productData.fields[i]); selectedFields['field_' + field.id] = false; html += '' + '' + '' + '' + ''; } html += '
' + '' + '' + '' + '' + '' + '
'; } trackingEl.innerHTML = html; serialiseForm(); } function onFlagChange() { var flag = flagEl.value; var flagData = getFlagByName(flag); productEl.options.length = 0; if (flagData) { // update product select var currentProduct = productEl.value; productEl.options[0] = new Option('(Any Product)', '0'); for(var i = 0, l = flagData.products.length; i < l; i++) { var product = getProductById(flagData.products[i]); var n = productEl.length; productEl.options[n] = new Option(product.name, product.id); productEl.options[n].selected = product.id == currentProduct; } } onProductChange(); } // form function selectAllFields() { for(var i = 0, l = fields_data.length; i < l; i++) { var cb = $('#field_' + fields_data[i].id + '_cb')[0]; if (!cb) continue; cb.checked = true; onFieldToggle(cb, fields_data[i].id); } serialiseForm(); } function selectNoFields() { for(var i = 0, l = fields_data.length; i < l; i++) { var cb = $('#field_' + fields_data[i].id + '_cb')[0]; if (!cb) continue; cb.checked = false; onFieldToggle(cb, fields_data[i].id); } serialiseForm(); } function invertFields() { for(var i = 0, l = fields_data.length; i < l; i++) { var el = $('#field_' + fields_data[i].id + '_select')[0]; if (!el) continue; if (el.value == '+') { el.options[1].selected = true; } else { el.options[0].selected = true; } } serialiseForm(); } function onFormSubmit() { if ($('#is_custom').is(':checked') && (!$('#from').val() || !$('#to').val())) { alert('You must enter both the start and end dates.'); return false; } serialiseForm(); return true; } function onFormReset() { deserialiseForm(''); } function selectRangeType() { if ($('#is_custom').is(':checked')) { $('#custom_range').show(); $('#fixed_range').hide(); } else { $('#custom_range').hide(); $('#fixed_range').show(); } serialiseForm(); } function serialiseForm() { var q = flagEl.value + ':' + $('#flag_value').val() + ':'; if ($('#is_custom').is(':checked')) { var from = $('#from').val(); var to = $('#to').val(); q = q + from.replace(/-/g, '') + '-' + to.replace(/-/g, ''); } else { q = q + $('#range').val(); } q = q + ':' + productEl.value + ':' + $('#op').val() + ':'; for(var id in selectedFields) { if (selectedFields[id]) { q += selectedFields[id] + $('#' + id + '_select').val() + ':'; } } $('#q').val(q); var is_custom = $('#is_custom').is(':checked') ? 1 : 0; $('#bookmark').attr('href', 'page.cgi?id=release_tracking_report.html&is_custom=' + is_custom + '&q=' + encodeURIComponent(q)); } function deserialiseForm(q) { var parts = q.split(/:/); selectValue(flagEl, parts[0]); onFlagChange(); selectValue($('#flag_value')[0], parts[1]); if (!selectValue($('#range')[0], parts[2]) && parts[2]) { var match = parts[2].match(/^(\d\d\d\d)(\d\d)(\d\d)-(\d\d\d\d)(\d\d)(\d\d)$/); if (match) { $('#from').val(match[1] + '-' + match[2] + '-' + match[3]); $('#to').val(match[4] + '-' + match[5] + '-' + match[6]); } } selectValue(productEl, parts[3]); onProductChange(); selectValue($('#op')[0], parts[4]); for(var i = 5, l = parts.length; i < l; i++) { var part = parts[i]; if (part.length) { var value = part.substr(part.length - 1, 1); var id = part.substr(0, part.length - 1); var cb = $('#field_' + id + '_cb')[0]; cb.checked = true; onFieldToggle(cb, id); selectValue($('#field_' + id + '_select')[0], value); } } serialiseForm(); } // utils $().ready(function() { flagEl = $('#flag')[0]; productEl = $('#product')[0]; trackingEl = $('#tracking_span')[0]; onFlagChange(); deserialiseForm(default_query); selectRangeType(); }); $(function() { $('.date_field').datetimepicker({ format: 'Y-m-d', datepicker: true, timepicker: false, scrollInput: false, lazyInit: false, closeOnDateSelect: true }); $('.date_field-img') .click(function(event) { var id = $(event.target).attr('id').replace(/-img$/, ''); $('#' + id).datetimepicker('show'); }); }); function getFlagByName(name) { for(var i = 0, l = flags_data.length; i < l; i++) { if (flags_data[i].name == name) return flags_data[i]; } } function getProductById(id) { for(var i = 0, l = products_data.length; i < l; i++) { if (products_data[i].id == id) return products_data[i]; } } function getFieldById(id) { for(var i = 0, l = fields_data.length; i < l; i++) { if (fields_data[i].id == id) return fields_data[i]; } } function selectValue(el, value) { for(var i = 0, l = el.options.length; i < l; i++) { if (el.options[i].value == value) { el.options[i].selected = true; return true; } } el.options[0].selected = true; return false; }