Trouver un fichier de code source :
   

Version Française - English Version
Accueil > 

PHP

 > 

DON'$FORUM

 > 

Don'$Forum/Don'$Forum/Don'$Forum/public/js/jquery13.js


DON'$FORUM

Don'$Forum/Don'$Forum/Don'$Forum/public/js/jquery13.js


Informations sur ce code source

Cliquez pour voir la capture en taille normale
Code Source DON'$FORUM
Auteur Donald2991
Fichier Don'$Forum/Don'$Forum/Don'$Forum/public/js/jquery13.js en PHP
Publié le 09/09/2012
Mis à jour le 14/11/2012

Don'$Forum est un exemple de site web forum offrant une interface de discussion aux utilisateurs.Où les membres du forum il'y accés directement via leur compte.
 

Fichier : Don'$Forum/Don'$Forum/Don'$Forum/public/js/jquery13.js

Nombre de lignes : 1313 lignes


Afficher ce fichier en plein écran
  • /*!
  • * jQuery JavaScript Library v1.3
  • * http://jquery.com/
  • *
  • * Copyright (c) 2009 John Resig
  • * Dual licensed under the MIT and GPL licenses.
  • * http://docs.jquery.com/License
  • *
  • * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009)
  • * Revision: 6104
  • */
  • if (typeof jQuery == 'undefined') {
  • (function(){
  • jQuery = window.jQuery = window.$ = function( selector, context ) {
  • // The jQuery object is actually just the init constructor 'enhanced'
  • return new jQuery.fn.init( selector, context );
  • },
  • // A simple way to check for HTML strings or ID strings
  • // (both of which we optimize for)
  • quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
  • jQuery.fn = jQuery.prototype = {
  • init: function( selector, context ) {
  • // Make sure that a selection was provided
  • selector = selector || document;
  • // Handle HTML strings
  • if ( typeof selector === "string" ) {
  • // Are we dealing with HTML string or an ID?
  • var 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] )
  • selector = jQuery.clean( [ match[1] ], context );
  • // HANDLE: $("#id")
  • else {
  • var elem = document.getElementById( match[3] );
  • // Make sure an element was located
  • if ( elem ){
  • // Handle the case where IE and Opera return items
  • // by name instead of ID
  • if ( elem.id != match[3] )
  • return jQuery().find( selector );
  • // Otherwise, we inject the element directly into the jQuery object
  • var ret = jQuery( elem );
  • ret.context = document;
  • ret.selector = selector;
  • return ret;
  • }
  • selector = [];
  • }
  • // HANDLE: $(expr, [context])
  • // (which is just equivalent to: $(content).find(expr)
  • } else
  • return jQuery( context ).find( selector );
  • // HANDLE: $(function)
  • // Shortcut for document ready
  • } else if ( jQuery.isFunction( selector ) )
  • return jQuery( document ).ready( selector );
  • return this.setArray(jQuery.makeArray(selector));
  • },
  • // Start with an empty selector
  • selector: "",
  • // The current version of jQuery being used
  • jquery: "1.3",
  • // The number of elements contained in the matched element set
  • size: function() {
  • return this.length;
  • },
  • // 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( elems );
  • // Add the old object onto the stack (as a reference)
  • ret.prevObject = this;
  • ret.context = this.context;
  • if ( name === "find" )
  • ret.selector = this.selector + (this.selector ? " " : "") + selector;
  • else if ( name )
  • ret.selector = this.selector + "." + name + "(" + selector + ")";
  • // Return the newly-formed element set
  • return ret;
  • },
  • // Force the current matched set of elements to become
  • // the specified array of elements (destroying the stack in the process)
  • // You should use pushStack() in order to do this, but maintain the stack
  • setArray: function( elems ) {
  • // Resetting the length to 0, then using the native Array push
  • // is a super-fast way to populate an object with array-like properties
  • this.length = 0;
  • Array.prototype.push.apply( this, elems );
  • return this;
  • },
  • // Execute a callback for every element in the matched set.
  • // (You can seed the arguments with an array of args, but this is
  • // only used internally.)
  • each: function( callback, args ) {
  • return jQuery.each( this, callback, args );
  • },
  • attr: function( name, value, type ) {
  • var options = name;
  • // Look for the case where we're accessing a style value
  • if ( typeof name === "string" )
  • if ( value === undefined )
  • return this[0] && jQuery[ type || "attr" ]( this[0], name );
  • else {
  • options = {};
  • options[ name ] = value;
  • }
  • // Check to see if we're setting style values
  • return this.each(function(i){
  • // Set all the styles
  • for ( name in options )
  • jQuery.attr(
  • type ?
  • this.style :
  • this,
  • name, jQuery.prop( this, options[ name ], type, i, name )
  • );
  • });
  • },
  • // For internal use only.
  • // Behaves like an Array's .push method, not like a jQuery method.
  • push: [].push,
  • find: function( selector ) {
  • if ( this.length === 1 && !/,/.test(selector) ) {
  • var ret = this.pushStack( [], "find", selector );
  • ret.length = 0;
  • jQuery.find( selector, this[0], ret );
  • return ret;
  • } else {
  • var elems = jQuery.map(this, function(elem){
  • return jQuery.find( selector, elem );
  • });
  • return this.pushStack( /[^+>] [^+>]/.test( selector ) ?
  • jQuery.unique( elems ) :
  • elems, "find", selector );
  • }
  • },
  • is: function( selector ) {
  • return !!selector && jQuery.multiFilter( selector, this ).length > 0;
  • },
  • };
  • // Give the init function the jQuery prototype for later instantiation
  • jQuery.fn.init.prototype = jQuery.fn;
  • function now(){
  • return +new Date;
  • }
  • jQuery.extend = jQuery.fn.extend = function() {
  • // copy reference to target object
  • var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
  • // Handle a deep copy situation
  • if ( typeof target === "boolean" ) {
  • deep = target;
  • target = arguments[1] || {};
  • // skip the boolean and the target
  • i = 2;
  • }
  • // Handle case when target is a string or something (possible in deep copy)
  • if ( typeof target !== "object" && !jQuery.isFunction(target) )
  • target = {};
  • // extend jQuery itself if only one argument is passed
  • if ( length == i ) {
  • target = this;
  • --i;
  • }
  • for ( ; i < length; i++ )
  • // Only deal with non-null/undefined values
  • if ( (options = arguments[ i ]) != null )
  • // Extend the base object
  • for ( var name in options ) {
  • var src = target[ name ], copy = options[ name ];
  • // Prevent never-ending loop
  • if ( target === copy )
  • continue;
  • // Recurse if we're merging object values
  • if ( deep && copy && typeof copy === "object" && !copy.nodeType )
  • target[ name ] = jQuery.extend( deep,
  • // Never move original objects, clone them
  • src || ( copy.length != null ? [ ] : { } )
  • , copy );
  • // Don't bring in undefined values
  • else if ( copy !== undefined )
  • target[ name ] = copy;
  • }
  • // Return the modified object
  • return target;
  • };
  • // exclude the following css properties to add px
  • var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
  • // cache defaultView
  • defaultView = document.defaultView || {},
  • toString = Object.prototype.toString;
  • jQuery.extend({
  • // See test/unit/core.js for details concerning isFunction.
  • // Since version 1.3, DOM methods and functions like alert
  • // aren't supported. They return false on IE (#2968).
  • isFunction: function( obj ) {
  • return toString.call(obj) === "[object Function]";
  • },
  • isArray: function( obj ) {
  • return toString.call(obj) === "[object Array]";
  • },
  • // check if an element is in a (or is an) XML document
  • isXMLDoc: function( elem ) {
  • return elem.documentElement && !elem.body ||
  • elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
  • },
  • // args is for internal usage only
  • each: function( object, callback, args ) {
  • var name, i = 0, length = object.length;
  • if ( args ) {
  • if ( length === undefined ) {
  • for ( name in object )
  • if ( callback.apply( object[ name ], args ) === false )
  • break;
  • } else
  • for ( ; i < length; )
  • if ( callback.apply( object[ i++ ], args ) === false )
  • break;
  • // A special, fast, case for the most common use of each
  • } else {
  • if ( length === undefined ) {
  • for ( name in object )
  • if ( callback.call( object[ name ], name, object[ name ] ) === false )
  • break;
  • } else
  • for ( var value = object[0];
  • i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
  • }
  • return object;
  • },
  • prop: function( elem, value, type, i, name ) {
  • // Handle executable functions
  • if ( jQuery.isFunction( value ) )
  • value = value.call( elem, i );
  • // Handle passing in a number to a CSS property
  • return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
  • value + "px" :
  • value;
  • },
  • // A method for quickly swapping in/out CSS properties to get correct calculations
  • css: function( elem, name, force ) {
  • if ( name == "width" || name == "height" ) {
  • var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
  • function getWH() {
  • val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
  • var padding = 0, border = 0;
  • jQuery.each( which, function() {
  • padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
  • border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
  • });
  • val -= Math.round(padding + border);
  • }
  • if ( jQuery(elem).is(":visible") )
  • getWH();
  • else
  • jQuery.swap( elem, props, getWH );
  • return Math.max(0, val);
  • }
  • return jQuery.curCSS( elem, name, force );
  • },
  • curCSS: function( elem, name, force ) {
  • var ret, style = elem.style;
  • // We need to handle opacity special in IE
  • if ( name == "opacity" && !jQuery.support.opacity ) {
  • ret = jQuery.attr( style, "opacity" );
  • return ret == "" ?
  • "1" :
  • ret;
  • }
  • // Make sure we're using the right name for getting the float value
  • if ( name.match( /float/i ) )
  • name = styleFloat;
  • if ( !force && style && style[ name ] )
  • ret = style[ name ];
  • else if ( defaultView.getComputedStyle ) {
  • // Only "float" is needed here
  • if ( name.match( /float/i ) )
  • name = "float";
  • name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
  • var computedStyle = defaultView.getComputedStyle( elem, null );
  • if ( computedStyle )
  • ret = computedStyle.getPropertyValue( name );
  • // We should always get a number back from opacity
  • if ( name == "opacity" && ret == "" )
  • ret = "1";
  • } else if ( elem.currentStyle ) {
  • var camelCase = name.replace(/\-(\w)/g, function(all, letter){
  • return letter.toUpperCase();
  • });
  • ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
  • // From the awesome hack by Dean Edwards
  • // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
  • // If we're not dealing with a regular pixel number
  • // but a number that has a weird ending, we need to convert it to pixels
  • if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
  • // Remember the original values
  • var left = style.left, rsLeft = elem.runtimeStyle.left;
  • // Put in the new values to get a computed value out
  • elem.runtimeStyle.left = elem.currentStyle.left;
  • style.left = ret || 0;
  • ret = style.pixelLeft + "px";
  • // Revert the changed values
  • style.left = left;
  • elem.runtimeStyle.left = rsLeft;
  • }
  • }
  • return ret;
  • },
  • attr: function( elem, name, value ) {
  • // don't set attributes on text and comment nodes
  • if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
  • return undefined;
  • var notxml = !jQuery.isXMLDoc( elem ),
  • // Whether we are setting (or getting)
  • set = value !== undefined;
  • // Try to normalize/fix the name
  • name = notxml && jQuery.props[ name ] || name;
  • // Only do all the following if this is a node (faster for style)
  • // IE elem.getAttribute passes even for style
  • if ( elem.tagName ) {
  • // These attributes require special treatment
  • var special = /href|src|style/.test( name );
  • // Safari mis-reports the default selected property of a hidden option
  • // Accessing the parent's selectedIndex property fixes it
  • if ( name == "selected" && elem.parentNode )
  • elem.parentNode.selectedIndex;
  • // If applicable, access the attribute via the DOM 0 way
  • if ( name in elem && notxml && !special ) {
  • if ( set ){
  • // We can't allow the type property to be changed (since it causes problems in IE)
  • if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
  • throw "type property can't be changed";
  • elem[ name ] = 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;
  • // 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-tabindex-values-with-javascript/
  • if ( name == "tabIndex" ) {
  • var attributeNode = elem.getAttributeNode( "tabIndex" );
  • return attributeNode && attributeNode.specified
  • ? attributeNode.value
  • : elem.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)
  • ? 0
  • : undefined;
  • }
  • return elem[ name ];
  • }
  • if ( !jQuery.support.style && notxml && name == "style" )
  • return jQuery.attr( elem.style, "cssText", value );
  • if ( set )
  • // convert the value to a string (all browsers do this but IE) see #1070
  • elem.setAttribute( name, "" + value );
  • var attr = !jQuery.support.hrefNormalized && notxml && special
  • // Some attributes require a special call on IE
  • ? elem.getAttribute( name, 2 )
  • : elem.getAttribute( name );
  • // Non-existent attributes return null, we normalize to undefined
  • return attr === null ? undefined : attr;
  • }
  • // elem is actually elem.style ... set the style
  • // IE uses filters for opacity
  • if ( !jQuery.support.opacity && name == "opacity" ) {
  • if ( set ) {
  • // IE has trouble with opacity if it does not have layout
  • // Force it by setting the zoom level
  • elem.zoom = 1;
  • // Set the alpha filter to set the opacity
  • elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
  • (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
  • }
  • return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
  • (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
  • "";
  • }
  • name = name.replace(/-([a-z])/ig, function(all, letter){
  • return letter.toUpperCase();
  • });
  • if ( set )
  • elem[ name ] = value;
  • return elem[ name ];
  • },
  • makeArray: function( array ) {
  • var ret = [];
  • if( array != null ){
  • var i = array.length;
  • // The window, strings (and functions) also have 'length'
  • if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
  • ret[0] = array;
  • else
  • while( i )
  • ret[--i] = array[i];
  • }
  • return ret;
  • },
  • inArray: function( elem, array ) {
  • for ( var i = 0, length = array.length; i < length; i++ )
  • // Use === because on IE, window == document
  • if ( array[ i ] === elem )
  • return i;
  • return -1;
  • },
  • });
  • var userAgent = navigator.userAgent.toLowerCase();
  • // Figure out what browser is being used
  • jQuery.browser = {
  • version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
  • safari: /webkit/.test( userAgent ),
  • opera: /opera/.test( userAgent ),
  • msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
  • mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
  • };
  • // Helper function used by the dimensions and offset modules
  • function num(elem, prop) {
  • return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
  • }
  • var expando = "jQuery" + now(), uuid = 0, windowData = {};
  • jQuery.extend({
  • cache: {},
  • data: function( elem, name, data ) {
  • elem = elem == window ?
  • windowData :
  • elem;
  • var id = elem[ expando ];
  • // Compute a unique ID for the element
  • if ( !id )
  • id = elem[ expando ] = ++uuid;
  • // Only generate the data cache if we're
  • // trying to access or manipulate it
  • if ( name && !jQuery.cache[ id ] )
  • jQuery.cache[ id ] = {};
  • // Prevent overriding the named cache with undefined values
  • if ( data !== undefined )
  • jQuery.cache[ id ][ name ] = data;
  • // Return the named cache data, or the ID for the element
  • return name ?
  • jQuery.cache[ id ][ name ] :
  • id;
  • },
  • removeData: function( elem, name ) {
  • elem = elem == window ?
  • windowData :
  • elem;
  • var id = elem[ expando ];
  • // If we want to remove a specific section of the element's data
  • if ( name ) {
  • if ( jQuery.cache[ id ] ) {
  • // Remove the section of cache data
  • delete jQuery.cache[ id ][ name ];
  • // If we've removed all the data, remove the element's cache
  • name = "";
  • for ( name in jQuery.cache[ id ] )
  • break;
  • if ( !name )
  • jQuery.removeData( elem );
  • }
  • // Otherwise, we want to remove all of the element's data
  • } else {
  • // Clean up the element expando
  • try {
  • delete elem[ expando ];
  • } catch(e){
  • // IE has trouble directly removing the expando
  • // but it's ok with using removeAttribute
  • if ( elem.removeAttribute )
  • elem.removeAttribute( expando );
  • }
  • // Completely remove the data cache
  • delete jQuery.cache[ id ];
  • }
  • },
  • queue: function( elem, type, data ) {
  • if ( elem ){
  • type = (type || "fx") + "queue";
  • var q = jQuery.data( elem, type );
  • if ( !q || jQuery.isArray(data) )
  • q = jQuery.data( elem, type, jQuery.makeArray(data) );
  • else if( data )
  • q.push( data );
  • }
  • return q;
  • },
  • dequeue: function( elem, type ){
  • var queue = jQuery.queue( elem, type ),
  • fn = queue.shift();
  • if( !type || type === "fx" )
  • fn = queue[0];
  • if( fn !== undefined )
  • fn.call(elem);
  • }
  • });
  • jQuery.fn.extend({
  • data: function( key, value ){
  • var parts = key.split(".");
  • parts[1] = parts[1] ? "." + parts[1] : "";
  • if ( value === undefined ) {
  • var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
  • if ( data === undefined && this.length )
  • data = jQuery.data( this[0], key );
  • return data === undefined && parts[1] ?
  • this.data( parts[0] ) :
  • data;
  • } else
  • return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
  • jQuery.data( this, key, value );
  • });
  • },
  • removeData: function( key ){
  • return this.each(function(){
  • jQuery.removeData( this, key );
  • });
  • },
  • queue: function(type, data){
  • if ( typeof type !== "string" ) {
  • data = type;
  • type = "fx";
  • }
  • if ( data === undefined )
  • return jQuery.queue( this[0], type );
  • return this.each(function(){
  • var queue = jQuery.queue( this, type, data );
  • if( type == "fx" && queue.length == 1 )
  • queue[0].call(this);
  • });
  • },
  • dequeue: function(type){
  • return this.each(function(){
  • jQuery.dequeue( this, type );
  • });
  • }
  • });/*!
  • * Sizzle CSS Selector Engine - v0.9.1
  • * Copyright 2009, The Dojo Foundation
  • * Released under the MIT, BSD, and GPL Licenses.
  • * More information: http://sizzlejs.com/
  • */
  • (function(){
  • var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
  • done = 0,
  • toString = Object.prototype.toString;
  • var Sizzle = function(selector, context, results, seed) {
  • results = results || [];
  • context = context || document;
  • if ( context.nodeType !== 1 && context.nodeType !== 9 )
  • return [];
  • if ( !selector || typeof selector !== "string" ) {
  • return results;
  • }
  • var parts = [], m, set, checkSet, check, mode, extra, prune = true;
  • if ( parts.length > 1 && Expr.match.POS.exec( selector ) ) {
  • if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
  • var later = "", match;
  • // Position selectors must be done after the filter
  • while ( (match = Expr.match.POS.exec( selector )) ) {
  • later += match[0];
  • selector = selector.replace( Expr.match.POS, "" );
  • }
  • set = Sizzle.filter( later, Sizzle( /\s$/.test(selector) ? selector + "*" : selector, context ) );
  • } else {
  • set = Expr.relative[ parts[0] ] ?
  • [ context ] :
  • Sizzle( parts.shift(), context );
  • while ( parts.length ) {
  • var tmpSet = [];
  • selector = parts.shift();
  • if ( Expr.relative[ selector ] )
  • selector += parts.shift();
  • for ( var i = 0, l = set.length; i < l; i++ ) {
  • Sizzle( selector, set[i], tmpSet );
  • }
  • set = tmpSet;
  • }
  • }
  • } else {
  • var ret = seed ?
  • { expr: parts.pop(), set: makeArray(seed) } :
  • Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context );
  • set = Sizzle.filter( ret.expr, ret.set );
  • if ( parts.length > 0 ) {
  • checkSet = makeArray(set);
  • } else {
  • prune = false;
  • }
  • while ( parts.length ) {
  • var cur = parts.pop(), pop = cur;
  • if ( !Expr.relative[ cur ] ) {
  • cur = "";
  • } else {
  • pop = parts.pop();
  • }
  • if ( pop == null ) {
  • pop = context;
  • }
  • Expr.relative[ cur ]( checkSet, pop, isXML(context) );
  • }
  • }
  • if ( !checkSet ) {
  • checkSet = set;
  • }
  • if ( !checkSet ) {
  • throw "Syntax error, unrecognized expression: " + (cur || selector);
  • }
  • if ( toString.call(checkSet) === "[object Array]" ) {
  • if ( !prune ) {
  • results.push.apply( results, checkSet );
  • } else if ( context.nodeType === 1 ) {
  • for ( var i = 0; checkSet[i] != null; i++ ) {
  • if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
  • results.push( set[i] );
  • }
  • }
  • } else {
  • for ( var i = 0; checkSet[i] != null; i++ ) {
  • if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
  • results.push( set[i] );
  • }
  • }
  • }
  • } else {
  • makeArray( checkSet, results );
  • }
  • if ( extra ) {
  • Sizzle( extra, context, results, seed );
  • }
  • return results;
  • };
  • Sizzle.matches = function(expr, set){
  • return Sizzle(expr, null, null, set);
  • };
  • Sizzle.filter = function(expr, set, inplace, not){
  • var old = expr, result = [], curLoop = set, match, anyFound;
  • while ( expr && set.length ) {
  • for ( var type in Expr.filter ) {
  • if ( (match = Expr.match[ type ].exec( expr )) != null ) {
  • var filter = Expr.filter[ type ], goodArray = null, goodPos = 0, found, item;
  • anyFound = false;
  • if ( curLoop == result ) {
  • result = [];
  • }
  • if ( Expr.preFilter[ type ] ) {
  • match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not );
  • if ( !match ) {
  • anyFound = found = true;
  • } else if ( match === true ) {
  • continue;
  • } else if ( match[0] === true ) {
  • goodArray = [];
  • var last = null, elem;
  • for ( var i = 0; (elem = curLoop[i]) !== undefined; i++ ) {
  • if ( elem && last !== elem ) {
  • goodArray.push( elem );
  • last = elem;
  • }
  • }
  • }
  • }
  • if ( match ) {
  • for ( var i = 0; (item = curLoop[i]) !== undefined; i++ ) {
  • if ( item ) {
  • if ( goodArray && item != goodArray[goodPos] ) {
  • goodPos++;
  • }
  • found = filter( item, match, goodPos, goodArray );
  • var pass = not ^ !!found;
  • if ( inplace && found != null ) {
  • if ( pass ) {
  • anyFound = true;
  • } else {
  • curLoop[i] = false;
  • }
  • } else if ( pass ) {
  • result.push( item );
  • anyFound = true;
  • }
  • }
  • }
  • }
  • if ( found !== undefined ) {
  • if ( !inplace ) {
  • curLoop = result;
  • }
  • expr = expr.replace( Expr.match[ type ], "" );
  • if ( !anyFound ) {
  • return [];
  • }
  • break;
  • }
  • }
  • }
  • expr = expr.replace(/\s*,\s*/, "");
  • // Improper expression
  • if ( expr == old ) {
  • if ( anyFound == null ) {
  • throw "Syntax error, unrecognized expression: " + expr;
  • } else {
  • break;
  • }
  • }
  • old = expr;
  • }
  • return curLoop;
  • };
  • var Expr = Sizzle.selectors = {
  • order: [ "ID", "NAME", "TAG" ],
  • match: {
  • ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
  • CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
  • NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
  • ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
  • TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
  • CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
  • POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
  • PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
  • },
  • attrMap: {
  • "class": "className",
  • "for": "htmlFor"
  • },
  • attrHandle: {
  • href: function(elem){
  • return elem.getAttribute("href");
  • }
  • },
  • find: {
  • ID: function(match, context){
  • if ( context.getElementById ) {
  • var m = context.getElementById(match[1]);
  • return m ? [m] : [];
  • }
  • },
  • NAME: function(match, context){
  • return context.getElementsByName ? context.getElementsByName(match[1]) : null;
  • },
  • TAG: function(match, context){
  • return context.getElementsByTagName(match[1]);
  • }
  • },
  • filters: {
  • enabled: function(elem){
  • return elem.disabled === false && elem.type !== "hidden";
  • },
  • disabled: function(elem){
  • return elem.disabled === true;
  • },
  • checked: function(elem){
  • return elem.checked === true;
  • },
  • selected: function(elem){
  • // Accessing this property makes selected-by-default
  • // options in Safari work properly
  • elem.parentNode.selectedIndex;
  • return elem.selected === true;
  • },
  • parent: function(elem){
  • return !!elem.firstChild;
  • },
  • empty: function(elem){
  • return !elem.firstChild;
  • },
  • has: function(elem, i, match){
  • return !!Sizzle( match[3], elem ).length;
  • },
  • header: function(elem){
  • return /h\d/i.test( elem.nodeName );
  • },
  • text: function(elem){
  • return "text" === elem.type;
  • },
  • radio: function(elem){
  • return "radio" === elem.type;
  • },
  • checkbox: function(elem){
  • return "checkbox" === elem.type;
  • },
  • file: function(elem){
  • return "file" === elem.type;
  • },
  • password: function(elem){
  • return "password" === elem.type;
  • },
  • submit: function(elem){
  • return "submit" === elem.type;
  • },
  • image: function(elem){
  • return "image" === elem.type;
  • },
  • reset: function(elem){
  • return "reset" === elem.type;
  • },
  • button: function(elem){
  • return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
  • },
  • input: function(elem){
  • return /input|select|textarea|button/i.test(elem.nodeName);
  • }
  • },
  • };
  • var makeArray = function(array, results) {
  • array = Array.prototype.slice.call( array );
  • if ( results ) {
  • results.push.apply( results, array );
  • return results;
  • }
  • return array;
  • };
  • if ( document.querySelectorAll ) (function(){
  • var oldSizzle = Sizzle;
  • Sizzle = function(query, context, extra, seed){
  • context = context || document;
  • if ( !seed && context.nodeType === 9 ) {
  • try {
  • return makeArray( context.querySelectorAll(query), extra );
  • } catch(e){}
  • }
  • return oldSizzle(query, context, extra, seed);
  • };
  • Sizzle.find = oldSizzle.find;
  • Sizzle.filter = oldSizzle.filter;
  • Sizzle.selectors = oldSizzle.selectors;
  • Sizzle.matches = oldSizzle.matches;
  • })();
  • var isXML = function(elem){
  • return elem.documentElement && !elem.body ||
  • elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
  • };
  • // EXPOSE
  • jQuery.find = Sizzle;
  • jQuery.filter = Sizzle.filter;
  • jQuery.expr = Sizzle.selectors;
  • jQuery.expr[":"] = jQuery.expr.filters;
  • Sizzle.selectors.filters.hidden = function(elem){
  • return "hidden" === elem.type ||
  • jQuery.css(elem, "display") === "none" ||
  • jQuery.css(elem, "visibility") === "hidden";
  • };
  • Sizzle.selectors.filters.visible = function(elem){
  • return "hidden" !== elem.type &&
  • jQuery.css(elem, "display") !== "none" &&
  • jQuery.css(elem, "visibility") !== "hidden";
  • };
  • jQuery.multiFilter = function( expr, elems, not ) {
  • if ( not ) {
  • expr = ":not(" + expr + ")";
  • }
  • return Sizzle.matches(expr, elems);
  • };
  • return;
  • window.Sizzle = Sizzle;
  • })();
  • function liveConvert(type, selector){
  • return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
  • }
  • var readyBound = false;
  • (function(){
  • jQuery.support = {};
  • var root = document.documentElement,
  • script = document.createElement("script"),
  • div = document.createElement("div"),
  • id = "script" + (new Date).getTime();
  • div.style.display = "none";
  • div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
  • var all = div.getElementsByTagName("*"),
  • a = div.getElementsByTagName("a")[0];
  • // Can't get basic test support
  • if ( !all || !all.length || !a ) {
  • return;
  • }
  • 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 ];
  • }
  • root.removeChild( script );
  • })();
  • var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
  • jQuery.props = {
  • "for": "htmlFor",
  • "class": "className",
  • "float": styleFloat,
  • cssFloat: styleFloat,
  • styleFloat: styleFloat,
  • readonly: "readOnly",
  • maxlength: "maxLength",
  • cellspacing: "cellSpacing",
  • rowspan: "rowSpan",
  • tabindex: "tabIndex"
  • };
  • jQuery.fn.extend({
  • // Save the old toggle function
  • _toggle: jQuery.fn.toggle,
  • animate: function( prop, speed, easing, callback ) {
  • var optall = jQuery.speed(speed, easing, callback);
  • return this[ optall.queue === false ? "each" : "queue" ](function(){
  • var opt = jQuery.extend({}, optall), p,
  • hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
  • self = this;
  • 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 );
  • if ( /toggle|show|hide/.test(val) )
  • e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
  • else {
  • var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
  • start = e.cur(true) || 0;
  • if ( parts ) {
  • var end = parseFloat(parts[2]),
  • unit = parts[3] || "px";
  • // We need to compute starting value
  • if ( unit != "px" ) {
  • self.style[ name ] = (end || 1) + unit;
  • start = ((end || 1) / e.cur(true)) * start;
  • self.style[ name ] = start + unit;
  • }
  • // If a +=/-= token was provided, we're doing a relative animation
  • if ( parts[1] )
  • end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
  • e.custom( start, end, unit );
  • } else
  • e.custom( start, val, "" );
  • }
  • });
  • // For JS strict compliance
  • return true;
  • });
  • },
  • });
  • jQuery.extend({
  • speed: function(speed, easing, fn) {
  • var opt = typeof speed === "object" ? speed : {
  • complete: fn || !fn && easing ||
  • jQuery.isFunction( speed ) && speed,
  • duration: speed,
  • easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
  • };
  • opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
  • jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
  • // Queueing
  • opt.old = opt.complete;
  • opt.complete = function(){
  • if ( opt.queue !== false )
  • jQuery(this).dequeue();
  • if ( jQuery.isFunction( opt.old ) )
  • opt.old.call( this );
  • };
  • return opt;
  • },
  • easing: {
  • linear: function( p, n, firstNum, diff ) {
  • return firstNum + diff * p;
  • },
  • swing: function( p, n, firstNum, diff ) {
  • return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
  • }
  • },
  • timers: [],
  • timerId: null,
  • fx: function( elem, options, prop ){
  • this.options = options;
  • this.elem = elem;
  • this.prop = prop;
  • if ( !options.orig )
  • options.orig = {};
  • }
  • });
  • jQuery.fx.prototype = {
  • // Simple function for setting a style value
  • update: function(){
  • if ( this.options.step )
  • this.options.step.call( this.elem, this.now, this );
  • (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
  • // Set display property to block for height/width animations
  • if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
  • this.elem.style.display = "block";
  • },
  • // Get the current size
  • cur: function(force){
  • if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
  • return this.elem[ this.prop ];
  • var r = parseFloat(jQuery.css(this.elem, this.prop, force));
  • return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
  • },
  • // Start an animation from one number to another
  • custom: function(from, to, unit){
  • this.startTime = now();
  • this.start = from;
  • this.end = to;
  • this.unit = unit || this.unit || "px";
  • this.now = this.start;
  • this.pos = this.state = 0;
  • var self = this;
  • function t(gotoEnd){
  • return self.step(gotoEnd);
  • }
  • t.elem = this.elem;
  • jQuery.timers.push(t);
  • if ( t() && jQuery.timerId == null ) {
  • jQuery.timerId = setInterval(function(){
  • var timers = jQuery.timers;
  • for ( var i = 0; i < timers.length; i++ )
  • if ( !timers[i]() )
  • timers.splice(i--, 1);
  • if ( !timers.length ) {
  • clearInterval( jQuery.timerId );
  • jQuery.timerId = null;
  • }
  • }, 13);
  • }
  • },
  • // Each step of an animation
  • step: function(gotoEnd){
  • var t = now();
  • if ( gotoEnd || t >= this.options.duration + this.startTime ) {
  • this.now = this.end;
  • this.pos = this.state = 1;
  • this.update();
  • this.options.curAnim[ this.prop ] = true;
  • var done = true;
  • for ( var i in this.options.curAnim )
  • if ( this.options.curAnim[i] !== true )
  • done = false;
  • if ( done ) {
  • if ( this.options.display != null ) {
  • // Reset the overflow
  • this.elem.style.overflow = this.options.overflow;
  • // Reset the display
  • this.elem.style.display = this.options.display;
  • if ( jQuery.css(this.elem, "display") == "none" )
  • this.elem.style.display = "block";
  • }
  • // Hide the element if the "hide" operation was done
  • if ( this.options.hide )
  • jQuery(this.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.attr(this.elem.style, p, this.options.orig[p]);
  • }
  • if ( done )
  • // Execute the complete function
  • this.options.complete.call( this.elem );
  • return false;
  • } else {
  • var n = t - this.startTime;
  • this.state = n / this.options.duration;
  • // Perform the easing function, defaults to swing
  • this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
  • this.now = this.start + ((this.end - this.start) * this.pos);
  • // Perform the next step of the animation
  • this.update();
  • }
  • return true;
  • }
  • };
  • jQuery.extend( jQuery.fx, {
  • step: {
  • opacity: function(fx){
  • if (s5_fading_menu == "yes") {
  • jQuery.attr(fx.elem.style, "opacity", fx.now);
  • }
  • },
  • _default: function(fx){
  • if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
  • fx.elem.style[ fx.prop ] = fx.now + fx.unit;
  • else
  • fx.elem[ fx.prop ] = fx.now;
  • }
  • }
  • });
  • })();
  • }


