/* # Mantis - a php based bugtracking system # Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org # Copyright (C) 2002 - 2011 MantisBT Team - mantisbt-dev@lists.sourceforge.net # Mantis is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Mantis is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Mantis. If not, see . */ /* * Collapsible element functions */ var g_collapse_clear = 1; // global code to determine how to set visibility var a = navigator.userAgent.indexOf("MSIE"); var style_display; if (a!= -1) { style_display = 'block'; } else { style_display = 'table-row'; } style_display = 'block'; $(document).ready( function() { $('.collapse-open').show(); $('.collapse-closed').hide(); $('.collapse-link').click( function(event) { event.preventDefault(); var id = $(this).attr('id'); var t_pos = id.indexOf('_closed_link' ); if( t_pos == -1 ) { t_pos = id.indexOf('_open_link' ); } var t_div = id.substring(0, t_pos ); ToggleDiv( t_div ); }); $('input[type=text].autocomplete').autocomplete({ source: function(request, callback) { var fieldName = $(this).attr('element').attr('id'); var postData = {}; postData['entrypoint']= fieldName + '_get_with_prefix'; postData[fieldName] = request.term; $.getJSON('xmlhttprequest.php', postData, function(data) { var results = []; $.each(data, function(i, value) { var item = {}; item.label = $('
').text(value).html(); item.value = value; results.push(item); }); callback(results); }); } }); $('a.dynamic-filter-expander').click(function(event) { event.preventDefault(); var fieldID = $(this).attr('id'); var targetID = fieldID + '_target'; var viewType = $('#filters_form_open input[name=view_type]').val(); $('#' + targetID).html('' + translations['loading'] + ""); $.ajax({ url: 'return_dynamic_filters.php', data: 'view_type=' + viewType + '&filter_target=' + fieldID, cache: false, context: $('#' + targetID), success: function(html) { $(this).html(html); } }); }); $('input.autofocus:first, select.autofocus:first, textarea.autofocus:first').focus(); /* * jQuery bug http://bugs.jquery.com/ticket/4283 prevents the check_all * functionality from working when the Content-Type is set to * application/xhtml+xml. */ var checkAllSelectors = ''; $(':checkbox.check_all').each(function() { var baseFieldName = $(this).attr('name').replace(/_all$/, ''); if (checkAllSelectors.length > 0) { checkAllSelectors += ', '; } checkAllSelectors += ':checkbox[name="' + baseFieldName + '[]"]'; }); if (checkAllSelectors.length > 0) { $(checkAllSelectors).click(function() { var fieldName = $(this).attr('name').replace(/\[\]/g, ''); var checkedCount = $(this).closest('form').find(':checkbox[name="' + fieldName + '[]"]:checked').length; var totalCount = $(this).closest('form').find(':checkbox[name="' + fieldName + '[]"]').length; var allSelected = checkedCount == totalCount; $(this).closest('form').find(':checkbox[name=' + fieldName + '_all]').attr('checked', allSelected); }); $(':checkbox.check_all').click(function() { var baseFieldName = $(this).attr('name').replace(/_all$/, ''); $(this).closest('form').find(':checkbox[name="' + baseFieldName + '[]"]').attr('checked', $(this).is(':checked')); }); } var stopwatch = { timerID: null, elapsedTime: 0, tick: function() { this.elapsedTime += 1000; var seconds = Math.floor(this.elapsedTime / 1000) % 60; var minutes = Math.floor(this.elapsedTime / 60000) % 60; var hours = Math.floor(this.elapsedTime / 3600000) % 60; if (seconds < 10) { seconds = '0' + seconds; } if (minutes < 10) { minutes = '0' + minutes; } if (hours < 10) { hours = '0' + hours; } $('input[type=text].stopwatch_time').attr('value', hours + ':' + minutes + ':' + seconds); this.start(); }, reset: function() { this.stop(); this.elapsedTime = 0; $('input[type=text].stopwatch_time').attr('value', '00:00:00'); }, start: function() { this.stop(); var self = this; this.timerID = window.setTimeout(function() { self.tick(); }, 1000); }, stop: function() { if (typeof this.timerID == 'number') { window.clearTimeout(this.timerID); delete this.timerID; } } } $('input[type=button].stopwatch_toggle').click(function() { if (stopwatch.elapsedTime == 0) { stopwatch.stop(); stopwatch.start(); $('input[type=button].stopwatch_toggle').attr('value', translations['time_tracking_stopwatch_stop']); } else if (typeof stopwatch.timerID == 'number') { stopwatch.stop(); $('input[type=button].stopwatch_toggle').attr('value', translations['time_tracking_stopwatch_start']); } else { stopwatch.start(); $('input[type=button].stopwatch_toggle').attr('value', translations['time_tracking_stopwatch_stop']); } }); $('input[type=button].stopwatch_reset').click(function() { stopwatch.reset(); $('input[type=button].stopwatch_toggle').attr('value', translations['time_tracking_stopwatch_start']); }); $('input[type=text].datetime').each(function(index, element) { $(this).after(''); Calendar.setup({ inputField: element.id, timeFormat: 24, showsTime: true, ifFormat: config['calendar_js_date_format'], button: element.id + '_datetime_button' }); }); $('.bug-jump').find('[name=bug_id]').focus( function() { var bug_label = $('.bug-jump-form').find('[name=bug_label]').val(); if( $(this).val() == bug_label ) { $(this).val(''); $(this).removeClass('field-default'); } }); $('.bug-jump').find('[name=bug_id]').blur( function() { var bug_label = $('.bug-jump-form').find('[name=bug_label]').val(); if( $(this).val() == '' ) { $(this).val(bug_label); $(this).addClass('field-default'); } }); $('[name=source_query_id]').change( function() { $(this).parent().submit(); }); $('#project-selector').children('[name=project_id]').change( function() { $('#form-set-project').submit(); }); $('#project-selector').children('.button').hide(); setBugLabel(); $('input[type=checkbox]#use_date_filters').live('click', function() { if (!$(this).is(':checked')) { $('div.filter-box select[name=start_year]').attr('disabled', 'disabled'); $('div.filter-box select[name=start_month]').attr('disabled', 'disabled'); $('div.filter-box select[name=start_day]').attr('disabled', 'disabled'); $('div.filter-box select[name=end_year]').attr('disabled', 'disabled'); $('div.filter-box select[name=end_month]').attr('disabled', 'disabled'); $('div.filter-box select[name=end_day]').attr('disabled', 'disabled'); } else { $('div.filter-box select[name=start_year]').removeAttr('disabled'); $('div.filter-box select[name=start_month]').removeAttr('disabled'); $('div.filter-box select[name=start_day]').removeAttr('disabled'); $('div.filter-box select[name=end_year]').removeAttr('disabled'); $('div.filter-box select[name=end_month]').removeAttr('disabled'); $('div.filter-box select[name=end_day]').removeAttr('disabled'); } }); /* For Period.php bundled with the core MantisGraph plugin */ $('#dates > input[type=image].datetime').hide(); $('#period_menu > select#interval').change(function() { if ($(this).val() == 10) { $('#dates > input[type=text].datetime').removeAttr('disabled'); $('#dates > input[type=image].datetime').show(); } else { $('#dates > input[type=text].datetime').attr('disabled', 'disabled'); $('#dates > input[type=image].datetime').hide(); } }); $('#tag_select').live('change', function() { var tagSeparator = $('#tag_separator').val(); var currentTagString = $('#tag_string').val(); var newTagOptionID = $(this).val(); var newTag = $('#tag_select option[value=' + newTagOptionID + ']').text(); if (currentTagString.indexOf(newTag) == -1) { if (currentTagString.length > 0) { $('#tag_string').val(currentTagString + tagSeparator + newTag); } else { $('#tag_string').val(newTag); } } $(this).val(0); }); }); function setBugLabel() { var bug_label = $('.bug-jump-form').find('[name=bug_label]').val(); var field = $('.bug-jump').find('[name=bug_id]'); if( field.val() == '' ) { field.val(bug_label); field.addClass('field-default'); } } /* * String manipulation */ function Trim( p_string ) { if (typeof p_string != "string") { return p_string; } var t_string = p_string; var t_ch = ''; // Trim beginning spaces t_ch = t_string.substring( 0, 1 ); while ( t_ch == " " ) { t_string = t_string.substring( 1, t_string.length ); t_ch = t_string.substring( 0, 1 ); } // Trim trailing spaces t_ch = t_string.substring( t_string.length-1, t_string.length ); while ( t_ch == " " ) { t_string = t_string.substring( 0, t_string.length-1 ); t_ch = t_string.substring( t_string.length-1, t_string.length ); } return t_string; } /* * Cookie functions */ function GetCookie( p_cookie ) { var t_cookie_name = "MANTIS_" + p_cookie; var t_cookies = document.cookie; t_cookies = t_cookies.split( ";" ); var i = 0; while( i < t_cookies.length ) { var t_cookie = t_cookies[ i ]; t_cookie = t_cookie.split( "=" ); if ( Trim( t_cookie[ 0 ] ) == t_cookie_name ) { return( t_cookie[ 1 ] ); } i++; } return -1; } function SetCookie( p_cookie, p_value ) { var t_cookie_name = "MANTIS_" + p_cookie; var t_expires = new Date(); t_expires.setTime( t_expires.getTime() + (365 * 24 * 60 * 60 * 1000)); document.cookie = t_cookie_name + "=" + p_value + "; expires=" + t_expires.toUTCString() + ";"; } function ToggleDiv( p_div ) { t_open_div = '#' + p_div + "_open"; t_closed_div = '#' + p_div + "_closed"; t_cookie = GetCookie( "collapse_settings" ); if ( 1 == g_collapse_clear ) { t_cookie = ""; g_collapse_clear = 0; } var t_open_display = $(t_open_div).css('display'); $(t_open_div).toggle(); if( $(t_closed_div).length ) { $(t_closed_div).toggle(); } if ( t_open_display == "none" ) { t_cookie = t_cookie + "|" + p_div + ",1"; } else { t_cookie = t_cookie + "|" + p_div + ",0"; } SetCookie( "collapse_settings", t_cookie ); } function setDisplay(idTag, state) { if(!document.getElementById(idTag)) alert('SetDisplay(): id '+idTag+' is empty'); // change display visibility if ( state != 0 ) { document.getElementById(idTag).style.display = style_display; } else { document.getElementById(idTag).style.display = 'none'; } } function toggleDisplay(idTag) { setDisplay( idTag, (document.getElementById(idTag).style.display == 'none')?1:0 ); }