From: <gi...@ma...> - 2010-08-20 23:04:03
|
The branch, master has been updated via 55f2ac2091dd854a547c44d8f1deacaef5441c27 (commit) from 6b36df3d4dd9b7f87b7620052122969b0d89ed6f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 55f2ac2091dd854a547c44d8f1deacaef5441c27 Author: Paul <pa...@ma...> Date: Sat Aug 21 00:03:02 2010 +0100 Remove minimal_jscss variable ----------------------------------------------------------------------- Summary of changes: admin/check/check_paths_inc.php | 20 +++- javascript/dev/addLoadEvent.js | 47 +++++++ javascript/dev/ajax.js | 67 ++++++++++ javascript/dev/bugFilter.js | 100 +++++++++++++++ javascript/{ => dev}/common.js | 4 + javascript/dev/dynamic_filters.js | 175 +++++++++++++++++++++++++++ javascript/dev/xmlhttprequest.js | 239 +++++++++++++++++++++++++++++++++++++ 7 files changed, 648 insertions(+), 4 deletions(-) create mode 100644 javascript/dev/addLoadEvent.js create mode 100644 javascript/dev/ajax.js create mode 100644 javascript/dev/bugFilter.js copy javascript/{ => dev}/common.js (98%) create mode 100644 javascript/dev/dynamic_filters.js create mode 100644 javascript/dev/xmlhttprequest.js ----------------------------------------------------------------------- commit 55f2ac2091dd854a547c44d8f1deacaef5441c27 Author: Paul <pa...@ma...> Date: Sat Aug 21 00:03:02 2010 +0100 Remove minimal_jscss variable diff --git a/admin/check/check_paths_inc.php b/admin/check/check_paths_inc.php index ad64dea..0d4b6f2 100644 --- a/admin/check/check_paths_inc.php +++ b/admin/check/check_paths_inc.php @@ -99,10 +99,6 @@ foreach( $t_moveable_paths as $t_moveable_path ) { $t_removeable_directories = array( 'doc', - 'docbook', - 'packages', - 'scripts', - 'tests' ); foreach( $t_removeable_directories as $t_removeable_directory ) { @@ -113,6 +109,22 @@ foreach( $t_removeable_directories as $t_removeable_directory ) { ); } +$t_developer_directories = array( + 'docbook', + 'packages', + 'scripts', + 'tests', + 'javascript' . DIRECTORY_SEPARATOR . 'dev' +); + +foreach( $t_developer_directories as $t_developer_directory ) { + check_print_test_warn_row( + 'Directory <em><a href="' . htmlentities( config_get_global( 'short_path' ) ) . $t_developer_directory . '">' . $t_developer_directory . '</a></em> exists. These files are not included in MantisBT builds. For production use, please use a release build/snapshot, and not the developer git code.', + !is_dir( $t_paths['absolute_path']['config_value'] . $t_developer_directory ), + array( false => 'The ' . $t_developer_directory . ' directory within the MantisBT root is for development use and is not included in official releases of MantisBT.' ) + ); +} + check_print_test_warn_row( 'Directory <em><a href="' . htmlentities( config_get_global( 'short_path' ) ) . 'api">api</a></em> should be removed from the MantisBT root if you do not plan on using <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a>', !is_dir( $t_paths['absolute_path']['config_value'] . 'api' ) diff --git a/javascript/dev/addLoadEvent.js b/javascript/dev/addLoadEvent.js new file mode 100644 index 0000000..0469a77 --- /dev/null +++ b/javascript/dev/addLoadEvent.js @@ -0,0 +1,47 @@ +/* +# Mantis - a php based bugtracking system + +# Copyright (C) 2000 - 2002 Kenzaburo Ito - ke...@30... +# Copyright (C) 2002 - 2010 MantisBT Team - man...@li... + +# 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 <http://www.gnu.org/licenses/>. + * + * -------------------------------------------------------- + * $Id$ + * -------------------------------------------------------- + */ +/* +Care Of: + Simon Willison + http://simon.incutio.com/archive/2004/05/26/addLoadEvent + Thnx Dude! + +******** USEAGE ******************************** +addLoadEvent(nameOfSomeFunctionToRunOnPageLoad); +addLoadEvent(function() { + // more code to run on page load +}); +*/ +function addLoadEvent(func) { + var oldonload = window.onload; + + if (typeof window.onload != 'function') { + window.onload = func; + } else { + window.onload = function() { + oldonload(); + func(); + } + } +} diff --git a/javascript/dev/ajax.js b/javascript/dev/ajax.js new file mode 100644 index 0000000..01f8241 --- /dev/null +++ b/javascript/dev/ajax.js @@ -0,0 +1,67 @@ +/* +# Mantis - a php based bugtracking system + +# Copyright (C) 2000 - 2002 Kenzaburo Ito - ke...@30... +# Copyright (C) 2002 - 2010 MantisBT Team - man...@li... + +# 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 <http://www.gnu.org/licenses/>. + * + * -------------------------------------------------------- + * $Id$ + * -------------------------------------------------------- + */ + +var processURI = './xmlhttprequest.php'; +var liveReq = false; + +// on !IE we only have to initialize it once +if (window.XMLHttpRequest) { + liveReq = new XMLHttpRequest(); +} + +/** + * Build the XMLHttpRequest and send it + */ +function AjaxLoad( targetElementId, queryString, elementIdToHide ) { + if (liveReq && liveReq.readyState < 4) { + liveReq.abort(); + } + + if (window.XMLHttpRequest) { + // branch for IE/Windows ActiveX version + } else if (window.ActiveXObject) { + liveReq = new ActiveXObject("Microsoft.XMLHTTP"); + } + + name = this.id; + liveReq.onreadystatechange = function() { liveReqProcessReqChange( targetElementId, elementIdToHide ); }; + liveReq.open("GET", processURI + "?" + queryString); + + // show "Loading..." while waiting + document.getElementById( targetElementId ).innerHTML = loading_lang; + + liveReq.send(null); + + return false; +} + +/** + * Processes the results of the XMLHttpRequest + */ +function liveReqProcessReqChange( targetElementId, elementIdToHide ) { + if (liveReq.readyState == 4) { + document.getElementById(targetElementId).innerHTML = liveReq.responseText; + document.getElementById(elementIdToHide).innerHTML = ''; + } +} diff --git a/javascript/dev/bugFilter.js b/javascript/dev/bugFilter.js new file mode 100644 index 0000000..e4624a6 --- /dev/null +++ b/javascript/dev/bugFilter.js @@ -0,0 +1,100 @@ +var begin_form = ''; +var form_fields = new Array(); +var serialized_form_fields = new Array(); +$(document).ready(function(){ + var i = 0; + $('[name=filters_open]').find('input').each(function() { + var formname = $(this).parent('form').attr('name'); + if( formname != 'list_queries_open' && formname != 'open_queries' && formname != 'save_query' ) { + // serialize the field and add it to an array + + if( $.inArray($(this).attr('name'),form_fields) == -1 ) { + form_fields[i] = $(this).attr('name'); + i++; + } + } + }); + $.each( form_fields, function (index, value) { + serialized_form_fields[value] = $('[name=filters_open]').find('[name='+value+']').serialize(); + }); + + /* Set up events to modify the form css to show when a stored query has been modified */ + begin_form = $('[name=filters_open]').serialize(); + + $('[:input').live("change", function() { + filter_highlight_changes($(this)); + }); + $(':checkbox').live("click", function() { + filter_highlight_changes($(this)); + }); +}); + +function filter_toggle_field_changed(field) { + var field_type = field.attr('type'); + var starting_value = serialized_form_fields[field.attr('name')]; + var current_value = field.serialize(); + + // unchecked boxes start as undefined but if checked and then unchecked it + // is no longer undefined so the comparison breaks. Reset it to undefined. + if( field_type=='checkbox' && current_value == '') { + current_value = undefined; + } + if( current_value != starting_value ) { + // field is changed + filter_field_dirty(field); + } else { + // field is not changed + filter_field_clean(field); + } +} + +function filter_highlight_changes(item) { + filter_toggle_field_changed( item ); + + /* Check if form is different that started with */ + var changed_form = $('[name=filters_open]').serialize(); + if( begin_form == changed_form ) { + filter_clean_all(); + } +} + +function filter_named_filter_clean() { + /* be sure it's clean whether it's stored filter or not */ + var selected_text = $('[name=source_query_id] option:selected').html(); + if( selected_text.charAt(0) == '*' ) { + $('[name=source_query_id]').removeClass('tainted'); + var reset_text = selected_text.substring(2,selected_text.length); + $('[name=source_query_id] option:selected').html(reset_text); + } +} + +function filter_named_filter_dirty() { + var stored_query_id = $('[name=source_query_id]').val(); + if( stored_query_id == -1 ) { + /* Only make it dirty if it's a stored filter */ + return; + } + /* stored query in filter is tainted */ + var selected_text = $('[name=source_query_id] option:selected').html(); + if( selected_text.charAt(0) != '*' ) { + $('[name=source_query_id] option:selected').prepend('* '); + $('[name=source_query_id]').addClass('tainted'); + } +} + +function filter_field_clean( item ) { + item.parent().removeClass('tainted'); +} +function filter_field_dirty( item ) { + if( !item.parent().hasClass('tainted') ) { + filter_named_filter_dirty(); + item.parent().addClass('tainted'); + } +} + +function filter_clean_all() { + filter_named_filter_clean(); + $('.tainted').each(function() { + $(this).removeClass('tainted'); + }); +} diff --git a/javascript/dev/common.js b/javascript/dev/common.js new file mode 100644 index 0000000..345abde --- /dev/null +++ b/javascript/dev/common.js @@ -0,0 +1,274 @@ +/* +# Mantis - a php based bugtracking system + +# Copyright (C) 2000 - 2002 Kenzaburo Ito - ke...@30... +# Copyright (C) 2002 - 2010 MantisBT Team - man...@li... + +# 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 <http://www.gnu.org/licenses/>. + * + * -------------------------------------------------------- + * $Id$ + * -------------------------------------------------------- + */ + +/* + * 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() { + /* Global Tag change event added only if #tag_select exists */ + $('#tag_select').live('change', function() { + var selected_tag = $('#tag_select option:selected').text(); + tag_string_append( selected_tag ); + }); + + $('.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 = $('<div/>').text(value).html(); + item.value = value; + results.push(item); + }); + callback(results); + }); + } + }); + + $('input.autofocus:first, select.autofocus:first, textarea.autofocus:first').focus(); + + $('input[type=checkbox].check_all').click(function() { + var matchingName = $(this).attr('name').replace(/_all$/, ''); + $(this).closest('form').find('input[type=checkbox][name=' + matchingName + '\[\]]').attr('checked', this.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('<input type="image" class="button datetime" id="' + element.id + '_datetime_button' + '" src="' + config['icon_path'] + 'calendar-img.gif" />'); + Calendar.setup({ + inputField: element.id, + timeFormat: 24, + showsTime: true, + ifFormat: config['calendar_js_date_format'], + button: element.id + '_datetime_button' + }); + }); +}); + +/* + * 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 ); +} + +/* Append a tag name to the tag input box, with repect for tag separators, etc */ +function tag_string_append( p_string ) { + t_tag_separator = $('#tag_separator').val(); + t_tag_string = $('#tag_string'); + t_tag_select = $('#tag_select'); + + if ( Trim( p_string ) == '' ) { return; } + + if ( t_tag_string.val() != '' ) { + t_tag_string.val( t_tag_string.val() + t_tag_separator + p_string ); + } else { + t_tag_string.val( t_tag_string.val() + p_string ); + } + t_tag_select.val(0); +} diff --git a/javascript/dev/dynamic_filters.js b/javascript/dev/dynamic_filters.js new file mode 100644 index 0000000..890508b --- /dev/null +++ b/javascript/dev/dynamic_filters.js @@ -0,0 +1,175 @@ +/* +# Mantis - a php based bugtracking system + +# Copyright (C) 2000 - 2002 Kenzaburo Ito - ke...@30... +# Copyright (C) 2002 - 2010 MantisBT Team - man...@li... + +# 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 <http://www.gnu.org/licenses/>. + * + * -------------------------------------------------------- + * $Id$ + * -------------------------------------------------------- + */ +/* +// +----------------------------------------------------------------------+ +// | Orginial Code Care Of: | +// +----------------------------------------------------------------------+ +// | Copyright (c) 2004 Bitflux GmbH | +// +----------------------------------------------------------------------+ +// | Licensed under the Apache License, Version 2.0 (the "License"); | +// | you may not use this file except in compliance with the License. | +// | You may obtain a copy of the License at | +// | http://www.apache.org/licenses/LICENSE-2.0 | +// | Unless required by applicable law or agreed to in writing, software | +// | distributed under the License is distributed on an "AS IS" BASIS, | +// | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | +// | implied. See the License for the specific language governing | +// | permissions and limitations under the License. | +// +----------------------------------------------------------------------+ +// | Author: Bitflux GmbH <de...@bi...> | +// | http://blog.bitflux.ch/p1735.html | +// +----------------------------------------------------------------------+ +// +// +// +----------------------------------------------------------------------+ +// | Heavily Modified by Jeff Minard (07/09/04) | +// +----------------------------------------------------------------------+ +// | Same stuff as above, yo! | +// +----------------------------------------------------------------------+ +// | Author: Jeff Minard <je...@cr...> | +// | http://www.creatimation.net | +// | http://www.creatimation.net/journal/live-request | +// +----------------------------------------------------------------------+ +// +// +----------------------------------------------------------------------+ +// | What is this nonsense?? (07/09/04) | +// +----------------------------------------------------------------------+ +// | This is a script that, by using XMLHttpRequest javascript objects | +// | you can quickly add some very click live interactive feed back to | +// | your pages that reuire server side interaction. | +// | | +// | For instance, you use this to emulate a "live searching" feature | +// | wherein users type in key phrases, and once they have stopped typing | +// | the script will automatically search and retrive *without* a page | +// | reload. +// | | +// | In another instance, I use this to product live comments by passing | +// | the text to a Textile class that parses it to valid HTML. After | +// | parsing, the html is returned and displayed on the page as the | +// | user types. | +// +----------------------------------------------------------------------+ +// +// +// +----------------------------------------------------------------------+ +// | Modified by Lee O'Mara <lo...@om...> 12/08/2004 | +// +----------------------------------------------------------------------+ +// | Hacked apart Jeff's script for use in Mantis. | +// | | +// | This script gets filters from the server and displays them without | +// | reloading the page. | +// | | +// | The script tries to follow the notion of "unobtrusive javascript". | +// | There are no event handlers in the HTML code. The events are added | +// | on pageload(based on specific id names). | +// +----------------------------------------------------------------------+ +*/ + +var processURI = './return_dynamic_filters.php'; +var liveReq = false; + +/** + * Build the XMLHttpRequest and send it + */ +function liveReqDoReq() { + + if (liveReq && liveReq.readyState < 4) { + liveReq.abort(); + } + + if (window.XMLHttpRequest) { + // branch for IE7, Firefox, Opera, etc. + liveReq = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + // branch for IE5, IE6 via ActiveX + liveReq = new ActiveXObject("Microsoft.XMLHTTP"); + } + + name = this.id; + liveReq.onreadystatechange = function(){liveReqProcessReqChange(name);}; + t_view = document.getElementById('filters_form_open').elements['view_type'].value; + liveReq.open("GET", processURI + "?view_type=" + t_view + "&filter_target=" + this.id); + + // show "Loading..." while waiting + document.getElementById(this.id+'_target').innerHTML = translations['loading']; + + liveReq.send(null); + + return false; +} + +/** + * Processes the results of the XMLHttpRequest + */ +function liveReqProcessReqChange(name) { + if (liveReq.readyState == 4) { + document.getElementById(name+'_target').innerHTML = liveReq.responseText; + replaceWithContent(name); + } +} + +/** + * Strip the tag, leave the content. + */ +function replaceWithContent(id){ + tag = document.getElementById(id); + if (!tag) return false; + t_parent = tag.parentNode; + if (!t_parent) return false; + for(var i=0; i <tag.childNodes.length; i++){ + child = tag.childNodes[i].cloneNode(true); + t_parent.insertBefore(child, tag); + } + t_parent.removeChild(tag); +} + +/** + * Initialise the filter links + */ +function labelInit(){ + // keep browsers that don't support DOM or + // XMLHttpRequest from getting in trouble + if (document.getElementById && (window.XMLHttpRequest || window.ActiveXObject)) { + + t_form = document.getElementById("filters_form_open"); + if (!t_form) return false; + + t_links = t_form.getElementsByTagName("a"); + if (!t_links) return false; + + for(var i=0; i < t_links.length; i++){ + var t_link = t_links[i]; + if (t_link.id.substring((t_link.id.length - 7), t_link.id.length) == "_filter"){ + // only attach event handler if a target is found + if (document.getElementById(t_link.id+'_target')){ + // setup the event handler + t_link.onclick = liveReqDoReq; + } else { + alert("missing target for:" +t_link.id); + } + } + } + } +} + +addLoadEvent(labelInit); diff --git a/javascript/dev/xmlhttprequest.js b/javascript/dev/xmlhttprequest.js new file mode 100644 index 0000000..c57b3b6 --- /dev/null +++ b/javascript/dev/xmlhttprequest.js @@ -0,0 +1,239 @@ +/* +# Mantis - a php based bugtracking system + +# Copyright (C) 2000 - 2002 Kenzaburo Ito - ke...@30... +# Copyright (C) 2002 - 2010 MantisBT Team - man...@li... + +# 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 <http://www.gnu.org/licenses/>. + * + * -------------------------------------------------------- + * $Id$ + * -------------------------------------------------------- + */ +/* + +Cross-Browser XMLHttpRequest v1.1 +================================= + +Emulate Gecko 'XMLHttpRequest()' functionality in IE and Opera. Opera requires +the Sun Java Runtime Environment <http://www.java.com/>. + +by Andrew Gregory +http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/ + +This work is licensed under the Creative Commons Attribution License. To view a +copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or send +a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, +USA. + +Not Supported in Opera +---------------------- +* user/password authentication +* responseXML data member + +Not Fully Supported in Opera +---------------------------- +* async requests +* abort() +* getAllResponseHeaders(), getAllResponseHeader(header) +*/ + +/* + * commented out (30/07/2004) because it was causing subsequent request to freeze +// IE support +if (window.ActiveXObject && !window.XMLHttpRequest) { + window.XMLHttpRequest = function() { + return new ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'); + }; +} +*/ + +// Gecko support +/* ;-) */ +// Opera support +if (window.opera && !window.XMLHttpRequest) { + window.XMLHttpRequest = function() { + this.readyState = 0; // 0=uninitialized,1=loading,2=loaded,3=interactive,4=complete + this.status = 0; // HTTP status codes + this.statusText = ''; + this._headers = []; + this._aborted = false; + this._async = true; + this.abort = function() { + this._aborted = true; + }; + this.getAllResponseHeaders = function() { + return this.getAllResponseHeader('*'); + }; + this.getAllResponseHeader = function(header) { + var ret = ''; + for (var i = 0; i < this._headers.length; i++) { + if (header == '*' || this._headers[i].h == header) { + ret += this._headers[i].h + ': ' + this._headers[i].v + '\n'; + } + } + return ret; + }; + this.setRequestHeader = function(header, value) { + this._headers[this._headers.length] = {h:header, v:value}; + }; + this.open = function(method, url, async, user, password) { + this.method = method; + this.url = url; + this._async = true; + this._aborted = false; + if (arguments.length >= 3) { + this._async = async; + } + if (arguments.length > 3) { + // user/password support requires a custom Authenticator class + opera.postError('XMLHttpRequest.open() - user/password not supported'); + } + this._headers = []; + this.readyState = 1; + if (this.onreadystatechange) { + this.onreadystatechange(); + } + }; + this.send = function(data) { + if (!navigator.javaEnabled()) { + alert("XMLHttpRequest.send() - Java must be installed and enabled."); + return; + } + if (this._async) { + setTimeout(this._sendasync, 0, this, data); + // this is not really asynchronous and won't execute until the current + // execution context ends + } else { + this._sendsync(data); + } + } + this._sendasync = function(req, data) { + if (!req._aborted) { + req._sendsync(data); + } + }; + this._sendsync = function(data) { + this.readyState = 2; + if (this.onreadystatechange) { + this.onreadystatechange(); + } + // open connection + var url = new java.net.URL(new java.net.URL(window.location.href), this.url); + var conn = url.openConnection(); + for (var i = 0; i < this._headers.length; i++) { + conn.setRequestProperty(this._headers[i].h, this._headers[i].v); + } + this._headers = []; + if (this.method == 'POST') { + // POST data + conn.setDoOutput(true); + var wr = new java.io.OutputStreamWriter(conn.getOutputStream()); + wr.write(data); + wr.flush(); + wr.close(); + } + // read response headers + // NOTE: the getHeaderField() methods always return nulls for me :( + var gotContentEncoding = false; + var gotContentLength = false; + var gotContentType = false; + var gotDate = false; + var gotExpiration = false; + var gotLastModified = false; + for (var i = 0; ; i++) { + var hdrName = conn.getHeaderFieldKey(i); + var hdrValue = conn.getHeaderField(i); + if (hdrName == null && hdrValue == null) { + break; + } + if (hdrName != null) { + this._headers[this._headers.length] = {h:hdrName, v:hdrValue}; + switch (hdrName.toLowerCase()) { + case 'content-encoding': gotContentEncoding = true; break; + case 'content-length' : gotContentLength = true; break; + case 'content-type' : gotContentType = true; break; + case 'date' : gotDate = true; break; + case 'expires' : gotExpiration = true; break; + case 'last-modified' : gotLastModified = true; break; + } + } + } + // try to fill in any missing header information + var val; + val = conn.getContentEncoding(); + if (val != null && !gotContentEncoding) this._headers[this._headers.length] = {h:'Content-encoding', v:val}; + val = conn.getContentLength(); + if (val != -1 && !gotContentLength) this._headers[this._headers.length] = {h:'Content-length', v:val}; + val = conn.getContentType(); + if (val != null && !gotContentType) this._headers[this._headers.length] = {h:'Content-type', v:val}; + val = conn.getDate(); + if (val != 0 && !gotDate) this._headers[this._headers.length] = {h:'Date', v:(new Date(val)).toUTCString()}; + val = conn.getExpiration(); + if (val != 0 && !gotExpiration) this._headers[this._headers.length] = {h:'Expires', v:(new Date(val)).toUTCString()}; + val = conn.getLastModified(); + if (val != 0 && !gotLastModified) this._headers[this._headers.length] = {h:'Last-modified', v:(new Date(val)).toUTCString()}; + // read response data + var reqdata = ''; + var stream = conn.getInputStream(); + if (stream) { + var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream)); + var line; + while ((line = reader.readLine()) != null) { + if (this.readyState == 2) { + this.readyState = 3; + if (this.onreadystatechange) { + this.onreadystatechange(); + } + } + reqdata += line + '\n'; + } + reader.close(); + this.status = 200; + this.statusText = 'OK'; + this.responseText = reqdata; + this.readyState = 4; + if (this.onreadystatechange) { + this.onreadystatechange(); + } + if (this.onload) { + this.onload(); + } + } else { + // error + this.status = 404; + this.statusText = 'Not Found'; + this.responseText = ''; + this.readyState = 4; + if (this.onreadystatechange) { + this.onreadystatechange(); + } + if (this.onerror) { + this.onerror(); + } + } + }; + }; +} +// ActiveXObject emulation +if (!window.ActiveXObject && window.XMLHttpRequest) { + window.ActiveXObject = function(type) { + switch (type.toLowerCase()) { + case 'microsoft.xmlhttp': + case 'msxml2.xmlhttp': + return new XMLHttpRequest(); + } + return null; + }; +} ----------------------------------------------------------------------- -- Mantis Bug Tracker |