Liste des fichiers du ZIP

FichierTaille
Don'$Forum/Don'$Forum/Don'$Forum/application/models/AddRubrique.php898 o
Don'$Forum/Don'$Forum/Don'$Forum/application/models/anonyme.png1005 o
Don'$Forum/Don'$Forum/Don'$Forum/application/models/comment_poste.php1,91 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/models/connect_membre.php2,56 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/models/id_rub.php260 o
Don'$Forum/Don'$Forum/Don'$Forum/application/models/logout.php125 o
Don'$Forum/Don'$Forum/Don'$Forum/application/models/Membre.class.php3,17 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/models/photo.php684 o
Don'$Forum/Don'$Forum/Don'$Forum/application/models/save_membre.php2,29 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/views/Administration.php7,53 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/views/forum.php10,36 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/views/inscription.php5,86 Ko
Don'$Forum/Don'$Forum/Don'$Forum/application/views/photo.php484 o
Don'$Forum/Don'$Forum/Don'$Forum/DéveloppeurWeb.jpg243,08 Ko
Don'$Forum/Don'$Forum/Don'$Forum/Don'$Forum.pptx126,71 Ko
Don'$Forum/Don'$Forum/Don'$Forum/forum.sql214,63 Ko
Don'$Forum/Don'$Forum/Don'$Forum/index.php3,33 Ko
Don'$Forum/Don'$Forum/Don'$Forum/Infos Développeur.txt368 o
Don'$Forum/Don'$Forum/Don'$Forum/public/css/administration.css650 o
Don'$Forum/Don'$Forum/Don'$Forum/public/css/forum.css2,61 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/css/home.css1,44 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/css/inscription.css1,04 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/css/MenuDeroulant.css94 o
Don'$Forum/Don'$Forum/Don'$Forum/public/css/style(1).css1,65 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/arrow.png651 o
Don'$Forum/Don'$Forum/Don'$Forum/public/images/comments.png2,05 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/croix_rouge.gif14,99 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/date.jpg1,23 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/down.png672 o
Don'$Forum/Don'$Forum/Don'$Forum/public/images/end.png1,62 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/forum.png62,65 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/groupe.png39,2 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/santé/1.jpg11,36 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/santé/2.jpg11,49 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/santé/3.jpg10,33 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/santé/4.jpg11,02 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/santé/5.jpg11,26 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/santé/6.jpg14,99 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/tech/1.jpg12,26 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/tech/2.jpg12,33 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/tech/3.jpg11,3 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/tech/4.jpg10,97 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/tech/5.jpg12,08 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/img/tech/6.jpg95,4 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/Ko.gif225 o
Don'$Forum/Don'$Forum/Don'$Forum/public/images/MDP/NiveauFaible.PNG2,04 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/MDP/NiveauFort.PNG1,59 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/MDP/NiveauMoyen.PNG2,42 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/MDP/NiveauZero.PNG3,44 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/membres/1.JPG3,17 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/membres/2.jpg4,68 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/membres/3.JPG4,17 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/membres/anonyme.png1005 o
Don'$Forum/Don'$Forum/Don'$Forum/public/images/Ok.gif142 o
Don'$Forum/Don'$Forum/Don'$Forum/public/images/slide-button.gif2,2 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/images/up.png645 o
Don'$Forum/Don'$Forum/Don'$Forum/public/images/world.png68,13 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/js/jquery13.js34,17 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/js/MenuDeroulant.js3,91 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/js/Ok.gif95,4 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/js/password.js2,42 Ko
Don'$Forum/Don'$Forum/Don'$Forum/public/js/side-bar.js809 o
Don'$Forum/Don'$Forum/Don'$Forum/README.txt148 o

