Git
Threads by month
- ----- 2026 -----
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 9 participants
- 39110 discussions
[Phpmyadmin-git] [SCM] phpMyAdmin branch, QA_3_4, updated. RELEASE_3_4_0-30-gdd3bd90
by Marc Delisle 15 May '11
by Marc Delisle 15 May '11
15 May '11
The branch, QA_3_4 has been updated
via dd3bd9043dcc104d112bba1a1b5e9d2e33d1c6f1 (commit)
from 8bad4aea1e1046661a13e8f05acd4a2fab6fd32a (commit)
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e3a3871..b3ad38c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
3.4.1.0 (not yet released)
- bug #3301108 [interface] Synchronize and already configured host
+- Bug #3302457 Inline edit and $cfg['PropertiesIconic']
3.4.0.0 (2011-05-11)
+ rfe #2890226 [view] Enable VIEW rename
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_4_0-168-g53e1178
by Madhura Jayaratne 15 May '11
by Madhura Jayaratne 15 May '11
15 May '11
The branch, master has been updated
via 53e11786b4284130308e46b0bf792a95375bbd87 (commit)
via 8bad4aea1e1046661a13e8f05acd4a2fab6fd32a (commit)
from 5f4a8e6a971e88135380a79ae09dc7ebd28010fb (commit)
- Log -----------------------------------------------------------------
commit 53e11786b4284130308e46b0bf792a95375bbd87
Merge: 5f4a8e6a971e88135380a79ae09dc7ebd28010fb 8bad4aea1e1046661a13e8f05acd4a2fab6fd32a
Author: Madhura Jayaratne <madhura.cj(a)gmail.com>
Date: Sun May 15 21:22:10 2011 +0530
Merge branch 'QA_3_4'
-----------------------------------------------------------------------
Summary of changes:
js/sql.js | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/js/sql.js b/js/sql.js
index bd068cf..1872e12 100644
--- a/js/sql.js
+++ b/js/sql.js
@@ -118,10 +118,16 @@ function appendInlineAnchor() {
.first()
.prepend($img_object);
} else {
+ // Only text is displayed. See $cfg['PropertiesIconic']
+ $cloned_anchor.find('a').attr('href', '#');
+ $cloned_anchor.find('a span').text(PMA_messages['strInlineEdit']);
+
// the link was too big so <input type="image"> is there
$img_object = $cloned_anchor.find('input:image').attr('title', PMA_messages['strInlineEdit']);
- var img_src = $img_object.attr('src').replace(/b_edit/,'b_inline_edit');
- $img_object.attr('src', img_src);
+ if ($img_object.length > 0) {
+ var img_src = $img_object.attr('src').replace(/b_edit/,'b_inline_edit');
+ $img_object.attr('src', img_src);
+ }
$cloned_anchor
.find('.clickprevimage')
.text(' ' + PMA_messages['strInlineEdit']);
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin branch, QA_3_4, updated. RELEASE_3_4_0-29-g8bad4ae
by Madhura Jayaratne 15 May '11
by Madhura Jayaratne 15 May '11
15 May '11
The branch, QA_3_4 has been updated
via 8bad4aea1e1046661a13e8f05acd4a2fab6fd32a (commit)
from 989a1f35e9288f70fc7255b6368880185a7d60a2 (commit)
- Log -----------------------------------------------------------------
commit 8bad4aea1e1046661a13e8f05acd4a2fab6fd32a
Author: Madhura Jayaratne <madhura.cj(a)gmail.com>
Date: Sun May 15 21:15:35 2011 +0530
Bug #3302457 - Inline edit and $cfg['PropertiesIconic']
-----------------------------------------------------------------------
Summary of changes:
js/sql.js | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/js/sql.js b/js/sql.js
index bd068cf..1872e12 100644
--- a/js/sql.js
+++ b/js/sql.js
@@ -118,10 +118,16 @@ function appendInlineAnchor() {
.first()
.prepend($img_object);
} else {
+ // Only text is displayed. See $cfg['PropertiesIconic']
+ $cloned_anchor.find('a').attr('href', '#');
+ $cloned_anchor.find('a span').text(PMA_messages['strInlineEdit']);
+
// the link was too big so <input type="image"> is there
$img_object = $cloned_anchor.find('input:image').attr('title', PMA_messages['strInlineEdit']);
- var img_src = $img_object.attr('src').replace(/b_edit/,'b_inline_edit');
- $img_object.attr('src', img_src);
+ if ($img_object.length > 0) {
+ var img_src = $img_object.attr('src').replace(/b_edit/,'b_inline_edit');
+ $img_object.attr('src', img_src);
+ }
$cloned_anchor
.find('.clickprevimage')
.text(' ' + PMA_messages['strInlineEdit']);
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_4_0-166-g5f4a8e6
by Marc Delisle 14 May '11
by Marc Delisle 14 May '11
14 May '11
The branch, master has been updated
via 5f4a8e6a971e88135380a79ae09dc7ebd28010fb (commit)
from 6290c8ecccfc3c614fb3c8d57da17bf20a99a6d7 (commit)
- Log -----------------------------------------------------------------
commit 5f4a8e6a971e88135380a79ae09dc7ebd28010fb
Author: Marc Delisle <marc(a)infomarc.info>
Date: Sat May 14 08:26:00 2011 -0400
Update to jQuery 1.6.1
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
index.php | 2 +-
js/jquery/{jquery-1.4.4.js => jquery-1.6.1.js} | 4941 ++++++++++++++++--------
libraries/common.inc.php | 2 +-
navigation.php | 2 +-
setup/index.php | 2 +-
6 files changed, 3351 insertions(+), 1599 deletions(-)
rename js/jquery/{jquery-1.4.4.js => jquery-1.6.1.js} (55%)
diff --git a/ChangeLog b/ChangeLog
index 543fef2..20c2694 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
3.5.0.0 (not yet released)
+ rfe #2021981 [interface] Add support for mass prefix change.
+ "up to date" message on main page when current version is up to date
++ Update to jQuery 1.6.1
3.4.1.0 (not yet released)
- bug #3301108 [interface] Synchronize and already configured host
diff --git a/index.php b/index.php
index 5d19758..1a10103 100644
--- a/index.php
+++ b/index.php
@@ -153,7 +153,7 @@ header('Content-Type: text/html; charset=' . $GLOBALS['charset']);
// ]]>
</script>
<?php
-echo PMA_includeJS('jquery/jquery-1.4.4.js');
+echo PMA_includeJS('jquery/jquery-1.6.1.js');
echo PMA_includeJS('update-location.js');
echo PMA_includeJS('common.js');
?>
diff --git a/js/jquery/jquery-1.4.4.js b/js/jquery/jquery-1.6.1.js
similarity index 55%
rename from js/jquery/jquery-1.4.4.js
rename to js/jquery/jquery-1.6.1.js
index a9f2ec7..5d5a1d5 100644
--- a/js/jquery/jquery-1.4.4.js
+++ b/js/jquery/jquery-1.6.1.js
@@ -1,28 +1,30 @@
/*!
- * jQuery JavaScript Library v1.4.4
+ * jQuery JavaScript Library v1.6.1
* http://jquery.com/
*
- * Copyright 2010, John Resig
+ * Copyright 2011, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
+ * Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
- * Date: Thu Nov 11 19:04:53 2010 -0500
+ * Date: Thu May 12 15:04:36 2011 -0400
*/
(function( window, undefined ) {
// Use the correct document accordingly with window argument (sandbox)
-var document = window.document;
+var document = window.document,
+ navigator = window.navigator,
+ location = window.location;
var jQuery = (function() {
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context );
+ return new jQuery.fn.init( selector, context, rootjQuery );
},
// Map over jQuery in case of overwrite
@@ -36,22 +38,15 @@ var jQuery = function( selector, context ) {
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
- quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
-
- // Is it a simple selector
- isSimple = /^.[^:#\[\.,]*$/,
+ quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
// Check if a string has a non-whitespace character in it
rnotwhite = /\S/,
- rwhite = /\s/,
// Used for trimming whitespace
trimLeft = /^\s+/,
trimRight = /\s+$/,
- // Check for non-word characters
- rnonword = /\W/,
-
// Check for digits
rdigit = /\d/,
@@ -75,12 +70,9 @@ var jQuery = function( selector, context ) {
// For matching the engine and version of the browser
browserMatch,
-
- // Has the ready events already been bound?
- readyBound = false,
-
- // The functions to execute on DOM ready
- readyList = [],
+
+ // The deferred used on DOM ready
+ readyList,
// The ready event handler
DOMContentLoaded,
@@ -92,12 +84,13 @@ var jQuery = function( selector, context ) {
slice = Array.prototype.slice,
trim = String.prototype.trim,
indexOf = Array.prototype.indexOf,
-
+
// [[Class]] -> type pairs
class2type = {};
jQuery.fn = jQuery.prototype = {
- init: function( selector, context ) {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
// Handle $(""), $(null), or $(undefined)
@@ -111,12 +104,12 @@ jQuery.fn = jQuery.prototype = {
this.length = 1;
return this;
}
-
+
// The body element only exists once, optimize finding it
if ( selector === "body" && !context && document.body ) {
this.context = document;
this[0] = document.body;
- this.selector = "body";
+ this.selector = selector;
this.length = 1;
return this;
}
@@ -124,13 +117,20 @@ jQuery.fn = jQuery.prototype = {
// Handle HTML strings
if ( typeof selector === "string" ) {
// Are we dealing with HTML string or an ID?
- match = quickExpr.exec( selector );
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = quickExpr.exec( selector );
+ }
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
doc = (context ? context.ownerDocument || context : document);
// If a single string is passed in and it's a single tag
@@ -148,11 +148,11 @@ jQuery.fn = jQuery.prototype = {
} else {
ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+ selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
}
-
+
return jQuery.merge( this, selector );
-
+
// HANDLE: $("#id")
} else {
elem = document.getElementById( match[2] );
@@ -176,13 +176,6 @@ jQuery.fn = jQuery.prototype = {
return this;
}
- // HANDLE: $("TAG")
- } else if ( !context && !rnonword.test( selector ) ) {
- this.selector = selector;
- this.context = document;
- selector = document.getElementsByTagName( selector );
- return jQuery.merge( this, selector );
-
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
return (context || rootjQuery).find( selector );
@@ -190,7 +183,7 @@ jQuery.fn = jQuery.prototype = {
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
- return jQuery( context ).find( selector );
+ return this.constructor( context ).find( selector );
}
// HANDLE: $(function)
@@ -211,7 +204,7 @@ jQuery.fn = jQuery.prototype = {
selector: "",
// The current version of jQuery being used
- jquery: "1.4.4",
+ jquery: "1.6.1",
// The default length of a jQuery object is 0
length: 0,
@@ -234,18 +227,18 @@ jQuery.fn = jQuery.prototype = {
this.toArray() :
// Return just the object
- ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
- var ret = jQuery();
+ var ret = this.constructor();
if ( jQuery.isArray( elems ) ) {
push.apply( ret, elems );
-
+
} else {
jQuery.merge( ret, elems );
}
@@ -271,25 +264,17 @@ jQuery.fn = jQuery.prototype = {
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
-
+
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
- // If the DOM is already ready
- if ( jQuery.isReady ) {
- // Execute the function immediately
- fn.call( document, jQuery );
-
- // Otherwise, remember the function for later
- } else if ( readyList ) {
- // Add the function to the wait list
- readyList.push( fn );
- }
+ // Add the callback
+ readyList.done( fn );
return this;
},
-
+
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
@@ -314,9 +299,9 @@ jQuery.fn = jQuery.prototype = {
return callback.call( elem, i, elem );
}));
},
-
+
end: function() {
- return this.prevObject || jQuery(null);
+ return this.prevObject || this.constructor(null);
},
// For internal use only.
@@ -330,7 +315,7 @@ jQuery.fn = jQuery.prototype = {
jQuery.fn.init.prototype = jQuery.fn;
jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
+ var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
@@ -395,31 +380,37 @@ jQuery.extend = jQuery.fn.extend = function() {
jQuery.extend({
noConflict: function( deep ) {
- window.$ = _$;
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
- if ( deep ) {
+ if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}
return jQuery;
},
-
+
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
// A counter to track how many items to wait for before
// the ready event fires. See #6781
readyWait: 1,
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // A third-party is pushing the ready event forwards
- if ( wait === true ) {
- jQuery.readyWait--;
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
}
+ },
- // Make sure that the DOM is not already loaded
- if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+ // Either a released hold or an DOMready/load event and not yet ready
+ if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( !document.body ) {
return setTimeout( jQuery.ready, 1 );
@@ -434,33 +425,21 @@ jQuery.extend({
}
// If there are functions bound, to execute
- if ( readyList ) {
- // Execute all of them
- var fn,
- i = 0,
- ready = readyList;
+ readyList.resolveWith( document, [ jQuery ] );
- // Reset the list of functions
- readyList = null;
-
- while ( (fn = ready[ i++ ]) ) {
- fn.call( document, jQuery );
- }
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).unbind( "ready" );
- }
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger( "ready" ).unbind( "ready" );
}
}
},
-
+
bindReady: function() {
- if ( readyBound ) {
+ if ( readyList ) {
return;
}
- readyBound = true;
+ readyList = jQuery._Deferred();
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
@@ -473,7 +452,7 @@ jQuery.extend({
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
+
// A fallback to window.onload, that will always work
window.addEventListener( "load", jQuery.ready, false );
@@ -481,8 +460,8 @@ jQuery.extend({
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
- document.attachEvent("onreadystatechange", DOMContentLoaded);
-
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
// A fallback to window.onload, that will always work
window.attachEvent( "onload", jQuery.ready );
@@ -533,20 +512,20 @@ jQuery.extend({
if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
-
+
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
-
+
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
-
+
var key;
for ( key in obj ) {}
-
+
return key === undefined || hasOwn.call( obj, key );
},
@@ -556,11 +535,11 @@ jQuery.extend({
}
return true;
},
-
+
error: function( msg ) {
throw msg;
},
-
+
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
@@ -568,45 +547,59 @@ jQuery.extend({
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
-
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test(data.replace(rvalidescape, "@")
- .replace(rvalidtokens, "]")
- .replace(rvalidbraces, "")) ) {
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
- // Try to use the native JSON parser first
- return window.JSON && window.JSON.parse ?
- window.JSON.parse( data ) :
- (new Function("return " + data))();
+ return (new Function( "return " + data ))();
- } else {
- jQuery.error( "Invalid JSON: " + data );
}
+ jQuery.error( "Invalid JSON: " + data );
},
- noop: function() {},
+ // Cross-browser xml parsing
+ // (xml & tmp used internally)
+ parseXML: function( data , xml , tmp ) {
- // Evalulates a script in a global context
- globalEval: function( data ) {
- if ( data && rnotwhite.test(data) ) {
- // Inspired by code by Andrea Giammarchi
- // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.h…
- var head = document.getElementsByTagName("head")[0] || document.documentElement,
- script = document.createElement("script");
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
- script.type = "text/javascript";
+ tmp = xml.documentElement;
- if ( jQuery.support.scriptEval ) {
- script.appendChild( document.createTextNode( data ) );
- } else {
- script.text = data;
- }
+ if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+
+ return xml;
+ },
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709).
- head.insertBefore( script, head.firstChild );
- head.removeChild( script );
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-gl…
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
}
},
@@ -618,7 +611,7 @@ jQuery.extend({
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
- isObj = length === undefined || jQuery.isFunction(object);
+ isObj = length === undefined || jQuery.isFunction( object );
if ( args ) {
if ( isObj ) {
@@ -644,8 +637,11 @@ jQuery.extend({
}
}
} else {
- for ( var value = object[0];
- i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+ for ( ; i < length; ) {
+ if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+ break;
+ }
+ }
}
}
@@ -676,7 +672,7 @@ jQuery.extend({
// The extra typeof function check is to prevent crashes
// in Safari 2 (See: #3039)
// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type(array);
+ var type = jQuery.type( array );
if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
push.call( ret, array );
@@ -689,8 +685,9 @@ jQuery.extend({
},
inArray: function( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
+
+ if ( indexOf ) {
+ return indexOf.call( array, elem );
}
for ( var i = 0, length = array.length; i < length; i++ ) {
@@ -710,7 +707,7 @@ jQuery.extend({
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
-
+
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
@@ -740,49 +737,64 @@ jQuery.extend({
// arg is for internal usage only
map: function( elems, callback, arg ) {
- var ret = [], value;
+ var value, key, ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
// Go through the array, translating each of the items to their
- // new value (or values).
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
- if ( value != null ) {
- ret[ ret.length ] = value;
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
}
}
+ // Flatten any nested arrays
return ret.concat.apply( [], ret );
},
// A global GUID counter for objects
guid: 1,
- proxy: function( fn, proxy, thisObject ) {
- if ( arguments.length === 2 ) {
- if ( typeof proxy === "string" ) {
- thisObject = fn;
- fn = thisObject[ proxy ];
- proxy = undefined;
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ if ( typeof context === "string" ) {
+ var tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
- } else if ( proxy && !jQuery.isFunction( proxy ) ) {
- thisObject = proxy;
- proxy = undefined;
- }
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
}
- if ( !proxy && fn ) {
+ // Simulated bind
+ var args = slice.call( arguments, 2 ),
proxy = function() {
- return fn.apply( thisObject || this, arguments );
+ return fn.apply( context, args.concat( slice.call( arguments ) ) );
};
- }
// Set the guid of unique handler to the same of original handler, so it can be removed
- if ( fn ) {
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
- }
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
- // So proxy can be declared as an argument
return proxy;
},
@@ -790,7 +802,7 @@ jQuery.extend({
// The value/s can be optionally by executed if its a function
access: function( elems, key, value, exec, fn, pass ) {
var length = elems.length;
-
+
// Setting many attributes
if ( typeof key === "object" ) {
for ( var k in key ) {
@@ -798,19 +810,19 @@ jQuery.extend({
}
return elems;
}
-
+
// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
exec = !pass && exec && jQuery.isFunction(value);
-
+
for ( var i = 0; i < length; i++ ) {
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
-
+
return elems;
}
-
+
// Getting an attribute
return length ? fn( elems[0], key ) : undefined;
},
@@ -833,6 +845,27 @@ jQuery.extend({
return { browser: match[1] || "", version: match[2] || "0" };
},
+ sub: function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+ },
+
browser: {}
});
@@ -852,15 +885,8 @@ if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
-if ( indexOf ) {
- jQuery.inArray = function( elem, array ) {
- return indexOf.call( array, elem );
- };
-}
-
-// Verify that \s matches non-breaking spaces
-// (IE fails on this test)
-if ( !rwhite.test( "\xA0" ) ) {
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;
}
@@ -905,52 +931,265 @@ function doScrollCheck() {
}
// Expose jQuery to the global object
-return (window.jQuery = window.$ = jQuery);
+return jQuery;
})();
-(function() {
+var // Promise methods
+ promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+ // Static reference to slice
+ sliceDeferred = [].slice;
+
+jQuery.extend({
+ // Create a simple deferred (one callbacks list)
+ _Deferred: function() {
+ var // callbacks list
+ callbacks = [],
+ // stored [ context , args ]
+ fired,
+ // to avoid firing when already doing so
+ firing,
+ // flag to know if the deferred has been cancelled
+ cancelled,
+ // the deferred itself
+ deferred = {
+
+ // done( f1, f2, ...)
+ done: function() {
+ if ( !cancelled ) {
+ var args = arguments,
+ i,
+ length,
+ elem,
+ type,
+ _fired;
+ if ( fired ) {
+ _fired = fired;
+ fired = 0;
+ }
+ for ( i = 0, length = args.length; i < length; i++ ) {
+ elem = args[ i ];
+ type = jQuery.type( elem );
+ if ( type === "array" ) {
+ deferred.done.apply( deferred, elem );
+ } else if ( type === "function" ) {
+ callbacks.push( elem );
+ }
+ }
+ if ( _fired ) {
+ deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+ }
+ }
+ return this;
+ },
+
+ // resolve with given context and args
+ resolveWith: function( context, args ) {
+ if ( !cancelled && !fired && !firing ) {
+ // make sure args are available (#8421)
+ args = args || [];
+ firing = 1;
+ try {
+ while( callbacks[ 0 ] ) {
+ callbacks.shift().apply( context, args );
+ }
+ }
+ finally {
+ fired = [ context, args ];
+ firing = 0;
+ }
+ }
+ return this;
+ },
+
+ // resolve with this as context and given arguments
+ resolve: function() {
+ deferred.resolveWith( this, arguments );
+ return this;
+ },
+
+ // Has this deferred been resolved?
+ isResolved: function() {
+ return !!( firing || fired );
+ },
+
+ // Cancel
+ cancel: function() {
+ cancelled = 1;
+ callbacks = [];
+ return this;
+ }
+ };
+
+ return deferred;
+ },
+
+ // Full fledged deferred (two callbacks list)
+ Deferred: function( func ) {
+ var deferred = jQuery._Deferred(),
+ failDeferred = jQuery._Deferred(),
+ promise;
+ // Add errorDeferred methods, then and promise
+ jQuery.extend( deferred, {
+ then: function( doneCallbacks, failCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks );
+ return this;
+ },
+ always: function() {
+ return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+ },
+ fail: failDeferred.done,
+ rejectWith: failDeferred.resolveWith,
+ reject: failDeferred.resolve,
+ isRejected: failDeferred.isResolved,
+ pipe: function( fnDone, fnFail ) {
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( {
+ done: [ fnDone, "resolve" ],
+ fail: [ fnFail, "reject" ]
+ }, function( handler, data ) {
+ var fn = data[ 0 ],
+ action = data[ 1 ],
+ returned;
+ if ( jQuery.isFunction( fn ) ) {
+ deferred[ handler ](function() {
+ returned = fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise().then( newDefer.resolve, newDefer.reject );
+ } else {
+ newDefer[ action ]( returned );
+ }
+ });
+ } else {
+ deferred[ handler ]( newDefer[ action ] );
+ }
+ });
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ if ( obj == null ) {
+ if ( promise ) {
+ return promise;
+ }
+ promise = obj = {};
+ }
+ var i = promiseMethods.length;
+ while( i-- ) {
+ obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+ }
+ return obj;
+ }
+ });
+ // Make sure only one callback list will be used
+ deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+ // Unexpose cancel
+ delete deferred.cancel;
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( firstParam ) {
+ var args = arguments,
+ i = 0,
+ length = args.length,
+ count = length,
+ deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+ firstParam :
+ jQuery.Deferred();
+ function resolveFunc( i ) {
+ return function( value ) {
+ args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ if ( !( --count ) ) {
+ // Strange bug in FF4:
+ // Values changed onto the arguments object sometimes end up as undefined values
+ // outside the $.when method. Cloning the object into a fresh array solves the issue
+ deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+ }
+ };
+ }
+ if ( length > 1 ) {
+ for( ; i < length; i++ ) {
+ if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+ args[ i ].promise().then( resolveFunc(i), deferred.reject );
+ } else {
+ --count;
+ }
+ }
+ if ( !count ) {
+ deferred.resolveWith( deferred, args );
+ }
+ } else if ( deferred !== firstParam ) {
+ deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+ }
+ return deferred.promise();
+ }
+});
+
+
- jQuery.support = {};
+jQuery.support = (function() {
- var root = document.documentElement,
- script = document.createElement("script"),
- div = document.createElement("div"),
- id = "script" + jQuery.now();
+ var div = document.createElement( "div" ),
+ documentElement = document.documentElement,
+ all,
+ a,
+ select,
+ opt,
+ input,
+ marginDiv,
+ support,
+ fragment,
+ body,
+ bodyStyle,
+ tds,
+ events,
+ eventName,
+ i,
+ isSupported;
- div.style.display = "none";
- div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+ // Preliminary tests
+ div.setAttribute("className", "t");
+ div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
- var all = div.getElementsByTagName("*"),
- a = div.getElementsByTagName("a")[0],
- select = document.createElement("select"),
- opt = select.appendChild( document.createElement("option") );
+ all = div.getElementsByTagName( "*" );
+ a = div.getElementsByTagName( "a" )[ 0 ];
// Can't get basic test support
if ( !all || !all.length || !a ) {
- return;
+ return {};
}
- jQuery.support = {
+ // First batch of supports tests
+ select = document.createElement( "select" );
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName( "input" )[ 0 ];
+
+ support = {
// IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: div.firstChild.nodeType === 3,
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
// Make sure that tbody elements aren't automatically inserted
// IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
+ tbody: !div.getElementsByTagName( "tbody" ).length,
// Make sure that link elements get serialized correctly by innerHTML
// This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
+ htmlSerialize: !!div.getElementsByTagName( "link" ).length,
// Get the style information from getAttribute
- // (IE uses .cssText insted)
- style: /red/.test( a.getAttribute("style") ),
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
// Make sure that URLs aren't manipulated
// (IE normalizes it by default)
- hrefNormalized: a.getAttribute("href") === "/a",
+ hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
// Make sure that element opacity exists
// (IE uses filter instead)
@@ -964,156 +1203,183 @@ return (window.jQuery = window.$ = jQuery);
// Make sure that if no value is specified for a checkbox
// that it defaults to "on".
// (WebKit defaults to "" instead)
- checkOn: div.getElementsByTagName("input")[0].value === "on",
+ checkOn: ( input.value === "on" ),
// Make sure that a selected-by-default option has a working selected property.
// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
optSelected: opt.selected,
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
// Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
deleteExpando: true,
- optDisabled: false,
- checkClone: false,
- scriptEval: false,
noCloneEvent: true,
- boxModel: null,
inlineBlockNeedsLayout: false,
shrinkWrapBlocks: false,
- reliableHiddenOffsets: true
+ reliableMarginRight: true
};
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
// Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as diabled)
+ // (WebKit marks them as disabled)
select.disabled = true;
- jQuery.support.optDisabled = !opt.disabled;
-
- script.type = "text/javascript";
- try {
- script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
- } catch(e) {}
-
- root.insertBefore( script, root.firstChild );
-
- // Make sure that the execution of code works by injecting a script
- // tag with appendChild/createTextNode
- // (IE doesn't support this, fails, and uses .text instead)
- if ( window[ id ] ) {
- jQuery.support.scriptEval = true;
- delete window[ id ];
- }
+ support.optDisabled = !opt.disabled;
// Test to see if it's possible to delete an expando from an element
// Fails in Internet Explorer
try {
- delete script.test;
-
- } catch(e) {
- jQuery.support.deleteExpando = false;
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
}
- root.removeChild( script );
-
- if ( div.attachEvent && div.fireEvent ) {
- div.attachEvent("onclick", function click() {
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", function click() {
// Cloning a node shouldn't copy over any
// bound event handlers (IE does this)
- jQuery.support.noCloneEvent = false;
- div.detachEvent("onclick", click);
+ support.noCloneEvent = false;
+ div.detachEvent( "onclick", click );
});
- div.cloneNode(true).fireEvent("onclick");
+ div.cloneNode( true ).fireEvent( "onclick" );
}
- div = document.createElement("div");
- div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
+ // Check if a radio maintains it's value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
- var fragment = document.createDocumentFragment();
+ input.setAttribute("checked", "checked");
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
fragment.appendChild( div.firstChild );
// WebKit doesn't clone checked state correctly in fragments
- jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ div.innerHTML = "";
// Figure out if the W3C box model works as expected
- // document.body must exist before we can do this
- jQuery(function() {
- var div = document.createElement("div"),
- body = document.getElementsByTagName("body")[0];
-
- // Frameset documents with no body should not run this code
- if ( !body ) {
- return;
- }
-
- div.style.width = div.style.paddingLeft = "1px";
- body.appendChild( div );
- jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
-
- if ( "zoom" in div.style ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.style.display = "inline";
- div.style.zoom = 1;
- jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "";
- div.innerHTML = "<div style='width:4px;'></div>";
- jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
- }
-
- div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
- var tds = div.getElementsByTagName("td");
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0;
-
- tds[0].style.display = "";
- tds[1].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE < 8 fail this test)
- jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
- div.innerHTML = "";
-
- body.removeChild( div ).style.display = "none";
- div = tds = null;
- });
+ div.style.width = div.style.paddingLeft = "1px";
+
+ // We use our own, invisible, body
+ body = document.createElement( "body" );
+ bodyStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ // Set background to avoid IE crashes when removing (#9028)
+ background: "none"
+ };
+ for ( i in bodyStyle ) {
+ body.style[ i ] = bodyStyle[ i ];
+ }
+ body.appendChild( div );
+ documentElement.insertBefore( body, documentElement.firstChild );
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ support.boxModel = div.offsetWidth === 2;
+
+ if ( "zoom" in div.style ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.style.display = "inline";
+ div.style.zoom = 1;
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "";
+ div.innerHTML = "<div style='width:4px;'></div>";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+ }
+
+ div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName( "td" );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE < 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+ div.innerHTML = "";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ marginDiv = document.createElement( "div" );
+ marginDiv.style.width = "0";
+ marginDiv.style.marginRight = "0";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+ }
+
+ // Remove the body element we added
+ body.innerHTML = "";
+ documentElement.removeChild( body );
// Technique from Juriy Zaytsev
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-bro…
- var eventSupported = function( eventName ) {
- var el = document.createElement("div");
- eventName = "on" + eventName;
-
- var isSupported = (eventName in el);
- if ( !isSupported ) {
- el.setAttribute(eventName, "return;");
- isSupported = typeof el[eventName] === "function";
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for( i in {
+ submit: 1,
+ change: 1,
+ focusin: 1
+ } ) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
}
- el = null;
+ }
- return isSupported;
- };
+ return support;
+})();
- jQuery.support.submitBubbles = eventSupported("submit");
- jQuery.support.changeBubbles = eventSupported("change");
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
- // release memory in IE
- root = script = div = all = a = null;
-})();
-var windowData = {},
- rbrace = /^(?:\{.*\}|\[.*\])$/;
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+ rmultiDash = /([a-z])([A-Z])/g;
jQuery.extend({
cache: {},
@@ -1121,8 +1387,9 @@ jQuery.extend({
// Please use with caution
uuid: 0,
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + jQuery.now(),
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
// The following elements throw uncatchable exceptions if you
// attempt to add expando properties to them.
@@ -1133,103 +1400,185 @@ jQuery.extend({
"applet": true
},
- data: function( elem, name, data ) {
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
- elem = elem == window ?
- windowData :
- elem;
+ var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
- var isNode = elem.nodeType,
- id = isNode ? elem[ jQuery.expando ] : null,
- cache = jQuery.cache, thisCache;
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
- if ( isNode && !id && typeof name === "string" && data === undefined ) {
- return;
- }
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
- // Get the data from the object directly
- if ( !isNode ) {
- cache = elem;
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
- // Compute a unique ID for the element
- } else if ( !id ) {
- elem[ jQuery.expando ] = id = ++jQuery.uuid;
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+ return;
}
- // Avoid generating a new cache unless none exists and we
- // want to manipulate it.
- if ( typeof name === "object" ) {
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
if ( isNode ) {
- cache[ id ] = jQuery.extend(cache[ id ], name);
-
+ elem[ jQuery.expando ] = id = ++jQuery.uuid;
} else {
- jQuery.extend( cache, name );
+ id = jQuery.expando;
}
+ }
- } else if ( isNode && !cache[ id ] ) {
+ if ( !cache[ id ] ) {
cache[ id ] = {};
+
+ // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+ // metadata on plain JS objects when the object is serialized using
+ // JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+ } else {
+ cache[ id ] = jQuery.extend(cache[ id ], name);
+ }
}
- thisCache = isNode ? cache[ id ] : cache;
+ thisCache = cache[ id ];
+
+ // Internal jQuery data is stored in a separate object inside the object's data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data
+ if ( pvt ) {
+ if ( !thisCache[ internalKey ] ) {
+ thisCache[ internalKey ] = {};
+ }
+
+ thisCache = thisCache[ internalKey ];
+ }
- // Prevent overriding the named cache with undefined values
if ( data !== undefined ) {
- thisCache[ name ] = data;
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+ // not attempt to inspect the internal events object using jQuery.data, as this
+ // internal data object is undocumented and subject to change.
+ if ( name === "events" && !thisCache[name] ) {
+ return thisCache[ internalKey ] && thisCache[ internalKey ].events;
}
- return typeof name === "string" ? thisCache[ name ] : thisCache;
+ return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
},
- removeData: function( elem, name ) {
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
- elem = elem == window ?
- windowData :
- elem;
+ var internalKey = jQuery.expando, isNode = elem.nodeType,
- var isNode = elem.nodeType,
- id = isNode ? elem[ jQuery.expando ] : elem,
- cache = jQuery.cache,
- thisCache = isNode ? cache[ id ] : id;
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+
+ // See jQuery.data for more information
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
- // If we want to remove a specific section of the element's data
if ( name ) {
+ var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
if ( thisCache ) {
- // Remove the section of cache data
delete thisCache[ name ];
- // If we've removed all the data, remove the element's cache
- if ( isNode && jQuery.isEmptyObject(thisCache) ) {
- jQuery.removeData( elem );
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !isEmptyDataObject(thisCache) ) {
+ return;
}
}
+ }
+
+ // See jQuery.data for more information
+ if ( pvt ) {
+ delete cache[ id ][ internalKey ];
- // Otherwise, we want to remove all of the element's data
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject(cache[ id ]) ) {
+ return;
+ }
+ }
+
+ var internalCache = cache[ id ][ internalKey ];
+
+ // Browsers that fail expando deletion also refuse to delete expandos on
+ // the window, but it will allow it on all other JS objects; other browsers
+ // don't care
+ if ( jQuery.support.deleteExpando || cache != window ) {
+ delete cache[ id ];
} else {
- if ( isNode && jQuery.support.deleteExpando ) {
- delete elem[ jQuery.expando ];
+ cache[ id ] = null;
+ }
+ // We destroyed the entire user cache at once because it's faster than
+ // iterating through each key, but we need to continue to persist internal
+ // data if it existed
+ if ( internalCache ) {
+ cache[ id ] = {};
+ // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+ // metadata on plain JS objects when the object is serialized using
+ // JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+
+ cache[ id ][ internalKey ] = internalCache;
+
+ // Otherwise, we need to eliminate the expando on the node to avoid
+ // false lookups in the cache for entries that no longer exist
+ } else if ( isNode ) {
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
-
- // Completely remove the data cache
- } else if ( isNode ) {
- delete cache[ id ];
-
- // Remove all fields from the object
} else {
- for ( var n in elem ) {
- delete elem[ n ];
- }
+ elem[ jQuery.expando ] = null;
}
}
},
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
// A method for determining if a DOM node can handle the data expando
acceptData: function( elem ) {
if ( elem.nodeName ) {
@@ -1250,15 +1599,18 @@ jQuery.fn.extend({
if ( typeof key === "undefined" ) {
if ( this.length ) {
- var attr = this[0].attributes, name;
data = jQuery.data( this[0] );
- for ( var i = 0, l = attr.length; i < l; i++ ) {
- name = attr[i].name;
+ if ( this[0].nodeType === 1 ) {
+ var attr = this[0].attributes, name;
+ for ( var i = 0, l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.substring(5) );
- if ( name.indexOf( "data-" ) === 0 ) {
- name = name.substr( 5 );
- dataAttr( this[0], name, data[ name ] );
+ dataAttr( this[0], name, data[ name ] );
+ }
}
}
}
@@ -1310,7 +1662,9 @@ function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
- data = elem.getAttribute( "data-" + key );
+ var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+
+ data = elem.getAttribute( name );
if ( typeof data === "string" ) {
try {
@@ -1333,38 +1687,92 @@ function dataAttr( elem, key, data ) {
return data;
}
+// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+// property to be considered empty objects; this property always exists in
+// order to make sure JSON.stringify does not expose internal metadata
+function isEmptyDataObject( obj ) {
+ for ( var name in obj ) {
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+ return true;
+}
-jQuery.extend({
- queue: function( elem, type, data ) {
- if ( !elem ) {
- return;
- }
- type = (type || "fx") + "queue";
- var q = jQuery.data( elem, type );
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( !data ) {
- return q || [];
- }
+function handleQueueMarkDefer( elem, type, src ) {
+ var deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ defer = jQuery.data( elem, deferDataKey, undefined, true );
+ if ( defer &&
+ ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+ ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+ // Give room for hard-coded callbacks to fire first
+ // and eventually mark/queue something else on the element
+ setTimeout( function() {
+ if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+ !jQuery.data( elem, markDataKey, undefined, true ) ) {
+ jQuery.removeData( elem, deferDataKey, true );
+ defer.resolve();
+ }
+ }, 0 );
+ }
+}
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery.data( elem, type, jQuery.makeArray(data) );
+jQuery.extend({
- } else {
- q.push( data );
+ _mark: function( elem, type ) {
+ if ( elem ) {
+ type = (type || "fx") + "mark";
+ jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
}
+ },
- return q;
+ _unmark: function( force, elem, type ) {
+ if ( force !== true ) {
+ type = elem;
+ elem = force;
+ force = false;
+ }
+ if ( elem ) {
+ type = type || "fx";
+ var key = type + "mark",
+ count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+ if ( count ) {
+ jQuery.data( elem, key, count, true );
+ } else {
+ jQuery.removeData( elem, key, true );
+ handleQueueMarkDefer( elem, type, "mark" );
+ }
+ }
+ },
+
+ queue: function( elem, type, data ) {
+ if ( elem ) {
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type, undefined, true );
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+ } else {
+ q.push( data );
+ }
+ }
+ return q || [];
+ }
},
dequeue: function( elem, type ) {
type = type || "fx";
var queue = jQuery.queue( elem, type ),
- fn = queue.shift();
+ fn = queue.shift(),
+ defer;
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === "inprogress" ) {
@@ -1382,6 +1790,11 @@ jQuery.extend({
jQuery.dequeue(elem, type);
});
}
+
+ if ( !queue.length ) {
+ jQuery.removeData( elem, type + "queue", true );
+ handleQueueMarkDefer( elem, type, "queue" );
+ }
}
});
@@ -1395,7 +1808,7 @@ jQuery.fn.extend({
if ( data === undefined ) {
return jQuery.queue( this[0], type );
}
- return this.each(function( i ) {
+ return this.each(function() {
var queue = jQuery.queue( this, type, data );
if ( type === "fx" && queue[0] !== "inprogress" ) {
@@ -1408,7 +1821,6 @@ jQuery.fn.extend({
jQuery.dequeue( this, type );
});
},
-
// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
@@ -1422,61 +1834,93 @@ jQuery.fn.extend({
}, time );
});
},
-
clearQueue: function( type ) {
return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, object ) {
+ if ( typeof type !== "string" ) {
+ object = type;
+ type = undefined;
+ }
+ type = type || "fx";
+ var defer = jQuery.Deferred(),
+ elements = this,
+ i = elements.length,
+ count = 1,
+ deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ tmp;
+ function resolve() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ }
+ while( i-- ) {
+ if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+ ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+ jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+ jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+ count++;
+ tmp.done( resolve );
+ }
+ }
+ resolve();
+ return defer.promise();
}
});
-var rclass = /[\n\t]/g,
- rspaces = /\s+/,
+var rclass = /[\n\t\r]/g,
+ rspace = /\s+/,
rreturn = /\r/g,
- rspecialurl = /^(?:href|src|style)$/,
rtype = /^(?:button|input)$/i,
rfocusable = /^(?:button|input|object|select|textarea)$/i,
rclickable = /^a(?:rea)?$/i,
- rradiocheck = /^(?:radio|checkbox)$/i;
-
-jQuery.props = {
- "for": "htmlFor",
- "class": "className",
- readonly: "readOnly",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- rowspan: "rowSpan",
- colspan: "colSpan",
- tabindex: "tabIndex",
- usemap: "useMap",
- frameborder: "frameBorder"
-};
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ rinvalidChar = /\:/,
+ formHook, boolHook;
jQuery.fn.extend({
attr: function( name, value ) {
return jQuery.access( this, name, value, true, jQuery.attr );
},
- removeAttr: function( name, fn ) {
- return this.each(function(){
- jQuery.attr( this, name, "" );
- if ( this.nodeType === 1 ) {
- this.removeAttribute( name );
- }
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.prop );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
});
},
addClass: function( value ) {
- if ( jQuery.isFunction(value) ) {
+ if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
- self.addClass( value.call(this, i, self.attr("class")) );
+ self.addClass( value.call(this, i, self.attr("class") || "") );
});
}
if ( value && typeof value === "string" ) {
- var classNames = (value || "").split( rspaces );
+ var classNames = (value || "").split( rspace );
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
@@ -1512,7 +1956,7 @@ jQuery.fn.extend({
}
if ( (value && typeof value === "string") || value === undefined ) {
- var classNames = (value || "").split( rspaces );
+ var classNames = (value || "").split( rspace );
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
@@ -1553,7 +1997,7 @@ jQuery.fn.extend({
i = 0,
self = jQuery( this ),
state = stateVal,
- classNames = value.split( rspaces );
+ classNames = value.split( rspace );
while ( (className = classNames[ i++ ]) ) {
// check each className given, space seperated list
@@ -1564,11 +2008,11 @@ jQuery.fn.extend({
} else if ( type === "undefined" || type === "boolean" ) {
if ( this.className ) {
// store className if set
- jQuery.data( this, "__className__", this.className );
+ jQuery._data( this, "__className__", this.className );
}
// toggle whole className
- this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
}
});
},
@@ -1585,78 +2029,36 @@ jQuery.fn.extend({
},
val: function( value ) {
+ var hooks, ret,
+ elem = this[0];
+
if ( !arguments.length ) {
- var elem = this[0];
-
if ( elem ) {
- if ( jQuery.nodeName( elem, "option" ) ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
-
- // We need to handle select boxes special
- if ( jQuery.nodeName( elem, "select" ) ) {
- var index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
+ hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery(option).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
}
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
-
-
- // Everything else, we just grab the value
return (elem.value || "").replace(rreturn, "");
-
}
return undefined;
}
- var isFunction = jQuery.isFunction(value);
+ var isFunction = jQuery.isFunction( value );
- return this.each(function(i) {
- var self = jQuery(this), val = value;
+ return this.each(function( i ) {
+ var self = jQuery(this), val;
if ( this.nodeType !== 1 ) {
return;
}
if ( isFunction ) {
- val = value.call(this, i, self.val());
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
}
// Treat null/undefined as ""; convert numbers to string
@@ -1664,34 +2066,89 @@ jQuery.fn.extend({
val = "";
} else if ( typeof val === "number" ) {
val += "";
- } else if ( jQuery.isArray(val) ) {
- val = jQuery.map(val, function (value) {
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
return value == null ? "" : value + "";
});
}
- if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
- this.checked = jQuery.inArray( self.val(), val ) >= 0;
+ hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value,
+ index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+ if ( one && !values.length && options.length ) {
+ return jQuery( options[ index ] ).val();
+ }
+
+ return values;
+ },
- } else if ( jQuery.nodeName( this, "select" ) ) {
- var values = jQuery.makeArray(val);
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
- jQuery( "option", this ).each(function() {
+ jQuery(elem).find("option").each(function() {
this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
});
if ( !values.length ) {
- this.selectedIndex = -1;
+ elem.selectedIndex = -1;
}
-
- } else {
- this.value = val;
+ return values;
}
- });
- }
-});
+ }
+ },
-jQuery.extend({
attrFn: {
val: true,
css: true,
@@ -1702,121 +2159,349 @@ jQuery.extend({
height: true,
offset: true
},
-
+
+ attrFix: {
+ // Always normalize to ensure hook usage
+ tabindex: "tabIndex"
+ },
+
attr: function( elem, name, value, pass ) {
- // don't set attributes on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ var nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
return undefined;
}
if ( pass && name in jQuery.attrFn ) {
- return jQuery(elem)[name](value);
+ return jQuery( elem )[ name ]( value );
}
- var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
- // Whether we are setting (or getting)
- set = value !== undefined;
+ // Fallback to prop when attributes are not supported
+ if ( !("getAttribute" in elem) ) {
+ return jQuery.prop( elem, name, value );
+ }
- // Try to normalize/fix the name
- name = notxml && jQuery.props[ name ] || name;
+ var ret, hooks,
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
- // These attributes require special treatment
- var special = rspecialurl.test( name );
+ // Normalize the name if needed
+ name = notxml && jQuery.attrFix[ name ] || name;
- // Safari mis-reports the default selected property of an option
- // Accessing the parent's selectedIndex property fixes it
- if ( name === "selected" && !jQuery.support.optSelected ) {
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
+ hooks = jQuery.attrHooks[ name ];
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
+ if ( !hooks ) {
+ // Use boolHook for boolean attributes
+ if ( rboolean.test( name ) &&
+ (typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) {
+
+ hooks = boolHook;
+
+ // Use formHook for forms and if the name contains certain characters
+ } else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
+ hooks = formHook;
}
}
- // If applicable, access the attribute via the DOM 0 way
- // 'in' checks fail in Blackberry 4.7 #6931
- if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
- if ( set ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- }
+ if ( value !== undefined ) {
- if ( value === null ) {
- if ( elem.nodeType === 1 ) {
- elem.removeAttribute( name );
- }
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return undefined;
- } else {
- elem[ name ] = value;
- }
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, "" + value );
+ return value;
}
- // browsers index elements by id/name on forms, give priority to attributes.
- if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
- return elem.getAttributeNode( name ).nodeValue;
+ } else if ( hooks && "get" in hooks && notxml ) {
+ return hooks.get( elem, name );
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, name ) {
+ var propName;
+ if ( elem.nodeType === 1 ) {
+ name = jQuery.attrFix[ name ] || name;
+
+ if ( jQuery.support.getSetAttribute ) {
+ // Use removeAttribute in browsers that support it
+ elem.removeAttribute( name );
+ } else {
+ jQuery.attr( elem, name, "" );
+ elem.removeAttributeNode( elem.getAttributeNode( name ) );
}
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabind…
- if ( name === "tabIndex" ) {
- var attributeNode = elem.getAttributeNode( "tabIndex" );
+ // Set corresponding property to false for boolean attributes
+ if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+ elem[ propName ] = false;
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabind…
+ var attributeNode = elem.getAttributeNode("tabIndex");
return attributeNode && attributeNode.specified ?
- attributeNode.value :
+ parseInt( attributeNode.value, 10 ) :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
+ }
+ },
+
+ propFix: {
+ tabindex: "tabIndex",
+ readonly: "readOnly",
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder",
+ contenteditable: "contentEditable"
+ },
+
+ prop: function( elem, name, value ) {
+ var nType = elem.nodeType;
- return elem[ name ];
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return undefined;
}
- if ( !jQuery.support.style && notxml && name === "style" ) {
- if ( set ) {
- elem.style.cssText = "" + value;
+ var ret, hooks,
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // Try to normalize/fix the name
+ name = notxml && jQuery.propFix[ name ] || name;
+
+ hooks = jQuery.propHooks[ name ];
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return (elem[ name ] = value);
}
- return elem.style.cssText;
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
}
+ },
+
+ propHooks: {}
+});
- if ( set ) {
- // convert the value to a string (all browsers do this but IE) see #1070
- elem.setAttribute( name, "" + value );
+// Hook for boolean attributes
+boolHook = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ return elem[ jQuery.propFix[ name ] || name ] ?
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = value;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
}
+ return name;
+ }
+};
- // Ensure that missing attributes return undefined
- // Blackberry 4.7 returns "" from getAttribute #6938
- if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
- return undefined;
+// Use the value property for back compat
+// Use the formHook for button elements in IE6/7 (#1954)
+jQuery.attrHooks.value = {
+ get: function( elem, name ) {
+ if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+ return formHook.get( elem, name );
}
+ return elem.value;
+ },
+ set: function( elem, value, name ) {
+ if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+ return formHook.set( elem, value, name );
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+};
- var attr = !jQuery.support.hrefNormalized && notxml && special ?
- // Some attributes require a special call on IE
- elem.getAttribute( name, 2 ) :
- elem.getAttribute( name );
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
- // Non-existent attributes return null, we normalize to undefined
- return attr === null ? undefined : attr;
- }
+ // propFix is more comprehensive and contains all fixes
+ jQuery.attrFix = jQuery.propFix;
+
+ // Use this for any attribute on a form in IE6/7
+ formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ ret = elem.getAttributeNode( name );
+ // Return undefined if nodeValue is empty string
+ return ret && ret.nodeValue !== "" ?
+ ret.nodeValue :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Check form objects in IE (multiple bugs related)
+ // Only use nodeValue if the attribute node exists on the form
+ var ret = elem.getAttributeNode( name );
+ if ( ret ) {
+ ret.nodeValue = value;
+ return value;
+ }
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return (elem.style.cssText = "" + value);
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+ });
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+ }
+ }
+ });
});
-var rnamespaces = /\.(.*)$/,
+var hasOwn = Object.prototype.hasOwnProperty,
+ rnamespaces = /\.(.*)$/,
rformElems = /^(?:textarea|input|select)$/i,
rperiod = /\./g,
- rspace = / /g,
+ rspaces = / /g,
rescape = /[^\w\s.|`]/g,
fcleanup = function( nm ) {
return nm.replace(rescape, "\\$&");
- },
- focusCounts = { focusin: 0, focusout: 0 };
+ };
/*
* A number of helper functions used for managing events.
@@ -1832,17 +2517,11 @@ jQuery.event = {
return;
}
- // For whatever reason, IE has trouble passing the window object
- // around, causing it to be cloned in the process
- if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) {
- elem = window;
- }
-
if ( handler === false ) {
handler = returnFalse;
} else if ( !handler ) {
// Fixes bug #7229. Fix recommended by jdalton
- return;
+ return;
}
var handleObjIn, handleObj;
@@ -1858,7 +2537,7 @@ jQuery.event = {
}
// Init the element's event structure
- var elemData = jQuery.data( elem );
+ var elemData = jQuery._data( elem );
// If no elemData is found then we must be trying to bind to one of the
// banned noData elements
@@ -1866,34 +2545,18 @@ jQuery.event = {
return;
}
- // Use a key less likely to result in collisions for plain JS objects.
- // Fixes bug #7150.
- var eventKey = elem.nodeType ? "events" : "__events__",
- events = elemData[ eventKey ],
+ var events = elemData.events,
eventHandle = elemData.handle;
-
- if ( typeof events === "function" ) {
- // On plain objects events is a fn that holds the the data
- // which prevents this data from being JSON serialized
- // the function does not need to be called, it just contains the data
- eventHandle = events.handle;
- events = events.events;
-
- } else if ( !events ) {
- if ( !elem.nodeType ) {
- // On plain objects, create a fn that acts as the holder
- // of the values to avoid JSON serialization of event data
- elemData[ eventKey ] = elemData = function(){};
- }
+ if ( !events ) {
elemData.events = events = {};
}
if ( !eventHandle ) {
- elemData.handle = eventHandle = function() {
- // Handle the second event of a trigger and when
- // an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
@@ -1951,9 +2614,9 @@ jQuery.event = {
}
}
}
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
if ( !handleObj.handler.guid ) {
handleObj.handler.guid = handler.guid;
@@ -1963,7 +2626,7 @@ jQuery.event = {
// Add the function to the element's handler list
handlers.push( handleObj );
- // Keep track of which events have been used, for global triggering
+ // Keep track of which events have been used, for event optimization
jQuery.event.global[ type ] = true;
}
@@ -1985,18 +2648,12 @@ jQuery.event = {
}
var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
- eventKey = elem.nodeType ? "events" : "__events__",
- elemData = jQuery.data( elem ),
- events = elemData && elemData[ eventKey ];
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+ events = elemData && elemData.events;
if ( !elemData || !events ) {
return;
}
-
- if ( typeof events === "function" ) {
- elemData = events;
- events = events.events;
- }
// types is actually an event object here
if ( types && types.type ) {
@@ -2030,7 +2687,7 @@ jQuery.event = {
namespaces = type.split(".");
type = namespaces.shift();
- namespace = new RegExp("(^|\\.)" +
+ namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
}
@@ -2097,189 +2754,190 @@ jQuery.event = {
delete elemData.events;
delete elemData.handle;
- if ( typeof elemData === "function" ) {
- jQuery.removeData( elem, eventKey );
-
- } else if ( jQuery.isEmptyObject( elemData ) ) {
- jQuery.removeData( elem );
+ if ( jQuery.isEmptyObject( elemData ) ) {
+ jQuery.removeData( elem, undefined, true );
}
}
},
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
- // bubbling is internal
- trigger: function( event, data, elem /*, bubbling */ ) {
+ trigger: function( event, data, elem, onlyHandlers ) {
// Event object or event type
var type = event.type || event,
- bubbling = arguments[3];
+ namespaces = [],
+ exclusive;
- if ( !bubbling ) {
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- jQuery.extend( jQuery.Event(type), event ) :
- // Just the event type (string)
- jQuery.Event(type);
+ if ( type.indexOf("!") >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
- if ( type.indexOf("!") >= 0 ) {
- event.type = type = type.slice(0, -1);
- event.exclusive = true;
- }
+ if ( type.indexOf(".") >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
- // Handle a global trigger
- if ( !elem ) {
- // Don't bubble custom events when global (to avoid too much overhead)
- event.stopPropagation();
-
- // Only trigger if we've ever bound an event for it
- if ( jQuery.event.global[ type ] ) {
- jQuery.each( jQuery.cache, function() {
- if ( this.events && this.events[type] ) {
- jQuery.event.trigger( event, data, this.handle.elem );
- }
- });
- }
- }
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
- // Handle triggering a single element
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
- // don't do events on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
+ event.type = type;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+
+ // triggerHandler() and global events don't bubble or run the default action
+ if ( onlyHandlers || !elem ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
- // Clean up in case it is reused
- event.result = undefined;
- event.target = elem;
+ // Handle a global trigger
+ if ( !elem ) {
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ jQuery.each( jQuery.cache, function() {
+ // internalKey variable is just used to make it easier to find
+ // and potentially change this stuff later; currently it just
+ // points to jQuery.expando
+ var internalKey = jQuery.expando,
+ internalCache = this[ internalKey ];
+ if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+ jQuery.event.trigger( event, data, internalCache.handle.elem );
+ }
+ });
+ return;
+ }
- // Clone the incoming data, if any
- data = jQuery.makeArray( data );
- data.unshift( event );
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
}
- event.currentTarget = elem;
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ event.target = elem;
- // Trigger the event, it is assumed that "handle" is a function
- var handle = elem.nodeType ?
- jQuery.data( elem, "handle" ) :
- (jQuery.data( elem, "__events__" ) || {}).handle;
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
- if ( handle ) {
- handle.apply( elem, data );
- }
+ var cur = elem,
+ // IE doesn't like method names with a colon (#3533, #8272)
+ ontype = type.indexOf(":") < 0 ? "on" + type : "";
- var parent = elem.parentNode || elem.ownerDocument;
+ // Fire event on the current element, then bubble up the DOM tree
+ do {
+ var handle = jQuery._data( cur, "handle" );
- // Trigger an inline bound script
- try {
- if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
- if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
- event.result = false;
- event.preventDefault();
- }
+ event.currentTarget = cur;
+ if ( handle ) {
+ handle.apply( cur, data );
}
- // prevent IE from throwing an error for some elements with some event types, see #3533
- } catch (inlineError) {}
+ // Trigger an inline bound script
+ if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+ event.result = false;
+ event.preventDefault();
+ }
- if ( !event.isPropagationStopped() && parent ) {
- jQuery.event.trigger( event, data, parent, true );
+ // Bubble up to document, then to window
+ cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+ } while ( cur && !event.isPropagationStopped() );
- } else if ( !event.isDefaultPrevented() ) {
+ // If nobody prevented the default action, do it now
+ if ( !event.isDefaultPrevented() ) {
var old,
- target = event.target,
- targetType = type.replace( rnamespaces, "" ),
- isClick = jQuery.nodeName( target, "a" ) && targetType === "click",
- special = jQuery.event.special[ targetType ] || {};
+ special = jQuery.event.special[ type ] || {};
- if ( (!special._default || special._default.call( elem, event ) === false) &&
- !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
+ if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction)() check here because IE6/7 fails that test.
+ // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
try {
- if ( target[ targetType ] ) {
- // Make sure that we don't accidentally re-trigger the onFOO events
- old = target[ "on" + targetType ];
+ if ( ontype && elem[ type ] ) {
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
if ( old ) {
- target[ "on" + targetType ] = null;
+ elem[ ontype ] = null;
}
- jQuery.event.triggered = true;
- target[ targetType ]();
+ jQuery.event.triggered = type;
+ elem[ type ]();
}
-
- // prevent IE from throwing an error for some elements with some event types, see #3533
- } catch (triggerError) {}
+ } catch ( ieError ) {}
if ( old ) {
- target[ "on" + targetType ] = old;
+ elem[ ontype ] = old;
}
- jQuery.event.triggered = false;
+ jQuery.event.triggered = undefined;
}
}
+
+ return event.result;
},
handle: function( event ) {
- var all, handlers, namespaces, namespace_re, events,
- namespace_sort = [],
- args = jQuery.makeArray( arguments );
-
- event = args[0] = jQuery.event.fix( event || window.event );
+ event = jQuery.event.fix( event || window.event );
+ // Snapshot the handlers list since a called handler may add/remove events.
+ var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+ run_all = !event.exclusive && !event.namespace,
+ args = Array.prototype.slice.call( arguments, 0 );
+
+ // Use the fix-ed Event rather than the (read-only) native event
+ args[0] = event;
event.currentTarget = this;
- // Namespaced event handlers
- all = event.type.indexOf(".") < 0 && !event.exclusive;
-
- if ( !all ) {
- namespaces = event.type.split(".");
- event.type = namespaces.shift();
- namespace_sort = namespaces.slice(0).sort();
- namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- event.namespace = event.namespace || namespace_sort.join(".");
-
- events = jQuery.data(this, this.nodeType ? "events" : "__events__");
-
- if ( typeof events === "function" ) {
- events = events.events;
- }
-
- handlers = (events || {})[ event.type ];
-
- if ( events && handlers ) {
- // Clone the handlers to prevent manipulation
- handlers = handlers.slice(0);
-
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- var handleObj = handlers[ j ];
-
- // Filter the functions by class
- if ( all || namespace_re.test( handleObj.namespace ) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handleObj.handler;
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- var ret = handleObj.handler.apply( this, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
+
+ // Triggered event must 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event.
+ if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handleObj.handler;
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ var ret = handleObj.handler.apply( this, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
}
+ }
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
}
}
}
-
return event.result;
},
@@ -2318,8 +2976,9 @@ jQuery.event = {
// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && event.clientX != null ) {
- var doc = document.documentElement,
- body = document.body;
+ var eventDocument = event.target.ownerDocument || document,
+ doc = eventDocument.documentElement,
+ body = eventDocument.body;
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
@@ -2361,7 +3020,7 @@ jQuery.event = {
add: function( handleObj ) {
jQuery.event.add( this,
liveConvert( handleObj.origType, handleObj.selector ),
- jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+ jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
},
remove: function( handleObj ) {
@@ -2391,28 +3050,39 @@ jQuery.removeEvent = document.removeEventListener ?
if ( elem.removeEventListener ) {
elem.removeEventListener( type, handle, false );
}
- } :
+ } :
function( elem, type, handle ) {
if ( elem.detachEvent ) {
elem.detachEvent( "on" + type, handle );
}
};
-jQuery.Event = function( src ) {
+jQuery.Event = function( src, props ) {
// Allow instantiation without the 'new' keyword
if ( !this.preventDefault ) {
- return new jQuery.Event( src );
+ return new jQuery.Event( src, props );
}
// Event object
if ( src && src.type ) {
this.originalEvent = src;
this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
// Event type
} else {
this.type = src;
}
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
// timeStamp is buggy for some events on Firefox(#3843)
// So we won't rely on the native value
this.timeStamp = jQuery.now();
@@ -2438,7 +3108,7 @@ jQuery.Event.prototype = {
if ( !e ) {
return;
}
-
+
// if preventDefault exists run it on the original event
if ( e.preventDefault ) {
e.preventDefault();
@@ -2477,18 +3147,25 @@ var withinElement = function( event ) {
// Check if mouse(over|out) are still within the same parent element
var parent = event.relatedTarget;
+ // set the correct event type
+ event.type = event.data;
+
// Firefox sometimes assigns relatedTarget a XUL element
// which we cannot access the parentNode property of
try {
+
+ // Chrome does something similar, the parentNode property
+ // can be accessed but is null.
+ if ( parent && parent !== document && !parent.parentNode ) {
+ return;
+ }
+
// Traverse up the tree
while ( parent && parent !== this ) {
parent = parent.parentNode;
}
if ( parent !== this ) {
- // set the correct event type
- event.type = event.data;
-
// handle event if we actually just moused on to a non sub-element
jQuery.event.handle.apply( this, arguments );
}
@@ -2524,24 +3201,22 @@ if ( !jQuery.support.submitBubbles ) {
jQuery.event.special.submit = {
setup: function( data, namespaces ) {
- if ( this.nodeName.toLowerCase() !== "form" ) {
+ if ( !jQuery.nodeName( this, "form" ) ) {
jQuery.event.add(this, "click.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- e.liveFired = undefined;
- return trigger( "submit", this, arguments );
+ trigger( "submit", this, arguments );
}
});
-
+
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- e.liveFired = undefined;
- return trigger( "submit", this, arguments );
+ trigger( "submit", this, arguments );
}
});
@@ -2575,7 +3250,7 @@ if ( !jQuery.support.changeBubbles ) {
}).join("-") :
"";
- } else if ( elem.nodeName.toLowerCase() === "select" ) {
+ } else if ( jQuery.nodeName( elem, "select" ) ) {
val = elem.selectedIndex;
}
@@ -2589,14 +3264,14 @@ if ( !jQuery.support.changeBubbles ) {
return;
}
- data = jQuery.data( elem, "_change_data" );
+ data = jQuery._data( elem, "_change_data" );
val = getVal(elem);
// the current data will be also retrieved by beforeactivate
if ( e.type !== "focusout" || elem.type !== "radio" ) {
- jQuery.data( elem, "_change_data", val );
+ jQuery._data( elem, "_change_data", val );
}
-
+
if ( data === undefined || val === data ) {
return;
}
@@ -2604,33 +3279,33 @@ if ( !jQuery.support.changeBubbles ) {
if ( data != null || val ) {
e.type = "change";
e.liveFired = undefined;
- return jQuery.event.trigger( e, arguments[1], elem );
+ jQuery.event.trigger( e, arguments[1], elem );
}
};
jQuery.event.special.change = {
filters: {
- focusout: testChange,
+ focusout: testChange,
beforedeactivate: testChange,
click: function( e ) {
- var elem = e.target, type = elem.type;
+ var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
- if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
- return testChange.call( this, e );
+ if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+ testChange.call( this, e );
}
},
// Change has to be called before submit
// Keydown will be called before keypress, which is used in submit-event delegation
keydown: function( e ) {
- var elem = e.target, type = elem.type;
+ var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
- if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+ if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
type === "select-multiple" ) {
- return testChange.call( this, e );
+ testChange.call( this, e );
}
},
@@ -2639,7 +3314,7 @@ if ( !jQuery.support.changeBubbles ) {
// information
beforeactivate: function( e ) {
var elem = e.target;
- jQuery.data( elem, "_change_data", getVal(elem) );
+ jQuery._data( elem, "_change_data", getVal(elem) );
}
},
@@ -2669,36 +3344,58 @@ if ( !jQuery.support.changeBubbles ) {
}
function trigger( type, elem, args ) {
- args[0].type = type;
- return jQuery.event.handle.apply( elem, args );
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ // Don't pass args or remember liveFired; they apply to the donor event.
+ var event = jQuery.extend( {}, args[ 0 ] );
+ event.type = type;
+ event.originalEvent = {};
+ event.liveFired = undefined;
+ jQuery.event.handle.call( elem, event );
+ if ( event.isDefaultPrevented() ) {
+ args[ 0 ].preventDefault();
+ }
}
// Create "bubbling" focus and blur events
-if ( document.addEventListener ) {
+if ( !jQuery.support.focusinBubbles ) {
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0;
+
jQuery.event.special[ fix ] = {
setup: function() {
- if ( focusCounts[fix]++ === 0 ) {
+ if ( attaches++ === 0 ) {
document.addEventListener( orig, handler, true );
}
- },
- teardown: function() {
- if ( --focusCounts[fix] === 0 ) {
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
document.removeEventListener( orig, handler, true );
}
}
};
- function handler( e ) {
- e = jQuery.event.fix( e );
+ function handler( donor ) {
+ // Donor event is always a native one; fix it and switch its type.
+ // Let focusin/out handler cancel the donor focus/blur event.
+ var e = jQuery.event.fix( donor );
e.type = fix;
- return jQuery.event.trigger( e, null, e.target );
+ e.originalEvent = {};
+ jQuery.event.trigger( e, null, e.target );
+ if ( e.isDefaultPrevented() ) {
+ donor.preventDefault();
+ }
}
});
}
jQuery.each(["bind", "one"], function( i, name ) {
jQuery.fn[ name ] = function( type, data, fn ) {
+ var handler;
+
// Handle object literals
if ( typeof type === "object" ) {
for ( var key in type ) {
@@ -2706,16 +3403,21 @@ jQuery.each(["bind", "one"], function( i, name ) {
}
return this;
}
-
- if ( jQuery.isFunction( data ) || data === false ) {
+
+ if ( arguments.length === 2 || data === false ) {
fn = data;
data = undefined;
}
- var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
- jQuery( this ).unbind( event, handler );
- return fn.apply( this, arguments );
- }) : fn;
+ if ( name === "one" ) {
+ handler = function( event ) {
+ jQuery( this ).unbind( event, handler );
+ return fn.apply( this, arguments );
+ };
+ handler.guid = fn.guid || jQuery.guid++;
+ } else {
+ handler = fn;
+ }
if ( type === "unload" && name !== "one" ) {
this.one( type, data, fn );
@@ -2746,20 +3448,20 @@ jQuery.fn.extend({
return this;
},
-
+
delegate: function( selector, types, data, fn ) {
return this.live( types, data, fn, selector );
},
-
+
undelegate: function( selector, types, fn ) {
if ( arguments.length === 0 ) {
- return this.unbind( "live" );
-
+ return this.unbind( "live" );
+
} else {
return this.die( types, null, fn, selector );
}
},
-
+
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
@@ -2768,35 +3470,34 @@ jQuery.fn.extend({
triggerHandler: function( type, data ) {
if ( this[0] ) {
- var event = jQuery.Event( type );
- event.preventDefault();
- event.stopPropagation();
- jQuery.event.trigger( event, data, this[0] );
- return event.result;
+ return jQuery.event.trigger( type, data, this[0], true );
}
},
toggle: function( fn ) {
// Save reference to arguments for access in closure
var args = arguments,
- i = 1;
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
// link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
while ( i < args.length ) {
- jQuery.proxy( fn, args[ i++ ] );
+ args[ i++ ].guid = guid;
}
- return this.click( jQuery.proxy( fn, function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- }));
+ return this.click( toggler );
},
hover: function( fnOver, fnOut ) {
@@ -2816,17 +3517,25 @@ jQuery.each(["live", "die"], function( i, name ) {
var type, i = 0, match, namespaces, preType,
selector = origSelector || this.selector,
context = origSelector ? this : jQuery( this.context );
-
+
if ( typeof types === "object" && !types.preventDefault ) {
for ( var key in types ) {
context[ name ]( key, data, types[key], selector );
}
-
+
return this;
}
- if ( jQuery.isFunction( data ) ) {
- fn = data;
+ if ( name === "die" && !types &&
+ origSelector && origSelector.charAt(0) === "." ) {
+
+ context.unbind( origSelector );
+
+ return this;
+ }
+
+ if ( data === false || jQuery.isFunction( data ) ) {
+ fn = data || returnFalse;
data = undefined;
}
@@ -2848,7 +3557,7 @@ jQuery.each(["live", "die"], function( i, name ) {
preType = type;
- if ( type === "focus" || type === "blur" ) {
+ if ( liveMap[ type ] ) {
types.push( liveMap[ type ] + namespaces );
type = type + namespaces;
@@ -2868,7 +3577,7 @@ jQuery.each(["live", "die"], function( i, name ) {
context.unbind( "live." + liveConvert( type, selector ), fn );
}
}
-
+
return this;
};
});
@@ -2877,17 +3586,13 @@ function liveHandler( event ) {
var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
elems = [],
selectors = [],
- events = jQuery.data( this, this.nodeType ? "events" : "__events__" );
-
- if ( typeof events === "function" ) {
- events = events.events;
- }
+ events = jQuery._data( this, "events" );
- // Make sure we avoid non-left-click bubbling in Firefox (#3861)
- if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+ // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+ if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
return;
}
-
+
if ( event.namespace ) {
namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
}
@@ -2915,7 +3620,7 @@ function liveHandler( event ) {
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
- if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) {
+ if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
elem = close.elem;
related = null;
@@ -2923,6 +3628,11 @@ function liveHandler( event ) {
if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
event.type = handleObj.preType;
related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+
+ // Make sure not to accidentally match a child element with the same selector
+ if ( related && jQuery.contains( elem, related ) ) {
+ related = elem;
+ }
}
if ( !related || related !== elem ) {
@@ -2961,7 +3671,7 @@ function liveHandler( event ) {
}
function liveConvert( type, selector ) {
- return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&");
+ return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
}
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
@@ -2985,27 +3695,11 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl
}
});
-// Prevent memory leaks in IE
-// Window isn't included so as not to unbind existing unload events
-// More info:
-// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
-if ( window.attachEvent && !window.addEventListener ) {
- jQuery(window).bind("unload", function() {
- for ( var id in jQuery.cache ) {
- if ( jQuery.cache[ id ].handle ) {
- // Try/Catch is to handle iframes being unloaded, see #4280
- try {
- jQuery.event.remove( jQuery.cache[ id ].handle.elem );
- } catch(e) {}
- }
- }
- });
-}
/*!
- * Sizzle CSS Selector Engine - v1.0
- * Copyright 2009, The Dojo Foundation
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
@@ -3015,7 +3709,9 @@ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
- baseHasDuplicate = true;
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rNonWord = /\W/;
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
@@ -3214,7 +3910,7 @@ Sizzle.find = function( expr, context, isXML ) {
match.splice( 1, 1 );
if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
+ match[1] = (match[1] || "").replace( rBackslash, "" );
set = Expr.find[ type ]( match, context, isXML );
if ( set != null ) {
@@ -3226,7 +3922,9 @@ Sizzle.find = function( expr, context, isXML ) {
}
if ( !set ) {
- set = context.getElementsByTagName( "*" );
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
}
return { set: set, expr: expr };
@@ -3334,9 +4032,9 @@ var Expr = Sizzle.selectors = {
ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
@@ -3351,13 +4049,16 @@ var Expr = Sizzle.selectors = {
attrHandle: {
href: function( elem ) {
return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
}
},
relative: {
"+": function(checkSet, part){
var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test( part ),
+ isTag = isPartStr && !rNonWord.test( part ),
isPartStrNotTag = isPartStr && !isTag;
if ( isTag ) {
@@ -3385,7 +4086,7 @@ var Expr = Sizzle.selectors = {
i = 0,
l = checkSet.length;
- if ( isPartStr && !/\W/.test( part ) ) {
+ if ( isPartStr && !rNonWord.test( part ) ) {
part = part.toLowerCase();
for ( ; i < l; i++ ) {
@@ -3419,7 +4120,7 @@ var Expr = Sizzle.selectors = {
doneName = done++,
checkFn = dirCheck;
- if ( typeof part === "string" && !/\W/.test(part) ) {
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
@@ -3433,7 +4134,7 @@ var Expr = Sizzle.selectors = {
doneName = done++,
checkFn = dirCheck;
- if ( typeof part === "string" && !/\W/.test( part ) ) {
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
@@ -3469,12 +4170,14 @@ var Expr = Sizzle.selectors = {
},
TAG: function( match, context ) {
- return context.getElementsByTagName( match[1] );
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
}
},
preFilter: {
CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace(/\\/g, "") + " ";
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
if ( isXML ) {
return match;
@@ -3482,7 +4185,7 @@ var Expr = Sizzle.selectors = {
for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
if ( !inplace ) {
result.push( elem );
}
@@ -3497,17 +4200,23 @@ var Expr = Sizzle.selectors = {
},
ID: function( match ) {
- return match[1].replace(/\\/g, "");
+ return match[1].replace( rBackslash, "" );
},
TAG: function( match, curLoop ) {
- return match[1].toLowerCase();
+ return match[1].replace( rBackslash, "" ).toLowerCase();
},
CHILD: function( match ) {
if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
@@ -3515,6 +4224,9 @@ var Expr = Sizzle.selectors = {
match[2] = (test[1] + (test[2] || 1)) - 0;
match[3] = test[3] - 0;
}
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
// TODO: Move to normal caching system
match[0] = done++;
@@ -3523,12 +4235,15 @@ var Expr = Sizzle.selectors = {
},
ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1].replace(/\\/g, "");
+ var name = match[1] = match[1].replace( rBackslash, "" );
if ( !isXML && Expr.attrMap[name] ) {
match[1] = Expr.attrMap[name];
}
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
if ( match[2] === "~=" ) {
match[4] = " " + match[4] + " ";
}
@@ -3582,7 +4297,9 @@ var Expr = Sizzle.selectors = {
selected: function( elem ) {
// Accessing this property makes selected-by-default
// options in Safari work properly
- elem.parentNode.selectedIndex;
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
return elem.selected === true;
},
@@ -3604,41 +4321,53 @@ var Expr = Sizzle.selectors = {
},
text: function( elem ) {
- return "text" === elem.type;
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
},
+
radio: function( elem ) {
- return "radio" === elem.type;
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
},
checkbox: function( elem ) {
- return "checkbox" === elem.type;
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
},
file: function( elem ) {
- return "file" === elem.type;
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
},
+
password: function( elem ) {
- return "password" === elem.type;
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
},
submit: function( elem ) {
- return "submit" === elem.type;
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
},
image: function( elem ) {
- return "image" === elem.type;
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
},
reset: function( elem ) {
- return "reset" === elem.type;
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "reset" === elem.type;
},
button: function( elem ) {
- return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
},
input: function( elem ) {
return (/input|select|textarea|button/i).test( elem.nodeName );
+ },
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
}
},
setFilters: {
@@ -3697,7 +4426,7 @@ var Expr = Sizzle.selectors = {
return true;
} else {
- Sizzle.error( "Syntax error, unrecognized expression: " + name );
+ Sizzle.error( name );
}
},
@@ -3891,6 +4620,16 @@ if ( document.documentElement.compareDocumentPosition ) {
} else {
sortOrder = function( a, b ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
var al, bl,
ap = [],
bp = [],
@@ -3898,13 +4637,8 @@ if ( document.documentElement.compareDocumentPosition ) {
bup = b.parentNode,
cur = aup;
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
// If the nodes are siblings (or identical) we can do a quick check
- } else if ( aup === bup ) {
+ if ( aup === bup ) {
return siblingCheck( a, b );
// If no parents were found then the nodes are disconnected
@@ -4087,13 +4821,47 @@ if ( document.querySelectorAll ) {
Sizzle = function( query, context, extra, seed ) {
context = context || document;
- // Make sure that attribute selectors are quoted
- query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
// Only use querySelectorAll on non-XML documents
// (ID selectors don't work in non-HTML documents)
if ( !seed && !Sizzle.isXML(context) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id === match[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
try {
return makeArray( context.querySelectorAll(query), extra );
} catch(qsaError) {}
@@ -4103,20 +4871,30 @@ if ( document.querySelectorAll ) {
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var old = context.getAttribute( "id" ),
- nid = old || id;
+ var oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
if ( !old ) {
context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
}
try {
- return makeArray( context.querySelectorAll( "#" + nid + " " + query ), extra );
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
} catch(pseudoError) {
} finally {
if ( !old ) {
- context.removeAttribute( "id" );
+ oldContext.removeAttribute( "id" );
}
}
}
@@ -4136,19 +4914,23 @@ if ( document.querySelectorAll ) {
(function(){
var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
- pseudoWorks = false;
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
- if ( matches ) {
Sizzle.matchesSelector = function( node, expr ) {
// Make sure that attribute selectors are quoted
expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
@@ -4156,7 +4938,15 @@ if ( document.querySelectorAll ) {
if ( !Sizzle.isXML( node ) ) {
try {
if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- return matches.call( node, expr );
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
}
} catch(e) {}
}
@@ -4334,21 +5124,41 @@ var runtil = /Until$/,
rmultiselector = /,/,
isSimple = /^.[^:#\[\.,]*$/,
slice = Array.prototype.slice,
- POS = jQuery.expr.match.POS;
+ POS = jQuery.expr.match.POS,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
jQuery.fn.extend({
find: function( selector ) {
+ var self = this,
+ i, l;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
var ret = this.pushStack( "", "find", selector ),
- length = 0;
+ length, n, r;
- for ( var i = 0, l = this.length; i < l; i++ ) {
+ for ( i = 0, l = this.length; i < l; i++ ) {
length = ret.length;
jQuery.find( selector, this[i], ret );
if ( i > 0 ) {
// Make sure that the results are unique
- for ( var n = length; n < ret.length; n++ ) {
- for ( var r = 0; r < length; r++ ) {
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
if ( ret[r] === ret[n] ) {
ret.splice(n--, 1);
break;
@@ -4379,14 +5189,17 @@ jQuery.fn.extend({
filter: function( selector ) {
return this.pushStack( winnow(this, selector, true), "filter", selector );
},
-
+
is: function( selector ) {
- return !!selector && jQuery.filter( selector, this ).length > 0;
+ return !!selector && ( typeof selector === "string" ?
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
},
closest: function( selectors, context ) {
var ret = [], i, l, cur = this[0];
-
+
+ // Array
if ( jQuery.isArray( selectors ) ) {
var match, selector,
matches = {},
@@ -4396,8 +5209,8 @@ jQuery.fn.extend({
for ( i = 0, l = selectors.length; i < l; i++ ) {
selector = selectors[i];
- if ( !matches[selector] ) {
- matches[selector] = jQuery.expr.match.POS.test( selector ) ?
+ if ( !matches[ selector ] ) {
+ matches[ selector ] = POS.test( selector ) ?
jQuery( selector, context || this.context ) :
selector;
}
@@ -4405,9 +5218,9 @@ jQuery.fn.extend({
while ( cur && cur.ownerDocument && cur !== context ) {
for ( selector in matches ) {
- match = matches[selector];
+ match = matches[ selector ];
- if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+ if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
ret.push({ selector: selector, elem: cur, level: level });
}
}
@@ -4420,8 +5233,10 @@ jQuery.fn.extend({
return ret;
}
- var pos = POS.test( selectors ) ?
- jQuery( selectors, context || this.context ) : null;
+ // String
+ var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
for ( i = 0, l = this.length; i < l; i++ ) {
cur = this[i];
@@ -4433,18 +5248,18 @@ jQuery.fn.extend({
} else {
cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context ) {
+ if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
break;
}
}
}
}
- ret = ret.length > 1 ? jQuery.unique(ret) : ret;
-
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
return this.pushStack( ret, "closest", selectors );
},
-
+
// Determine the position of an element within
// the matched set of elements
index: function( elem ) {
@@ -4462,8 +5277,8 @@ jQuery.fn.extend({
add: function( selector, context ) {
var set = typeof selector === "string" ?
- jQuery( selector, context || this.context ) :
- jQuery.makeArray( selector ),
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
all = jQuery.merge( this.get(), set );
return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
@@ -4524,8 +5339,13 @@ jQuery.each({
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
+ var ret = jQuery.map( this, fn, until ),
+ // The variable 'args' was introduced in
+ // https://github.com/jquery/jquery/commit/52a0238
+ // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+ // http://code.google.com/p/v8/issues/detail?id=1050
+ args = slice.call(arguments);
+
if ( !runtil.test( name ) ) {
selector = until;
}
@@ -4534,13 +5354,13 @@ jQuery.each({
ret = jQuery.filter( selector, ret );
}
- ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
ret = ret.reverse();
}
- return this.pushStack( ret, name, slice.call(arguments).join(",") );
+ return this.pushStack( ret, name, args.join(",") );
};
});
@@ -4554,7 +5374,7 @@ jQuery.extend({
jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
jQuery.find.matches(expr, elems);
},
-
+
dir: function( elem, dir, until ) {
var matched = [],
cur = elem[ dir ];
@@ -4596,6 +5416,11 @@ jQuery.extend({
// Implement the identical functionality for filter and not
function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
if ( jQuery.isFunction( qualifier ) ) {
return jQuery.grep(elements, function( elem, i ) {
var retVal = !!qualifier.call( elem, i, elem );
@@ -4634,9 +5459,10 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
rtbody = /<tbody/i,
rhtml = /<|&#?\w+;/,
rnocache = /<(?:script|object|embed|option|style)/i,
- // checked="checked" or checked (html5)
+ // checked="checked" or checked
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- raction = /\=([^="'>\s]+\/)>/g,
+ rscriptType = /\/(java|ecma)script/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
wrapMap = {
option: [ 1, "<select multiple='multiple'>", "</select>" ],
legend: [ 1, "<fieldset>", "</fieldset>" ],
@@ -4697,7 +5523,7 @@ jQuery.fn.extend({
}
return elem;
- }).append(this);
+ }).append( this );
}
return this;
@@ -4776,7 +5602,7 @@ jQuery.fn.extend({
return set;
}
},
-
+
// keepData is for internal use only--do not document
remove: function( selector, keepData ) {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
@@ -4787,11 +5613,11 @@ jQuery.fn.extend({
}
if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
+ elem.parentNode.removeChild( elem );
}
}
}
-
+
return this;
},
@@ -4807,48 +5633,17 @@ jQuery.fn.extend({
elem.removeChild( elem.firstChild );
}
}
-
+
return this;
},
- clone: function( events ) {
- // Do the clone
- var ret = this.map(function() {
- if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
- // IE copies events bound via attachEvent when
- // using cloneNode. Calling detachEvent on the
- // clone will also remove the events from the orignal
- // In order to get around this, we use innerHTML.
- // Unfortunately, this means some modifications to
- // attributes in IE that are actually only stored
- // as properties will not be copied (such as the
- // the name attribute on an input).
- var html = this.outerHTML,
- ownerDocument = this.ownerDocument;
-
- if ( !html ) {
- var div = ownerDocument.createElement("div");
- div.appendChild( this.cloneNode(true) );
- html = div.innerHTML;
- }
-
- return jQuery.clean([html.replace(rinlinejQuery, "")
- // Handle the case in IE 8 where action=/test/> self-closes a tag
- .replace(raction, '="$1">')
- .replace(rleadingWhitespace, "")], ownerDocument)[0];
- } else {
- return this.cloneNode(true);
- }
- });
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
- // Copy the events from the original to the clone
- if ( events === true ) {
- cloneCopyEvent( this, ret );
- cloneCopyEvent( this.find("*"), ret.find("*") );
- }
-
- // Return the cloned set
- return ret;
+ return this.map( function () {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
},
html: function( value ) {
@@ -4920,7 +5715,9 @@ jQuery.fn.extend({
}
});
} else {
- return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
+ return this.length ?
+ this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+ this;
}
},
@@ -4958,9 +5755,9 @@ jQuery.fn.extend({
} else {
results = jQuery.buildFragment( args, this, scripts );
}
-
+
fragment = results.fragment;
-
+
if ( fragment.childNodes.length === 1 ) {
first = fragment = fragment.firstChild;
} else {
@@ -4970,13 +5767,20 @@ jQuery.fn.extend({
if ( first ) {
table = table && jQuery.nodeName( first, "tr" );
- for ( var i = 0, l = this.length; i < l; i++ ) {
+ for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
callback.call(
table ?
root(this[i], first) :
this[i],
- i > 0 || results.cacheable || this.length > 1 ?
- fragment.cloneNode(true) :
+ // Make sure that we do not leak memory by inadvertently discarding
+ // the original fragment (which might have attached data) instead of
+ // using it; in addition, use the original fragment object for the last
+ // item instead of first because it can end up being emptied incorrectly
+ // in certain situations (Bug #8070).
+ // Fragments from the fragment cache must always be cloned and never used
+ // in place.
+ results.cacheable || (l > 1 && i < lastIndex) ?
+ jQuery.clone( fragment, true, true ) :
fragment
);
}
@@ -4998,48 +5802,109 @@ function root( elem, cur ) {
elem;
}
-function cloneCopyEvent(orig, ret) {
- var i = 0;
+function cloneCopyEvent( src, dest ) {
- ret.each(function() {
- if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
- return;
- }
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var internalKey = jQuery.expando,
+ oldData = jQuery.data( src ),
+ curData = jQuery.data( dest, oldData );
- var oldData = jQuery.data( orig[i++] ),
- curData = jQuery.data( this, oldData ),
- events = oldData && oldData.events;
+ // Switch to use the internal data object, if it exists, for the next
+ // stage of data copying
+ if ( (oldData = oldData[ internalKey ]) ) {
+ var events = oldData.events;
+ curData = curData[ internalKey ] = jQuery.extend({}, oldData);
if ( events ) {
delete curData.handle;
curData.events = {};
for ( var type in events ) {
- for ( var handler in events[ type ] ) {
- jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+ for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
}
}
}
- });
+ }
+}
+
+function cloneFixAttributes( src, dest ) {
+ var nodeName;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // clearAttributes removes the attributes, which we don't want,
+ // but also removes the attachEvent events, which we *do* want
+ if ( dest.clearAttributes ) {
+ dest.clearAttributes();
+ }
+
+ // mergeAttributes, in contrast, only merges back on the
+ // original attributes, not the events
+ if ( dest.mergeAttributes ) {
+ dest.mergeAttributes( src );
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 fail to clone children inside object elements that use
+ // the proprietary classid attribute value (rather than the type
+ // attribute) to identify the type of content to display
+ if ( nodeName === "object" ) {
+ dest.outerHTML = src.outerHTML;
+
+ } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+ if ( src.checked ) {
+ dest.defaultChecked = dest.checked = src.checked;
+ }
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+
+ // Event data gets referenced instead of copied if the expando
+ // gets copied too
+ dest.removeAttribute( jQuery.expando );
}
jQuery.buildFragment = function( args, nodes, scripts ) {
var fragment, cacheable, cacheresults,
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
- // Only cache "small" (1/2 KB) strings that are associated with the main document
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
// Cloning options loses the selected state, so don't cache them
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
- !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+ args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
cacheable = true;
+
cacheresults = jQuery.fragments[ args[0] ];
- if ( cacheresults ) {
- if ( cacheresults !== 1 ) {
- fragment = cacheresults;
- }
+ if ( cacheresults && cacheresults !== 1 ) {
+ fragment = cacheresults;
}
}
@@ -5068,25 +5933,101 @@ jQuery.each({
var ret = [],
insert = jQuery( selector ),
parent = this.length === 1 && this[0].parentNode;
-
+
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
return this;
-
+
} else {
for ( var i = 0, l = insert.length; i < l; i++ ) {
var elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
-
+
return this.pushStack( ret, name, insert.selector );
}
};
});
+function getAll( elem ) {
+ if ( "getElementsByTagName" in elem ) {
+ return elem.getElementsByTagName( "*" );
+
+ } else if ( "querySelectorAll" in elem ) {
+ return elem.querySelectorAll( "*" );
+
+ } else {
+ return [];
+ }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( elem.type === "checkbox" || elem.type === "radio" ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+ if ( jQuery.nodeName( elem, "input" ) ) {
+ fixDefaultChecked( elem );
+ } else if ( elem.getElementsByTagName ) {
+ jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+ }
+}
+
jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var clone = elem.cloneNode(true),
+ srcElements,
+ destElements,
+ i;
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+ // IE copies events bound via attachEvent when using cloneNode.
+ // Calling detachEvent on the clone will also remove the events
+ // from the original. In order to get around this, we use some
+ // proprietary methods to clear the events. Thanks to MooTools
+ // guys for this hotness.
+
+ cloneFixAttributes( elem, clone );
+
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName
+ // instead
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ // Weird iteration because IE will replace the length property
+ // with an element if you are cloning the body and one of the
+ // elements on the page has a name or id of "length"
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneFixAttributes( srcElements[i], destElements[i] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ cloneCopyEvent( elem, clone );
+
+ if ( deepDataAndEvents ) {
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneCopyEvent( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
clean: function( elems, context, fragment, scripts ) {
+ var checkScriptType;
+
context = context || document;
// !context.createElement fails in IE with an error but returns typeof 'object'
@@ -5094,7 +6035,7 @@ jQuery.extend({
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
}
- var ret = [];
+ var ret = [], j;
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === "number" ) {
@@ -5106,54 +6047,67 @@ jQuery.extend({
}
// Convert html string into DOM nodes
- if ( typeof elem === "string" && !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
-
- } else if ( typeof elem === "string" ) {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
+ if ( typeof elem === "string" ) {
+ if ( !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+ } else {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1></$2>");
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+ wrap = wrapMap[ tag ] || wrapMap._default,
+ depth = wrap[0],
+ div = context.createElement("div");
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
+ // String was a <table>, *may* have spurious <tbody>
+ var hasBody = rtbody.test(elem),
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
- for ( var j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ for ( j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
}
}
- }
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ elem = div.childNodes;
}
+ }
- elem = div.childNodes;
+ // Resets defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ var len;
+ if ( !jQuery.support.appendChecked ) {
+ if ( elem[0] && typeof (len = elem.length) === "number" ) {
+ for ( j = 0; j < len; j++ ) {
+ findInputs( elem[j] );
+ }
+ } else {
+ findInputs( elem );
+ }
}
if ( elem.nodeType ) {
@@ -5164,13 +6118,18 @@ jQuery.extend({
}
if ( fragment ) {
+ checkScriptType = function( elem ) {
+ return !elem.type || rscriptType.test( elem.type );
+ };
for ( i = 0; ret[i]; i++ ) {
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
+
} else {
if ( ret[i].nodeType === 1 ) {
- ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
+ var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
}
fragment.appendChild( ret[i] );
}
@@ -5179,40 +6138,45 @@ jQuery.extend({
return ret;
},
-
+
cleanData: function( elems ) {
- var data, id, cache = jQuery.cache,
- special = jQuery.event.special,
+ var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
deleteExpando = jQuery.support.deleteExpando;
-
+
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
continue;
}
id = elem[ jQuery.expando ];
-
+
if ( id ) {
- data = cache[ id ];
-
+ data = cache[ id ] && cache[ id ][ internalKey ];
+
if ( data && data.events ) {
for ( var type in data.events ) {
if ( special[ type ] ) {
jQuery.event.remove( elem, type );
+ // This is a shortcut to avoid jQuery.event.remove's overhead
} else {
jQuery.removeEvent( elem, type, data.handle );
}
}
+
+ // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+ if ( data.handle ) {
+ data.handle.elem = null;
+ }
}
-
+
if ( deleteExpando ) {
delete elem[ jQuery.expando ];
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
}
-
+
delete cache[ id ];
}
}
@@ -5227,7 +6191,7 @@ function evalScript( i, elem ) {
dataType: "script"
});
} else {
- jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+ jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
}
if ( elem.parentNode ) {
@@ -5241,9 +6205,12 @@ function evalScript( i, elem ) {
var ralpha = /alpha\([^)]*\)/i,
ropacity = /opacity=([^)]*)/,
rdashAlpha = /-([a-z])/ig,
- rupper = /([A-Z])/g,
+ // fixed for IE9, see #8346
+ rupper = /([A-Z]|^ms)/g,
rnumpx = /^-?\d+(?:px)?$/i,
rnum = /^-?\d/,
+ rrelNum = /^[+\-]=/,
+ rrelNumFilter = /[^+\-\.\de]+/g,
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssWidth = [ "Left", "Right" ],
@@ -5294,7 +6261,9 @@ jQuery.extend({
"fontWeight": true,
"opacity": true,
"zoom": true,
- "lineHeight": true
+ "lineHeight": true,
+ "widows": true,
+ "orphans": true
},
// Add in properties whose names you wish to fix before
@@ -5312,20 +6281,27 @@ jQuery.extend({
}
// Make sure that we're working with the right name
- var ret, origName = jQuery.camelCase( name ),
+ var ret, type, origName = jQuery.camelCase( name ),
style = elem.style, hooks = jQuery.cssHooks[ origName ];
name = jQuery.cssProps[ origName ] || origName;
// Check if we're setting a value
if ( value !== undefined ) {
+ type = typeof value;
+
// Make sure that NaN and null values aren't set. See: #7116
- if ( typeof value === "number" && isNaN( value ) || value == null ) {
+ if ( type === "number" && isNaN( value ) || value == null ) {
return;
}
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && rrelNum.test( value ) ) {
+ value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+ }
+
// If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
value += "px";
}
@@ -5350,11 +6326,17 @@ jQuery.extend({
},
css: function( elem, name, extra ) {
+ var ret, hooks;
+
// Make sure that we're working with the right name
- var ret, origName = jQuery.camelCase( name ),
- hooks = jQuery.cssHooks[ origName ];
+ name = jQuery.camelCase( name );
+ hooks = jQuery.cssHooks[ name ];
+ name = jQuery.cssProps[ name ] || name;
- name = jQuery.cssProps[ origName ] || origName;
+ // cssFloat needs a special treatment
+ if ( name === "cssFloat" ) {
+ name = "float";
+ }
// If a hook was provided get the computed value from there
if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
@@ -5362,7 +6344,7 @@ jQuery.extend({
// Otherwise, if a way to get the computed value exists, use that
} else if ( curCSS ) {
- return curCSS( elem, name, origName );
+ return curCSS( elem, name );
}
},
@@ -5453,33 +6435,56 @@ if ( !jQuery.support.opacity ) {
jQuery.cssHooks.opacity = {
get: function( elem, computed ) {
// IE uses filters for opacity
- return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
- (parseFloat(RegExp.$1) / 100) + "" :
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( parseFloat( RegExp.$1 ) / 100 ) + "" :
computed ? "1" : "";
},
set: function( elem, value ) {
- var style = elem.style;
+ var style = elem.style,
+ currentStyle = elem.currentStyle;
// IE has trouble with opacity if it does not have layout
// Force it by setting the zoom level
style.zoom = 1;
// Set the alpha filter to set the opacity
- var opacity = jQuery.isNaN(value) ?
+ var opacity = jQuery.isNaN( value ) ?
"" :
"alpha(opacity=" + value * 100 + ")",
- filter = style.filter || "";
+ filter = currentStyle && currentStyle.filter || style.filter || "";
- style.filter = ralpha.test(filter) ?
- filter.replace(ralpha, opacity) :
- style.filter + ' ' + opacity;
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
}
};
}
+jQuery(function() {
+ // This hook cannot be added until DOM ready because the support test
+ // for it is not run until after DOM ready
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ var ret;
+ jQuery.swap( elem, { "display": "inline-block" }, function() {
+ if ( computed ) {
+ ret = curCSS( elem, "margin-right", "marginRight" );
+ } else {
+ ret = elem.style.marginRight;
+ }
+ });
+ return ret;
+ }
+ };
+ }
+});
+
if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, newName, name ) {
+ getComputedStyle = function( elem, name ) {
var ret, defaultView, computedStyle;
name = name.replace( rupper, "-$1" ).toLowerCase();
@@ -5501,8 +6506,9 @@ if ( document.defaultView && document.defaultView.getComputedStyle ) {
if ( document.documentElement.currentStyle ) {
currentStyle = function( elem, name ) {
- var left, rsLeft,
+ var left,
ret = elem.currentStyle && elem.currentStyle[ name ],
+ rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
style = elem.style;
// From the awesome hack by Dean Edwards
@@ -5513,16 +6519,19 @@ if ( document.documentElement.currentStyle ) {
if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
// Remember the original values
left = style.left;
- rsLeft = elem.runtimeStyle.left;
// Put in the new values to get a computed value out
- elem.runtimeStyle.left = elem.currentStyle.left;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ }
style.left = name === "fontSize" ? "1em" : (ret || 0);
ret = style.pixelLeft + "px";
// Revert the changed values
style.left = left;
- elem.runtimeStyle.left = rsLeft;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = rsLeft;
+ }
}
return ret === "" ? "auto" : ret;
@@ -5571,21 +6580,140 @@ if ( jQuery.expr && jQuery.expr.filters ) {
-var jsc = jQuery.now(),
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rhash = /#.*$/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
rnoContent = /^(?:GET|HEAD)$/,
- rbracket = /\[\]$/,
- jsre = /\=\?(&|$)/,
+ rprotocol = /^\/\//,
rquery = /\?/,
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ rselectTextarea = /^(?:select|textarea)/i,
+ rspacesAjax = /\s+/,
rts = /([?&])_=[^&]*/,
- rurl = /^(\w+:)?\/\/([^\/?#]+)/,
- r20 = /%20/g,
- rhash = /#.*$/,
+ rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
// Keep a copy of the old load method
- _load = jQuery.fn.load;
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Document location
+ ajaxLocation,
+
+ // Document location segments
+ ajaxLocParts;
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ if ( jQuery.isFunction( func ) ) {
+ var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+ i = 0,
+ length = dataTypes.length,
+ dataType,
+ list,
+ placeBefore;
+
+ // For each dataType in the dataTypeExpression
+ for(; i < length; i++ ) {
+ dataType = dataTypes[ i ];
+ // We control if we're asked to add before
+ // any existing element
+ placeBefore = /^\+/.test( dataType );
+ if ( placeBefore ) {
+ dataType = dataType.substr( 1 ) || "*";
+ }
+ list = structure[ dataType ] = structure[ dataType ] || [];
+ // then we add to the structure accordingly
+ list[ placeBefore ? "unshift" : "push" ]( func );
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+ dataType /* internal */, inspected /* internal */ ) {
+
+ dataType = dataType || options.dataTypes[ 0 ];
+ inspected = inspected || {};
+
+ inspected[ dataType ] = true;
+
+ var list = structure[ dataType ],
+ i = 0,
+ length = list ? list.length : 0,
+ executeOnly = ( structure === prefilters ),
+ selection;
+
+ for(; i < length && ( executeOnly || !selection ); i++ ) {
+ selection = list[ i ]( options, originalOptions, jqXHR );
+ // If we got redirected to another dataType
+ // we try there if executing only and not done already
+ if ( typeof selection === "string" ) {
+ if ( !executeOnly || inspected[ selection ] ) {
+ selection = undefined;
+ } else {
+ options.dataTypes.unshift( selection );
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, selection, inspected );
+ }
+ }
+ }
+ // If we're only executing or nothing was selected
+ // we try the catchall dataType if not done already
+ if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, "*", inspected );
+ }
+ // unnecessary when only executing (prefilters)
+ // but it'll be ignored by the caller in that case
+ return selection;
+}
jQuery.fn.extend({
load: function( url, params, callback ) {
@@ -5597,10 +6725,10 @@ jQuery.fn.extend({
return this;
}
- var off = url.indexOf(" ");
+ var off = url.indexOf( " " );
if ( off >= 0 ) {
- var selector = url.slice(off, url.length);
- url = url.slice(0, off);
+ var selector = url.slice( off, url.length );
+ url = url.slice( 0, off );
}
// Default to a GET request
@@ -5612,7 +6740,7 @@ jQuery.fn.extend({
if ( jQuery.isFunction( params ) ) {
// We assume that it's the callback
callback = params;
- params = null;
+ params = undefined;
// Otherwise, build a param string
} else if ( typeof params === "object" ) {
@@ -5629,26 +6757,34 @@ jQuery.fn.extend({
type: type,
dataType: "html",
data: params,
- complete: function( res, status ) {
+ // Complete callback (responseText is used internally)
+ complete: function( jqXHR, status, responseText ) {
+ // Store the response as specified by the jqXHR object
+ responseText = jqXHR.responseText;
// If successful, inject the HTML into all the matched elements
- if ( status === "success" || status === "notmodified" ) {
+ if ( jqXHR.isResolved() ) {
+ // #4825: Get the actual response in case
+ // a dataFilter is present in ajaxSettings
+ jqXHR.done(function( r ) {
+ responseText = r;
+ });
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div>")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
- .append(res.responseText.replace(rscript, ""))
+ .append(responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
- res.responseText );
+ responseText );
}
if ( callback ) {
- self.each( callback, [res.responseText, status, res] );
+ self.each( callback, [ responseText, status, jqXHR ] );
}
}
});
@@ -5657,88 +6793,94 @@ jQuery.fn.extend({
},
serialize: function() {
- return jQuery.param(this.serializeArray());
+ return jQuery.param( this.serializeArray() );
},
serializeArray: function() {
- return this.map(function() {
- return this.elements ? jQuery.makeArray(this.elements) : this;
+ return this.map(function(){
+ return this.elements ? jQuery.makeArray( this.elements ) : this;
})
- .filter(function() {
+ .filter(function(){
return this.name && !this.disabled &&
- (this.checked || rselectTextarea.test(this.nodeName) ||
- rinput.test(this.type));
+ ( this.checked || rselectTextarea.test( this.nodeName ) ||
+ rinput.test( this.type ) );
})
- .map(function( i, elem ) {
- var val = jQuery(this).val();
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
return val == null ?
null :
- jQuery.isArray(val) ?
- jQuery.map( val, function( val, i ) {
- return { name: elem.name, value: val };
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val, i ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
}) :
- { name: elem.name, value: val };
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
}).get();
}
});
// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
- jQuery.fn[o] = function( f ) {
- return this.bind(o, f);
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+ jQuery.fn[ o ] = function( f ){
+ return this.bind( o, f );
};
});
-jQuery.extend({
- get: function( url, data, callback, type ) {
- // shift arguments if data argument was omited
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
- data = null;
+ data = undefined;
}
return jQuery.ajax({
- type: "GET",
+ type: method,
url: url,
data: data,
success: callback,
dataType: type
});
- },
+ };
+});
+
+jQuery.extend({
getScript: function( url, callback ) {
- return jQuery.get(url, null, callback, "script");
+ return jQuery.get( url, undefined, callback, "script" );
},
getJSON: function( url, data, callback ) {
- return jQuery.get(url, data, callback, "json");
+ return jQuery.get( url, data, callback, "json" );
},
- post: function( url, data, callback, type ) {
- // shift arguments if data argument was omited
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = {};
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function ( target, settings ) {
+ if ( !settings ) {
+ // Only one parameter, we extend ajaxSettings
+ settings = target;
+ target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+ } else {
+ // target was provided, we extend into it
+ jQuery.extend( true, target, jQuery.ajaxSettings, settings );
}
-
- return jQuery.ajax({
- type: "POST",
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- },
-
- ajaxSetup: function( settings ) {
- jQuery.extend( jQuery.ajaxSettings, settings );
+ // Flatten fields we don't want deep extended
+ for( var field in { context: 1, url: 1 } ) {
+ if ( field in settings ) {
+ target[ field ] = settings[ field ];
+ } else if( field in jQuery.ajaxSettings ) {
+ target[ field ] = jQuery.ajaxSettings[ field ];
+ }
+ }
+ return target;
},
ajaxSettings: {
- url: location.href,
+ url: ajaxLocation,
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
global: true,
type: "GET",
contentType: "application/x-www-form-urlencoded",
@@ -5747,332 +6889,434 @@ jQuery.extend({
/*
timeout: 0,
data: null,
+ dataType: null,
username: null,
password: null,
+ cache: null,
traditional: false,
+ headers: {},
*/
- // This function can be overriden by calling jQuery.ajaxSetup
- xhr: function() {
- return new window.XMLHttpRequest();
- },
+
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
- script: "text/javascript, application/javascript",
- json: "application/json, text/javascript",
text: "text/plain",
- _default: "*/*"
- }
- },
+ json: "application/json, text/javascript",
+ "*": "*/*"
+ },
- ajax: function( origSettings ) {
- var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
- jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
- s.url = s.url.replace( rhash, "" );
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText"
+ },
- // Use original (not extended) context object if it was provided
- s.context = origSettings && origSettings.context != null ? origSettings.context : s;
+ // List of data converters
+ // 1) key format is "source_type destination_type" (a single space in-between)
+ // 2) the catchall symbol "*" can be used for source_type
+ converters: {
+
+ // Convert anything to text
+ "* text": window.String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ }
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events
+ // It's the callbackContext if one was provided in the options
+ // and if it's a DOM node or a jQuery collection
+ globalEventContext = callbackContext !== s &&
+ ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+ jQuery( callbackContext ) : jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery._Deferred(),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // ifModified key
+ ifModifiedKey,
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // transport
+ transport,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // The jqXHR state
+ state = 0,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Fake xhr
+ jqXHR = {
+
+ readyState: 0,
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( !state ) {
+ var lname = name.toLowerCase();
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match === undefined ? null : match;
+ },
- // convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
- // Handle JSONP Parameter Callbacks
- if ( s.dataType === "jsonp" ) {
- if ( type === "GET" ) {
- if ( !jsre.test( s.url ) ) {
- s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+ // Cancel the request
+ abort: function( statusText ) {
+ statusText = statusText || "abort";
+ if ( transport ) {
+ transport.abort( statusText );
+ }
+ done( 0, statusText );
+ return this;
}
- } else if ( !s.data || !jsre.test(s.data) ) {
- s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
- }
- s.dataType = "json";
- }
+ };
- // Build temporary JSONP function
- if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
- jsonp = s.jsonpCallback || ("jsonp" + jsc++);
+ // Callback for when everything is done
+ // It is defined here because jslint complains if it is declared
+ // at the end of the function (which would be more logical and readable)
+ function done( status, statusText, responses, headers ) {
- // Replace the =? sequence both in the query string and the data
- if ( s.data ) {
- s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+ // Called once
+ if ( state === 2 ) {
+ return;
}
- s.url = s.url.replace(jsre, "=" + jsonp + "$1");
-
- // We need to make sure
- // that a JSONP style response is executed properly
- s.dataType = "script";
-
- // Handle JSONP-style loading
- var customJsonp = window[ jsonp ];
+ // State is "done" now
+ state = 2;
- window[ jsonp ] = function( tmp ) {
- if ( jQuery.isFunction( customJsonp ) ) {
- customJsonp( tmp );
-
- } else {
- // Garbage collect
- window[ jsonp ] = undefined;
-
- try {
- delete window[ jsonp ];
- } catch( jsonpError ) {}
- }
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
- data = tmp;
- jQuery.handleSuccess( s, xhr, status, data );
- jQuery.handleComplete( s, xhr, status, data );
-
- if ( head ) {
- head.removeChild( script );
- }
- };
- }
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
- if ( s.dataType === "script" && s.cache === null ) {
- s.cache = false;
- }
+ // Cache response headers
+ responseHeadersString = headers || "";
- if ( s.cache === false && noContent ) {
- var ts = jQuery.now();
+ // Set readyState
+ jqXHR.readyState = status ? 4 : 0;
- // try replacing _= if it is there
- var ret = s.url.replace(rts, "$1_=" + ts);
+ var isSuccess,
+ success,
+ error,
+ response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+ lastModified,
+ etag;
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
- }
+ // If successful, handle type chaining
+ if ( status >= 200 && status < 300 || status === 304 ) {
- // If data is available, append data to url for GET/HEAD requests
- if ( s.data && noContent ) {
- s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
- }
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
- // Watch for a new set of requests
- if ( s.global && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // Matches an absolute URL, and saves the domain
- var parts = rurl.exec( s.url ),
- remote = parts && (parts[1] && parts[1].toLowerCase() !== location.protocol || parts[2].toLowerCase() !== location.host);
+ if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+ jQuery.lastModified[ ifModifiedKey ] = lastModified;
+ }
+ if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+ jQuery.etag[ ifModifiedKey ] = etag;
+ }
+ }
- // If we're requesting a remote document
- // and trying to load JSON or Script with a GET
- if ( s.dataType === "script" && type === "GET" && remote ) {
- var head = document.getElementsByTagName("head")[0] || document.documentElement;
- var script = document.createElement("script");
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
- script.src = s.url;
+ // If not modified
+ if ( status === 304 ) {
- // Handle Script loading
- if ( !jsonp ) {
- var done = false;
+ statusText = "notmodified";
+ isSuccess = true;
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function() {
- if ( !done && (!this.readyState ||
- this.readyState === "loaded" || this.readyState === "complete") ) {
- done = true;
- jQuery.handleSuccess( s, xhr, status, data );
- jQuery.handleComplete( s, xhr, status, data );
+ // If we have data
+ } else {
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
+ try {
+ success = ajaxConvert( s, response );
+ statusText = "success";
+ isSuccess = true;
+ } catch(e) {
+ // We have a parsererror
+ statusText = "parsererror";
+ error = e;
}
- };
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if( !statusText || status ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
}
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = statusText;
- // We handle everything using the script element injection
- return undefined;
- }
-
- var requestDone = false;
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
- // Create the request object
- var xhr = s.xhr();
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
- if ( !xhr ) {
- return;
- }
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open(type, s.url, s.async, s.username, s.password);
- } else {
- xhr.open(type, s.url, s.async);
- }
+ // Complete
+ completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- // Set content-type if data specified and content-body is valid for this type
- if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) {
- xhr.setRequestHeader("Content-Type", s.contentType);
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
}
+ }
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[s.url] ) {
- xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
- }
+ // Attach deferreds
+ deferred.promise( jqXHR );
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+ jqXHR.complete = completeDeferred.done;
- if ( jQuery.etag[s.url] ) {
- xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+ // Status-dependent callbacks
+ jqXHR.statusCode = function( map ) {
+ if ( map ) {
+ var tmp;
+ if ( state < 2 ) {
+ for( tmp in map ) {
+ statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+ }
+ } else {
+ tmp = map[ jqXHR.status ];
+ jqXHR.then( tmp, tmp );
}
}
+ return this;
+ };
- // Set header so the called script knows that it's an XMLHttpRequest
- // Only send the header if it's not a remote XHR
- if ( !remote ) {
- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
- }
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+ // Determine if a cross-domain request is in order
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+ );
+ }
- // Set the Accepts header for the server, depending on the dataType
- xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
- s.accepts[ s.dataType ] + ", */*; q=0.01" :
- s.accepts._default );
- } catch( headerError ) {}
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) {
- // Handle the global AJAX counter
- if ( s.global && jQuery.active-- === 1 ) {
- jQuery.event.trigger( "ajaxStop" );
- }
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
- // close opended socket
- xhr.abort();
+ // If request was aborted inside a prefiler, stop there
+ if ( state === 2 ) {
return false;
}
- if ( s.global ) {
- jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] );
- }
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
- // Wait for a response to come back
- var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
- // The request was aborted
- if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
- // Opera doesn't call onreadystatechange before this point
- // so we simulate the call
- if ( !requestDone ) {
- jQuery.handleComplete( s, xhr, status, data );
- }
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
- requestDone = true;
- if ( xhr ) {
- xhr.onreadystatechange = jQuery.noop;
- }
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
- // The transfer is complete and the data is available, or the request timed out
- } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
- requestDone = true;
- xhr.onreadystatechange = jQuery.noop;
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
- status = isTimeout === "timeout" ?
- "timeout" :
- !jQuery.httpSuccess( xhr ) ?
- "error" :
- s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
- "notmodified" :
- "success";
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
- var errMsg;
+ // If data is available, append data to url
+ if ( s.data ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+ }
- if ( status === "success" ) {
- // Watch for, and catch, XML document parse errors
- try {
- // process the data (runs the xml through httpData regardless of callback)
- data = jQuery.httpData( xhr, s.dataType, s );
- } catch( parserError ) {
- status = "parsererror";
- errMsg = parserError;
- }
- }
+ // Get ifModifiedKey before adding the anti-cache parameter
+ ifModifiedKey = s.url;
- // Make sure that the request was successful or notmodified
- if ( status === "success" || status === "notmodified" ) {
- // JSONP handles its own success callback
- if ( !jsonp ) {
- jQuery.handleSuccess( s, xhr, status, data );
- }
- } else {
- jQuery.handleError( s, xhr, status, errMsg );
- }
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
- // Fire the complete handlers
- if ( !jsonp ) {
- jQuery.handleComplete( s, xhr, status, data );
- }
-
- if ( isTimeout === "timeout" ) {
- xhr.abort();
- }
+ var ts = jQuery.now(),
+ // try replacing _= if it is there
+ ret = s.url.replace( rts, "$1_=" + ts );
- // Stop memory leaks
- if ( s.async ) {
- xhr = null;
- }
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
}
- };
+ }
- // Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK)
- // Opera doesn't fire onreadystatechange at all on abort
- try {
- var oldAbort = xhr.abort;
- xhr.abort = function() {
- if ( xhr ) {
- // oldAbort has no call property in IE7 so
- // just do it this way, which works in all
- // browsers
- Function.prototype.call.call( oldAbort, xhr );
- }
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
- onreadystatechange( "abort" );
- };
- } catch( abortError ) {}
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ ifModifiedKey = ifModifiedKey || s.url;
+ if ( jQuery.lastModified[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+ }
+ if ( jQuery.etag[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+ }
+ }
- // Timeout checker
- if ( s.async && s.timeout > 0 ) {
- setTimeout(function() {
- // Check to see if the request is still happening
- if ( xhr && !requestDone ) {
- onreadystatechange( "timeout" );
- }
- }, s.timeout);
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
}
- // Send the data
- try {
- xhr.send( noContent || s.data == null ? null : s.data );
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already
+ jqXHR.abort();
+ return false;
- } catch( sendError ) {
- jQuery.handleError( s, xhr, null, sendError );
+ }
- // Fire the complete handlers
- jQuery.handleComplete( s, xhr, status, data );
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
}
- // firefox 1.5 doesn't fire statechange for sync requests
- if ( !s.async ) {
- onreadystatechange();
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout( function(){
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch (e) {
+ // Propagate exception as error if not done
+ if ( status < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ jQuery.error( e );
+ }
+ }
}
- // return XMLHttpRequest to allow aborting the request etc.
- return xhr;
+ return jqXHR;
},
// Serialize an array of form elements or a set of
@@ -6081,37 +7325,37 @@ jQuery.extend({
var s = [],
add = function( key, value ) {
// If value is a function, invoke it and return its value
- value = jQuery.isFunction(value) ? value() : value;
- s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+ value = jQuery.isFunction( value ) ? value() : value;
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
};
-
+
// Set traditional to true for jQuery <= 1.3.2 behavior.
if ( traditional === undefined ) {
traditional = jQuery.ajaxSettings.traditional;
}
-
+
// If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray(a) || a.jquery ) {
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
// Serialize the form elements
jQuery.each( a, function() {
add( this.name, this.value );
});
-
+
} else {
// If traditional, encode the "old" way (the way 1.3.2 or older
// did it), otherwise encode params recursively.
for ( var prefix in a ) {
- buildParams( prefix, a[prefix], traditional, add );
+ buildParams( prefix, a[ prefix ], traditional, add );
}
}
// Return the resulting serialization
- return s.join("&").replace(r20, "+");
+ return s.join( "&" ).replace( r20, "+" );
}
});
function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray(obj) && obj.length ) {
+ if ( jQuery.isArray( obj ) ) {
// Serialize array item.
jQuery.each( obj, function( i, v ) {
if ( traditional || rbracket.test( prefix ) ) {
@@ -6129,18 +7373,13 @@ function buildParams( prefix, obj, traditional, add ) {
buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
}
});
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- if ( jQuery.isEmptyObject( obj ) ) {
- add( prefix, "" );
+ } else if ( !traditional && obj != null && typeof obj === "object" ) {
// Serialize object item.
- } else {
- jQuery.each( obj, function( k, v ) {
- buildParams( prefix + "[" + k + "]", v, traditional, add );
- });
+ for ( var name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
}
-
+
} else {
// Serialize scalar item.
add( prefix, obj );
@@ -6156,143 +7395,557 @@ jQuery.extend({
// Last-Modified header cache for next request
lastModified: {},
- etag: {},
+ etag: {}
- handleError: function( s, xhr, status, e ) {
- // If a local callback was specified, fire it
- if ( s.error ) {
- s.error.call( s.context, xhr, status, e );
- }
+});
- // Fire the global callback
- if ( s.global ) {
- jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] );
- }
- },
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
- handleSuccess: function( s, xhr, status, data ) {
- // If a local callback was specified, fire it and pass it the data
- if ( s.success ) {
- s.success.call( s.context, data, status, xhr );
- }
+ var contents = s.contents,
+ dataTypes = s.dataTypes,
+ responseFields = s.responseFields,
+ ct,
+ type,
+ finalDataType,
+ firstDataType;
- // Fire the global callback
- if ( s.global ) {
- jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
+ // Fill responseXXX fields
+ for( type in responseFields ) {
+ if ( type in responses ) {
+ jqXHR[ responseFields[type] ] = responses[ type ];
}
- },
+ }
- handleComplete: function( s, xhr, status ) {
- // Process result
- if ( s.complete ) {
- s.complete.call( s.context, xhr, status );
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
}
+ }
- // The request was completed
- if ( s.global ) {
- jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] );
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
}
+ }
- // Handle the global AJAX counter
- if ( s.global && jQuery.active-- === 1 ) {
- jQuery.event.trigger( "ajaxStop" );
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
}
- },
-
- triggerGlobal: function( s, type, args ) {
- (s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args);
- },
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
- // Determines if an XMLHttpRequest was successful or not
- httpSuccess: function( xhr ) {
- try {
- // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
- return !xhr.status && location.protocol === "file:" ||
- xhr.status >= 200 && xhr.status < 300 ||
- xhr.status === 304 || xhr.status === 1223;
- } catch(e) {}
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
- return false;
- },
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
- // Determines if an XMLHttpRequest returns NotModified
- httpNotModified: function( xhr, url ) {
- var lastModified = xhr.getResponseHeader("Last-Modified"),
- etag = xhr.getResponseHeader("Etag");
+ // Apply the dataFilter if provided
+ if ( s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
- if ( lastModified ) {
- jQuery.lastModified[url] = lastModified;
+ var dataTypes = s.dataTypes,
+ converters = {},
+ i,
+ key,
+ length = dataTypes.length,
+ tmp,
+ // Current and previous dataTypes
+ current = dataTypes[ 0 ],
+ prev,
+ // Conversion expression
+ conversion,
+ // Conversion function
+ conv,
+ // Conversion functions (transitive conversion)
+ conv1,
+ conv2;
+
+ // For each dataType in the chain
+ for( i = 1; i < length; i++ ) {
+
+ // Create converters map
+ // with lowercased keys
+ if ( i === 1 ) {
+ for( key in s.converters ) {
+ if( typeof key === "string" ) {
+ converters[ key.toLowerCase() ] = s.converters[ key ];
+ }
+ }
}
- if ( etag ) {
- jQuery.etag[url] = etag;
+ // Get the dataTypes
+ prev = current;
+ current = dataTypes[ i ];
+
+ // If current is auto dataType, update it to prev
+ if( current === "*" ) {
+ current = prev;
+ // If no auto and dataTypes are actually different
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Get the converter
+ conversion = prev + " " + current;
+ conv = converters[ conversion ] || converters[ "* " + current ];
+
+ // If there is no direct converter, search transitively
+ if ( !conv ) {
+ conv2 = undefined;
+ for( conv1 in converters ) {
+ tmp = conv1.split( " " );
+ if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+ conv2 = converters[ tmp[1] + " " + current ];
+ if ( conv2 ) {
+ conv1 = converters[ conv1 ];
+ if ( conv1 === true ) {
+ conv = conv2;
+ } else if ( conv2 === true ) {
+ conv = conv1;
+ }
+ break;
+ }
+ }
+ }
+ }
+ // If we found no converter, dispatch an error
+ if ( !( conv || conv2 ) ) {
+ jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+ }
+ // If found converter is not an equivalence
+ if ( conv !== true ) {
+ // Convert with 1 or 2 converters accordingly
+ response = conv ? conv( response ) : conv2( conv1(response) );
+ }
}
+ }
+ return response;
+}
- return xhr.status === 304;
- },
- httpData: function( xhr, type, s ) {
- var ct = xhr.getResponseHeader("content-type") || "",
- xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
- data = xml ? xhr.responseXML : xhr.responseText;
- if ( xml && data.documentElement.nodeName === "parsererror" ) {
- jQuery.error( "parsererror" );
- }
- // Allow a pre-filtering function to sanitize the response
- // s is checked to keep backwards compatibility
- if ( s && s.dataFilter ) {
- data = s.dataFilter( data, type );
+var jsc = jQuery.now(),
+ jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ return jQuery.expando + "_" + ( jsc++ );
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+ ( typeof s.data === "string" );
+
+ if ( s.dataTypes[ 0 ] === "jsonp" ||
+ s.jsonp !== false && ( jsre.test( s.url ) ||
+ inspectData && jsre.test( s.data ) ) ) {
+
+ var responseContainer,
+ jsonpCallback = s.jsonpCallback =
+ jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+ previous = window[ jsonpCallback ],
+ url = s.url,
+ data = s.data,
+ replace = "$1" + jsonpCallback + "$2";
+
+ if ( s.jsonp !== false ) {
+ url = url.replace( jsre, replace );
+ if ( s.url === url ) {
+ if ( inspectData ) {
+ data = data.replace( jsre, replace );
+ }
+ if ( s.data === data ) {
+ // Add callback manually
+ url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+ }
+ }
}
- // The filter can actually parse the response
- if ( typeof data === "string" ) {
- // Get the JavaScript object, if JSON is used.
- if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
- data = jQuery.parseJSON( data );
+ s.url = url;
+ s.data = data;
+
+ // Install callback
+ window[ jsonpCallback ] = function( response ) {
+ responseContainer = [ response ];
+ };
- // If the type is "script", eval it in global context
- } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
- jQuery.globalEval( data );
+ // Clean-up function
+ jqXHR.always(function() {
+ // Set callback back to previous value
+ window[ jsonpCallback ] = previous;
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( previous ) ) {
+ window[ jsonpCallback ]( responseContainer[ 0 ] );
}
+ });
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( jsonpCallback + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Delegate to script
+ return "script";
+ }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /javascript|ecmascript/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
}
+ }
+});
- return data;
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ s.global = false;
}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+
+ var script,
+ head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+ return {
+
+ send: function( _, callback ) {
+
+ script = document.createElement( "script" );
+
+ script.async = "async";
+
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
+
+ // Dereference the script
+ script = undefined;
+
+ // Callback if not abort
+ if ( !isAbort ) {
+ callback( 200, "success" );
+ }
+ }
+ };
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
+ },
+
+ abort: function() {
+ if ( script ) {
+ script.onload( 0, 1 );
+ }
+ }
+ };
+ }
});
-/*
- * Create the request object; Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
-if ( window.ActiveXObject ) {
- jQuery.ajaxSettings.xhr = function() {
- if ( window.location.protocol !== "file:" ) {
- try {
- return new window.XMLHttpRequest();
- } catch(xhrError) {}
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject ? function() {
+ // Abort all pending requests
+ for ( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]( 0, 1 );
}
+ } : false,
+ xhrId = 0,
+ xhrCallbacks;
- try {
- return new window.ActiveXObject("Microsoft.XMLHTTP");
- } catch(activeError) {}
- };
+// Functions to create xhrs
+function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch( e ) {}
+}
+
+function createActiveXHR() {
+ try {
+ return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+ } catch( e ) {}
}
-// Does this browser support XHR requests?
-jQuery.support.ajax = !!jQuery.ajaxSettings.xhr();
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function() {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+ jQuery.extend( jQuery.support, {
+ ajax: !!xhr,
+ cors: !!xhr && ( "withCredentials" in xhr )
+ });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+ jQuery.ajaxTransport(function( s ) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( !s.crossDomain || jQuery.support.cors ) {
+
+ var callback;
+
+ return {
+ send: function( headers, complete ) {
+
+ // Get a new xhr
+ var xhr = s.xhr(),
+ handle,
+ i;
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
+ } else {
+ xhr.open( s.type, s.url, s.async );
+ }
+
+ // Apply custom fields if provided
+ if ( s.xhrFields ) {
+ for ( i in s.xhrFields ) {
+ xhr[ i ] = s.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( s.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( s.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ } catch( _ ) {}
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( ( s.hasContent && s.data ) || null );
+
+ // Listener
+ callback = function( _, isAbort ) {
+
+ var status,
+ statusText,
+ responseHeaders,
+ responses,
+ xml;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occured
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0…
+ try {
+
+ // Was never called and is aborted or complete
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if ( handle ) {
+ xhr.onreadystatechange = jQuery.noop;
+ if ( xhrOnUnloadAbort ) {
+ delete xhrCallbacks[ handle ];
+ }
+ }
+
+ // If it's an abort
+ if ( isAbort ) {
+ // Abort it manually if needed
+ if ( xhr.readyState !== 4 ) {
+ xhr.abort();
+ }
+ } else {
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+ responses = {};
+ xml = xhr.responseXML;
+
+ // Construct response list
+ if ( xml && xml.documentElement /* #4958 */ ) {
+ responses.xml = xml;
+ }
+ responses.text = xhr.responseText;
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch( e ) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if ( !status && s.isLocal && !s.crossDomain ) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if ( status === 1223 ) {
+ status = 204;
+ }
+ }
+ }
+ } catch( firefoxAccessException ) {
+ if ( !isAbort ) {
+ complete( -1, firefoxAccessException );
+ }
+ }
+
+ // Call complete if needed
+ if ( responses ) {
+ complete( status, statusText, responses, responseHeaders );
+ }
+ };
+
+ // if we're in sync mode or it's in cache
+ // and has been retrieved directly (IE6 & IE7)
+ // we need to manually fire the callback
+ if ( !s.async || xhr.readyState === 4 ) {
+ callback();
+ } else {
+ handle = ++xhrId;
+ if ( xhrOnUnloadAbort ) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if ( !xhrCallbacks ) {
+ xhrCallbacks = {};
+ jQuery( window ).unload( xhrOnUnloadAbort );
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[ handle ] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback(0,1);
+ }
+ }
+ };
+ }
+ });
+}
var elemdisplay = {},
+ iframe, iframeDoc,
rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/,
+ rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
timerId,
fxAttrs = [
// height animations
@@ -6301,7 +7954,11 @@ var elemdisplay = {},
[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
// opacity animations
[ "opacity" ]
- ];
+ ],
+ fxNow,
+ requestAnimationFrame = window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame;
jQuery.fn.extend({
show: function( speed, easing, callback ) {
@@ -6313,19 +7970,22 @@ jQuery.fn.extend({
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
elem = this[i];
- display = elem.style.display;
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery.data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+ display = elem.style.display = "";
+ }
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
- jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+ jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+ }
}
}
@@ -6333,10 +7993,13 @@ jQuery.fn.extend({
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
elem = this[i];
- display = elem.style.display;
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery.data(elem, "olddisplay") || "";
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ if ( display === "" || display === "none" ) {
+ elem.style.display = jQuery._data(elem, "olddisplay") || "";
+ }
}
}
@@ -6350,17 +8013,21 @@ jQuery.fn.extend({
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
- var display = jQuery.css( this[i], "display" );
+ if ( this[i].style ) {
+ var display = jQuery.css( this[i], "display" );
- if ( display !== "none" ) {
- jQuery.data( this[i], "olddisplay", display );
+ if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+ jQuery._data( this[i], "olddisplay", display );
+ }
}
}
// Set the display of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
- this[i].style.display = "none";
+ if ( this[i].style ) {
+ this[i].style.display = "none";
+ }
}
return this;
@@ -6398,32 +8065,54 @@ jQuery.fn.extend({
var optall = jQuery.speed(speed, easing, callback);
if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete );
+ return this.each( optall.complete, [ false ] );
}
+ // Do not change referenced properties as per-property easing will be lost
+ prop = jQuery.extend( {}, prop );
+
return this[ optall.queue === false ? "each" : "queue" ](function() {
// XXX 'this' does not always have a nodeName when running the
// test suite
- var opt = jQuery.extend({}, optall), p,
+ if ( optall.queue === false ) {
+ jQuery._mark( this );
+ }
+
+ var opt = jQuery.extend( {}, optall ),
isElement = this.nodeType === 1,
hidden = isElement && jQuery(this).is(":hidden"),
- self = this;
+ name, val, p,
+ display, e,
+ parts, start, end, unit;
+
+ // will store per property easing and be used to determine when an animation is complete
+ opt.animatedProperties = {};
for ( p in prop ) {
- var name = jQuery.camelCase( p );
+ // property name normalization
+ name = jQuery.camelCase( p );
if ( p !== name ) {
prop[ name ] = prop[ p ];
delete prop[ p ];
- p = name;
}
- if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
- return opt.complete.call(this);
+ val = prop[ name ];
+
+ // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+ if ( jQuery.isArray( val ) ) {
+ opt.animatedProperties[ name ] = val[ 1 ];
+ val = prop[ name ] = val[ 0 ];
+ } else {
+ opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+ }
+
+ if ( val === "hide" && hidden || val === "show" && !hidden ) {
+ return opt.complete.call( this );
}
- if ( isElement && ( p === "height" || p === "width" ) ) {
+ if ( isElement && ( name === "height" || name === "width" ) ) {
// Make sure that nothing sneaks out
// Record all 3 overflow attributes because IE does not
// change the overflow attribute when overflowX and
@@ -6439,7 +8128,7 @@ jQuery.fn.extend({
this.style.display = "inline-block";
} else {
- var display = defaultDisplay(this.nodeName);
+ display = defaultDisplay( this.nodeName );
// inline-level elements accept inline-block;
// block-level elements need to be inline with layout
@@ -6453,44 +8142,37 @@ jQuery.fn.extend({
}
}
}
-
- if ( jQuery.isArray( prop[p] ) ) {
- // Create (if needed) and add to specialEasing
- (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
- prop[p] = prop[p][0];
- }
}
if ( opt.overflow != null ) {
this.style.overflow = "hidden";
}
- opt.curAnim = jQuery.extend({}, prop);
-
- jQuery.each( prop, function( name, val ) {
- var e = new jQuery.fx( self, opt, name );
+ for ( p in prop ) {
+ e = new jQuery.fx( this, opt, p );
+ val = prop[ p ];
if ( rfxtypes.test(val) ) {
- e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+ e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
} else {
- var parts = rfxnum.exec(val),
- start = e.cur() || 0;
+ parts = rfxnum.exec( val );
+ start = e.cur();
if ( parts ) {
- var end = parseFloat( parts[2] ),
- unit = parts[3] || "px";
+ end = parseFloat( parts[2] );
+ unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
// We need to compute starting value
if ( unit !== "px" ) {
- jQuery.style( self, name, (end || 1) + unit);
+ jQuery.style( this, p, (end || 1) + unit);
start = ((end || 1) / e.cur()) * start;
- jQuery.style( self, name, start + unit);
+ jQuery.style( this, p, start + unit);
}
// If a +=/-= token was provided, we're doing a relative animation
if ( parts[1] ) {
- end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+ end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
}
e.custom( start, end, unit );
@@ -6499,7 +8181,7 @@ jQuery.fn.extend({
e.custom( start, val, "" );
}
}
- });
+ }
// For JS strict compliance
return true;
@@ -6507,15 +8189,18 @@ jQuery.fn.extend({
},
stop: function( clearQueue, gotoEnd ) {
- var timers = jQuery.timers;
-
if ( clearQueue ) {
this.queue([]);
}
this.each(function() {
- // go in reverse order so anything added to the queue during the loop is ignored
- for ( var i = timers.length - 1; i >= 0; i-- ) {
+ var timers = jQuery.timers,
+ i = timers.length;
+ // clear marker counters if we know they won't be
+ if ( !gotoEnd ) {
+ jQuery._unmark( true, this );
+ }
+ while ( i-- ) {
if ( timers[i].elem === this ) {
if (gotoEnd) {
// force the next step to be the last
@@ -6537,6 +8222,17 @@ jQuery.fn.extend({
});
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout( clearFxNow, 0 );
+ return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+ fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
function genFx( type, num ) {
var obj = {};
@@ -6575,10 +8271,13 @@ jQuery.extend({
// Queueing
opt.old = opt.complete;
- opt.complete = function() {
+ opt.complete = function( noUnmark ) {
if ( opt.queue !== false ) {
- jQuery(this).dequeue();
+ jQuery.dequeue( this );
+ } else if ( noUnmark !== false ) {
+ jQuery._unmark( this );
}
+
if ( jQuery.isFunction( opt.old ) ) {
opt.old.call( this );
}
@@ -6603,9 +8302,7 @@ jQuery.extend({
this.elem = elem;
this.prop = prop;
- if ( !options.orig ) {
- options.orig = {};
- }
+ options.orig = options.orig || {};
}
});
@@ -6626,19 +8323,24 @@ jQuery.fx.prototype = {
return this.elem[ this.prop ];
}
- var r = parseFloat( jQuery.css( this.elem, this.prop ) );
- return r && r > -10000 ? r : 0;
+ var parsed,
+ r = jQuery.css( this.elem, this.prop );
+ // Empty strings, null, undefined and "auto" are converted to 0,
+ // complex values such as "rotate(1rad)" are returned as is,
+ // simple values such as "10px" are parsed to Float.
+ return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
},
// Start an animation from one number to another
custom: function( from, to, unit ) {
var self = this,
- fx = jQuery.fx;
+ fx = jQuery.fx,
+ raf;
- this.startTime = jQuery.now();
+ this.startTime = fxNow || createFxNow();
this.start = from;
this.end = to;
- this.unit = unit || this.unit || "px";
+ this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
this.now = this.start;
this.pos = this.state = 0;
@@ -6649,7 +8351,20 @@ jQuery.fx.prototype = {
t.elem = this.elem;
if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval(fx.tick, fx.interval);
+ // Use requestAnimationFrame instead of setInterval if available
+ if ( requestAnimationFrame ) {
+ timerId = 1;
+ raf = function() {
+ // When timerId gets set to null at any point, this stops
+ if ( timerId ) {
+ requestAnimationFrame( raf );
+ fx.tick();
+ }
+ };
+ requestAnimationFrame( raf );
+ } else {
+ timerId = setInterval( fx.tick, fx.interval );
+ }
}
},
@@ -6680,60 +8395,64 @@ jQuery.fx.prototype = {
// Each step of an animation
step: function( gotoEnd ) {
- var t = jQuery.now(), done = true;
+ var t = fxNow || createFxNow(),
+ done = true,
+ elem = this.elem,
+ options = this.options,
+ i, n;
- if ( gotoEnd || t >= this.options.duration + this.startTime ) {
+ if ( gotoEnd || t >= options.duration + this.startTime ) {
this.now = this.end;
this.pos = this.state = 1;
this.update();
- this.options.curAnim[ this.prop ] = true;
+ options.animatedProperties[ this.prop ] = true;
- for ( var i in this.options.curAnim ) {
- if ( this.options.curAnim[i] !== true ) {
+ for ( i in options.animatedProperties ) {
+ if ( options.animatedProperties[i] !== true ) {
done = false;
}
}
if ( done ) {
// Reset the overflow
- if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
- var elem = this.elem,
- options = this.options;
+ if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
jQuery.each( [ "", "X", "Y" ], function (index, value) {
elem.style[ "overflow" + value ] = options.overflow[index];
- } );
+ });
}
// Hide the element if the "hide" operation was done
- if ( this.options.hide ) {
- jQuery(this.elem).hide();
+ if ( options.hide ) {
+ jQuery(elem).hide();
}
// Reset the properties, if the item has been hidden or shown
- if ( this.options.hide || this.options.show ) {
- for ( var p in this.options.curAnim ) {
- jQuery.style( this.elem, p, this.options.orig[p] );
+ if ( options.hide || options.show ) {
+ for ( var p in options.animatedProperties ) {
+ jQuery.style( elem, p, options.orig[p] );
}
}
// Execute the complete function
- this.options.complete.call( this.elem );
+ options.complete.call( elem );
}
return false;
} else {
- var n = t - this.startTime;
- this.state = n / this.options.duration;
-
- // Perform the easing function, defaults to swing
- var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
- var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
- this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
- this.now = this.start + ((this.end - this.start) * this.pos);
+ // classical easing cannot be used with an Infinity duration
+ if ( options.duration == Infinity ) {
+ this.now = t;
+ } else {
+ n = t - this.startTime;
+ this.state = n / options.duration;
+ // Perform the easing function, defaults to swing
+ this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
+ this.now = this.start + ((this.end - this.start) * this.pos);
+ }
// Perform the next step of the animation
this.update();
}
@@ -6744,9 +8463,7 @@ jQuery.fx.prototype = {
jQuery.extend( jQuery.fx, {
tick: function() {
- var timers = jQuery.timers;
-
- for ( var i = 0; i < timers.length; i++ ) {
+ for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
if ( !timers[i]() ) {
timers.splice(i--, 1);
}
@@ -6794,17 +8511,45 @@ if ( jQuery.expr && jQuery.expr.filters ) {
};
}
+// Try to restore the default display value of an element
function defaultDisplay( nodeName ) {
+
if ( !elemdisplay[ nodeName ] ) {
- var elem = jQuery("<" + nodeName + ">").appendTo("body"),
- display = elem.css("display");
+
+ var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
+ display = elem.css( "display" );
elem.remove();
+ // If the simple way fails,
+ // get element's real default display by attaching it to a temp iframe
if ( display === "none" || display === "" ) {
- display = "block";
+ // No iframe to use yet, so create it
+ if ( !iframe ) {
+ iframe = document.createElement( "iframe" );
+ iframe.frameBorder = iframe.width = iframe.height = 0;
+ }
+
+ document.body.appendChild( iframe );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
+ // document to it, Webkit & Firefox won't allow reusing the iframe document
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write( "<!doctype><html><body></body></html>" );
+ }
+
+ elem = iframeDoc.createElement( nodeName );
+
+ iframeDoc.body.appendChild( elem );
+
+ display = jQuery.css( elem, "display" );
+
+ document.body.removeChild( iframe );
}
+ // Store the correct default display
elemdisplay[ nodeName ] = display;
}
@@ -6821,7 +8566,7 @@ if ( "getBoundingClientRect" in document.documentElement ) {
jQuery.fn.offset = function( options ) {
var elem = this[0], box;
- if ( options ) {
+ if ( options ) {
return this.each(function( i ) {
jQuery.offset.setOffset( this, options, i );
});
@@ -6844,15 +8589,15 @@ if ( "getBoundingClientRect" in document.documentElement ) {
// Make sure we're not dealing with a disconnected DOM node
if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box || { top: 0, left: 0 };
+ return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
}
var body = doc.body,
win = getWindow(doc),
clientTop = docElem.clientTop || body.clientTop || 0,
clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ),
- scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft),
+ scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
+ scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
top = box.top + scrollTop - clientTop,
left = box.left + scrollLeft - clientLeft;
@@ -6863,7 +8608,7 @@ if ( "getBoundingClientRect" in document.documentElement ) {
jQuery.fn.offset = function( options ) {
var elem = this[0];
- if ( options ) {
+ if ( options ) {
return this.each(function( i ) {
jQuery.offset.setOffset( this, options, i );
});
@@ -6965,7 +8710,6 @@ jQuery.offset = {
this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
body.removeChild( container );
- body = container = innerDiv = checkDiv = table = td = null;
jQuery.offset.initialize = jQuery.noop;
},
@@ -6982,7 +8726,7 @@ jQuery.offset = {
return { top: top, left: left };
},
-
+
setOffset: function( elem, options, i ) {
var position = jQuery.css( elem, "position" );
@@ -6995,17 +8739,19 @@ jQuery.offset = {
curOffset = curElem.offset(),
curCSSTop = jQuery.css( elem, "top" ),
curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),
+ calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
props = {}, curPosition = {}, curTop, curLeft;
- // need to be able to calculate position if either top or left is auto and position is absolute
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
if ( calculatePosition ) {
curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
}
- curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0;
- curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0;
-
if ( jQuery.isFunction( options ) ) {
options = options.call( elem, i, curOffset );
}
@@ -7016,7 +8762,7 @@ jQuery.offset = {
if (options.left != null) {
props.left = (options.left - curOffset.left) + curLeft;
}
-
+
if ( "using" in options ) {
options.using.call( elem, props );
} else {
@@ -7074,29 +8820,16 @@ jQuery.fn.extend({
jQuery.each( ["Left", "Top"], function( i, name ) {
var method = "scroll" + name;
- jQuery.fn[ method ] = function(val) {
- var elem = this[0], win;
-
- if ( !elem ) {
- return null;
- }
+ jQuery.fn[ method ] = function( val ) {
+ var elem, win;
- if ( val !== undefined ) {
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
+ if ( val === undefined ) {
+ elem = this[ 0 ];
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery(win).scrollLeft(),
- i ? val : jQuery(win).scrollTop()
- );
+ if ( !elem ) {
+ return null;
+ }
- } else {
- this[ method ] = val;
- }
- });
- } else {
win = getWindow( elem );
// Return the scroll offset
@@ -7105,6 +8838,21 @@ jQuery.each( ["Left", "Top"], function( i, name ) {
win.document.body[ method ] :
elem[ method ];
}
+
+ // Set the scroll offset
+ return this.each(function() {
+ win = getWindow( this );
+
+ if ( win ) {
+ win.scrollTo(
+ !i ? val : jQuery( win ).scrollLeft(),
+ i ? val : jQuery( win ).scrollTop()
+ );
+
+ } else {
+ this[ method ] = val;
+ }
+ });
};
});
@@ -7144,7 +8892,7 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
if ( !elem ) {
return size == null ? null : this;
}
-
+
if ( jQuery.isFunction( size ) ) {
return this.each(function( i ) {
var self = jQuery( this );
@@ -7154,8 +8902,10 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
if ( jQuery.isWindow( elem ) ) {
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- return elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
- elem.document.body[ "client" + name ];
+ // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+ var docElemProp = elem.document.documentElement[ "client" + name ];
+ return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+ elem.document.body[ "client" + name ] || docElemProp;
// Get document width or height
} else if ( elem.nodeType === 9 ) {
@@ -7182,4 +8932,5 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
});
+window.jQuery = window.$ = jQuery;
})(window);
diff --git a/libraries/common.inc.php b/libraries/common.inc.php
index ef6f64b..7c3bcf5 100644
--- a/libraries/common.inc.php
+++ b/libraries/common.inc.php
@@ -541,7 +541,7 @@ $_REQUEST['js_frame'] = PMA_ifSetOr($_REQUEST['js_frame'], '');
* @global array $js_include
*/
$GLOBALS['js_include'] = array();
-$GLOBALS['js_include'][] = 'jquery/jquery-1.4.4.js';
+$GLOBALS['js_include'][] = 'jquery/jquery-1.6.1.js';
$GLOBALS['js_include'][] = 'update-location.js';
/**
diff --git a/navigation.php b/navigation.php
index ea77489..a07a516 100644
--- a/navigation.php
+++ b/navigation.php
@@ -126,7 +126,7 @@ require_once './libraries/header_http.inc.php';
<base target="frame_content" />
<link rel="stylesheet" type="text/css"
href="phpmyadmin.css.php?<?php echo PMA_generate_common_url('', ''); ?>&js_frame=left&nocache=<?php echo $GLOBALS['PMA_Config']->getThemeUniqueValue(); ?>" />
- <script src="./js/jquery/jquery-1.4.4.js" type="text/javascript"></script>
+ <script src="./js/jquery/jquery-1.6.1.js" type="text/javascript"></script>
<script type="text/javascript" src="js/navigation.js"></script>
<script type="text/javascript" src="js/functions.js"></script>
<script type="text/javascript">
diff --git a/setup/index.php b/setup/index.php
index 736587f..9100f00 100644
--- a/setup/index.php
+++ b/setup/index.php
@@ -37,7 +37,7 @@ require './libraries/header_http.inc.php';
<link href="../favicon.ico" rel="icon" type="image/x-icon" />
<link href="../favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="styles.css" rel="stylesheet" type="text/css" />
-<script type="text/javascript" src="../js/jquery/jquery-1.4.4.js"></script>
+<script type="text/javascript" src="../js/jquery/jquery-1.6.1.js"></script>
<script type="text/javascript" src="../js/jquery/jquery-ui-1.8.custom.js"></script>
<script type="text/javascript" src="../js/jquery/jquery.json-2.2.js"></script>
<script type="text/javascript" src="../js/config.js"></script>
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_4_0-165-g6290c8e
by Marc Delisle 14 May '11
by Marc Delisle 14 May '11
14 May '11
The branch, master has been updated
via 6290c8ecccfc3c614fb3c8d57da17bf20a99a6d7 (commit)
via 989a1f35e9288f70fc7255b6368880185a7d60a2 (commit)
via 20a04b2f2bf7935201b28bca609e488c82b05254 (commit)
from cd1b2817b6238491df1a84405ccda7c78499f21f (commit)
- Log -----------------------------------------------------------------
commit 6290c8ecccfc3c614fb3c8d57da17bf20a99a6d7
Merge: cd1b2817b6238491df1a84405ccda7c78499f21f 989a1f35e9288f70fc7255b6368880185a7d60a2
Author: Marc Delisle <marc(a)infomarc.info>
Date: Sat May 14 06:25:49 2011 -0400
Merge branch 'QA_3_4'
-----------------------------------------------------------------------
Summary of changes:
js/functions.js | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/js/functions.js b/js/functions.js
index 112cf0f..fd8b36b 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -747,21 +747,19 @@ function insertQuery(queryType) {
valDis += "[value-" + NbSelect + "]";
editDis += myListBox.options[i].value + "=[value-" + NbSelect + "]";
}
- if (queryType == "selectall") {
- query = "SELECT * FROM `" + table + "` WHERE 1";
- } else if (queryType == "select") {
- query = "SELECT " + chaineAj + " FROM `" + table + "` WHERE 1";
- } else if (queryType == "insert") {
- query = "INSERT INTO `" + table + "`(" + chaineAj + ") VALUES (" + valDis + ")";
- } else if (queryType == "update") {
- query = "UPDATE `" + table + "` SET " + editDis + " WHERE 1";
- } else if(queryType == "delete") {
- query = "DELETE FROM `" + table + "` WHERE 1";
- } else if(queryType == "clear") {
- query = '';
- }
- document.sqlform.sql_query.value = query;
- sql_box_locked = false;
+ if (queryType == "selectall") {
+ query = "SELECT * FROM `" + table + "` WHERE 1";
+ } else if (queryType == "select") {
+ query = "SELECT " + chaineAj + " FROM `" + table + "` WHERE 1";
+ } else if (queryType == "insert") {
+ query = "INSERT INTO `" + table + "`(" + chaineAj + ") VALUES (" + valDis + ")";
+ } else if (queryType == "update") {
+ query = "UPDATE `" + table + "` SET " + editDis + " WHERE 1";
+ } else if(queryType == "delete") {
+ query = "DELETE FROM `" + table + "` WHERE 1";
+ }
+ document.sqlform.sql_query.value = query;
+ sql_box_locked = false;
}
}
@@ -1149,7 +1147,11 @@ $(document).ready(function(){
});
$('.sqlbutton').click(function(evt){
- insertQuery(evt.target.id);
+ if (evt.target.id == 'clear') {
+ $('#sqlquery').val('');
+ } else {
+ insertQuery(evt.target.id);
+ }
return false;
});
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin branch, QA_3_4, updated. RELEASE_3_4_0-28-g989a1f3
by Marc Delisle 14 May '11
by Marc Delisle 14 May '11
14 May '11
The branch, QA_3_4 has been updated
via 989a1f35e9288f70fc7255b6368880185a7d60a2 (commit)
via 20a04b2f2bf7935201b28bca609e488c82b05254 (commit)
from aa8c5f56d2063cb51ef1f1d5ad27cd0866be495a (commit)
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
js/functions.js | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/js/functions.js b/js/functions.js
index 4d4f9c5..2359502 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -743,21 +743,19 @@ function insertQuery(queryType) {
valDis += "[value-" + NbSelect + "]";
editDis += myListBox.options[i].value + "=[value-" + NbSelect + "]";
}
- if (queryType == "selectall") {
- query = "SELECT * FROM `" + table + "` WHERE 1";
- } else if (queryType == "select") {
- query = "SELECT " + chaineAj + " FROM `" + table + "` WHERE 1";
- } else if (queryType == "insert") {
- query = "INSERT INTO `" + table + "`(" + chaineAj + ") VALUES (" + valDis + ")";
- } else if (queryType == "update") {
- query = "UPDATE `" + table + "` SET " + editDis + " WHERE 1";
- } else if(queryType == "delete") {
- query = "DELETE FROM `" + table + "` WHERE 1";
- } else if(queryType == "clear") {
- query = '';
- }
- document.sqlform.sql_query.value = query;
- sql_box_locked = false;
+ if (queryType == "selectall") {
+ query = "SELECT * FROM `" + table + "` WHERE 1";
+ } else if (queryType == "select") {
+ query = "SELECT " + chaineAj + " FROM `" + table + "` WHERE 1";
+ } else if (queryType == "insert") {
+ query = "INSERT INTO `" + table + "`(" + chaineAj + ") VALUES (" + valDis + ")";
+ } else if (queryType == "update") {
+ query = "UPDATE `" + table + "` SET " + editDis + " WHERE 1";
+ } else if(queryType == "delete") {
+ query = "DELETE FROM `" + table + "` WHERE 1";
+ }
+ document.sqlform.sql_query.value = query;
+ sql_box_locked = false;
}
}
@@ -1145,7 +1143,11 @@ $(document).ready(function(){
});
$('.sqlbutton').click(function(evt){
- insertQuery(evt.target.id);
+ if (evt.target.id == 'clear') {
+ $('#sqlquery').val('');
+ } else {
+ insertQuery(evt.target.id);
+ }
return false;
});
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_4_0-162-gcd1b281
by Michal Čihař 13 May '11
by Michal Čihař 13 May '11
13 May '11
The branch, master has been updated
via cd1b2817b6238491df1a84405ccda7c78499f21f (commit)
via aa8c5f56d2063cb51ef1f1d5ad27cd0866be495a (commit)
via ad3f6cb16ab684f6962b77c9ee07bc71f74b687f (commit)
from 1a5e4a3f93faf1a50853b128319b84508e73bccd (commit)
- Log -----------------------------------------------------------------
commit cd1b2817b6238491df1a84405ccda7c78499f21f
Merge: 1a5e4a3f93faf1a50853b128319b84508e73bccd aa8c5f56d2063cb51ef1f1d5ad27cd0866be495a
Author: Michal Čihař <mcihar(a)novell.com>
Date: Fri May 13 13:03:35 2011 +0200
Merge branch 'QA_3_4'
-----------------------------------------------------------------------
Summary of changes:
js/functions.js | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/js/functions.js b/js/functions.js
index b3fc631..112cf0f 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -97,7 +97,7 @@ function PMA_current_version() {
var message = $.sprintf(PMA_messages['strNewerVersion'], PMA_latest_version, PMA_latest_date);
if (Math.floor(latest / 10000) == Math.floor(current / 10000)) {
/* Security update */
- klass = 'warning';
+ klass = 'error';
} else {
klass = 'notice';
}
hooks/post-receive
--
phpMyAdmin
1
0
[Phpmyadmin-git] [SCM] phpMyAdmin localized documentation branch, master, updated. d8089c0607a294f3d98b0a6d31042b14f090438e
by Michal Čihař 13 May '11
by Michal Čihař 13 May '11
13 May '11
The branch, master has been updated
via d8089c0607a294f3d98b0a6d31042b14f090438e (commit)
via ee6bf439136c07a8ec4a86aad83a72034c390056 (commit)
via 1e6564b3a3e629c77944183e22e53b58d263f116 (commit)
via 956deab32eaed524cec1a83c66eafa82413775e1 (commit)
via 608630c46339b696977a8709b040bcacfdff394e (commit)
via 5f21c9f83de659576239755e5bfb575fa64c1aea (commit)
via 3d14e4380c4dcf2d34c95a38236b2d505ee53e4f (commit)
via ea14c06ed13f215dc9700d926fbab8e8d0121ac5 (commit)
via 601d9521939bfed9f6f96767b6160ae9e472d90a (commit)
via 72907606bb96c7f78147751fbc41fd80561c978b (commit)
via eeda3925ed41f8cf077e8d58d814bae9fec0570b (commit)
via d79be2bf6ceb906d6f9d42d9550a509a29371107 (commit)
via b036bf38ceee36f5c71e7538406d1c87ede84116 (commit)
via 9314e744c69295289e1f55df3641e1716ad4b0b2 (commit)
via 16a5090d529e3e8a12b8d24d97d96585db9266c1 (commit)
via b827baa489eaf127fd7698663a06b32b34668aea (commit)
via b9d061f48984ac6c5917ae61ab3fe42256e41154 (commit)
via 8294b7bf0e110f81d6ef581072a68e7dba09228a (commit)
via 84ed4f52000dc5f11c95704352ace3a88019f2d0 (commit)
via 419fe072b8b980e868392ffa16bcb91de0f9bf9e (commit)
via d121292cdd80bae5e160b7599e19e4d12aa88b1e (commit)
via 0f829017871ede996bf64f4f493a6ee62f3e69bb (commit)
via ea4c2d42708a0df1646354ef51e13e4d19097dad (commit)
via fd6753aefb24c03f1e11df0329c91ea6de65909f (commit)
via 3bd343b862f050c8fd63c56f9441101adb057abb (commit)
via 3f9dcc04e8fbc4a28e5c4abe1a90a4925f13a71e (commit)
via 6177da85ea5e9768efe65073d44e309f9f1ce03a (commit)
via 94873deac72587be5007b21d566145d15b063f59 (commit)
via 92b228d53ec2cdf1b02a0495326d3292a685fcca (commit)
via 1567b7b53a1b7e15da6c295453ae5a01cc111000 (commit)
via 6cf6a3d08a0fa606856817ffe42071ae57e07269 (commit)
via e0d3dfe08a9862cf2384e9a5d401d8e450a2c414 (commit)
via 6313b13dd3e2653212e601e5d87d869b680a199c (commit)
via 6a4463a059dd88024c1c784465709d001a204df3 (commit)
via 0cee0386ddd00736d5289107542d806208d5189f (commit)
via b7c1b922927c97c3806e046163bfc10489bfc181 (commit)
via cc8b8fa6d1a875be1565f99ba2b948b112f818de (commit)
via 232de2a26608cfe204582c0ab6e3486b7a617d44 (commit)
via 45b646b5eb0c4b5a50c7d935627c224777ba0aea (commit)
via 3a73be0534fed87999ff9738c28e8492cf285632 (commit)
via 30c32ddb522d91d711cac3a0c0f7eef3316cd0ec (commit)
via b50f6b0eb0e597f336b2dcf9a035ca9d440385df (commit)
via 6b1c7da472b7bd1797212b9582d023fe555b6bc8 (commit)
via 17945b0f6f1923abbaff3d0898079826ca49986a (commit)
via 991e813567b29cd5a8f5587b82932185d6425985 (commit)
via c029c305c04d9830eda922ae360a22b7fa7c139e (commit)
via 167fc49c92a4e3cd39fc37d1eb7c437d6f57f2c4 (commit)
via fd7764c7053f04c7ceeb97a8472c035362a90b26 (commit)
via f4611138796bc349389613f8f0fd5a4b4bbede63 (commit)
via f0f2da45c721514cc622a966e3f298ad7c4e6886 (commit)
via 8da465675ee746583fab3d3b3ab9f431925b98b5 (commit)
via 232e61d44577b3eacec60037150490bed67949c9 (commit)
via 737f862abe7442e98f942f9beac838cdf32da665 (commit)
via 7032f40cb68c43f1c6e9419fc3ad0202581cf0cf (commit)
via 46389408e0d2b7c84d7c9cd6650bd2d77da9233d (commit)
via cd02dc96327eb48edbe247509cf56527ea73d011 (commit)
via bd343df2bef7c7feea4d256fff33c1e23328eb3b (commit)
via d5527a5617bb5cd40eeab3f350048a4a2543e5e8 (commit)
via a5211c92d036b71d1f7d327667623bfe2045c7c3 (commit)
via ee12e9c895e2e7c596677175808672f7c05dbc73 (commit)
via 91830355d77f5fd09afdb52350c50b75c13d1295 (commit)
via 36820ed677d8eed37c55eb282b0e2e50effed500 (commit)
via 24231d778f6a63c2791dddf4674ca442a46e7d5b (commit)
via 94bdbc480ef036963882f393d916a0205f8fbb3c (commit)
via 620d22c572b4b6a8627666361fb530ee7397659f (commit)
via daecc0fd451066d5caac701a33354a3345344e86 (commit)
via 567ec3f81583e9f3fa4766d07a3121e407c16efa (commit)
via a9ca0fb8043496124d044ad8104c7cc956a64e92 (commit)
via ace4fd1e74ddd515d0556a66c755893da6159dba (commit)
via 60d1f93d5bb87cd2c416bc38b99d03feb1e3775b (commit)
via c5a478016cfdaaea426888a934cafb6c0184d34e (commit)
via 6afef3712b442b10e70dba40938fe4b2614e607d (commit)
via a807e9272e45f863b5e7f127a310640dfbb31968 (commit)
via 9b9fdab08da7a9681ff258d30bca01679485c9fa (commit)
via 01536324498989b61ebd6842c1e71f64b4c27fa6 (commit)
via 43b5e38723d75105fa7a0588586e2027fb801483 (commit)
via 45a66089aaf676e49a6426b709b0bdf9955af0c2 (commit)
via 3701e48e428e34c33fe751cc35272b9ef5d0a5df (commit)
via 7d1d1427ed8f47ebace6138b4ce1861617104536 (commit)
via 91f7c326194d51cf525e47f0b1d34bd76e8abfd6 (commit)
via 6d837d240ef839eb7da198dc5b5b096b8cf5a509 (commit)
via 39f23f40f24697f3c1cc443e48318841b1679a8a (commit)
via 6668ee2eff798a5759c2cc07a555c68c28932be6 (commit)
via 88f3f2b268a8b95f42bd87df9d26df07c45a3092 (commit)
via e75c722202bd16b60570feafb2041d4a5a76b2ee (commit)
via 21d07992bbe63eea9c8e227a5825cff98017a151 (commit)
via 6082955a7adf19dd8e8b4858cee62b90a2981ad7 (commit)
via d09f96483916e81551df2b4bf0f146fad2d57366 (commit)
via 81b347b9e163eb381f9d0b045c2d1fcd00c02f35 (commit)
via 96ec8d474bc80c4a534d3b4d29c3f55da60a196b (commit)
via 1368763b56410b6aa7f583bec7b356f7fe693b82 (commit)
via b9a7a172e7e5a3c0cef75f4da6062af387c7e467 (commit)
via d68240e0fbcd171ca9f52f807cd6b9bb49027a8c (commit)
via 8982a91878bc5d626c52cfb4fca42c5de4c8f4f6 (commit)
via 8ead17478e48f9a6a10d450e35e0b9afcabb186b (commit)
via 2b8490f584eef7bc91679b70ff434e35386ec29b (commit)
via 25899764eb12de399e964ed957efce481dab8523 (commit)
via eec17bfe9cc9b25c617929c2716629e3fc61f5ff (commit)
via 1394ca323e43f1cb42dbf2d3964914720f8641a8 (commit)
via e9ccdac9994a270a41659e57b6463a7a45bfa993 (commit)
via 13756020efcf6f3f2d5f9443a6c1770baaa92de1 (commit)
via b8b3a72cb443c5c7758ceda3347853d1dc25cc16 (commit)
via 8554e2112d65276e2634601c86647fde8ba55cbc (commit)
via 0ed9be2c587b6abe3a00a173e74023bcc86c28e6 (commit)
via 9a2144a2ef3d19edc9597107ef3d752a2b0c29db (commit)
via da302d600ca40e9cd632954a0a87ceed79599088 (commit)
via 3a014d83cfaf1580191446d74b4ed8e61b4d88e8 (commit)
via 84f644cb2f1bdb9cba1bd1978e9d2285f1e5e43f (commit)
via 9b7c398fd6c86470b404c63873f9562346b3c8ff (commit)
via b38f556917dc5ee6ca6746d8791fb80464a7e44d (commit)
via 5c8c61101d65f3c320bb81d5e276005ff1c58d2c (commit)
via 0dfdc569ca27a5d607f81cb5048b47a75a0894f2 (commit)
via 245fdd743730f1abd55aad2170790840847d1121 (commit)
via 54da9da9d72d93730e8cc90fb1907176da4b519a (commit)
via eedb184b1b3346853e6dcb3f2a0549bf370a4fb7 (commit)
via 4ae3f7291885714f847b836614646c4be3e82ebd (commit)
via 395e39b08a63529fbd9c39b60b8f4ab5b27aad43 (commit)
via 740042dd0378371e46151afd389eac1b27c85f40 (commit)
via 545280e55f684d8915d2580d175b16e54e4d3970 (commit)
via 080cfd6d2a89f882062471288fbe7f1cf18d6ff1 (commit)
via 347ad33d11c8dd94d38d3d368127da4703c2f3c5 (commit)
via 33645c316f65f67cc767a422ea9216e9dff1649f (commit)
via f2563dc1e60dbdcf68101830991c8dd3f315ba61 (commit)
via 2301f4d9fa02096b4018272887b0cd5095238f54 (commit)
via a1df7ad96dc89a86b482243886c5eabe50daf11c (commit)
via 9cf97ff751fd0e70828a2ac787937f9c0384f5e9 (commit)
via 37160747edf28fa7cb7a8d0cdde6e6b1abf6d2f2 (commit)
via b8b3bd06998982420c1f18d8689b5a70db00d813 (commit)
via db24576038833cebfd339e26ab253120676c14a5 (commit)
via 6721304dbba567f01c0e99572bce6570489b4abf (commit)
via 8f1177c156c4a4f1a45b55e2d00dda9596310bdd (commit)
via 9e23ec847855759eab28f250ec1da24618f8f8c8 (commit)
via 15315d8bc77ddb2014319b81a50547e9eb5d8564 (commit)
via d23466ed3103a6e868e8fb258d0f27b9cf8abe46 (commit)
via 7515abfe6e434e92fcfd479e2c9b333b7bca5265 (commit)
via e4269d4e9cd8ccd4b3d469b969f1618af2fd559f (commit)
via bd2cf8b110ba0c87e8635073c2ec0c2276a4b332 (commit)
via 736d721d0361300e04085b53de39f44ffdf85dca (commit)
via 1ecfa3acf37c2e2507d8244a966df2317248dea2 (commit)
via 2247e871a64450a6557f85498ba8f22198fa2f6e (commit)
via de4ec0bef05aee036d9b27de8e86fa5c6bac1005 (commit)
via b91ad5e8417a054ea1f86264679e56b52ce38d4b (commit)
via db529f9164edbc8ddab73d144bb2934b3b9facab (commit)
via 60ee113b36f065aa1b78b8a01decd44937ca02a4 (commit)
via c1f554f3c8cc61b8af37dcd0a0b8a451356b80ae (commit)
via 86ee3c40f793f639bc8c2366368ee51e8a4b733e (commit)
via 9f15badab85e94e4f1c1b5e2022c1c13e7b26f73 (commit)
via 8dd59918324b4673ae4d6103dbfe8a9de2b961ea (commit)
via d4c5abd70c3894fbef25df7987d7cfbdf1292a7d (commit)
via cc26bb1214942c982afc13fc07f982c4c842d338 (commit)
via a24a24d5e7937ff9d9bfeafbf89dc45ded037d07 (commit)
via 8f448d854df09c92343d4b7c915666a37f7c1dd1 (commit)
via 2781dc83ef9df5a6b3725c35583b6c12ccf3205f (commit)
via b8936a00b8b317ef5f21ac10b61b2a3c8dea7d25 (commit)
via 18387a287e903f51c2e76422fec8a816d599f4ce (commit)
via 92e6fb6ef26760a3326c2b6fc3fcfe9c39d25b9a (commit)
via f94e5c9ad241e6f0693073d599afb2d618343c53 (commit)
via 1a9fb460bab83361fe10afb1154c3f440c869703 (commit)
via ba126c4c3b61183f2be96ff5cf853efb9f814b17 (commit)
via efb9d5e74afd30f19ac37516b9403eb66c173072 (commit)
via fcbb519f62e9a3d165b1b7bef9301944004922f5 (commit)
via 2f14abb5bfcfc8eee6ab9444a6231adf550971c1 (commit)
via aec6e527616263c5c14cc2523ddc135020941120 (commit)
via eb5ddb313fd3bbdb7e27adf6fbf93d7d6911e5ef (commit)
via b5907ead6503bba26c9b5317b518fdabc40f033b (commit)
via a612bedffc2046c1232850238b0576547006696f (commit)
via 642152dc5f18349414bb9dc229f08f0f5cc89879 (commit)
via dd1f5029e93768aa90d154ccf5ecac33ee162e39 (commit)
via 836e9a93c9bdfb2a2f19e58c62c03baa4b3b6047 (commit)
via d687cea4658bbf332928433d8d4e8f24c477d93f (commit)
via 3d83d2ac6844a4613113c83277a8efba89bd1fdc (commit)
via 3421db3f28fa4dfb7ac5ebecbc66b1cca8efbc6d (commit)
via a8f6af3f7454a7ccf59d51e8f0f35a68e71d57b9 (commit)
via ee0c715bd80c35f5c1446abdd57b718bfa358fde (commit)
via db507e9ef0138509cd89ff0359a96fe2fd67cbe4 (commit)
via 8afbcf2db6eb785cd476dc1d65db4d1eddf169f9 (commit)
via 48dc1a57770c0fc62af152e877ab247c47f9f06d (commit)
via 98a9ea738e8832a988d18374c87bad09287ffb4a (commit)
via 4f277bb64aa36c1ff917c50255cd8a87031949a1 (commit)
via c51aa5019280fe8712241fa3572033c19d5db4a0 (commit)
via d8a2ed3e9e4affe85c3eaa61555910935bf26005 (commit)
via ee7f7c0a8150fa92222200c7c1aa3ef91bce575f (commit)
via 0befc834b40db1cf5bf17ad98c6dc47301975d6b (commit)
via fced7bbfcd845e54e031d808c8cc9ff79fc0014e (commit)
via 32751de7e464afb507ab51ad4653468a16d7ecbc (commit)
from cac17ff52daabff21da24def25f3e02103c9d8b6 (commit)
- Log -----------------------------------------------------------------
commit d8089c0607a294f3d98b0a6d31042b14f090438e
Author: Michal Čihař <mcihar(a)novell.com>
Date: Fri May 13 13:03:22 2011 +0200
Update
commit ee6bf439136c07a8ec4a86aad83a72034c390056
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:08:56 2011 +0200
Translation update done using Pootle.
commit 1e6564b3a3e629c77944183e22e53b58d263f116
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:07:56 2011 +0200
Translation update done using Pootle.
commit 956deab32eaed524cec1a83c66eafa82413775e1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:07:47 2011 +0200
Translation update done using Pootle.
commit 608630c46339b696977a8709b040bcacfdff394e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:06:54 2011 +0200
Translation update done using Pootle.
commit 5f21c9f83de659576239755e5bfb575fa64c1aea
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:06:28 2011 +0200
Translation update done using Pootle.
commit 3d14e4380c4dcf2d34c95a38236b2d505ee53e4f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:05:59 2011 +0200
Translation update done using Pootle.
commit ea14c06ed13f215dc9700d926fbab8e8d0121ac5
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:05:29 2011 +0200
Translation update done using Pootle.
commit 601d9521939bfed9f6f96767b6160ae9e472d90a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:04:50 2011 +0200
Translation update done using Pootle.
commit 72907606bb96c7f78147751fbc41fd80561c978b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:04:14 2011 +0200
Translation update done using Pootle.
commit eeda3925ed41f8cf077e8d58d814bae9fec0570b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:03:35 2011 +0200
Translation update done using Pootle.
commit d79be2bf6ceb906d6f9d42d9550a509a29371107
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:02:04 2011 +0200
Translation update done using Pootle.
commit b036bf38ceee36f5c71e7538406d1c87ede84116
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 11:01:52 2011 +0200
Translation update done using Pootle.
commit 9314e744c69295289e1f55df3641e1716ad4b0b2
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:58:50 2011 +0200
Translation update done using Pootle.
commit 16a5090d529e3e8a12b8d24d97d96585db9266c1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:57:58 2011 +0200
Translation update done using Pootle.
commit b827baa489eaf127fd7698663a06b32b34668aea
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:56:20 2011 +0200
Translation update done using Pootle.
commit b9d061f48984ac6c5917ae61ab3fe42256e41154
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:56:12 2011 +0200
Translation update done using Pootle.
commit 8294b7bf0e110f81d6ef581072a68e7dba09228a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:55:54 2011 +0200
Translation update done using Pootle.
commit 84ed4f52000dc5f11c95704352ace3a88019f2d0
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:55:33 2011 +0200
Translation update done using Pootle.
commit 419fe072b8b980e868392ffa16bcb91de0f9bf9e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:55:15 2011 +0200
Translation update done using Pootle.
commit d121292cdd80bae5e160b7599e19e4d12aa88b1e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:54:57 2011 +0200
Translation update done using Pootle.
commit 0f829017871ede996bf64f4f493a6ee62f3e69bb
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:54:45 2011 +0200
Translation update done using Pootle.
commit ea4c2d42708a0df1646354ef51e13e4d19097dad
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:54:24 2011 +0200
Translation update done using Pootle.
commit fd6753aefb24c03f1e11df0329c91ea6de65909f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:54:04 2011 +0200
Translation update done using Pootle.
commit 3bd343b862f050c8fd63c56f9441101adb057abb
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:53:14 2011 +0200
Translation update done using Pootle.
commit 3f9dcc04e8fbc4a28e5c4abe1a90a4925f13a71e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:52:53 2011 +0200
Translation update done using Pootle.
commit 6177da85ea5e9768efe65073d44e309f9f1ce03a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:52:42 2011 +0200
Translation update done using Pootle.
commit 94873deac72587be5007b21d566145d15b063f59
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:52:16 2011 +0200
Translation update done using Pootle.
commit 92b228d53ec2cdf1b02a0495326d3292a685fcca
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:52:08 2011 +0200
Translation update done using Pootle.
commit 1567b7b53a1b7e15da6c295453ae5a01cc111000
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:51:47 2011 +0200
Translation update done using Pootle.
commit 6cf6a3d08a0fa606856817ffe42071ae57e07269
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:51:40 2011 +0200
Translation update done using Pootle.
commit e0d3dfe08a9862cf2384e9a5d401d8e450a2c414
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:51:01 2011 +0200
Translation update done using Pootle.
commit 6313b13dd3e2653212e601e5d87d869b680a199c
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:50:37 2011 +0200
Translation update done using Pootle.
commit 6a4463a059dd88024c1c784465709d001a204df3
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:48:23 2011 +0200
Translation update done using Pootle.
commit 0cee0386ddd00736d5289107542d806208d5189f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:48:17 2011 +0200
Translation update done using Pootle.
commit b7c1b922927c97c3806e046163bfc10489bfc181
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:47:44 2011 +0200
Translation update done using Pootle.
commit cc8b8fa6d1a875be1565f99ba2b948b112f818de
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:47:28 2011 +0200
Translation update done using Pootle.
commit 232de2a26608cfe204582c0ab6e3486b7a617d44
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:46:39 2011 +0200
Translation update done using Pootle.
commit 45b646b5eb0c4b5a50c7d935627c224777ba0aea
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:46:11 2011 +0200
Translation update done using Pootle.
commit 3a73be0534fed87999ff9738c28e8492cf285632
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:45:54 2011 +0200
Translation update done using Pootle.
commit 30c32ddb522d91d711cac3a0c0f7eef3316cd0ec
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:45:32 2011 +0200
Translation update done using Pootle.
commit b50f6b0eb0e597f336b2dcf9a035ca9d440385df
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:45:09 2011 +0200
Translation update done using Pootle.
commit 6b1c7da472b7bd1797212b9582d023fe555b6bc8
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:44:56 2011 +0200
Translation update done using Pootle.
commit 17945b0f6f1923abbaff3d0898079826ca49986a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:43:48 2011 +0200
Translation update done using Pootle.
commit 991e813567b29cd5a8f5587b82932185d6425985
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:43:19 2011 +0200
Translation update done using Pootle.
commit c029c305c04d9830eda922ae360a22b7fa7c139e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:42:50 2011 +0200
Translation update done using Pootle.
commit 167fc49c92a4e3cd39fc37d1eb7c437d6f57f2c4
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:42:31 2011 +0200
Translation update done using Pootle.
commit fd7764c7053f04c7ceeb97a8472c035362a90b26
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:41:52 2011 +0200
Translation update done using Pootle.
commit f4611138796bc349389613f8f0fd5a4b4bbede63
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:41:19 2011 +0200
Translation update done using Pootle.
commit f0f2da45c721514cc622a966e3f298ad7c4e6886
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:41:01 2011 +0200
Translation update done using Pootle.
commit 8da465675ee746583fab3d3b3ab9f431925b98b5
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:40:23 2011 +0200
Translation update done using Pootle.
commit 232e61d44577b3eacec60037150490bed67949c9
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:40:00 2011 +0200
Translation update done using Pootle.
commit 737f862abe7442e98f942f9beac838cdf32da665
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:39:53 2011 +0200
Translation update done using Pootle.
commit 7032f40cb68c43f1c6e9419fc3ad0202581cf0cf
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:38:57 2011 +0200
Translation update done using Pootle.
commit 46389408e0d2b7c84d7c9cd6650bd2d77da9233d
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:38:35 2011 +0200
Translation update done using Pootle.
commit cd02dc96327eb48edbe247509cf56527ea73d011
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:38:17 2011 +0200
Translation update done using Pootle.
commit bd343df2bef7c7feea4d256fff33c1e23328eb3b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:37:48 2011 +0200
Translation update done using Pootle.
commit d5527a5617bb5cd40eeab3f350048a4a2543e5e8
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:37:20 2011 +0200
Translation update done using Pootle.
commit a5211c92d036b71d1f7d327667623bfe2045c7c3
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:36:48 2011 +0200
Translation update done using Pootle.
commit ee12e9c895e2e7c596677175808672f7c05dbc73
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:36:08 2011 +0200
Translation update done using Pootle.
commit 91830355d77f5fd09afdb52350c50b75c13d1295
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:35:49 2011 +0200
Translation update done using Pootle.
commit 36820ed677d8eed37c55eb282b0e2e50effed500
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:35:31 2011 +0200
Translation update done using Pootle.
commit 24231d778f6a63c2791dddf4674ca442a46e7d5b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:35:09 2011 +0200
Translation update done using Pootle.
commit 94bdbc480ef036963882f393d916a0205f8fbb3c
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:34:53 2011 +0200
Translation update done using Pootle.
commit 620d22c572b4b6a8627666361fb530ee7397659f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:34:27 2011 +0200
Translation update done using Pootle.
commit daecc0fd451066d5caac701a33354a3345344e86
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:34:07 2011 +0200
Translation update done using Pootle.
commit 567ec3f81583e9f3fa4766d07a3121e407c16efa
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:33:38 2011 +0200
Translation update done using Pootle.
commit a9ca0fb8043496124d044ad8104c7cc956a64e92
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:33:26 2011 +0200
Translation update done using Pootle.
commit ace4fd1e74ddd515d0556a66c755893da6159dba
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:33:14 2011 +0200
Translation update done using Pootle.
commit 60d1f93d5bb87cd2c416bc38b99d03feb1e3775b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:32:53 2011 +0200
Translation update done using Pootle.
commit c5a478016cfdaaea426888a934cafb6c0184d34e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:32:43 2011 +0200
Translation update done using Pootle.
commit 6afef3712b442b10e70dba40938fe4b2614e607d
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:32:21 2011 +0200
Translation update done using Pootle.
commit a807e9272e45f863b5e7f127a310640dfbb31968
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:32:01 2011 +0200
Translation update done using Pootle.
commit 9b9fdab08da7a9681ff258d30bca01679485c9fa
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:31:55 2011 +0200
Translation update done using Pootle.
commit 01536324498989b61ebd6842c1e71f64b4c27fa6
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:31:37 2011 +0200
Translation update done using Pootle.
commit 43b5e38723d75105fa7a0588586e2027fb801483
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:31:06 2011 +0200
Translation update done using Pootle.
commit 45a66089aaf676e49a6426b709b0bdf9955af0c2
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:30:19 2011 +0200
Translation update done using Pootle.
commit 3701e48e428e34c33fe751cc35272b9ef5d0a5df
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:30:04 2011 +0200
Translation update done using Pootle.
commit 7d1d1427ed8f47ebace6138b4ce1861617104536
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:29:30 2011 +0200
Translation update done using Pootle.
commit 91f7c326194d51cf525e47f0b1d34bd76e8abfd6
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:29:08 2011 +0200
Translation update done using Pootle.
commit 6d837d240ef839eb7da198dc5b5b096b8cf5a509
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:29:00 2011 +0200
Translation update done using Pootle.
commit 39f23f40f24697f3c1cc443e48318841b1679a8a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:28:39 2011 +0200
Translation update done using Pootle.
commit 6668ee2eff798a5759c2cc07a555c68c28932be6
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:28:20 2011 +0200
Translation update done using Pootle.
commit 88f3f2b268a8b95f42bd87df9d26df07c45a3092
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:27:59 2011 +0200
Translation update done using Pootle.
commit e75c722202bd16b60570feafb2041d4a5a76b2ee
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:27:31 2011 +0200
Translation update done using Pootle.
commit 21d07992bbe63eea9c8e227a5825cff98017a151
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:27:25 2011 +0200
Translation update done using Pootle.
commit 6082955a7adf19dd8e8b4858cee62b90a2981ad7
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:26:50 2011 +0200
Translation update done using Pootle.
commit d09f96483916e81551df2b4bf0f146fad2d57366
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:26:08 2011 +0200
Translation update done using Pootle.
commit 81b347b9e163eb381f9d0b045c2d1fcd00c02f35
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:25:49 2011 +0200
Translation update done using Pootle.
commit 96ec8d474bc80c4a534d3b4d29c3f55da60a196b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:21:59 2011 +0200
Translation update done using Pootle.
commit 1368763b56410b6aa7f583bec7b356f7fe693b82
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:21:41 2011 +0200
Translation update done using Pootle.
commit b9a7a172e7e5a3c0cef75f4da6062af387c7e467
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:21:11 2011 +0200
Translation update done using Pootle.
commit d68240e0fbcd171ca9f52f807cd6b9bb49027a8c
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:20:48 2011 +0200
Translation update done using Pootle.
commit 8982a91878bc5d626c52cfb4fca42c5de4c8f4f6
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:20:25 2011 +0200
Translation update done using Pootle.
commit 8ead17478e48f9a6a10d450e35e0b9afcabb186b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:18:48 2011 +0200
Translation update done using Pootle.
commit 2b8490f584eef7bc91679b70ff434e35386ec29b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:18:17 2011 +0200
Translation update done using Pootle.
commit 25899764eb12de399e964ed957efce481dab8523
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:17:59 2011 +0200
Translation update done using Pootle.
commit eec17bfe9cc9b25c617929c2716629e3fc61f5ff
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:16:38 2011 +0200
Translation update done using Pootle.
commit 1394ca323e43f1cb42dbf2d3964914720f8641a8
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:16:11 2011 +0200
Translation update done using Pootle.
commit e9ccdac9994a270a41659e57b6463a7a45bfa993
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:15:49 2011 +0200
Translation update done using Pootle.
commit 13756020efcf6f3f2d5f9443a6c1770baaa92de1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:15:25 2011 +0200
Translation update done using Pootle.
commit b8b3a72cb443c5c7758ceda3347853d1dc25cc16
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:15:20 2011 +0200
Translation update done using Pootle.
commit 8554e2112d65276e2634601c86647fde8ba55cbc
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:15:00 2011 +0200
Translation update done using Pootle.
commit 0ed9be2c587b6abe3a00a173e74023bcc86c28e6
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:14:03 2011 +0200
Translation update done using Pootle.
commit 9a2144a2ef3d19edc9597107ef3d752a2b0c29db
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:13:44 2011 +0200
Translation update done using Pootle.
commit da302d600ca40e9cd632954a0a87ceed79599088
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:13:22 2011 +0200
Translation update done using Pootle.
commit 3a014d83cfaf1580191446d74b4ed8e61b4d88e8
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:13:14 2011 +0200
Translation update done using Pootle.
commit 84f644cb2f1bdb9cba1bd1978e9d2285f1e5e43f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:12:50 2011 +0200
Translation update done using Pootle.
commit 9b7c398fd6c86470b404c63873f9562346b3c8ff
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:12:31 2011 +0200
Translation update done using Pootle.
commit b38f556917dc5ee6ca6746d8791fb80464a7e44d
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:11:29 2011 +0200
Translation update done using Pootle.
commit 5c8c61101d65f3c320bb81d5e276005ff1c58d2c
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:11:11 2011 +0200
Translation update done using Pootle.
commit 0dfdc569ca27a5d607f81cb5048b47a75a0894f2
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:10:54 2011 +0200
Translation update done using Pootle.
commit 245fdd743730f1abd55aad2170790840847d1121
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:10:26 2011 +0200
Translation update done using Pootle.
commit 54da9da9d72d93730e8cc90fb1907176da4b519a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:10:20 2011 +0200
Translation update done using Pootle.
commit eedb184b1b3346853e6dcb3f2a0549bf370a4fb7
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:09:56 2011 +0200
Translation update done using Pootle.
commit 4ae3f7291885714f847b836614646c4be3e82ebd
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:08:43 2011 +0200
Translation update done using Pootle.
commit 395e39b08a63529fbd9c39b60b8f4ab5b27aad43
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:08:14 2011 +0200
Translation update done using Pootle.
commit 740042dd0378371e46151afd389eac1b27c85f40
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:07:41 2011 +0200
Translation update done using Pootle.
commit 545280e55f684d8915d2580d175b16e54e4d3970
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:07:01 2011 +0200
Translation update done using Pootle.
commit 080cfd6d2a89f882062471288fbe7f1cf18d6ff1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:06:24 2011 +0200
Translation update done using Pootle.
commit 347ad33d11c8dd94d38d3d368127da4703c2f3c5
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:05:07 2011 +0200
Translation update done using Pootle.
commit 33645c316f65f67cc767a422ea9216e9dff1649f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:04:44 2011 +0200
Translation update done using Pootle.
commit f2563dc1e60dbdcf68101830991c8dd3f315ba61
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:04:18 2011 +0200
Translation update done using Pootle.
commit 2301f4d9fa02096b4018272887b0cd5095238f54
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:03:37 2011 +0200
Translation update done using Pootle.
commit a1df7ad96dc89a86b482243886c5eabe50daf11c
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:03:23 2011 +0200
Translation update done using Pootle.
commit 9cf97ff751fd0e70828a2ac787937f9c0384f5e9
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:03:00 2011 +0200
Translation update done using Pootle.
commit 37160747edf28fa7cb7a8d0cdde6e6b1abf6d2f2
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:02:24 2011 +0200
Translation update done using Pootle.
commit b8b3bd06998982420c1f18d8689b5a70db00d813
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:01:38 2011 +0200
Translation update done using Pootle.
commit db24576038833cebfd339e26ab253120676c14a5
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:01:22 2011 +0200
Translation update done using Pootle.
commit 6721304dbba567f01c0e99572bce6570489b4abf
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:00:59 2011 +0200
Translation update done using Pootle.
commit 8f1177c156c4a4f1a45b55e2d00dda9596310bdd
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:00:31 2011 +0200
Translation update done using Pootle.
commit 9e23ec847855759eab28f250ec1da24618f8f8c8
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 10:00:04 2011 +0200
Translation update done using Pootle.
commit 15315d8bc77ddb2014319b81a50547e9eb5d8564
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:59:13 2011 +0200
Translation update done using Pootle.
commit d23466ed3103a6e868e8fb258d0f27b9cf8abe46
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:58:46 2011 +0200
Translation update done using Pootle.
commit 7515abfe6e434e92fcfd479e2c9b333b7bca5265
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:58:13 2011 +0200
Translation update done using Pootle.
commit e4269d4e9cd8ccd4b3d469b969f1618af2fd559f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:57:52 2011 +0200
Translation update done using Pootle.
commit bd2cf8b110ba0c87e8635073c2ec0c2276a4b332
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:56:52 2011 +0200
Translation update done using Pootle.
commit 736d721d0361300e04085b53de39f44ffdf85dca
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:56:05 2011 +0200
Translation update done using Pootle.
commit 1ecfa3acf37c2e2507d8244a966df2317248dea2
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:55:27 2011 +0200
Translation update done using Pootle.
commit 2247e871a64450a6557f85498ba8f22198fa2f6e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:54:48 2011 +0200
Translation update done using Pootle.
commit de4ec0bef05aee036d9b27de8e86fa5c6bac1005
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:54:22 2011 +0200
Translation update done using Pootle.
commit b91ad5e8417a054ea1f86264679e56b52ce38d4b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:53:53 2011 +0200
Translation update done using Pootle.
commit db529f9164edbc8ddab73d144bb2934b3b9facab
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:53:08 2011 +0200
Translation update done using Pootle.
commit 60ee113b36f065aa1b78b8a01decd44937ca02a4
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:52:46 2011 +0200
Translation update done using Pootle.
commit c1f554f3c8cc61b8af37dcd0a0b8a451356b80ae
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:51:48 2011 +0200
Translation update done using Pootle.
commit 86ee3c40f793f639bc8c2366368ee51e8a4b733e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:51:20 2011 +0200
Translation update done using Pootle.
commit 9f15badab85e94e4f1c1b5e2022c1c13e7b26f73
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:50:45 2011 +0200
Translation update done using Pootle.
commit 8dd59918324b4673ae4d6103dbfe8a9de2b961ea
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:50:07 2011 +0200
Translation update done using Pootle.
commit d4c5abd70c3894fbef25df7987d7cfbdf1292a7d
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:48:40 2011 +0200
Translation update done using Pootle.
commit cc26bb1214942c982afc13fc07f982c4c842d338
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:47:56 2011 +0200
Translation update done using Pootle.
commit a24a24d5e7937ff9d9bfeafbf89dc45ded037d07
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:47:12 2011 +0200
Translation update done using Pootle.
commit 8f448d854df09c92343d4b7c915666a37f7c1dd1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:46:15 2011 +0200
Translation update done using Pootle.
commit 2781dc83ef9df5a6b3725c35583b6c12ccf3205f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:44:27 2011 +0200
Translation update done using Pootle.
commit b8936a00b8b317ef5f21ac10b61b2a3c8dea7d25
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:43:47 2011 +0200
Translation update done using Pootle.
commit 18387a287e903f51c2e76422fec8a816d599f4ce
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:43:13 2011 +0200
Translation update done using Pootle.
commit 92e6fb6ef26760a3326c2b6fc3fcfe9c39d25b9a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:42:17 2011 +0200
Translation update done using Pootle.
commit f94e5c9ad241e6f0693073d599afb2d618343c53
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:41:23 2011 +0200
Translation update done using Pootle.
commit 1a9fb460bab83361fe10afb1154c3f440c869703
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:40:44 2011 +0200
Translation update done using Pootle.
commit ba126c4c3b61183f2be96ff5cf853efb9f814b17
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:40:06 2011 +0200
Translation update done using Pootle.
commit efb9d5e74afd30f19ac37516b9403eb66c173072
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:39:28 2011 +0200
Translation update done using Pootle.
commit fcbb519f62e9a3d165b1b7bef9301944004922f5
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:38:53 2011 +0200
Translation update done using Pootle.
commit 2f14abb5bfcfc8eee6ab9444a6231adf550971c1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:37:42 2011 +0200
Translation update done using Pootle.
commit aec6e527616263c5c14cc2523ddc135020941120
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:36:37 2011 +0200
Translation update done using Pootle.
commit eb5ddb313fd3bbdb7e27adf6fbf93d7d6911e5ef
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:35:40 2011 +0200
Translation update done using Pootle.
commit b5907ead6503bba26c9b5317b518fdabc40f033b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:34:43 2011 +0200
Translation update done using Pootle.
commit a612bedffc2046c1232850238b0576547006696f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:34:26 2011 +0200
Translation update done using Pootle.
commit 642152dc5f18349414bb9dc229f08f0f5cc89879
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:33:37 2011 +0200
Translation update done using Pootle.
commit dd1f5029e93768aa90d154ccf5ecac33ee162e39
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:33:23 2011 +0200
Translation update done using Pootle.
commit 836e9a93c9bdfb2a2f19e58c62c03baa4b3b6047
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:32:58 2011 +0200
Translation update done using Pootle.
commit d687cea4658bbf332928433d8d4e8f24c477d93f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:32:35 2011 +0200
Translation update done using Pootle.
commit 3d83d2ac6844a4613113c83277a8efba89bd1fdc
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:31:15 2011 +0200
Translation update done using Pootle.
commit 3421db3f28fa4dfb7ac5ebecbc66b1cca8efbc6d
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:29:56 2011 +0200
Translation update done using Pootle.
commit a8f6af3f7454a7ccf59d51e8f0f35a68e71d57b9
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:29:30 2011 +0200
Translation update done using Pootle.
commit ee0c715bd80c35f5c1446abdd57b718bfa358fde
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:28:47 2011 +0200
Translation update done using Pootle.
commit db507e9ef0138509cd89ff0359a96fe2fd67cbe4
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:28:36 2011 +0200
Translation update done using Pootle.
commit 8afbcf2db6eb785cd476dc1d65db4d1eddf169f9
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:28:01 2011 +0200
Translation update done using Pootle.
commit 48dc1a57770c0fc62af152e877ab247c47f9f06d
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:27:46 2011 +0200
Translation update done using Pootle.
commit 98a9ea738e8832a988d18374c87bad09287ffb4a
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:27:00 2011 +0200
Translation update done using Pootle.
commit 4f277bb64aa36c1ff917c50255cd8a87031949a1
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:25:55 2011 +0200
Translation update done using Pootle.
commit c51aa5019280fe8712241fa3572033c19d5db4a0
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:24:49 2011 +0200
Translation update done using Pootle.
commit d8a2ed3e9e4affe85c3eaa61555910935bf26005
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:24:26 2011 +0200
Translation update done using Pootle.
commit ee7f7c0a8150fa92222200c7c1aa3ef91bce575f
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:23:22 2011 +0200
Translation update done using Pootle.
commit 0befc834b40db1cf5bf17ad98c6dc47301975d6b
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:22:09 2011 +0200
Translation update done using Pootle.
commit fced7bbfcd845e54e031d808c8cc9ff79fc0014e
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:21:04 2011 +0200
Translation update done using Pootle.
commit 32751de7e464afb507ab51ad4653468a16d7ecbc
Author: Yuichiro <yuichiro(a)pop07.odn.ne.jp>
Date: Fri May 13 09:20:32 2011 +0200
Translation update done using Pootle.
-----------------------------------------------------------------------
Summary of changes:
output/de/Documentation.html | 4 +-
output/el/Documentation.html | 4 +-
output/en_GB/Documentation.html | 4 +-
output/es/Documentation.html | 4 +-
output/ja/Documentation.html | 494 ++++++++++++++++-------------------
output/ja/README | 4 +-
output/pt_BR/Documentation.html | 4 +-
output/zh_CN/Documentation.html | 4 +-
po/ja.po | 552 ++++++++++++++++++++-------------------
pot/ca-full.pot | 2 +-
pot/ca-html.pot | 2 +-
pot/ca-txt.pot | 2 +-
pot/cs-full.pot | 2 +-
pot/cs-html.pot | 2 +-
pot/cs-txt.pot | 2 +-
pot/de-full.pot | 2 +-
pot/de-html.pot | 2 +-
pot/de-txt.pot | 2 +-
pot/el-full.pot | 2 +-
pot/el-html.pot | 2 +-
pot/el-txt.pot | 2 +-
pot/en_GB-full.pot | 2 +-
pot/en_GB-html.pot | 2 +-
pot/en_GB-txt.pot | 2 +-
pot/es-full.pot | 2 +-
pot/es-html.pot | 2 +-
pot/es-txt.pot | 2 +-
pot/fi-full.pot | 2 +-
pot/fi-html.pot | 2 +-
pot/fi-txt.pot | 2 +-
pot/fr-full.pot | 2 +-
pot/fr-html.pot | 2 +-
pot/fr-txt.pot | 2 +-
pot/gl-full.pot | 2 +-
pot/gl-html.pot | 2 +-
pot/gl-txt.pot | 2 +-
pot/hu-full.pot | 2 +-
pot/hu-html.pot | 2 +-
pot/hu-txt.pot | 2 +-
pot/hy-full.pot | 2 +-
pot/hy-html.pot | 2 +-
pot/hy-txt.pot | 2 +-
pot/it-full.pot | 2 +-
pot/it-html.pot | 2 +-
pot/it-txt.pot | 2 +-
pot/ja-full.pot | 14 +-
pot/ja-html.pot | 2 +-
pot/ja-txt.pot | 2 +-
pot/ka-full.pot | 2 +-
pot/ka-html.pot | 2 +-
pot/ka-txt.pot | 2 +-
pot/lt-full.pot | 2 +-
pot/lt-html.pot | 2 +-
pot/lt-txt.pot | 2 +-
pot/mn-full.pot | 2 +-
pot/mn-html.pot | 2 +-
pot/mn-txt.pot | 2 +-
pot/nb-full.pot | 2 +-
pot/nb-html.pot | 2 +-
pot/nb-txt.pot | 2 +-
pot/nl-full.pot | 2 +-
pot/nl-html.pot | 2 +-
pot/nl-txt.pot | 2 +-
pot/pl-full.pot | 2 +-
pot/pl-html.pot | 2 +-
pot/pl-txt.pot | 2 +-
pot/pt_BR-full.pot | 2 +-
pot/pt_BR-html.pot | 2 +-
pot/pt_BR-txt.pot | 2 +-
pot/ro-full.pot | 2 +-
pot/ro-html.pot | 2 +-
pot/ro-txt.pot | 2 +-
pot/sk-full.pot | 2 +-
pot/sk-html.pot | 2 +-
pot/sk-txt.pot | 2 +-
pot/sl-full.pot | 2 +-
pot/sl-html.pot | 2 +-
pot/sl-txt.pot | 2 +-
pot/sv-full.pot | 2 +-
pot/sv-html.pot | 2 +-
pot/sv-txt.pot | 2 +-
pot/tr-full.pot | 2 +-
pot/tr-html.pot | 2 +-
pot/tr-txt.pot | 2 +-
pot/zh_CN-full.pot | 14 +-
pot/zh_CN-html.pot | 2 +-
pot/zh_CN-txt.pot | 2 +-
pot/zh_TW-full.pot | 2 +-
pot/zh_TW-html.pot | 2 +-
pot/zh_TW-txt.pot | 2 +-
90 files changed, 612 insertions(+), 648 deletions(-)
diff --git a/output/de/Documentation.html b/output/de/Documentation.html
index b50d78c..76de1a7 100644
--- a/output/de/Documentation.html
+++ b/output/de/Documentation.html
@@ -20,7 +20,7 @@ https://l10n.cihar.com/projects/pmadoc/
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>phpMyAdmin 3.5.0-dev-Dokumentation</title>
+ <title>phpMyAdmin 3.4.0-Dokumentation</title>
<link rel="stylesheet" type="text/css" href="docs.css" />
</head>
@@ -28,7 +28,7 @@ https://l10n.cihar.com/projects/pmadoc/
<div id="header">
<h1>
<a href="http://www.phpmyadmin.net/">php<span
-class="myadmin">MyAdmin</span></a> 3.5.0-dev-Dokumentation
+class="myadmin">MyAdmin</span></a> 3.4.0-Dokumentation
</h1>
</div>
diff --git a/output/el/Documentation.html b/output/el/Documentation.html
index 234bb47..5ab45ee 100644
--- a/output/el/Documentation.html
+++ b/output/el/Documentation.html
@@ -20,7 +20,7 @@ https://l10n.cihar.com/projects/pmadoc/.
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Τεκμηρίωση phpMyAdmin 3.5.0-dev</title>
+ <title>Τεκμηρίωση phpMyAdmin 3.4.0</title>
<link rel="stylesheet" type="text/css" href="docs.css" />
</head>
@@ -28,7 +28,7 @@ https://l10n.cihar.com/projects/pmadoc/.
<div id="header">
<h1>
Τεκμηρίωση <a href="http://www.phpmyadmin.net/">php<span
-class="myadmin">MyAdmin</span></a> 3.5.0-dev
+class="myadmin">MyAdmin</span></a> 3.4.0
</h1>
</div>
diff --git a/output/en_GB/Documentation.html b/output/en_GB/Documentation.html
index ddc273c..8e214fa 100644
--- a/output/en_GB/Documentation.html
+++ b/output/en_GB/Documentation.html
@@ -19,7 +19,7 @@ Or you can edit them online at https://l10n.cihar.com/projects/pmadoc/.
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>phpMyAdmin 3.5.0-dev - Documentation</title>
+ <title>phpMyAdmin 3.4.0 - Documentation</title>
<link rel="stylesheet" type="text/css" href="docs.css" />
</head>
@@ -27,7 +27,7 @@ Or you can edit them online at https://l10n.cihar.com/projects/pmadoc/.
<div id="header">
<h1>
<a href="http://www.phpmyadmin.net/">php<span
-class="myadmin">MyAdmin</span></a> 3.5.0-dev Documentation
+class="myadmin">MyAdmin</span></a> 3.4.0 Documentation
</h1>
</div>
diff --git a/output/es/Documentation.html b/output/es/Documentation.html
index 0435ab0..fe2bba9 100644
--- a/output/es/Documentation.html
+++ b/output/es/Documentation.html
@@ -19,7 +19,7 @@ O puedes editarlos en línea en https://l10n.cihar.com/projects/pmadoc/.
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Documentación de phpMyAdmin 3.5.0-dev</title>
+ <title>Documentación de phpMyAdmin 3.4.0</title>
<link rel="stylesheet" type="text/css" href="docs.css" />
</head>
@@ -27,7 +27,7 @@ O puedes editarlos en línea en https://l10n.cihar.com/projects/pmadoc/.
<div id="header">
<h1>
<a href="http://www.phpmyadmin.net/">php<span
-class="myadmin">MyAdmin</span></a> 3.5.0-dev Documentación
+class="myadmin">MyAdmin</span></a> 3.4.0 Documentación
</h1>
</div>
diff --git a/output/ja/Documentation.html b/output/ja/Documentation.html
index 3eeecad..3e93488 100644
--- a/output/ja/Documentation.html
+++ b/output/ja/Documentation.html
@@ -42,9 +42,9 @@ class="myadmin">MyAdmin</span></a> 3.5.0-dev ドキュメント
<li><a href="Documentation.html#config">設定</a></li>
<li><a href="Documentation.html#transformations">変換機能</a></li>
<li><a href="Documentation.html#faq"><abbr title="よくある質問">FAQ</abbr></a></li>
- <li><a href="Documentation.html#developers">開発者向けの情報</a></li>
- <li><a href="Documentation.html#copyright">コピーライト</a></li>
- <li><a href="Documentation.html#credits">著作権表示</a></li>
+ <li><a href="Documentation.html#developers">開発者向け情報</a></li>
+ <li><a href="Documentation.html#copyright">著作権</a></li>
+ <li><a href="Documentation.html#credits">貢献者一覧</a></li>
<li><a href="Documentation.html#glossary">Glossary</a></li>
</ul>
@@ -111,15 +111,15 @@ MySQL ユーザを適切にセットアップしてお望みのデータベー
<li>サーバ、データベース、テーブルの保守、そのためのサーバの設定を提案</li>
<li>任意の <abbr title="structured query language">SQL</abbr>
コマンドの実行、編集、ブックマーク。マルチクエリにも対応。</li>
- <li>テキストファイルをテーブルにロード</li>
- <li>テーブルのダンプの作成<a href="#footnote_1"><sup>1</sup></a>と読み込み
+ <li>テキストファイルをテーブルに読み込み</li>
+ <li>テーブルダンプの作成<a href="#footnote_1"><sup>1</sup></a>と読み込み
</li>
<li>さまざまなフォーマットでデータをエクスポート<a href="#footnote_1"><sup>1</sup></a>:<abbr
title="Comma Separated Values">CSV</abbr>、<abbr title="Extensible Markup
Language">XML</abbr>、<abbr title="Portable Document Format">PDF</abbr>、<abbr
title="International Standards Organisation">ISO</abbr>/<abbr
-title="International Electrotechnical Commission">IEC</abbr> 26300 -
-OpenDocument テキストおよびスプレッドシート、<abbr title="Microsoft Word
+title="International Electrotechnical Commission">IEC</abbr> 26300
+(OpenDocument テキストおよびスプレッドシート)、<abbr title="Microsoft Word
2000">Word</abbr>、<abbr title="Microsoft Excel 97-2003 および Excel
2007">Excel</abbr>、L<sup>A</sup>T<sub><big>E</big></sub>X
</li>
@@ -187,12 +187,11 @@ Macintosh">Mac</acronym> <abbr title="operating system">OS</abbr> を使うと
StuffIt が <acronym title="Apple Macintosh">Mac</acronym> 形式にしてしまいます。<br />
そのため、サーバにアップロードする前に BBEdit で全ての phpMyAdmin スクリプトを Unix
風にセーブし直しておく必要があります。PHP はどうも <acronym title="Apple Macintosh">Mac</acronym>
-風の改行文字(「<tt>¥r</tt>」)を好まないようなのです。</p>
+風の改行文字(「<tt>¥r</tt>」)と相性がよくないようです。</p>
<h3 id="quick_install">クイックインストール</h3>
-<ol><li>phpmyadmin.net
-のダウンロードページから適切な配布キットを選択してください。いくつかのキットは英語版のみですが、全ての言語と全ての文字セットが含まれている UTF-8
-形式の全言語版もあります(ほとんどの場合これで大丈夫なはずです)。以後、<tt>phpMyAdmin-x.x.x-all-languages.tar.gz</tt>
+<ol><li>phpmyadmin.net のダウンロードページから適切な配布キットを選択してください。いくつかのキットは英語版のみですが、UTF-8
+形式の全言語版もあります。これには、全ての言語と全ての文字セットが含まれています(ほとんどの場合これで大丈夫なはずです)。以後、<tt>phpMyAdmin-x.x.x-all-languages.tar.gz</tt>
ような名前のキットを選んだと仮定して説明していきます。
</li>
<li>ウェブサーバのドキュメントルートで <tt>tar -xzvf phpMyAdmin_x.x.x.tar.gz</tt>
@@ -205,15 +204,13 @@ title="よくある質問">FAQ</abbr> 1.26</a> をご覧ください。</li>
<li>まず最初に、インストールを設定する必要があります。やり方は2つあります。1つは、ユーザーが <tt>config.inc.php</tt>
を手で編集・コピーする伝統的な方法。一方で現在では、グラフィカルなインストールを好む人用にウィザード形式のセットアップスクリプトが提供されています。しかしながら依然として、<tt>config.inc.php</tt>
を作成するのは、先進的な機能を必要に応じて簡単に使い始められる方法でもあります。
- <ul><li>To manually create the file, simply use your text editor to create the file
-<tt>config.inc.php</tt> (you can copy <tt>config.sample.inc.php</tt> to get
-minimal configuration file) in the main (top-level) phpMyAdmin directory
-(the one that contains <tt>index.php</tt>). phpMyAdmin first loads
-<tt>libraries/config.default.php</tt> and then overrides those values with
-anything found in <tt>config.inc.php</tt>. If the default value is okay for
-a particular setting, there is no need to include it in
-<tt>config.inc.php</tt>. You'll need a few directives to get going, a
-simple configuration may look like this:
+ <ul><li>手動でファイルを作成するには、単純にテキストエディタを使用して <tt>config.inc.php</tt> ファイルを phpMyAdmin
+のメイン(トップレベル)ディレクトリ(ここには <tt>index.php</tt>
+が含まれています)に作成します(その際、<tt>config.sample.inc.php</tt>
+をコピーすることで最小限の設定ファイルを取得することもできます)。最初に phpMyAdminは
+<tt>libraries/config.default.php</tt> を読み込み、それから <tt>config.inc.php</tt>
+内で見つかった値でデフォルト値を上書きします。設定に問題がなければ、デフォルト値は <tt>config.inc.php</tt>
+に含める必要はありません。稼動させるにはディレクティブをいくつか設定する必要がありますが、単純な設定では以下にような感じになります。
<pre>
<?php
$cfg['blowfish_secret'] = 'ba17c1ec07d65003'; // この値は適当に決めてください
@@ -223,7 +220,7 @@ $i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
?>
</pre>
- Or, if you prefer to not be prompted every time you log in:
+ あるいは、ログインするたびにプロンプトを表示させたくないのであれば以下のようにします。
<pre>
<?php
@@ -234,8 +231,7 @@ $cfg['Servers'][$i]['password'] = 'cbb74bc'; // ここにパスワードを
$cfg['Servers'][$i]['auth_type'] = 'config';
?>
</pre>
- For a full explanation of possible configuration values, see the <a
-href="#config">Configuration Section</a> of this document.</li>
+ 設定できる値の詳細な解説については、このドキュメントの<a href="#config">「設定」の章</a>を参照してください。</li>
<li id="setup_script">Instead of manually editing <tt>config.inc.php</tt>, you can use the <a
href="setup/">Setup Script</a>. First you must manually create a folder
<tt>config</tt> in the phpMyAdmin directory. This is a security measure. On
@@ -284,10 +280,10 @@ href="#faqmultiuser"> multi–user sub–section</a> of this <abbr
title="Frequently Asked Questions">FAQ</abbr> for additional information,
especially <a href="#faq4_4"> <abbr title="Frequently Asked
Questions">FAQ</abbr> 4.4</a>.</li>
- <li>Open the <a href="index.php">main phpMyAdmin directory</a> in your
-browser. phpMyAdmin should now display a welcome screen and your databases,
-or a login dialog if using <abbr title="HyperText Transfer
-Protocol">HTTP</abbr> or cookie authentication mode.</li>
+ <li>お使いのブラウザで<a href="index.php">phpMyAdmin のメインディレクトリ</a>を開きます。<abbr
+title="HyperText Transfer
+Protocol">HTTP</abbr>/クッキー認証モードを使用している場合、phpMyAdmin
+は現行版では、ようこそ画面と管理データベース、もしくはログインダイアログが表示されます。</li>
<li>You should deny access to the <tt>./libraries</tt> and <tt>./setup/lib</tt>
subfolders in your webserver configuration. For Apache you can use supplied
.htaccess file in that folder, for other webservers, you should configure
@@ -295,12 +291,11 @@ this yourself. Such configuration prevents from possible path exposure and
cross side scripting vulnerabilities that might happen to be found in that
code.</li>
<li>
- It is generally good idea to protect public phpMyAdmin installation against
-access by robots as they usually can not do anything good there. You can do
-this using <code>robots.txt</code> file in root of your webserver or limit
-access by web server configuration. You can find example
-<code>.htaccess</code> file which can help you achieve this in
-<code>contrib</code> directory in phpMyAdmin.
+ 一般的には、インストールしている phpMyAdmin
+を公開されている場合、検索エンジンロボットが十分機能できないようにするために、それらからのアクセスに対してを保護することをお勧めします。そのためには、<code>robots.txt</code>
+ファイルを Web サーバのルートに置くか、もしくは、Web サーバの設定によりアクセス制限を行います。phpMyAdmin の
+<code>contrib</code> ディレクトリ内に、<code>.htaccess</code>
+ファイルのサンプルがあります。これは、その設定を行うためのヒントになるでしょう。
</li>
</ol>
@@ -326,12 +321,9 @@ new tables by importing <i>./scripts/create_tables.sql</i>.</p>
<p> phpMyAdmin
を使ってテーブル群を作成することもできますが、ご注意ください。データベースやテーブルを作成する際には特別な(管理者の)権限が必要になるかもしれません。また、データベース名によってはスクリプトに多少の修正を加える必要があるかもしれません。</p>
-<p> After having imported the <i>./scripts/create_tables.sql</i> file, you
-should specify the table names in your <i>./config.inc.php</i> file. The
-directives used for that can be found in the <a href="#config">Configuration
-section</a>. You will also need to have a controluser with the proper rights
-to those tables (see section <a href="#authentication_modes">Using
-authentication modes</a> below).</p>
+<p> <i>./scripts/create_tables.sql</i> ファイルをインポートしたら、<i>./config.inc.php</i>
+ファイルでテーブル名を指定してください。このとき使うディレクティブの説明は<a
+href="#config">「設定」の章</a>にあります。また、これらのテーブル群に対する適切なアクセス権を持った管理ユーザが必要になります(後述の<i>認証モードの使い方</i>の節をご覧ください)。</p>
<h3 id="upgrading">旧版からのアップグレード</h3>
@@ -343,24 +335,21 @@ remove it from your file and just use the default one. For compatibility
with PHP 6, remove a <tt>set_magic_quotes_runtime(0);</tt> statement that
you might find near the end of your configuration file.</p>
-<p> You should <strong>not</strong> copy <tt>libraries/config.default.php</tt>
-over <tt>config.inc.php</tt> because the default configuration file is
-version-specific.</p>
+<p> デフォルト設定ファイルはバージョンに依存していますので、<tt>libraries/config.default.php</tt> を
+<tt>config.inc.php</tt> へコピー<strong>しない</strong>ようにしてださい。</p>
-<p> If you have upgraded your MySQL server from a version previous to 4.1.2 to
-version 5.x or newer and if you use the phpMyAdmin configuration storage,
-you should run the SQL script found in
-<tt>scripts/upgrade_tables_mysql_4_1_2+.sql</tt>.</p>
+<p> MySQL サーバをバージョン 4.1.2 以前から 5.x 以降へアップグレードして、且つ、phpMyAdmin
+設定保存場所を使用している場合、<tt>scripts/upgrade_tables_mysql_4_1_2+.sql</tt> にある SQL
+スクリプトを実行する必要があります。</p>
<h3 id="authentication_modes">認証モードの使い方</h3>
<ul><li><b>マルチユーザ環境</b>では、ユーザが自分のデータベースにアクセスできるよう、また他人のデータベースにいたずらできないよう、<abbr
-title="HyperText Transfer Protocol">HTTP</abbr>/クッキー認証モードにするのがおすすめです。<br />
+title="HyperText Transfer Protocol">HTTP</abbr>/クッキー認証モードにするのがお奨めです。<br />
ただし、ご注意ください。マイクロソフトの Internet Explorer は、クッキーに関しては本当にバグが多いようです。少なくともバージョン 6
まではそうです。<br />
- Even in a <b>single-user environment</b>, you might prefer to use <abbr
-title="HyperText Transfer Protocol">HTTP</abbr> or cookie mode so that your
-user/password pair are not in clear in the configuration file.
+ また、<b>シングルユーザ環境</b>であっても <abbr title="HyperText Transfer
+Protocol">HTTP</abbr>/クッキーモードの方が好ましく思えるかもしれません。ユーザ/パスワードの組を設定ファイルに明記しなくてすみますから。
</li>
<li><abbr title="HyperText Transfer Protocol">HTTP</abbr>/クッキー認証モードの方が安全です。MySQL
@@ -401,7 +390,7 @@ GRANT SELECT ON mysql.host TO 'pma'@'localhost';
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
ON mysql.tables_priv TO 'pma'@'localhost';</pre>
- If you want to use the many new relation and bookmark features:
+ また、リレーション/ブックマーク関係の新機能をいろいろ使ってみたい場合は次のようにします。
<pre>
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';
@@ -447,10 +436,9 @@ title="HyperText Transfer Protocol">HTTP</abbr>」認証モードと <i>.htacces
<li>もちろんユーザがブラウザのクッキーを有効にしている必要がありますが、現在では全ての認証方式でクッキーが必要となっています。</li>
<li>With this mode, the user can truly log out of phpMyAdmin and log in back
with the same username.</li>
- <li>If you want to log in to arbitrary server see <a
-href="#AllowArbitraryServer" class="configrule">
-$cfg['AllowArbitraryServer']</a> directive.</li>
- <li><a href="#require">「必要なもの」</a>のセクションにも書いてある通り、<tt>mcrypt</tt>
+ <li>任意のサーバにログインしたい場合は、<a href="#AllowArbitraryServer"
+class="configrule">$cfg['AllowArbitraryServer']</a> ディレクティブをご覧ください。</li>
+ <li><a href="#require">「必要なもの」</a>の章にも書いてある通り、<tt>mcrypt</tt>
拡張を利用するとアクセス速度がかなり向上します。ただし、これは必須ではありません。</li>
</ul>
@@ -469,11 +457,10 @@ href="#servers_user" class="configrule"> $cfg['Servers'][$i]['user']</a> and
$cfg['Servers'][$i]['password']</a> fields (and as a result, anyone who can
read your config.inc.php can discover your username and password).
<br />
- But you don't need to setup a "controluser" here: using the <a
-href="#servers_only_db" class="configrule">
-$cfg['Servers'][$i]['only_db']</a> might be enough.</li>
+ ただし、こうすると「管理ユーザ」を設定する必要はなくなります。あとは <a href="#servers_only_db"
+class="configrule">$cfg['Servers'][$i]['only_db']</a> を使えば十分かもしれません。</li>
<li><a href="#faqmultiuser"><abbr title="Internet service provider">ISP</abbr>
-<abbr title="よくある質問">FAQ</abbr></a> セクションには設定ファイルを保護する方法が説明されています。</li>
+<abbr title="よくある質問">FAQ</abbr></a> の節には設定ファイルを保護する方法が説明されています。</li>
<li>For additional security in this mode, you may wish to consider the Host
authentication <a href="#servers_allowdeny_order" class="configrule">
$cfg['Servers'][$i]['AllowDeny']['order']</a> and <a
@@ -517,7 +504,7 @@ since this link provides funding for phpMyAdmin.
<p> <span class="important"><acronym title="Apple Macintosh">Mac</acronym>
ユーザ向けの警告:</span> PHP は <acronym title="Apple Macintosh">Mac</acronym>
-の改行文字(「<tt>¥r</tt>」)を好まないようです。かならずテキストエディタで UNIX/Linux
+の改行文字(「<tt>¥r</tt>」)と相性がよくないようです。かならずテキストエディタで UNIX/Linux
の改行文字(「<tt>¥n</tt>」)を使えるようにするオプションを選択してから修正したスクリプトを保存してください。</p>
<p> <span class="important">設定にあたっての注意:</span> 設定可能なデータはほとんどが
@@ -529,7 +516,7 @@ href="#setup">クイックインストール</a>の項を参照して作成し
にあります。また、<i>config.footer.inc.php</i> と <i>config.header.inc.php</i>
ファイルを修正すれば各ページの先頭と末尾にページ固有のコードを追加できます。</p>
-<dl><dt id="cfg_PmaAbsoluteUri">$cfg['PmaAbsoluteUri'] string</dt>
+<dl><dt id="cfg_PmaAbsoluteUri">$cfg['PmaAbsoluteUri'] 文字列</dt>
<dd>ここには、phpMyAdminがインストールされているディレクトリの<abbr title="Uniform Resource
Locator">URL</abbr>をフルパスで設定します。(例)<tt>http://www.your_web.net/path_to_your_phpMyAdmin_directory/</tt>
なお、ウェブサーバによってはこの <abbr title="Uniform Resource Locator">URL</abbr>
@@ -555,7 +542,7 @@ class="configrule">$cfg['Servers'][$i]['pmadb']</a> 参照)。
<dd>クッキー認証で mcrypt 拡張がなかった場合、警告を表示します。<tt>TRUE</tt>
に設定しておくことで、このメッセージは表示されなくなります。</dd>
- <dt id="cfg_TranslationWarningThreshold">$cfg['TranslationWarningThreshold'] integer</dt>
+ <dt id="cfg_TranslationWarningThreshold">$cfg['TranslationWarningThreshold'] 整数</dt>
<dd>Show warning about incomplete translations on certain threshold.</dd>
<dt id="cfg_AllowThirdPartyFraming">$cfg['AllowArbitraryServer'] boolean</dt>
@@ -563,7 +550,7 @@ class="configrule">$cfg['Servers'][$i]['pmadb']</a> 参照)。
call phpMyAdmin inside a frame, and is a potential security hole allowing
cross-frame scripting attacks.</dd>
- <dt id="cfg_blowfish_secret">$cfg['blowfish_secret'] string</dt>
+ <dt id="cfg_blowfish_secret">$cfg['blowfish_secret'] 文字列</dt>
<dd>「クッキー」認証方式は、パスワードを暗号化するために blowfish アルゴリズムを使用しています。<br />
「クッキー」認証方式を利用する場合は、ここにお好みのランダムなパスフレーズを入力してください。このパスフレーズは blowfish
アルゴリズムが内部的に利用するものです。ユーザがパスフレーズを入力するよう求められることはありません。このパラメータの文字数の上限はありません。<br /><br />
@@ -642,7 +629,7 @@ Protocol">HTTP</abbr>/クッキー認証モード(あるいは、phpMyAdmin
以降の「config」認証モード)を使う場合、<i>mysql.user(「Password」以外の全カラム)</i>、<i>mysql.db(全カラム)</i>、<i>mysql.tables_priv(「Grantor」、「Timestamp」以外の全カラム)</i>
テーブルに <tt>SELECT</tt> 特権を持つ MySQL
アカウントの情報を提供する必要があります。このアカウントはログイン時にどのデータベースを表示するかチェックするのに利用されます。<br />
- 詳細は<a href="#setup">インストールセクション</a>の「認証モードの使い方」をご覧ください。<br /><br />
+ 詳細は<a href="#setup">インストールの章</a>の「認証モードの使い方」をご覧ください。<br /><br />
2.2.5 より前の phpMyAdmin では「stduser/stdpass」という名前でした。</dd>
@@ -676,7 +663,7 @@ href="#cfg_Servers_SignonURL" class="configrule">signon URL</a> to use this
authentication method.</li>
</ul>
- 詳細は<a href="#setup">インストールセクション</a>の「認証モードの使い方」をご覧ください。
+ 詳細は<a href="#setup">インストールの章</a>の「認証モードの使い方」をご覧ください。
</dd>
<dt id="servers_auth_http_realm">
<span
@@ -696,7 +683,7 @@ will be used.
<dt id="servers_auth_swekey_config">
<span
id="cfg_Servers_auth_swekey_config">$cfg['Servers'][$i]['auth_swekey_config']</span>
-string<br />
+文字列<br />
</dt>
<dd>
The name of the file containing <a href="#swekey">Swekey</a> ids and login
@@ -767,7 +754,7 @@ pattern syntax</a> portion of the PHP reference manual.
<br /><br />
この文書の <a href="#linked-tables">phpMyAdmin
-の設定保存場所</a>のセクションをご覧ください。このテーブル構造の利点や、データベースの簡単な作成法、必要なテーブルが書かれています。
+の設定保存場所</a>の節をご覧ください。このテーブル構造の利点や、データベースの簡単な作成法、必要なテーブルが書かれています。
<br /><br />
インストールした phpMyAdmin のユーザがひとりの場合は、お使いのデータベースに専用のテーブル群を格納することもできます。その場合は
@@ -2310,7 +2297,7 @@ avoid unintended performance problems in case of huge tables.</dd>
<h3 id="transformationsintro">1. はじめに</h3>
<p> 変換機能を有効にするには、<tt>column_info</tt> テーブルと、適切なディレクティブを設定する必要があります。手順については<a
-href="#config">「設定」セクション</a>をご覧ください。</p>
+href="#config">「設定」の章</a>をご覧ください。</p>
<p> カラムごとに別々の変換機能を適用できます。変換機能は各カラムの内容を取得してから、選択された機能に定義されている規則に従って変換を行うためです。</p>
@@ -2658,7 +2645,7 @@ upload_max_filesize より大きい必要があるそうです。<br /> <br />
<ul><li><a href="#cfg_UploadDir" class="configrule">$cfg['UploadDir']</a>
機能をご覧ください。この機能を使うと、SCPやFTPといったお好みの転送法でファイルをサーバにアップロードできるようになります。ファイルをアップロードしたら、phpMyAdmin
はその一時ディレクトリからファイルをインポートできるようになります。詳しくはこのドキュメントの<a
-href="#config">設定セクション</a>をご覧ください。</li>
+href="#config">「設定」の章</a>をご覧ください。</li>
<li>(<a
href="http://www.ozerov.de/bigdump.php">BigDump</a>のような)ユーティリティを利用してアップロードの前にファイルを分割する方法もあります。このユーティリティはもとより、サードパーティ製のアプリケーションは一切サポートできませんが、そういったものを利用して成功したユーザがいることは承知しています。</li>
<li>シェル(コマンドライン)にアクセスできるのであれば、MySQL を利用して直接ファイルをインポートする方法もあります。その場合は MySQL
@@ -3243,8 +3230,9 @@ comments like this:</p>
</p>
<h4 id="faq3_5">
- <a href="#faq3_5">3.5 ネストフォルダを使うと(<a href="#cfg_LeftFrameTableSeparator"
-class="configrule">$cfg['LeftFrameTableSeparator']</a>)、複数の階層を持つものがおかしな表示になることがあります?!</a></h4>
+ <a href="#faq3_5">3.5 ネストフォルダを使うと、複数の階層を持つものがおかしな表示になることがあります?!</a>(<a
+href="#cfg_LeftFrameTableSeparator"
+class="configrule">$cfg['LeftFrameTableSeparator']</a>)</h4>
<p> ご注意ください。間に文字をはさまずに区切り文字を連続して使ったり、テーブル名の前後に区切り文字を使ってはいけないのです。どうしてもそうする必要があるなら、別の区切り文字(TableSeparator)を使うか、この機能を無効にすることを検討してください。</p>
@@ -3312,15 +3300,13 @@ href="#cfg_MaxExactCount" class="configrule">$cfg['MaxExactCount']</a>
<h4 id="faq3_13">
<a href="#faq3_13">3.13 <tt>USE</tt> の後にハイフンを含むデータベース名を入力するとエラーが出ます。</a></h4>
<p>
- 我々が MySQL 5.1.49 で行ったテストでは、API は USE コマンドはこの構文を使用しないことを確認しています。
+ 我々が MySQL 5.1.49 で行ったテストでは、API はそのような構文の USE コマンドを認めていないことを確認しています。
</p>
<h4 id="faq3_14">
- <a href="#faq3_14">3.14 I am not able to browse a table when I don't have
-the right to SELECT one of the columns.</a></h4>
+ <a href="#faq3_14">3.14 カラムが1つでも正しく SELECT できないと、テーブルを参照することができません。</a></h4>
<p>
- This has been a known limitation of phpMyAdmin since the beginning and it's
-not likely to be solved in the future.
+ これは初期の頃から phpMyAdmin の制限として知られており、将来的に解決される見込みはありません。
</p>
@@ -3405,7 +3391,7 @@ sake of efficiency.
はユーザ全員が使えるセントラルコピーをセットアップできるようになりました。この機能の開発にあたってはありがたいことに NetCologne GmbH
社がスポンサーになってくださいました。この機能を使うには、MySQL ユーザ管理機構が適切にセットアップされていること、phpMyAdmin は
<abbr title="HyperText Transfer Protocol">HTTP</abbr>
-ないしクッキー認証を使うことが必要です。インストールセクションの「<abbr title="HyperText Transfer
+ないしクッキー認証を使うことが必要です。インストールの章の「<abbr title="HyperText Transfer
Protocol">HTTP</abbr> 認証の使い方」をご覧ください。
</p>
@@ -3448,7 +3434,7 @@ Protocol">HTTP</abbr> 認証ないしクッキー認証機能を使った方が
<a href="#faq4_4">4.4 <abbr title="HyperText Transfer Protocol">HTTP</abbr>
認証を使うとかならず「Access denied(アクセスは拒否されました)」になります。</a></h4>
-<p> いくつかの理由が考えられます:</p>
+<p> いくつかの理由が考えられます。</p>
<ul><li><a href="#cfg_Servers_controluser"
class="configrule">$cfg['Servers'][$i]['controluser']</a> や <a
@@ -3469,20 +3455,17 @@ class="configrule">$cfg['Servers'][$i]['controlpass']</a> が間違っている
<h4 id="faq4_6">
<a href="#faq4_6">4.6 どうすればホストベースの認証の追加指定を利用できますか。</a></h4>
-<p> If you have existing rules from an old .htaccess file, you can take them and
-add a username between the <tt>'deny'</tt>/<tt>'allow'</tt> and
-<tt>'from'</tt> strings. Using the username wildcard of <tt>'%'</tt> would
-be a major benefit here if your installation is suited to using it. Then you
-can just add those updated lines into the <a
+<p> 古い .htaccess ファイルに既存のルールがある場合は、それを取ってきて、<tt>「deny」</tt>/<tt>「allow」</tt> と
+<tt>「from」</tt> の文字列の間にユーザ名を加えてください。利用できるようにインストールしてあるなら、ユーザ名にワイルドカード
+<tt>「%」</tt> が使えるのでとても便利です。それが済んだら、あとは更新した行を <a
href="#cfg_Servers_AllowDeny_rules" class="configrule">
-$cfg['Servers'][$i]['AllowDeny']['rules']</a> array.</p>
+$cfg['Servers'][$i]['AllowDeny']['rules']</a> 配列に加えるだけです。</p>
-<p> If you want a pre-made sample, you can try this fragment. It stops the
-'root' user from logging in from any networks other than the private network
-<abbr title="Internet Protocol">IP</abbr> blocks.</p>
+<p> できあいのサンプルがほしい場合は、下記をお試しください。これは「root」ユーザがプライベートネットワークの <abbr title="Internet
+Protocol">IP</abbr> ブロックに含まれないネットワークからログインするのを防ぐものです。</p>
<pre>
-//block root from logging in except from the private networks
+//プライベートネットワーク以外からの root によるログインをブロックする
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
'deny root from all',
@@ -3614,8 +3597,8 @@ title="operating system">OS</abbr> X:Safari ブラウザでは特殊文字が
<h4 id="faq5_13">
<a href="#faq5_13">5.13 Internet Explorer 5.5 や 6 で <abbr title="HyperText
-Transfer Protocol">HTTP</abbr> 認証タイプを利用すると、2
-つのサーバを管理できなくなります:最初のサーバにログインして、別のサーバにログインするまではよいのですが、最初のサーバに戻ると、操作するたびにログインしなければならなくなるのです。</a></h4>
+Transfer Protocol">HTTP</abbr>
+認証タイプを利用すると、2つのサーバを管理できなくなります。最初のサーバにログインして、別のサーバにログインするまではよいのですが、最初のサーバに戻ると、操作するたびにログインしなければならなくなるのです。</a></h4>
<p> これは Internet Explorer のバグです。ほかのブラウザではこのようなことは起こりません。</p>
@@ -3676,17 +3659,14 @@ title="structured query language">SQL</abbr> エラーを返します。</a></h4
</p>
<h4 id="faq6_2">
- <a href="#faq6_2">6.2 テーブルを作るときに 2
-つのカラムでインデックスのチェックボックスをクリックしたのですが、phpMyAdmin はその 2
-つのカラムにひとつしかインデックスを生成してくれません。</a></h4>
+ <a href="#faq6_2">6.2 テーブルを作るときに2つのカラムでインデックスのチェックボックスをクリックしたのですが、phpMyAdmin
+はその2つのカラムに1つしかインデックスを生成してくれません。</a></h4>
<p>
- This is the way to create a multi-columns index. If you want two indexes,
-create the first one when creating the table, save, then display the table
-properties and click the Index link to create the other index.
+ これは、複数カラムのインデックスの作り方なのです。インデックスを2つ作りたいときは、テーブルを作成するときに最初のインデックスを作り、保存してから、テーブルのプロパティを表示し、インデックスのリンクをクリックして次のインデックスを作るようにします。
</p>
<h4 id="faq6_3">
- <a href="#faq6_3">6.3 テーブルにヌルの値を挿入するにはどうすればよいのでしょう。</a></h4>
+ <a href="#faq6_3">6.3 テーブルに null 値を挿入するにはどうすればよいのでしょうか?</a></h4>
<p>
バージョン 2.2.3 以降、null にできるカラムにはそれぞれチェックボックスが用意されています。2.2.3
より前は、カラムの値としてクォートなしで「null」と入力する必要がありました。バージョン 2.5.5 以降では、本当の null
@@ -3697,11 +3677,9 @@ properties and click the Index link to create the other index.
<h4 id="faq6_4">
<a href="#faq6_4">6.4 データベースやテーブルのバックアップはどうすればよいのでしょう。</a></h4>
-<p> Click on a database or table name in the left frame, the properties will be
-displayed. Then on the menu, click "Export", you can dump the
-structure, the data, or both. This will generate standard <abbr
-title="structured query language">SQL</abbr> statements that can be used to
-recreate your database/table.
+<p> 左フレームでデータベースまたはテーブル名をクリックします。プロパティが表示されますので、メニューの「エクスポート
+(Export)」をクリックします。構造、データ、あるいは構造とデータをダンプできるようになります。生成されるのは標準的な <abbr
+title="structured query language">SQL</abbr> 文ですので、データベース/テーブルを作り直すのに使えます。
<br /><br />
「ファイルに保存(Save as file)」を選択する必要も出てくることでしょう。「ファイルに保存」を選択すると、phpMyAdmin
は生成されたダンプをパソコンなどの端末へ送信します。PHP の設定によっては、ダンプしたものを圧縮するオプションが表示されます。<a
@@ -3714,12 +3692,10 @@ href="#cfg_ExecTimeLimit" class="configrule">$cfg['ExecTimeLimit']</a>
<a href="#faq6_5">6.5
どうすればダンプからデータベースやテーブルを復元(アップロード)できるのでしょう。どうすれば「.sql」ファイルを実行できるのでしょう。</a></h4>
-<p> Click on a database name in the left frame, the properties will be
-displayed. Select "Import" from the list of tabs in the
-right–hand frame (or "<abbr title="structured query
-language">SQL</abbr>" if your phpMyAdmin version is previous to
-2.7.0). In the "Location of the text file" section, type in the
-path to your dump filename, or use the Browse button. Then click Go.
+<p> 左フレームでデータベース名をクリックします。プロパティが表示されるので、右フレームのタブ一覧から「インポート (Import)」(お使いの
+phpMyAdmin のバージョンが 2.7.0 より前の場合は「<abbr title="structured query
+language">SQL</abbr>」)を選択してください。「テキストファイルの位置 (Location of the text
+file)」セクションにダンプファイル名をタイプするか、選択 (Browse) ボタンでファイルを指定して、実行する (Go) をクリックします。
<br /><br />
バージョン 2.7.0 以降はインポートエンジンが書き直されたため、可能であればお使いの phpMyAdmin
を最新のバージョンにアップグレードして新しいインポート機能をご利用ください。
@@ -3732,7 +3708,7 @@ path to your dump filename, or use the Browse button. Then click Go.
<p> たとえば、persons、towns、countries というテーブルがすべて mydb
というデータベースのなかにあるとします。<tt>pma_relation</tt>
-テーブルがない場合は設定セクションで説明されている通りに作ります。続いて、この例で使うテーブルを作ります:</p>
+テーブルがない場合は「設定」の章で説明されている通りに作ります。続いて、この例で使うテーブルを作ります。</p>
<pre>
CREATE TABLE REL_countries (
@@ -3789,7 +3765,7 @@ INSERT INTO REL_towns VALUES ('M', 'Montréal');
<h4 id="faqdisplay">
<a href="#faqdisplay">6.7 どうすれば「表示するカラム(display column)」機能を使えるのでしょう。</a></h4>
<p>
- 前項の例に続いて、設定セクションで説明した pma_table_info を作ります。persons テーブルを表示して、town code ないし
+ 前項の例に続いて、「設定」の章で説明した pma_table_info を作ります。persons テーブルを表示して、town code ないし
country code の上にマウスを移動します。
<br /><br />
<a href="#faq6_21"><abbr title="よくある質問">FAQ</abbr> 6.21</a> もご覧ください。「表示するカラム
@@ -4058,7 +4034,7 @@ Excel, which works out of the box, but phpMyAdmin supports direct export to
Microsoft Excel version 97 and newer. For this to work, you need to set <a
href="#cfg_TempDir" class="configrule">$cfg['TempDir']</a> to a place where
the web server user can write (for example <tt>'./tmp'</tt>).</p>
-<p> UNIX ベースのシステムで一時ディレクトリを作成するにはこうします:</p>
+<p> UNIX ベースのシステムで一時ディレクトリを作成するには、以下のようにします。</p>
<pre>
cd phpMyAdmin
@@ -4080,10 +4056,10 @@ chmod o+rwx tmp
href="http://blobstreaming.org">blobstreaming.org</a>. You need the
following components:</p>
<ul>
- <li>PBMS BLOB Streaming Daemon for MySQL (0.5.15 or later)</li>
- <li>Streaming enabled PBXT Storage engine for MySQL (1.0.11-6 or later)</li>
- <li>PBMS Client Library for MySQL (0.5.15 or later)</li>
- <li>PBMS PHP Extension for MySQL (0.1.1 or later)</li>
+ <li>MySQL 用の PBMS BLOB ストリーミングデーモン (0.5.15 以降)</li>
+ <li>ストリーミングが有効な MySQL 用の PBXT ストレージエンジン (1.0.11-6 以降)</li>
+ <li>MySQL 用の PBMS クライアントライブラリ (0.5.15 以降)</li>
+ <li>MySQL 用の PBMS PHP 拡張 (0.1.1 以降)</li>
</ul>
<p>Here are details about configuration and operation:</p>
@@ -4179,13 +4155,13 @@ href="http://wiki.phpmyadmin.net/pma/Charts#Data_formats_for_query_results_chart
<h4 id="faq7_1">
<a href="#faq7_1">7.1 バグを見つけました。どうすれば開発陣に伝えられますか?</a></h4>
-<p> Our Bug Tracker is located at <a
+<p> phpMyAdmin のバグトラッカーが <a
href="http://sf.net/projects/phpmyadmin/">http://sf.net/projects/phpmyadmin/</a>
-under the Bugs section.<br /><br />
+の Bugs セクションにあります。<br /><br />
- ただし、まずは見つけたバグをほかのユーザに話してみてください:<br />
- <a href="https://sourceforge.net/projects/phpmyadmin/forums">
-https://sourceforge.net/projects/phpmyadmin/forums</a>.
+ ただし、まずは見つけたバグをほかのユーザに話してみてください。<br />
+ <a
+href="https://sourceforge.net/projects/phpmyadmin/forums">https://sourceforge.net/projects/phpmyadmin/forums</a>
</p>
<h4 id="faq7_2">
@@ -4210,15 +4186,14 @@ However there are some entities that need to be there: quotes, non-breakable
spaces, ampersands, less than, greater than.
</p>
<p>
- You can then put your translations, as a zip file to avoid losing special
-characters, on the sourceforge.net <a
-href="https://sourceforge.net/tracker/?group_id=23067&atid=387645">translation
-tracker.</a>
+ 翻訳は sourceforge.net の<a
+href="https://sourceforge.net/tracker/?group_id=23067&atid=387645">翻訳トラッカー</a>に掲載できます。zip
+ファイルにして特殊文字が消えないようにしてください。
</p>
<p>
- It would be a good idea to subscribe to the <a
+ <a
href="https://lists.sourceforge.net/lists/listinfo/phpmyadmin-translators">phpmyadmin-translators</a>
-mailing list, because this is where we ask for translations of new messages.
+メーリングリストに参加するのも良いと思います。ここは私たちが新しいメッセージの翻訳を求める場所にもなっています。
</p>
<p>
@@ -4239,27 +4214,26 @@ tracker</a>.
<h4 id="faq7_3">
<a href="#faq7_3">7.3 phpMyAdmin の開発に協力したいのですが、どのように進めればよいでしょうか?</a></h4>
-<p> 新規の開発者はなるべく下記の手順にしたがってください:</p>
+<p> 新規の開発者は、なるべく下記の手順に従ってください。</p>
-<ol><li>アノニマス git から現在の git ツリーを取得します:<br />
+<ol><li>アノニマス git から現在の git ツリーを取得します。<br />
<tt>git clone
git://phpmyadmin.git.sourceforge.net/gitroot/phpmyadmin/phpmyadmin</tt><br />
</li>
<li>手を加えます。</li>
- <li>generate patch with your changes: <tt>git diff > xxx.diff</tt><br />
+ <li>「<tt>git diff > xxx.diff</tt>」としてパッチを生成します。<br />
</li>
- <li>submit your patch via the <a
-href="https://sourceforge.net/tracker/?group_id=23067&atid=377410">patch
-tracker of the phpMyAdmin project</a>.
+ <li><a
+href="https://sourceforge.net/tracker/?group_id=23067&atid=377410">phpMyAdmin
+プロジェクトのパッチトラッカー</a>を通してパッチを提出します。
</li>
</ol>
-<p>More details on git are available on <a
-href="http://wiki.phpmyadmin.net/pma/Git">our wiki</a>.</p>
+<p>git の詳細は、<a href="http://wiki.phpmyadmin.net/pma/Git">phpMyAdmin
+wiki</a>より入手できます。</p>
-<p> Write access to the repository is granted only to experienced developers who
-have already contributed something useful to phpMyAdmin.<br />
- <a href="#developers">開発者向けのセクション</a>もご覧ください。</p>
+<p> リポジトリへの書き込みアクセス権は、今までに phpMyAdmin へ何らかの役立つ貢献してきて、経験を積んだ開発者にのみ付与されます。<br />
+ <a href="#developers">開発者向け情報の章</a>もご覧ください。</p>
<h3 id="faqsecurity">セキュリティ</h3>
@@ -4364,13 +4338,13 @@ synchronized.
<!-- DEVELOPERS -->
-<h2 id="developers">開発者向けの情報</h2>
+<h2 id="developers">開発者向け情報</h2>
<p> phpMyAdmin
はオープンソースですから、貢献してくださる方は歓迎します。これまでにもほかの方々が多くのすばらしい機能を書いてくださいました。みなさんにもできることはあります。phpMyAdmin
を便利なツールにしていきましょう。</p>
-<p> ソースを提供してくださる方は下記の情報をお読みください:</p>
+<p> ソースを提供してくださる方は、下記の情報をお読みください。</p>
<ul><li>All files include <i>libraries/header.inc.php</i> (layout),.
<i>libraries/common.lib.php</i> (common functions) and
@@ -4380,20 +4354,18 @@ synchronized.
<i>libraries</i> サブディレクトリに保存するライブラリに含めてもよいでしょう。</li>
<li>当然ながら、コーディングスタイルはお好きなようになさってください。ただし、コードはできるだけシンプルにするようお願いします。初心者の方々は
phpMyAdmin をアプリケーションのサンプルとして使っていますので。<br />
- As far as possible, we want the scripts to be XHTML1.0 and CSS2 compliant on
-one hand, they fit the <a href="http://pear.php.net/"> <abbr title="PHP
-Extension and Application Repository">PEAR</abbr> coding standards</a> on
-the other hand. Please pay attention to this.</li>
- <li>Please enable showing PHP errors and warnings by the <code><a
+ また、スクリプトはできるだけ XHTML1.0、CSS2 準拠にしたいと思っていますし、<a
+href="http://pear.php.net/"><abbr title="PHP Extension and Application
+Repository">PEAR</abbr> のコーディング基準</a>に合わせたいと思っています。ご配慮ください。</li>
+ <li><code><a
href="#cfg_Error_Handler_display">$cfg['Error_Handler']['display']</a></code>
-configuration directive.</li>
+ディレクティブを設定して、PHP のエラー/警告の表示を有効にしてください。</li>
<li>ファイルの命名規則にあわせるようにしてください。テーブル関連のものは <i>tbl_*.php</i>、データベース関連のコードは
<i>db_*.php</i>、サーバ関連のツールは <i>server_*.php</i> などとなっています。</li>
- <li>Please use gettext wrappers around all messages (<code>__('Some
-text')</code> or <code>_ngettext()</code> function). To translate them, you
-need to call <code>scripts/update-po</code> script. To use translated
-messages, call <code>scripts/generate-mo</code>, which generates binary
-files read by Gettext.</li>
+ <li>全てのメッセージに対して gettext ラッパーを施してください(<code>__('Some text')</code> もしくは
+<code>_ngettext()</code> 関数)。それらを翻訳するには、<code>scripts/update-po</code>
+スクリプトを呼び出す必要があります。翻訳されたメッセージを使うには、<code>scripts/generate-mo</code>
+を呼び出します。Gettext によって読み込まれるバイナリファイルが生成されます。</li>
<li>さらにお願いしてもよければ、ChangeLog にエントリを書いてください。</li>
<li id="developersdbg">
The DBG extension (<a href="http://dd.cron.ru/dbg/">PHP Debugger DBG</a>) is
@@ -4404,7 +4376,7 @@ configuration options for more information.<br />
このソフトを、地球への再突入時に失われたスペースシャトルコロンビア号(STS-107)と、人類のために命を散らした勇敢な男女に捧げます。</li>
</ul>
-<h2 id="copyright">コピーライト</h2>
+<h2 id="copyright">著作権</h2>
<pre>
Copyright (C) 1998-2000 Tobias Ratschiller <tobias_at_ratschiller.com>
@@ -4440,68 +4412,67 @@ Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<!-- CREDITS -->
-<h2 id="credits">著作権表示</h2>
+<h2 id="credits">貢献者一覧</h2>
-<h3>Credits, in chronological order</h3>
+<h3>貢献者一覧(年代順)</h3>
<ul>
<li>Tobias Ratschiller <tobias_at_ratschiller.com>
<ul>
- <li>creator of the phpmyadmin project</li>
- <li>maintainer from 1998 to summer 2000</li>
+ <li>phpmyadmin プロジェクトの創始者</li>
+ <li>1998 年から 2000 年夏までの管理者</li>
</ul></li>
<li>Marc Delisle <marc_at_infomarc.info>
<ul>
- <li>multi-language version</li>
- <li>various fixes and improvements</li>
- <li><abbr title="structured query language">SQL</abbr> analyser (most of it)</li>
- <li>current project maintainer</li>
+ <li>多言語版</li>
+ <li>修正・改善多数</li>
+ <li><abbr title="structured query language">SQL</abbr> アナライザ(の大半)</li>
+ <li>現在のプロジェクト管理者</li>
</ul></li>
<li>Olivier Müller <om_at_omnis.ch>
<ul>
- <li>started SourceForge phpMyAdmin project in March 2001</li>
- <li>sync'ed different existing CVS trees with new features and bugfixes</li>
- <li>multi-language improvements, dynamic language selection</li>
- <li>current project maintainer</li>
- <li>many bugfixes and improvements</li>
+ <li>2001 年 3 月に SourceForge phpMyAdmin プロジェクトを立ち上げ</li>
+ <li>既存のさまざまな CVS ツリーの同期をとり、新機能、バグフィックスを反映</li>
+ <li>多言語対応の改善。動的言語選択</li>
+ <li>現在のプロジェクト管理者</li>
+ <li>バグフィックス・改善多数</li>
</ul></li>
<li>Loïc Chapeaux <lolo_at_phpheaven.net>
<ul>
- <li>rewrote and optimized javascript, DHTML and DOM stuff</li>
- <li>rewrote the scripts so they fit the <abbr title="PHP Extension and
-Application Repository">PEAR</abbr> coding standards and generate XHTML1.0
-and CSS2 compliant codes</li>
- <li>improved the language detection system</li>
- <li>many bugfixes and improvements</li>
+ <li>javascript、DHTML、DOM の書き直し、最適化</li>
+ <li>スクリプトを書き直して <abbr title="PHP Extension and Application
+Repository">PEAR</abbr> のコーディング基準にあわせ、XHTML1.0 と CSS2 準拠のコードを生成するようにした</li>
+ <li>言語検知システムの改善</li>
+ <li>バグフィックス・改善多数</li>
</ul></li>
<li>Robin Johnson <robbat2_at_users.sourceforge.net>
<ul>
- <li>database maintenance controls</li>
- <li>table type code</li>
- <li>Host authentication <abbr title="Internet Protocol">IP</abbr> Allow/Deny</li>
- <li>DB-based configuration (Not completed)</li>
- <li><abbr title="structured query language">SQL</abbr> parser and pretty-printer</li>
- <li><abbr title="structured query language">SQL</abbr> validator</li>
- <li>many bugfixes and improvements</li>
+ <li>データベースのメンテナンスコントロール</li>
+ <li>テーブル種別コード</li>
+ <li>ホスト認証 <abbr title="Internet Protocol">IP</abbr> アドレスによる許可/拒否</li>
+ <li>DBベースの設定(未完)</li>
+ <li><abbr title="structured query language">SQL</abbr> パーサと書式整備機能</li>
+ <li><abbr title="structured query language">SQL</abbr> 検証機能</li>
+ <li>バグフィックス・改善多数</li>
</ul></li>
<li>Armel Fauveau <armel.fauveau_at_globalis-ms.com>
<ul>
- <li>bookmarks feature</li>
- <li>multiple dump feature</li>
- <li>gzip dump feature</li>
- <li>zip dump feature</li>
+ <li>ブックマーク機能</li>
+ <li>複数ダンプ機能</li>
+ <li>gzip ダンプ機能</li>
+ <li>zip ダンプ機能</li>
</ul></li>
<li>Geert Lund <glund_at_silversoft.dk>
<ul>
- <li>various fixes</li>
- <li>moderator of the phpMyAdmin former users forum at phpwizard.net</li>
+ <li>修正多数</li>
+ <li>phpwizard.net の旧 phpMyAdmin ユーザフォーラムのモデレータ</li>
</ul></li>
<li>Korakot Chaovavanich <korakot_at_iname.com>
@@ -4511,115 +4482,113 @@ and CSS2 compliant codes</li>
<li>Pete Kelly <webmaster_at_trafficg.com>
<ul>
- <li>rewrote and fix dump code</li>
- <li>bugfixes</li>
+ <li>ダンプコードの書き直しと修正</li>
+ <li>バグフィックス</li>
</ul></li>
<li>Steve Alberty <alberty_at_neptunlabs.de>
<ul>
- <li>rewrote dump code for PHP4</li>
- <li>mySQL table statistics</li>
- <li>bugfixes</li>
+ <li>PHP4 向けにダンプコードを書き直し</li>
+ <li>mySQL テーブル統計機能</li>
+ <li>バグフィックス</li>
</ul></li>
<li>Benjamin Gandon <gandon_at_isia.cma.fr>
<ul>
- <li>main author of the version 2.1.0.1</li>
- <li>bugfixes</li>
+ <li>バージョン 2.1.0.1 の主著者</li>
+ <li>バグフィックス</li>
</ul></li>
<li>Alexander M. Turek <me_at_derrabus.de>
<ul>
- <li>MySQL 4.0 / 4.1 / 5.0 互換</li>
- <li>abstract database interface (PMA_DBI) with MySQLi support</li>
- <li>privileges administration</li>
- <li><abbr title="Extensible Markup Language">XML</abbr> exports</li>
- <li>various features and fixes</li>
- <li>German language file updates</li>
+ <li>MySQL 4.0 / 4.1 / 5.0 との互換性</li>
+ <li>MySQLi サポートによる抽象データベースインタフェース(PMA_DBI)</li>
+ <li>特権管理</li>
+ <li><abbr title="Extensible Markup Language">XML</abbr> エクスポート</li>
+ <li>追加機能・修正多数</li>
+ <li>ドイツ語ファイルの更新</li>
</ul></li>
<li>Mike Beck <mike.beck_at_web.de>
<ul>
- <li>automatic joins in QBE</li>
- <li>links column in printview</li>
+ <li>QBE における自動結合</li>
+ <li>印刷用表示(printview)における links カラム</li>
<li>リレーションビュー</li>
</ul></li>
<li>Michal Čihař <michal_at_cihar.com>
<ul>
- <li>enhanced index creation/display feature</li>
- <li>feature to use a different charset for HTML than for MySQL</li>
- <li>improvements of export feature</li>
- <li>various features and fixes</li>
- <li>Czech language file updates</li>
+ <li>インデックス作成/表示機能の強化</li>
+ <li>MySQL とは異なる HTML 文字セットを利用する機能</li>
+ <li>エクスポート機能の改善</li>
+ <li>追加機能・修正多数</li>
+ <li>チェコ語ファイルの更新</li>
</ul></li>
<li>Christophe Gesché from the "MySQL Form Generator for
PHPMyAdmin" (http://sf.net/projects/phpmysqlformgen/)
<ul>
- <li>suggested the patch for multiple table printviews</li>
+ <li>複数テーブルを印刷用表示(printview)するためのパッチを提案</li>
</ul></li>
<li>Garvin Hicking <me_at_supergarv.de>
<ul>
- <li>built the patch for vertical display of table rows</li>
- <li>built the Javascript based Query window + <abbr title="structured query
-language">SQL</abbr> history</li>
- <li>Improvement of column/db comments</li>
- <li>(MIME)-Transformations for columns</li>
- <li>Use custom alias names for Databases in left frame</li>
- <li>hierarchical/nested table display</li>
- <li><abbr title="Portable Document Format">PDF</abbr>-scratchboard for
-WYSIWYG-distribution of <abbr title="Portable Document Format">PDF</abbr>
-relations</li>
- <li>new icon sets</li>
- <li>vertical display of column properties page</li>
- <li>some bugfixes, features, support, German language additions</li>
+ <li>テーブルの行を縦に表示するパッチの作成</li>
+ <li>Javascript ベースのクエリウィンドウ + <abbr title="structured query language">SQL</abbr>
+履歴の作成</li>
+ <li>カラム/データベースコメントの改善</li>
+ <li>(MIME)- カラム変換</li>
+ <li>左フレームのデータベースに独自の別名を利用</li>
+ <li>テーブルの階層/ネスト表示</li>
+ <li><abbr title="Portable Document Format">PDF</abbr> リレーションを WYSIWYG 配布するための
+<abbr title="Portable Document Format">PDF</abbr> スクラッチボード</li>
+ <li>新しいアイコンセット</li>
+ <li>カラムプロパティページの縦表示</li>
+ <li>バグフィックス、追加機能、サポート、ドイツ語の追加を少々</li>
</ul></li>
<li>Yukihiro Kawada <kawada_at_den.fujifilm.co.jp>
<ul>
- <li>japanese kanji encoding conversion feature</li>
+ <li>日本語漢字エンコード変換機能</li>
</ul></li>
-<li>Piotr Roszatycki <d3xter_at_users.sourceforge.net> and Dan Wilson
+<li>Piotr Roszatycki <d3xter_at_users.sourceforge.net> および Dan Wilson
<ul>
<li>クッキー認証モード</li>
</ul></li>
<li>Axel Sander <n8falke_at_users.sourceforge.net>
<ul>
- <li>table relation-links feature</li>
+ <li>テーブルリレーションリンク機能</li>
</ul></li>
<li>Maxime Delorme <delorme.maxime_at_free.fr>
<ul>
- <li><abbr title="Portable Document Format">PDF</abbr> schema output, thanks also
-to Olivier Plathey for the "FPDF" library (see <a
-href="http://www.fpdf.org/">http://www.fpdf.org/</a>) and Steven Wittens for
-the "UFPDF" library (see <a
-href="http://www.acko.net/node/56">http://www.acko.net/node/56</a>).</li>
+ <li><abbr title="Portable Document Format">PDF</abbr> スキーマ出力。Olivier Plathey
+の「FPDF」ライブラリ(→ <a href="http://www.fpdf.org/">http://www.fpdf.org/</a>)と
+Steven Wittens の「UFPDF」ライブラリ(→ <a
+href="http://www.acko.net/node/56">http://www.acko.net/node/56</a>)にも感謝。</li>
</ul></li>
<li>Olof Edlund <olof.edlund_at_upright.se>
<ul>
- <li><abbr title="structured query language">SQL</abbr> validator server</li>
+ <li><abbr title="structured query language">SQL</abbr> 検証サーバ</li>
</ul></li>
<li>Ivan R. Lanin <ivanlanin_at_users.sourceforge.net>
<ul>
- <li>phpMyAdmin logo (until June 2004)</li>
+ <li>phpMyAdmin ロゴ(2004 年 6 月まで)</li>
</ul></li>
<li>Mike Cochrane <mike_at_graftonhall.co.nz>
<ul>
- <li>blowfish library from the Horde project</li>
+ <li>Horde プロジェクトより、blowfish ライブラリ</li>
</ul></li>
<li>Marcel Tschopp <ne0x_at_users.sourceforge.net>
<ul>
<li>mysqli サポート</li>
- <li>many bugfixes and improvements</li>
+ <li>バグフィックス・改善多数</li>
</ul></li>
<li>Nicola Asuni (Tecnick.com)
@@ -4629,19 +4598,19 @@ href="http://www.acko.net/node/56">http://www.acko.net/node/56</a>).</li>
<li>Michael Keck <mkkeck_at_users.sourceforge.net>
<ul>
- <li>redesign for 2.6.0</li>
- <li>phpMyAdmin sailboat logo (June 2004)</li>
+ <li>2.6.0 向けの再デザイン</li>
+ <li>phpMyAdmin の帆船ロゴ(2004 年 6 月)</li>
</ul></li>
<li>Mathias Landhäußer
<ul>
- <li>Representation at conferences</li>
+ <li>カンファレンスでの発表</li>
</ul></li>
<li>Sebastian Mendel <cybot_tm_at_users.sourceforge.net>
<ul>
- <li>interface improvements</li>
- <li>various bugfixes</li>
+ <li>インタフェースの改善</li>
+ <li>バグフィックス多数</li>
</ul></li>
<li>Ivan A Kirillov
@@ -4716,8 +4685,7 @@ href="http://www.acko.net/node/56">http://www.acko.net/node/56</a>).</li>
</ul>
<p>
-And also to the following people who have contributed minor changes,
-enhancements, bugfixes or support for a new language since version 2.1.0:
+その他、バージョン 2.1.0 以降、細々とした修正、強化、バグフィックス、新規言語サポート等をしてくださった方々。
</p>
<p>
@@ -4737,48 +4705,41 @@ Zigmantas, "Manuzhai".
<h3>Original Credits of Version 2.1.0</h3>
<p>
- This work is based on Peter Kuppelwieser's MySQL-Webadmin. It was his idea
-to create a web-based interface to MySQL using PHP3. Although I have not
-used any of his source-code, there are some concepts I've borrowed from
-him. phpMyAdmin was created because Peter told me he wasn't going to further
-develop his (great) tool.
+ このソフトのベースとなったのは Peter Kuppelwieser の MySQL-Webadmin です。PHP3 を使ってウェブベースの
+MySQL
+インタフェースを作るというのは元々彼のアイデアだったのです。私も、彼のソースコードはいっさい利用していませんが、いくつかのコンセプトはお借りしました。phpMyAdmin
+を作ったのは、彼がもうその(偉大な)ツールの開発を続けるつもりがないと言ったからです。
</p>
<p>
- Thanks go to
+ 以下の方々に感謝します。
</p>
<ul>
- <li>Amalesh Kempf <ak-lsml_at_living-source.com> who contributed the code
-for the check when dropping a table or database. He also suggested that you
-should be able to specify the primary key on tbl_create.php3. To version
-1.1.1 he contributed the ldi_*.php3-set (Import text-files) as well as a
-bug-report. Plus many smaller improvements.
+ <li>Amalesh Kempf
+<ak-lsml_at_living-source.com>。テーブルやデータベースを削除するときのチェックコードを提供してくださいました。また、tbl_create.php3
+にプライマリキーを指定できるようにしたらどうかと薦めてくださったのも彼です。バージョン 1.1.1
+にはバグレポートだけでなくldi_*.php3-set(テキストファイルのインポート)も提供してくださいました。小さな改善も多数いただいています。
</li>
- <li>Jan Legenhausen <jan_at_nrw.net>: He made many of the changes that
-were introduced in 1.3.0 (including quite significant ones like the
-authentication). For 1.4.1 he enhanced the table-dump feature. Plus
-bug-fixes and help.
+ <li>Jan Legenhausen <jan_at_nrw.net>。1.3.0
+で導入された変更点の大部分を作ってくださいました(特に重要なものとしては認証があります)。1.4.1
+ではテーブルダンプ機能を増強してくださいました。バグフィックスや援助も多数いただいています。
</li>
- <li>Marc Delisle <DelislMa_at_CollegeSherbrooke.qc.ca> made phpMyAdmin
-language-independent by outsourcing the strings to a separate file. He also
-contributed the French translation.
+ <li>Marc Delisle <DelislMa_at_CollegeSherbrooke.qc.ca>。文字列を別ファイルにアウトソースすることで
+phpMyAdmin を言語に依存しないものにしてくださいました。フランス語への翻訳もされています。
</li>
- <li>Alexandr Bravo <abravo_at_hq.admiral.ru> who contributed
-tbl_select.php3, a feature to display only some columns from a table.
+ <li>Alexandr Bravo <abravo display only some columns from a table. た。フランス語への翻訳もされています。 ��す。 �さな改善も多数いただいています。 ��トはお借りしました。phpMyAdmin 。phpMyAdmin �ィを表示し、インデックスのリンクをクリックして次のインデックスを作るようにします。 いることは承知しています。</li>