Chris@1517: /* Redmine - project management software Chris@1517: Copyright (C) 2006-2014 Jean-Philippe Lang */ Chris@1517: Chris@1517: function checkAll(id, checked) { Chris@1517: $('#'+id).find('input[type=checkbox]:enabled').attr('checked', checked); Chris@1517: } Chris@1517: Chris@1517: function toggleCheckboxesBySelector(selector) { Chris@1517: var all_checked = true; Chris@1517: $(selector).each(function(index) { Chris@1517: if (!$(this).is(':checked')) { all_checked = false; } Chris@1517: }); Chris@1517: $(selector).attr('checked', !all_checked); Chris@1517: } Chris@1517: Chris@1517: function showAndScrollTo(id, focus) { Chris@1517: $('#'+id).show(); Chris@1517: if (focus !== null) { Chris@1517: $('#'+focus).focus(); Chris@1517: } Chris@1517: $('html, body').animate({scrollTop: $('#'+id).offset().top}, 100); Chris@1517: } Chris@1517: Chris@1517: function toggleRowGroup(el) { Chris@1517: var tr = $(el).parents('tr').first(); Chris@1517: var n = tr.next(); Chris@1517: tr.toggleClass('open'); Chris@1517: while (n.length && !n.hasClass('group')) { Chris@1517: n.toggle(); Chris@1517: n = n.next('tr'); Chris@1517: } Chris@1517: } Chris@1517: Chris@1517: function collapseAllRowGroups(el) { Chris@1517: var tbody = $(el).parents('tbody').first(); Chris@1517: tbody.children('tr').each(function(index) { Chris@1517: if ($(this).hasClass('group')) { Chris@1517: $(this).removeClass('open'); Chris@1517: } else { Chris@1517: $(this).hide(); Chris@1517: } Chris@1517: }); Chris@1517: } Chris@1517: Chris@1517: function expandAllRowGroups(el) { Chris@1517: var tbody = $(el).parents('tbody').first(); Chris@1517: tbody.children('tr').each(function(index) { Chris@1517: if ($(this).hasClass('group')) { Chris@1517: $(this).addClass('open'); Chris@1517: } else { Chris@1517: $(this).show(); Chris@1517: } Chris@1517: }); Chris@1517: } Chris@1517: Chris@1517: function toggleAllRowGroups(el) { Chris@1517: var tr = $(el).parents('tr').first(); Chris@1517: if (tr.hasClass('open')) { Chris@1517: collapseAllRowGroups(el); Chris@1517: } else { Chris@1517: expandAllRowGroups(el); Chris@1517: } Chris@1517: } Chris@1517: Chris@1517: function toggleFieldset(el) { Chris@1517: var fieldset = $(el).parents('fieldset').first(); Chris@1517: fieldset.toggleClass('collapsed'); Chris@1517: fieldset.children('div').toggle(); Chris@1517: } Chris@1517: Chris@1517: function hideFieldset(el) { Chris@1517: var fieldset = $(el).parents('fieldset').first(); Chris@1517: fieldset.toggleClass('collapsed'); Chris@1517: fieldset.children('div').hide(); Chris@1517: } Chris@1517: Chris@1517: function initFilters() { Chris@1517: $('#add_filter_select').change(function() { Chris@1517: addFilter($(this).val(), '', []); Chris@1517: }); Chris@1517: $('#filters-table td.field input[type=checkbox]').each(function() { Chris@1517: toggleFilter($(this).val()); Chris@1517: }); Chris@1517: $('#filters-table td.field input[type=checkbox]').live('click', function() { Chris@1517: toggleFilter($(this).val()); Chris@1517: }); Chris@1517: $('#filters-table .toggle-multiselect').live('click', function() { Chris@1517: toggleMultiSelect($(this).siblings('select')); Chris@1517: }); Chris@1517: $('#filters-table input[type=text]').live('keypress', function(e) { Chris@1517: if (e.keyCode == 13) submit_query_form("query_form"); Chris@1517: }); Chris@1517: } Chris@1517: Chris@1517: function addFilter(field, operator, values) { Chris@1517: var fieldId = field.replace('.', '_'); Chris@1517: var tr = $('#tr_'+fieldId); Chris@1517: if (tr.length > 0) { Chris@1517: tr.show(); Chris@1517: } else { Chris@1517: buildFilterRow(field, operator, values); Chris@1517: } Chris@1517: $('#cb_'+fieldId).attr('checked', true); Chris@1517: toggleFilter(field); Chris@1517: $('#add_filter_select').val('').children('option').each(function() { Chris@1517: if ($(this).attr('value') == field) { Chris@1517: $(this).attr('disabled', true); Chris@1517: } Chris@1517: }); Chris@1517: } Chris@1517: Chris@1517: function buildFilterRow(field, operator, values) { Chris@1517: var fieldId = field.replace('.', '_'); Chris@1517: var filterTable = $("#filters-table"); Chris@1517: var filterOptions = availableFilters[field]; Chris@1517: if (!filterOptions) return; Chris@1517: var operators = operatorByType[filterOptions['type']]; Chris@1517: var filterValues = filterOptions['values']; Chris@1517: var i, select; Chris@1517: Chris@1517: var tr = $('').attr('id', 'tr_'+fieldId).html( Chris@1517: '' + Chris@1517: '' + Chris@1517: '  ' Chris@1517: ); Chris@1517: select = tr.find('td.values select'); Chris@1517: if (values.length > 1) { select.attr('multiple', true); } Chris@1517: for (i = 0; i < filterValues.length; i++) { Chris@1517: var filterValue = filterValues[i]; Chris@1517: var option = $('