Pour télécharger le zip au complet, veuillez vous rendre sur cette page :
Télécharger DON'$FORUM


Sources du même auteur ayant un ZIP


  • C / C++ / C++.NET Don'$comunik_irc
    Salut l'ami(e) développeur distant. Ces codes ont étés implémentés suivant le protocole IRC, que j'ai eu à modifier quelques consignes afin ...
    Langage : C / C++ / C++.NET, publié le 13/03/2013 par Donald2991

Voir la suite...


Sources du même langage comportant un zip


  • PHP Php info shoutcast + pochettes + actualisation
    Ce code qui est celui de Jules87 que j'ai modifié pour ajouté une pochettes du titre en cours : L'image est recherché avec l'api Google I...
    Langage : PHP, publié le 15/06/2013 par Rataleone

  • PHP Suivi d'une panne
    Un formulaire qui permet de déclarer les pannes (avec envoie des données par mail) , d'avoir un suivi de la panne et pour modifier le statut...
    Langage : PHP, publié le 11/06/2013 par aurelilie68

  • PHP Php infos shoutcast
    "Php infos shoutcast" est un petit script tout simple qui affiche les infos utiles d'un serveur shoutcast. Correction d'un bug avec les acc...
    Langage : PHP, publié le 08/06/2013 par jules87

  • PHP Redirection vers la version mobile/pc d'une page
    Ceci est mon premier poste, alors si il y a des remarques/conseils/remarques, n'hésitez pas ;) Ce script vous permettra de proposer à un ...
    Langage : PHP, publié le 26/05/2013 par playerpsp

  • PHP Web php ftp client
    Voici un petit client FTP du genre http://www.net2ftp.com Bon c'est un truc plutôt léger qui s'inscrit dans la suite de ma classe FTP que j...
    Langage : PHP, publié le 18/05/2013 par bebert2310

Voir la suite...





Guide achat

Softwares to download (FR)...

  • Nego Facturation (1.85) [Gratuit / Freeware]
    Nego Facturation (1.85) [Gratuit / Freeware]
    Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplement. Ce programme est doté d'une ergonomie incomparable déstinée à satisfaire les utilisateurs les plu...
  • Devis-Factures PHMSD (2.2.0.1)
    Devis-Factures PHMSD (2.2.0.1)
    Configuration minimale Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à jour) - Processeur 500 Mhz (700 Mhz conseillé) - 256 Mo de Ram - 100 Mo d'espace disque disponible po...
  • WDmemoCode (2.0.0.1)
    WDmemoCode (2.0.0.1)
    WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base de données des principaux codes et autres procédures locales ou globales utilisés fréquemment dans les...

Sondage...

Le top des photos

Photo ??Photo ???????????????
Photo ????????Photo ????????
 

Développement réalisé par Nicolas SOREL (Nix) et Emmanuel (EBArtSoft) avec l'aide de Cyril DURAND, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,80 sec