/branches/v1.0-pithivier/tools/galerie/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="wkgalerie" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>Galerie de photos</label> |
<desc>Galerie de photos utilisant Jquery et rassemblant le code jQuery lightBox plugin, jQuery SliderViewer Plugin, jQuery Easing v1.3, jQuery Tooltip plugin 1.1</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/galerie/index.php |
---|
New file |
0,0 → 1,30 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) |
{ |
die ("accès direct interdit"); |
} |
buffer::str( |
' |
Ajouter les lignes suivantes dans le fichier wakka.css pour personnaliser |
votre menu de navigation : |
<br> |
<code> |
.page_table {margin: 0px; padding: 0px ; border: none; height: 100%;width: 100%;} |
<br> |
.menu_column {background-color: #FFFFCC; vertical-align: top; width: 150px; border: 1px solid #000000;padding:5px;} |
<br> |
.body_column {vertical-align: top; border: none;padding:5px;} |
<br> |
</code> |
' |
); |
?> |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/configuration/gal_config.inc.php |
---|
New file |
0,0 → 1,101 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 5.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This file is part of papyrus_bp. | |
// | | |
// | Foobar is free software; you can redistribute it and/or modify | |
// | it under the terms of the GNU General Public License as published by | |
// | the Free Software Foundation; either version 2 of the License, or | |
// | (at your option) any later version. | |
// | | |
// | Foobar is distributed in the hope that it will be useful, | |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
// | GNU General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU General Public License | |
// | along with Foobar; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: gall_config.inc.php,v 1.1 2006-12-07 17:29:20 jp_milcent Exp $ |
/** |
* papyrus_bp - gall_config.inc.php |
* |
* Description : |
* |
*@package papyrus_bp |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 1999-2006 |
*@version $Revision: 1.1 $ $Date: 2006-12-07 17:29:20 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | ENTÊTE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
$GLOBALS['_GALERIE_'] = array(); |
// +------------------------------------------------------------------------------------------------------+ |
// | CORPS du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
/** Constante stockant la valeur de la langue par défaut pour l'applette GALL.*/ |
define('GAL_I18N_DEFAUT', 'fr'); |
/** L'url à partir de laquelle l'applette est appelée.*/ |
define('GAL_URL', $this->GetConfigValue('base_url')); |
// Chemin vers les dossiers de l'applette |
/** Chemin vers la racine du site.*/ |
define('GAL_CHEMIN_RACINE', $_SERVER['DOCUMENT_ROOT'].DS); |
/** Constante "dynamique" stockant le chemin relatif de base de l'application.*/ |
define('GAL_CHEMIN_APPLI_RELATIF', 'tools'.DS.'galerie'.DS.'actions'.DS); |
/** Chemin vers l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_APPLETTE', GAL_CHEMIN_APPLI.'galerie'.DS); |
/** Chemin relatif vers l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_APPLETTE_RELATIF', GAL_CHEMIN_APPLI_RELATIF.'galerie'.DS); |
/** Chemin vers le dossier de Présentation.*/ |
define('GAL_CHEMIN_PRESENTATION', GAL_CHEMIN_APPLETTE.'presentation'.DS); |
/** Chemin relatif vers le dossier de Présentation.*/ |
define('GAL_CHEMIN_PRESENTATION_RELATIF', GAL_CHEMIN_APPLETTE_RELATIF.'presentation'.DS); |
/** Chemin vers les fichiers js de l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_SCRIPTS', GAL_CHEMIN_PRESENTATION.'scripts'.DS); |
/** Chemin relatif vers les fichiers js de l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_SCRIPTS_RELATIF', GAL_CHEMIN_PRESENTATION_RELATIF.'scripts'.DS); |
/** Chemin vers les fichiers css de l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_STYLES', GAL_CHEMIN_PRESENTATION.'styles'.DS); |
/** Chemin relatif vers les fichiers css de l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_STYLES_RELATIF', GAL_CHEMIN_PRESENTATION_RELATIF.'styles'.DS); |
/** Chemin vers les fichiers images de l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_IMAGES', GAL_CHEMIN_PRESENTATION.'images'.DS); |
/** Chemin vers les fichiers squelettes de l'applette Gallerie de Papyrus.*/ |
define('GAL_CHEMIN_SQUELETTE', GAL_CHEMIN_PRESENTATION.'squelettes'.DS); |
// Configuration du rendu |
/** Nom du fichier de squelette à utiliser pour la liste des pages.*/ |
define('GAL_SQUELETTE_LISTE', 'gal_liste_ss_inclusion.tpl.html'); |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: gall_config.inc.php,v $ |
* Revision 1.1 2006-12-07 17:29:20 jp_milcent |
* Ajout de l'applette Gallerie dans Client car elle n'a pas un rapport direct avec Papyrus. |
* |
* Revision 1.2 2006/12/07 16:25:23 jp_milcent |
* Ajout de la gestion de messages d'erreur. |
* Ajout de la gestion des squelettes. |
* |
* Revision 1.1 2006/12/07 15:39:47 jp_milcent |
* Ajout de l'applette Gallerie. |
* |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/squelettes/gal_liste_ss_inclusion.tpl.html |
---|
New file |
0,0 → 1,42 |
<!-- GALLERIE - DEBUT --> |
<?php if ($erreur) : ?> |
<p class="pap_erreur"><?=$erreur;?></p> |
<?php else : ?> |
<script type="text/javascript"> |
// Galerie : SliderViewer |
jQuery(function(){ |
// Nous cachons les images si le javascript est activé! |
jQuery("div#<?=$id;?>").removeClass("galerie"); |
jQuery("div#<?=$id;?>").addClass("svw"); |
}); |
$(window).bind("load", function() { |
$("div#<?=$id;?>").slideView({ |
easeFunc: "easeInOutSine", |
easeTime: 500, |
largeur: <?=$css['largeur'];?>,// nous indiquons la largeur ici pour éviter les bogues de ie7 qui ne reconnait pas la bonne largeur d'img |
toolTip: false |
}); |
}); |
// Galerie : LightBox |
$(function() { |
$('div#<?=$id;?> a').lightBox(); |
}); |
</script> |
<div class="galerie_globale"> |
<div id="<?=$id;?>" class="galerie"> |
<ul> |
<?php foreach ($images as $image) : ?> |
<li style="width:<?=$css['largeur'];?>px;"> |
<a href="<?=$image['url_img'];?>" rel="lightbox" title="<?=$image['title'];?>"> |
<!-- bien laisser les margin et border à 0 dans style pour résoudre les bugs avec ie6 --> |
<img style="width:<?=$css['largeur'];?>px;margin:0;border:none;" src="<?=$image['url_img_mini'];?>" alt="<?=$image['fichier_nom'];?>" title="<?=$image['title'];?>"/> |
</a> |
</li> |
<?php endforeach; ?> |
</ul> |
</div> |
</div> |
<?php endif; ?> |
<!-- GALLERIE - FIN --> |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/squelettes/gal_liste.tpl.html |
---|
New file |
0,0 → 1,42 |
<!-- GALLERIE - DEBUT --> |
<?php if ($erreur) : ?> |
<p class="pap_erreur"><?=$erreur;?></p> |
<?php else : ?> |
<script type="text/javascript"> |
// Galerie : SliderViewer |
jQuery(function(){ |
// Nous cachons les images si le javascript est activé! |
jQuery("div#<?=$id;?>").removeClass("galerie"); |
jQuery("div#<?=$id;?>").addClass("svw"); |
}); |
$(window).bind("load", function() { |
$("div#<?=$id;?>").slideView({ |
easeFunc: "easeInOutSine", |
easeTime: 500, |
largeur: <?=$css['largeur'];?>,// nous indiquons la largeur ici pour éviter les bogues de ie7 qui ne reconnait pas la bonne largeur d'img |
toolTip: false |
}); |
}); |
// Galerie : LightBox |
$(function() { |
$('div#<?=$id;?> a').lightBox(); |
}); |
</script> |
<div class="galerie_globale"> |
<div id="<?=$id;?>" class="galerie"> |
<ul> |
<?php foreach ($images as $image) : ?> |
<li style="width:<?=$css['largeur'];?>px;"> |
<a href="<?=$image['url_img'];?>" rel="lightbox" title="<?=$image['title'];?>"> |
<!-- bien laisser les margin et border à 0 dans style pour résoudre les bugs avec ie6 --> |
<img style="width:<?=$css['largeur'];?>px;margin:0;border:none;" src="<?=$image['url_img_mini'];?>" alt="<?=$image['fichier_nom'];?>" title="<?=$image['title'];?>"/> |
</a> |
</li> |
<?php endforeach; ?> |
</ul> |
</div> |
</div> |
<?php endif; ?> |
<!-- GALLERIE - FIN --> |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/styles/jquery.galerie-0.1.css |
---|
New file |
0,0 → 1,190 |
/*Gallerie CSS en cas d'abscence de JS*/ |
.galerie { |
background-color:white; |
padding:0; |
width:355px; |
height:255px; |
overflow:auto; |
white-space:nowrap;} |
.galerie ul { |
list-style: none; |
padding:0; |
margin:0;} |
.galerie ul li { |
display:inline;} |
.galerie ul img { |
border:5px solid #3e3e3e !important; |
margin:5px !important;} |
.galerie ul a:hover img { |
border:5px solid #fff; |
color:#fff;} |
/* jQuery SlideViewer plugin*/ |
/*preload classes*/ |
.svw { |
width:50px; |
height:20px; |
background:#fff;} |
.svw ul { |
position:relative; |
left:-999em;} |
/*core classes*/ |
.stripViewer { |
position:relative; |
overflow:hidden; |
border-style:solid; |
border-bottom-color:#333333; |
border-right-color:#555555; |
border-left-color:#BBBBBB; |
border-top-color:#DDDDDD; |
border-width:5px; |
margin: 0 0 1px 0;} |
.stripViewer li a img { |
border:none; |
margin:0 auto;} |
.stripViewer ul { |
margin:0; |
padding:0; |
position:relative; |
left:0; |
top:0; |
width:1%; |
list-style-type:none;} |
.stripViewer ul li{ |
float:left;} |
/* galerie commentaire */ |
.galerieCommentaire{ |
margin:5px 10px;} |
/* galerie vignette */ |
.stripTransmitter { |
overflow:auto; |
width:1%; |
margin:5px 10px;} |
.stripTransmitter ul { |
margin:0; |
padding:0; |
position:relative; |
list-style-type:none;} |
.stripTransmitter ul li{ |
width:20px; |
float:left; |
padding:0; |
margin:0 1px 1px 0;} |
.stripTransmitter a{ |
font:bold 10px Verdana, Arial; |
text-align:center; |
line-height:22px; |
background:#444; |
color:#fff; |
text-decoration:none; |
display:block; |
border:none;} |
.stripTransmitter a:hover, a.current{ |
background:#fff; |
color:#444;} |
/*tooltips formatting*/ |
#tooltip { |
background:#fff; |
color:#000; |
opacity:0.85; |
border:5px solid #dedede;} |
#tooltip h3 { |
font:normal 10px Verdana; |
margin:0; |
padding:6px 2px; |
border:0;} |
/** |
* jQuery lightBox plugin |
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) |
* and adapted to me for use like a plugin from jQuery. |
* @name jquery-lightbox-0.4.css |
* @author Leandro Vieira Pinho - http://leandrovieira.com |
* @version 0.4 |
* @date November 17, 2007 |
* @category jQuery plugin |
* @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com) |
* @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US |
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin |
*/ |
#jquery-overlay { |
position:absolute; |
top:0; |
left:0; |
z-index:90; |
width:100%; |
height:500px;} |
#jquery-lightbox { |
position:absolute; |
top:0; |
left:0; |
width:100%; |
z-index:100; |
text-align:center; |
line-height:0;} |
#jquery-lightbox img { |
margin:0 auto;} |
#lightbox-container-image-box { |
position:relative; |
background-color:#fff; |
width:250px; |
height:250px; |
margin:0 auto;} |
#lightbox-container-image { |
padding:5px 0;} |
#lightbox-loading { |
position:absolute; |
top:40%; |
left:0%; |
height:25%; |
width:100%; |
text-align:center; |
line-height:0;} |
#lightbox-nav { |
position:absolute; |
top:0; |
left:0; |
height:100%; |
width:100%; |
z-index:10;} |
#lightbox-container-image-box > #lightbox-nav { |
left:0;} |
#lightbox-nav a { |
outline:none;} |
#lightbox-nav-btnPrev, #lightbox-nav-btnNext { |
width:49%; |
height:100%; |
zoom:1; |
display:block; |
border-bottom:0 none;} |
#lightbox-nav-btnPrev { |
left:0; |
float:left;} |
#lightbox-nav-btnNext { |
right:0; |
float:right;} |
#lightbox-container-image-data-box { |
font:10px Verdana, Helvetica, sans-serif; |
background-color:#fff; |
margin:0 auto; |
line-height:1.4em; |
overflow:auto; |
width:100%; |
padding:0 10px 0;} |
#lightbox-container-image-data { |
padding:0 10px; |
color:#666;} |
#lightbox-container-image-data #lightbox-image-details { |
width:70%; |
float:left; |
text-align:left;} |
#lightbox-image-details-caption { |
font-weight:bold;} |
#lightbox-image-details-currentNumber { |
display:block; |
clear:left; |
padding-bottom:1.0em;} |
#lightbox-secNav-btnClose { |
width:66px; |
float:right; |
padding:0 0.7em 0.7em 0; |
border-bottom:0 none;} |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.fr.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.fr.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.fr.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.fr.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.fr.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.fr.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-ico-loading.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-ico-loading.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-blank.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-blank.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/scripts/showthumb.php |
---|
New file |
0,0 → 1,100 |
<?php |
// Vérification de la présence d'un chemin vers l'image |
if($_GET['img'] == '') { |
exit; |
} |
// Récupération de paramêtres |
$_image_ = urldecode( $_GET['img'] ); |
$_dossier = dirname($_image_).'/cache/'; |
$_fichier = pathinfo($_image_); |
$_fichier['filename'] = trim(basename($_image_, $_fichier['extension']), '.'); |
$_width_min_ = intval($_GET['width']); |
$_height_min_ = intval($_GET['height']); |
$_quality_ = intval($_GET['quality']); |
$_centrage = false; |
if (isset($_GET['centrage'])) { |
$_centrage = (bool)$_GET['centrage']; |
} |
// Création du dossier de cache |
if (!is_dir($_dossier)) { |
mkdir($_dossier); |
} |
// Création du nom du fichier de cache |
$fichier_cache = $_dossier.$_fichier['filename'].'_w'.$_width_min_.'_q'.$_quality_.'.'.$_fichier['extension']; |
//echo $fichier_cache; |
// Recherche de la présence d'une image en cache ou création de celle-ci |
if (file_exists($fichier_cache)) { |
switch (strtolower($_fichier['extension'])) { |
case 'jpg' : |
header('Content-type: image/jpg'); |
Imagejpeg(ImageCreateFromJpeg($fichier_cache)); |
break; |
case 'gif' : |
header('Content-type: image/gif'); |
Imagegif(ImageCreateFromGif($fichier_cache)); |
break; |
case 'png' : |
header('Content-type: image/png'); |
Imagepng(ImageCreateFromPng($fichier_cache)); |
break; |
} |
} else { |
// Calcul de la hauteur et de la largeur |
$info = getimagesize($_image_); |
if ($info[0] == '') { |
exit(); |
} |
$new_w = $_width_min_; |
$new_h = (int)($info[1]*($new_w/$info[0])); |
if(($_height_min_) AND ($new_h > $_height_min_)) { |
$new_h = $_height_min_; |
$new_w = (int)($info[0]*($new_h/$info[1])); |
} |
// Définition des points d'origine de destination |
$dst_x = 0; |
$dst_y = 0; |
$dst_l = $new_w; |
$dst_h = $new_h; |
if ($_centrage != false) { |
$dst_x = (int)(($_width_min_ - $new_w) / 2); |
$dst_y = (int)(($_height_min_ - $new_h) / 2); |
$dst_l = $_width_min_; |
$dst_h = $_height_min_; |
} |
// Création de l'image |
switch (strtolower($_fichier['extension'])) { |
case 'jpg' : |
header("Content-type: image/jpg"); |
$dst_img = imagecreatetruecolor($dst_l, $dst_h); |
$c_fond = imagecolorallocate($dst_img, 255, 255, 255); |
imagefill($dst_img, 0, 0, $c_fond); |
$src_img = ImageCreateFromJpeg($_image_); |
imagecopyresampled($dst_img,$src_img,$dst_x,$dst_y,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img)); |
$img_cache = Imagejpeg($dst_img, $fichier_cache, $_quality_); |
$img = Imagejpeg($dst_img, '', $_quality_); |
break; |
case 'gif' : |
header("Content-type: image/gif"); |
$dst_img=ImageCreate($new_w,$new_h); |
$src_img=ImageCreateFromGif($_image_); |
ImagePaletteCopy($dst_img,$src_img); |
ImageCopyResized($dst_img,$src_img,$dst_x,$dst_y,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img)); |
$img_cache = Imagegif($dst_img, $fichier_cache, $_quality_); |
$img = Imagegif($dst_img,'', $_quality_); |
break; |
case 'png' : |
header("Content-type: image/png"); |
$dst_img=ImageCreate($new_w,$new_h); |
$src_img=ImageCreateFromPng($_image_); |
ImagePaletteCopy($dst_img,$src_img); |
ImageCopyResized($dst_img,$src_img,$dst_x,$dst_y,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img)); |
$img_cache = Imagepng($dst_img, $fichier_cache, $_quality_); |
$img = Imagepng($dst_img,'', $_quality_); |
break; |
} |
} |
?> |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/scripts/jquery-1.3.2.min.js |
---|
New file |
0,0 → 1,19 |
/* |
* jQuery JavaScript Library v1.3.2 |
* http://jquery.com/ |
* |
* Copyright (c) 2009 John Resig |
* Dual licensed under the MIT and GPL licenses. |
* http://docs.jquery.com/License |
* |
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) |
* Revision: 6246 |
*/ |
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); |
/* |
* Sizzle CSS Selector Engine - v0.9.3 |
* Copyright 2009, The Dojo Foundation |
* Released under the MIT, BSD, and GPL Licenses. |
* More information: http://sizzlejs.com/ |
*/ |
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.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(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.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 H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/scripts/jquery.galerie-0.1.js |
---|
New file |
0,0 → 1,862 |
/** |
* jQuery lightBox plugin |
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) |
* and adapted to me for use like a plugin from jQuery. |
* @name jquery-lightbox-0.4.js |
* @author Leandro Vieira Pinho - http://leandrovieira.com |
* @version 0.4 |
* @date November 17, 2007 |
* @category jQuery plugin |
* @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com) |
* @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US |
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin |
*/ |
// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias |
(function($) { |
/** |
*/ |
$.fn.lightBox = function(settings) { |
// Settings to configure the jQuery lightBox plugin how you like |
settings = jQuery.extend({ |
// Configuration related to overlay |
overlayBgColor: '#000', // (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color. |
overlayOpacity: 0.8, // (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9 |
// Configuration related to images |
imageLoading: 'tools/galerie/actions/galerie/presentation/images/lightbox-ico-loading.gif', // (string) Path and the name of the loading icon |
imageBtnPrev: 'tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.fr.gif', // (string) Path and the name of the prev button image |
imageBtnNext: 'tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.fr.gif', // (string) Path and the name of the next button image |
imageBtnClose: 'tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.fr.gif', // (string) Path and the name of the close btn |
imageBlank: 'tools/galerie/actions/galerie/presentation/images/lightbox-blank.gif', // (string) Path and the name of a blank image (one pixel) |
// Configuration related to container image box |
containerBorderSize: 10, // (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value |
containerResizeSpeed: 400, // (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default. |
// Configuration related to texts in caption. For example: Image 2 of 8. You can alter either "Image" and "of" texts. |
txtImage: 'Image', // (string) Specify text "Image" |
txtOf: 'de', // (string) Specify text "of" |
// Configuration related to keyboard navigation |
keyToClose: 'c', // (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to. |
keyToPrev: 'p', // (string) (p = previous) Letter to show the previous image |
keyToNext: 'n', // (string) (n = next) Letter to show the next image. |
// Don´t alter these variables in any way |
imageArray: [], |
activeImage: 0 |
},settings); |
// Caching the jQuery object with all elements matched |
var jQueryMatchedObj = this; // This, in this context, refer to jQuery object |
/** |
*/ |
function _initialize() { |
_start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked |
return false; // Avoid the browser following the link |
}; |
/** |
*/ |
function _start(objClicked,jQueryMatchedObj) { |
// Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay. |
$('embed, object, select').css({ 'visibility' : 'hidden' }); |
// Call the function to create the markup structure; style some elements; assign events in some elements. |
_set_interface(); |
// Unset total images in imageArray |
settings.imageArray.length = 0; |
// Unset image active information |
settings.activeImage = 0; |
// We have an image set? Or just an image? Let´s see it. |
if ( jQueryMatchedObj.length == 1 ) { |
settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title'))); |
} else { |
// Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references |
for ( var i = 0; i < jQueryMatchedObj.length; i++ ) { |
settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title'))); |
} |
} |
while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) { |
settings.activeImage++; |
} |
// Call the function that prepares image exibition |
_set_image_to_view(); |
}; |
/** |
*/ |
function _set_interface() { |
// Apply the HTML markup into body tag |
$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="' + settings.imageLoading + '"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="' + settings.imageBtnClose + '"></a></div></div></div></div>'); |
// Get page sizes |
var arrPageSizes = ___getPageSize(); |
// Style overlay and show it |
$('#jquery-overlay').css({ |
backgroundColor: settings.overlayBgColor, |
opacity: settings.overlayOpacity, |
width: arrPageSizes[0], |
height: arrPageSizes[1] |
}).fadeIn(); |
// Get page scroll |
var arrPageScroll = ___getPageScroll(); |
// Calculate top and left offset for the jquery-lightbox div object and show it |
$('#jquery-lightbox').css({ |
top: arrPageScroll[1] + (arrPageSizes[3] / 10), |
left: arrPageScroll[0] |
}).show(); |
// Assigning click events in elements to close overlay |
$('#jquery-overlay,#jquery-lightbox').click(function() { |
_finish(); |
}); |
// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects |
$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() { |
_finish(); |
return false; |
}); |
// If window was resized, calculate the new overlay dimensions |
$(window).resize(function() { |
// Get page sizes |
var arrPageSizes = ___getPageSize(); |
// Style overlay and show it |
$('#jquery-overlay').css({ |
width: arrPageSizes[0], |
height: arrPageSizes[1] |
}); |
// Get page scroll |
var arrPageScroll = ___getPageScroll(); |
// Calculate top and left offset for the jquery-lightbox div object and show it |
$('#jquery-lightbox').css({ |
top: arrPageScroll[1] + (arrPageSizes[3] / 10), |
left: arrPageScroll[0] |
}); |
}); |
}; |
/** |
*/ |
function _set_image_to_view() { // show the loading |
// Show the loading |
$('#lightbox-loading').show(); |
// Hide some elements |
$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide(); |
// Image preload process |
var objImagePreloader = new Image(); |
objImagePreloader.onload = function() { |
$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]); |
// Perfomance an effect in the image container resizing it |
_resize_container_image_box(objImagePreloader.width,objImagePreloader.height); |
// clear onLoad, IE behaves irratically with animated gifs otherwise |
objImagePreloader.onload=function(){}; |
}; |
objImagePreloader.src = settings.imageArray[settings.activeImage][0]; |
}; |
/** |
*/ |
function _resize_container_image_box(intImageWidth,intImageHeight) { |
// Get current width and height |
var intCurrentWidth = $('#lightbox-container-image-box').width(); |
var intCurrentHeight = $('#lightbox-container-image-box').height(); |
// Get the width and height of the selected image plus the padding |
var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image´s width and the left and right padding value |
var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image´s height and the left and right padding value |
// Diferences |
var intDiffW = intCurrentWidth - intWidth; |
var intDiffH = intCurrentHeight - intHeight; |
// Perfomance the effect |
$('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); }); |
if ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) { |
if ( $.browser.msie ) { |
___pause(250); |
} else { |
___pause(100); |
} |
} |
$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) }); |
$('#lightbox-container-image-data-box').css({ width: intImageWidth }); |
}; |
/** |
*/ |
function _show_image() { |
$('#lightbox-loading').hide(); |
$('#lightbox-image').fadeIn(function() { |
_show_image_data(); |
_set_navigation(); |
}); |
_preload_neighbor_images(); |
}; |
/** |
*/ |
function _show_image_data() { |
$('#lightbox-container-image-data-box').slideDown('fast'); |
$('#lightbox-image-details-caption').hide(); |
if ( settings.imageArray[settings.activeImage][1] ) { |
$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show(); |
} |
// If we have a image set, display 'Image X of X' |
if ( settings.imageArray.length > 1 ) { |
$('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show(); |
} |
}; |
/** |
*/ |
function _set_navigation() { |
$('#lightbox-nav').show(); |
// Instead to define this configuration in CSS file, we define here. And it´s need to IE. Just. |
$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); |
// Show the prev button, if not the first image in set |
if ( settings.activeImage != 0 ) { |
// Show the images button for Next buttons |
$('#lightbox-nav-btnPrev').unbind().hover(function() { |
$(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' }); |
},function() { |
$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); |
}).show().bind('click',function() { |
settings.activeImage = settings.activeImage - 1; |
_set_image_to_view(); |
return false; |
}); |
} |
// Show the next button, if not the last image in set |
if ( settings.activeImage != ( settings.imageArray.length -1 ) ) { |
// Show the images button for Next buttons |
$('#lightbox-nav-btnNext').unbind().hover(function() { |
$(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' }); |
},function() { |
$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); |
}).show().bind('click',function() { |
settings.activeImage = settings.activeImage + 1; |
_set_image_to_view(); |
return false; |
}); |
} |
// Enable keyboard navigation |
_enable_keyboard_navigation(); |
}; |
/** |
*/ |
function _enable_keyboard_navigation() { |
$(document).keydown(function(objEvent) { |
_keyboard_action(objEvent); |
}); |
}; |
/** |
*/ |
function _disable_keyboard_navigation() { |
$(document).unbind(); |
}; |
/** |
*/ |
function _keyboard_action(objEvent) { |
// To ie |
if ( objEvent == null ) { |
keycode = event.keyCode; |
escapeKey = 27; |
// To Mozilla |
} else { |
keycode = objEvent.keyCode; |
escapeKey = objEvent.DOM_VK_ESCAPE; |
} |
// Get the key in lower case form |
key = String.fromCharCode(keycode).toLowerCase(); |
// Verify the keys to close the ligthBox |
if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) { |
_finish(); |
} |
// Verify the key to show the previous image |
if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) { |
// If we´re not showing the first image, call the previous |
if ( settings.activeImage != 0 ) { |
settings.activeImage = settings.activeImage - 1; |
_set_image_to_view(); |
_disable_keyboard_navigation(); |
} |
} |
// Verify the key to show the next image |
if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) { |
// If we´re not showing the last image, call the next |
if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) { |
settings.activeImage = settings.activeImage + 1; |
_set_image_to_view(); |
_disable_keyboard_navigation(); |
} |
} |
}; |
/** |
*/ |
function _preload_neighbor_images() { |
if ( (settings.imageArray.length -1) > settings.activeImage ) { |
objNext = new Image(); |
objNext.src = settings.imageArray[settings.activeImage + 1][0]; |
} |
if ( settings.activeImage > 0 ) { |
objPrev = new Image(); |
objPrev.src = settings.imageArray[settings.activeImage -1][0]; |
} |
}; |
/** |
*/ |
function _finish() { |
$('#jquery-lightbox').remove(); |
$('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); }); |
// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay. |
$('embed, object, select').css({ 'visibility' : 'visible' }); |
}; |
/** |
*/ |
function ___getPageSize() { |
var xScroll, yScroll; |
if (window.innerHeight && window.scrollMaxY) { |
xScroll = window.innerWidth + window.scrollMaxX; |
yScroll = window.innerHeight + window.scrollMaxY; |
} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac |
xScroll = document.body.scrollWidth; |
yScroll = document.body.scrollHeight; |
} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari |
xScroll = document.body.offsetWidth; |
yScroll = document.body.offsetHeight; |
} |
var windowWidth, windowHeight; |
if (self.innerHeight) { // all except Explorer |
if(document.documentElement.clientWidth){ |
windowWidth = document.documentElement.clientWidth; |
} else { |
windowWidth = self.innerWidth; |
} |
windowHeight = self.innerHeight; |
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode |
windowWidth = document.documentElement.clientWidth; |
windowHeight = document.documentElement.clientHeight; |
} else if (document.body) { // other Explorers |
windowWidth = document.body.clientWidth; |
windowHeight = document.body.clientHeight; |
} |
// for small pages with total height less then height of the viewport |
if(yScroll < windowHeight){ |
pageHeight = windowHeight; |
} else { |
pageHeight = yScroll; |
} |
// for small pages with total width less then width of the viewport |
if(xScroll < windowWidth){ |
pageWidth = xScroll; |
} else { |
pageWidth = windowWidth; |
} |
arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) |
return arrayPageSize; |
}; |
/** |
*/ |
function ___getPageScroll() { |
var xScroll, yScroll; |
if (self.pageYOffset) { |
yScroll = self.pageYOffset; |
xScroll = self.pageXOffset; |
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict |
yScroll = document.documentElement.scrollTop; |
xScroll = document.documentElement.scrollLeft; |
} else if (document.body) {// all other Explorers |
yScroll = document.body.scrollTop; |
xScroll = document.body.scrollLeft; |
} |
arrayPageScroll = new Array(xScroll,yScroll) |
return arrayPageScroll; |
}; |
/** |
*/ |
function ___pause(ms) { |
var date = new Date(); |
curDate = null; |
do { var curDate = new Date(); } |
while ( curDate - date < ms); |
}; |
// Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once |
return this.unbind('click').click(_initialize); |
}; |
})(jQuery); // Call and execute the function immediately passing the jQuery object |
/** |
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ |
* |
* Uses the built In easIng capabilities added In jQuery 1.1 |
* to offer multiple easIng options |
* |
* @copyright (c) 2007 George Smith |
* @license Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php |
*/ |
// t: current time, b: begInnIng value, c: change In value, d: duration |
jQuery.easing['jswing'] = jQuery.easing['swing']; |
jQuery.extend( jQuery.easing, |
{ |
def: 'easeOutQuad', |
swing: function (x, t, b, c, d) { |
//alert(jQuery.easing.default); |
return jQuery.easing[jQuery.easing.def](x, t, b, c, d); |
}, |
easeInQuad: function (x, t, b, c, d) { |
return c*(t/=d)*t + b; |
}, |
easeOutQuad: function (x, t, b, c, d) { |
return -c *(t/=d)*(t-2) + b; |
}, |
easeInOutQuad: function (x, t, b, c, d) { |
if ((t/=d/2) < 1) return c/2*t*t + b; |
return -c/2 * ((--t)*(t-2) - 1) + b; |
}, |
easeInCubic: function (x, t, b, c, d) { |
return c*(t/=d)*t*t + b; |
}, |
easeOutCubic: function (x, t, b, c, d) { |
return c*((t=t/d-1)*t*t + 1) + b; |
}, |
easeInOutCubic: function (x, t, b, c, d) { |
if ((t/=d/2) < 1) return c/2*t*t*t + b; |
return c/2*((t-=2)*t*t + 2) + b; |
}, |
easeInQuart: function (x, t, b, c, d) { |
return c*(t/=d)*t*t*t + b; |
}, |
easeOutQuart: function (x, t, b, c, d) { |
return -c * ((t=t/d-1)*t*t*t - 1) + b; |
}, |
easeInOutQuart: function (x, t, b, c, d) { |
if ((t/=d/2) < 1) return c/2*t*t*t*t + b; |
return -c/2 * ((t-=2)*t*t*t - 2) + b; |
}, |
easeInQuint: function (x, t, b, c, d) { |
return c*(t/=d)*t*t*t*t + b; |
}, |
easeOutQuint: function (x, t, b, c, d) { |
return c*((t=t/d-1)*t*t*t*t + 1) + b; |
}, |
easeInOutQuint: function (x, t, b, c, d) { |
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; |
return c/2*((t-=2)*t*t*t*t + 2) + b; |
}, |
easeInSine: function (x, t, b, c, d) { |
return -c * Math.cos(t/d * (Math.PI/2)) + c + b; |
}, |
easeOutSine: function (x, t, b, c, d) { |
return c * Math.sin(t/d * (Math.PI/2)) + b; |
}, |
easeInOutSine: function (x, t, b, c, d) { |
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; |
}, |
easeInExpo: function (x, t, b, c, d) { |
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; |
}, |
easeOutExpo: function (x, t, b, c, d) { |
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; |
}, |
easeInOutExpo: function (x, t, b, c, d) { |
if (t==0) return b; |
if (t==d) return b+c; |
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; |
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; |
}, |
easeInCirc: function (x, t, b, c, d) { |
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; |
}, |
easeOutCirc: function (x, t, b, c, d) { |
return c * Math.sqrt(1 - (t=t/d-1)*t) + b; |
}, |
easeInOutCirc: function (x, t, b, c, d) { |
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; |
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; |
}, |
easeInElastic: function (x, t, b, c, d) { |
var s=1.70158;var p=0;var a=c; |
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; |
if (a < Math.abs(c)) { a=c; var s=p/4; } |
else var s = p/(2*Math.PI) * Math.asin (c/a); |
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; |
}, |
easeOutElastic: function (x, t, b, c, d) { |
var s=1.70158;var p=0;var a=c; |
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; |
if (a < Math.abs(c)) { a=c; var s=p/4; } |
else var s = p/(2*Math.PI) * Math.asin (c/a); |
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; |
}, |
easeInOutElastic: function (x, t, b, c, d) { |
var s=1.70158;var p=0;var a=c; |
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); |
if (a < Math.abs(c)) { a=c; var s=p/4; } |
else var s = p/(2*Math.PI) * Math.asin (c/a); |
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; |
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; |
}, |
easeInBack: function (x, t, b, c, d, s) { |
if (s == undefined) s = 1.70158; |
return c*(t/=d)*t*((s+1)*t - s) + b; |
}, |
easeOutBack: function (x, t, b, c, d, s) { |
if (s == undefined) s = 1.70158; |
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; |
}, |
easeInOutBack: function (x, t, b, c, d, s) { |
if (s == undefined) s = 1.70158; |
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; |
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; |
}, |
easeInBounce: function (x, t, b, c, d) { |
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; |
}, |
easeOutBounce: function (x, t, b, c, d) { |
if ((t/=d) < (1/2.75)) { |
return c*(7.5625*t*t) + b; |
} else if (t < (2/2.75)) { |
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; |
} else if (t < (2.5/2.75)) { |
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; |
} else { |
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; |
} |
}, |
easeInOutBounce: function (x, t, b, c, d) { |
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; |
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; |
} |
}); |
/** |
* jQuery SliderViewer Plugin |
* @name jquery.slideviewer.1.1.js |
* @author Gian Carlo Mingati - http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html |
* @version 1.1 |
* @date October 6, 2007 |
* @category jQuery plugin |
* @copyright (c) 2007 Gian Carlo Mingati (gcmingati.net) |
* @license ? |
* @example Visit http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html for more informations about this jQuery plugin |
*/ |
jQuery(function(){ |
jQuery("div.svw").prepend("<img src='http://www.gcmingati.net/wordpress/wp-content/uploads/svwloader.gif' class='ldrgif' alt='loading...'/ >"); |
}); |
var j = 0; |
jQuery.fn.slideView = function(settings) { |
settings = jQuery.extend({ |
easeFunc: "easeInOutExpo", /* <-- easing function names changed in jquery.easing.1.2.js */ |
easeTime: 750, |
largeur: 0, |
toolTip: true |
}, settings); |
return this.each(function(){ |
var container = jQuery(this); |
container.find("img.ldrgif").remove(); // removes the preloader gif |
container.removeClass("svw").addClass("stripViewer"); |
var pictWidth = container.find("img").width(); |
if (settings.largeur != 0) { |
// Comme IE 6 et 7 pose problème nous utilisons une largeur spécifié par le squelette... |
pictWidth = settings.largeur; |
} |
var pictHeight = container.find("img").height(); |
var pictEls = container.find("li").size(); |
var stripViewerWidth = pictWidth*pictEls; |
container.find("ul").css("width" , stripViewerWidth); //assegnamo la larghezza alla lista UL |
container.css("width" , pictWidth); |
container.css("height" , pictHeight); |
container.each(function(i) { |
jQuery(this).after("<div id='stripTransmitter" + j + "' class='stripTransmitter'><ul><\/ul><\/div>"); |
jQuery(this).find("li").each(function(n) { |
// Si l'image n'a pas de commentaire, on laisse vide. Sinon, on met le commentaire dans le title. |
if (jQuery(this).find("img").attr("title") == undefined) { |
jQuery("div#stripTransmitter" + j + " ul").append("<li><a title=' ' href='#'>"+(n+1)+"<\/a><\/li>"); |
} else { |
jQuery("div#stripTransmitter" + j + " ul").append("<li><a title='" + jQuery(this).find("img").attr("title") + "' href='#'>"+(n+1)+"<\/a><\/li>"); |
} |
}); |
// Insertion de l'emplacement des commentaires. |
jQuery("div#stripTransmitter" + j).after("<p id='galerieCommentaire" + j + "' class='galerieCommentaire'><\/p>"); |
jQuery("p#galerieCommentaire"+j).css("width", pictWidth); |
jQuery("div#stripTransmitter" + j + " a").each(function(z) { |
jQuery(this).bind("click", function(){ |
jQuery(this).addClass("current").parent().parent().find("a").not(jQuery(this)).removeClass("current"); // wow! |
var cnt = - (pictWidth*z); |
// Originale : jQuery(this).parent().parent().parent().prev('.stripViewer').find("ul").animate({ left: cnt}, settings.easeTime, settings.easeFunc); |
jQuery(this).parent().parent().parent().prevAll('.stripViewer').find("ul").animate({ left: cnt}, settings.easeTime, settings.easeFunc); |
// Sur clic d'un numéro d'image, affichage de la valeur du title de l'image dans l'espace commentaire |
jQuery(this).parent().parent().parent().next(".galerieCommentaire").html(jQuery(this).attr("title")); |
return false; |
}); |
}); |
jQuery("div#stripTransmitter" + j).css("width" , pictWidth); |
jQuery("div#stripTransmitter" + j + " a:firsts").addClass("current"); |
// Quand la galerie est chargée, avant les clics sur les numéros d'image, on affiche l'attribut title du premier élément |
jQuery("p#galerieCommentaire" + j).html(jQuery("div#stripTransmitter" + j + " a:eq(0)").attr("title")); |
if(settings.toolTip){ |
container.next(".stripTransmitter ul").find("a").tooltip(); |
} |
}); |
j++; |
}); |
}; |
/* |
* jQuery Tooltip plugin 1.2 |
* |
* http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/ |
* http://docs.jquery.com/Plugins/Tooltip |
* |
* Copyright (c) 2006 - 2008 Jörn Zaefferer |
* |
* $Id: jquery.tooltip.js 4569 2008-01-31 19:36:35Z joern.zaefferer $ |
* |
* Dual licensed under the MIT and GPL licenses: |
* http://www.opensource.org/licenses/mit-license.php |
* http://www.gnu.org/licenses/gpl.html |
*/ |
;(function($) { |
// the tooltip element |
var helper = {}, |
// the current tooltipped element |
current, |
// the title of the current element, used for restoring |
title, |
// timeout id for delayed tooltips |
tID, |
// IE 5.5 or 6 |
IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent), |
// flag for mouse tracking |
track = false; |
$.tooltip = { |
blocked: false, |
defaults: { |
delay: 200, |
showURL: true, |
extraClass: "", |
top: 15, |
left: 15, |
id: "tooltip" |
}, |
block: function() { |
$.tooltip.blocked = !$.tooltip.blocked; |
} |
}; |
$.fn.extend({ |
tooltip: function(settings) { |
settings = $.extend({}, $.tooltip.defaults, settings); |
createHelper(settings); |
return this.each(function() { |
$.data(this, "tooltip-settings", settings); |
// copy tooltip into its own expando and remove the title |
this.tooltipText = this.title; |
$(this).removeAttr("title"); |
// also remove alt attribute to prevent default tooltip in IE |
this.alt = ""; |
}) |
.hover(save, hide) |
.click(hide); |
}, |
fixPNG: IE ? function() { |
return this.each(function () { |
var image = $(this).css('backgroundImage'); |
if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) { |
image = RegExp.$1; |
$(this).css({ |
'backgroundImage': 'none', |
'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" |
}).each(function () { |
var position = $(this).css('position'); |
if (position != 'absolute' && position != 'relative') |
$(this).css('position', 'relative'); |
}); |
} |
}); |
} : function() { return this; }, |
unfixPNG: IE ? function() { |
return this.each(function () { |
$(this).css({'filter': '', backgroundImage: ''}); |
}); |
} : function() { return this; }, |
hideWhenEmpty: function() { |
return this.each(function() { |
$(this)[ $(this).html() ? "show" : "hide" ](); |
}); |
}, |
url: function() { |
return this.attr('href') || this.attr('src'); |
} |
}); |
function createHelper(settings) { |
// there can be only one tooltip helper |
if( helper.parent ) |
return; |
// create the helper, h3 for title, div for url |
helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>') |
// add to document |
.appendTo(document.body) |
// hide it at first |
.hide(); |
// apply bgiframe if available |
if ( $.fn.bgiframe ) |
helper.parent.bgiframe(); |
// save references to title and url elements |
helper.title = $('h3', helper.parent); |
helper.body = $('div.body', helper.parent); |
helper.url = $('div.url', helper.parent); |
} |
function settings(element) { |
return $.data(element, "tooltip-settings"); |
} |
// main event handler to start showing tooltips |
function handle(event) { |
// show helper, either with timeout or on instant |
if( settings(this).delay ) |
tID = setTimeout(show, settings(this).delay); |
else |
show(); |
// if selected, update the helper position when the mouse moves |
track = !!settings(this).track; |
$(document.body).bind('mousemove', update); |
// update at least once |
update(event); |
} |
// save elements title before the tooltip is displayed |
function save() { |
// if this is the current source, or it has no title (occurs with click event), stop |
if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) ) |
return; |
// save current |
current = this; |
title = this.tooltipText; |
if ( settings(this).bodyHandler ) { |
helper.title.hide(); |
var bodyContent = settings(this).bodyHandler.call(this); |
if (bodyContent.nodeType || bodyContent.jquery) { |
helper.body.empty().append(bodyContent) |
} else { |
helper.body.html( bodyContent ); |
} |
helper.body.show(); |
} else if ( settings(this).showBody ) { |
var parts = title.split(settings(this).showBody); |
helper.title.html(parts.shift()).show(); |
helper.body.empty(); |
for(var i = 0, part; part = parts[i]; i++) { |
if(i > 0) |
helper.body.append("<br/>"); |
helper.body.append(part); |
} |
helper.body.hideWhenEmpty(); |
} else { |
helper.title.html(title).show(); |
helper.body.hide(); |
} |
// if element has href or src, add and show it, otherwise hide it |
if( settings(this).showURL && $(this).url() ) |
helper.url.html( $(this).url().replace('http://', '') ).show(); |
else |
helper.url.hide(); |
// add an optional class for this tip |
helper.parent.addClass(settings(this).extraClass); |
// fix PNG background for IE |
if (settings(this).fixPNG ) |
helper.parent.fixPNG(); |
handle.apply(this, arguments); |
} |
// delete timeout and show helper |
function show() { |
tID = null; |
helper.parent.show(); |
update(); |
} |
/** |
* callback for mousemove |
* updates the helper position |
* removes itself when no current element |
*/ |
function update(event) { |
if($.tooltip.blocked) |
return; |
// stop updating when tracking is disabled and the tooltip is visible |
if ( !track && helper.parent.is(":visible")) { |
$(document.body).unbind('mousemove', update) |
} |
// if no current element is available, remove this listener |
if( current == null ) { |
$(document.body).unbind('mousemove', update); |
return; |
} |
// remove position helper classes |
helper.parent.removeClass("viewport-right").removeClass("viewport-bottom"); |
var left = helper.parent[0].offsetLeft; |
var top = helper.parent[0].offsetTop; |
if(event) { |
// position the helper 15 pixel to bottom right, starting from mouse position |
left = event.pageX + settings(current).left; |
top = event.pageY + settings(current).top; |
helper.parent.css({ |
left: left + 'px', |
top: top + 'px' |
}); |
} |
var v = viewport(), |
h = helper.parent[0]; |
// check horizontal position |
if(v.x + v.cx < h.offsetLeft + h.offsetWidth) { |
left -= h.offsetWidth + 20 + settings(current).left; |
helper.parent.css({left: left + 'px'}).addClass("viewport-right"); |
} |
// check vertical position |
if(v.y + v.cy < h.offsetTop + h.offsetHeight) { |
top -= h.offsetHeight + 20 + settings(current).top; |
helper.parent.css({top: top + 'px'}).addClass("viewport-bottom"); |
} |
} |
function viewport() { |
return { |
x: $(window).scrollLeft(), |
y: $(window).scrollTop(), |
cx: $(window).width(), |
cy: $(window).height() |
}; |
} |
// hide helper and restore added classes and the title |
function hide(event) { |
if($.tooltip.blocked) |
return; |
// clear timeout if possible |
if(tID) |
clearTimeout(tID); |
// no more current element |
current = null; |
helper.parent.hide().removeClass( settings(this).extraClass ); |
if( settings(this).fixPNG ) |
helper.parent.unfixPNG(); |
} |
$.fn.Tooltip = $.fn.tooltip; |
})(jQuery); |
/branches/v1.0-pithivier/tools/galerie/actions/galerie/bibliotheque/metadonnees.fonct.php |
---|
New file |
0,0 → 1,151 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 5.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This file is part of v2.pierredupontdugard.com. | |
// | | |
// | v2.pierredupontdugard.com is free software; you can redistribute it and/or modify | |
// | it under the terms of the GNU General Public License as published by | |
// | the Free Software Foundation; either version 2 of the License, or | |
// | (at your option) any later version. | |
// | | |
// | v2.pierredupontdugard.com is distributed in the hope that it will be useful, | |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
// | GNU General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU General Public License | |
// | along with Foobar; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id$ |
/** |
* v2.pierredupontdugard.com - metadonnees.fonct.php |
* |
* Description : |
* |
*@package v2.pierredupontdugard.com |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 1999-2008 |
*@version $Revision$ $Date$ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
// +------------------------------------------------------------------------------------------------------+ |
// | CORPS du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
/** |
* returns informations from IPTC metadata, mapping is done at the beginning |
* of the function |
* |
* @param string $filename |
* @return array |
*/ |
function get_iptc_data($filename, $map) |
{ |
$result = array(); |
$imginfo = array(); |
if (false == @getimagesize($filename, $imginfo) ) { |
return $result; |
} |
if (isset($imginfo['APP13'])) { |
$iptc = iptcparse($imginfo['APP13']); |
if (is_array($iptc)) { |
$rmap = array_flip($map); |
foreach (array_keys($rmap) as $iptc_key) { |
if (isset($iptc[$iptc_key][0])) { |
if ($iptc_key == '2#025') { |
$value = implode(',', array_map('clean_iptc_value',$iptc[$iptc_key])); |
} else { |
$value = clean_iptc_value($iptc[$iptc_key][0]); |
} |
foreach (array_keys($map, $iptc_key) as $pwg_key) { |
$result[$pwg_key] = $value; |
} |
} |
} |
} |
} |
return $result; |
} |
/** |
* return a cleaned IPTC value |
* |
* @param string value |
* @return string |
*/ |
function clean_iptc_value($value) |
{ |
// strip leading zeros (weird Kodak Scanner software) |
while ( isset($value[0]) and $value[0] == chr(0)) { |
$value = substr($value, 1); |
} |
// remove binary nulls |
$value = str_replace(chr(0x00), ' ', $value); |
return $value; |
} |
/** |
* returns informations from EXIF metadata, mapping is done at the beginning |
* of the function |
* |
* @param string $filename |
* @return array |
*/ |
function get_exif_data($filename, $map) |
{ |
$result = array(); |
if (!function_exists('read_exif_data')) { |
die('Exif extension not available, admin should disable exif use'); |
} |
// Read EXIF data |
if ($exif = @read_exif_data($filename)) { |
foreach ($map as $key => $field) { |
if (strpos($field, ';') === false) { |
if (isset($exif[$field])) { |
if ($field == 'UserComment') { |
$result[$key] = substr($exif[$field], 8); |
// Récupère l'encodage du champ et supprime les caractères NULL de complétion |
$result[$key.'_encodage'] = substr($exif[$field], 0, strpos($exif[$field] , chr(0))); |
} else { |
$result[$key] = $exif[$field]; |
} |
} |
} else { |
$tokens = explode(';', $field); |
if (isset($exif[$tokens[0]][$tokens[1]])) { |
$result[$key] = $exif[$tokens[0]][$tokens[1]]; |
} |
} |
} |
} |
return $result; |
} |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log$ |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-pithivier/tools/galerie/actions/header__.php |
---|
New file |
0,0 → 1,16 |
<?php |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
$plugin_output_new=preg_replace ('/<\/head>/', |
' |
<link rel="stylesheet" type="text/css" href="tools/galerie/actions/galerie/presentation/styles/jquery.galerie-0.1.css" media="screen" /> |
<script type="text/javascript" src="tools/galerie/actions/galerie/presentation/scripts/jquery-1.3.2.min.js"></script> |
<script type="text/javascript" src="tools/galerie/actions/galerie/presentation/scripts/jquery.galerie-0.1.js"></script> |
</head> |
', |
$plugin_output_new); |
?> |
/branches/v1.0-pithivier/tools/galerie/actions/galerie.php |
---|
New file |
0,0 → 1,196 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 5.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This file is part of wikini. | |
// | | |
// | wikini is free software; you can redistribute it and/or modify | |
// | it under the terms of the GNU General Public License as published by | |
// | the Free Software Foundation; either version 2 of the License, or | |
// | (at your option) any later version. | |
// | | |
// | wikini is distributed in the hope that it will be useful, | |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
// | GNU General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU General Public License | |
// | along with Foobar; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id$ |
/** |
* wikini - galerie.php |
* |
* Description : |
* |
*@package wikini |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 1999-2007 |
*@version $Revision$ $Date$ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | ENTÊTE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
// Définition de constantes |
define('DS', DIRECTORY_SEPARATOR); |
/** Constante "dynamique" stockant le chemin absolue de base de l'application.*/ |
define('GAL_CHEMIN_APPLI', dirname(__FILE__).DS); |
// Initialisation des variables |
$sortie = ''; |
$GLOBALS['_GALLERIE_']['erreur'] = ''; |
// Inclusion du fichier de config de l'action |
require_once GAL_CHEMIN_APPLI.'galerie'.DS.'configuration'.DS.'gal_config.inc.php'; |
require_once GAL_CHEMIN_APPLI.'galerie'.DS.'bibliotheque'.DS.'metadonnees.fonct.php'; |
//+----------------------------------------------------------------------------------------------------------------+ |
// Récupération des paramêtres et gestion des erreurs de paramètrage |
if (!$this->GetParameter('dossier')) { |
$options['dossier'] = null; |
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le paramètre 'dossier' est obligatoire !"; |
} else { |
$options['dossier'] = rtrim($this->GetParameter('dossier'), DS); |
} |
if (!$this->GetParameter('id')) { |
$options['id'] = microtime(); |
//$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le paramètre 'id' est obligatoire !"; |
} else { |
$options['id'] = $this->GetParameter('id'); |
} |
if (!$this->GetParameter('largeur')) { |
$options['largeur'] = 160; |
} else { |
$options['largeur'] = $this->GetParameter('largeur'); |
} |
if (!$this->GetParameter('hauteur')) { |
$options['hauteur'] = 160; |
} else { |
$options['hauteur'] = $this->GetParameter('hauteur'); |
} |
if (!isset($options['qualite'])) { |
$options['qualite'] = 70; |
} |
if (!$this->GetParameter('imglargeur')) { |
$options['img_largeur'] = 800; |
} else { |
$options['img_largeur'] = $this->GetParameter('imglargeur'); |
} |
if (!$this->GetParameter('imghauteur')) { |
$options['img_hauteur'] = 600; |
} else { |
$options['img_hauteur'] = $this->GetParameter('imghauteur'); |
} |
if (!isset($options['img_qualite'])) { |
$options['img_qualite'] = 70; |
} |
if (!isset($options['squelette'])) { |
$options['squelette'] = GAL_SQUELETTE_LISTE; |
} |
// +------------------------------------------------------------------------------------------------------+ |
// | CORPS du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
//+----------------------------------------------------------------------------------------------------------------+ |
// Récupération des données |
$noimage = 0; |
$GLOBALS['_GALERIE_']['id'] = $options['id']; |
$GLOBALS['_GALERIE_']['dossier'] = GAL_CHEMIN_RACINE.$options['dossier']; |
if (is_dir($GLOBALS['_GALERIE_']['dossier'])) { |
if ($dh = opendir($GLOBALS['_GALERIE_']['dossier'])) { |
$images = array(); |
while (($f = readdir($dh)) !== false) { |
if((substr(strtolower($f),-3) == 'jpg') || (substr(strtolower($f),-3) == 'gif') || (substr(strtolower($f),-3) == 'png')) { |
$noimage++; |
// Gestion des métadonnées |
$iptc = array(); |
$exif = array(); |
$fichier = $GLOBALS['_GALERIE_']['dossier'].DIRECTORY_SEPARATOR.$f; |
$iptc = get_iptc_data($fichier, array('keywords' => '2#025', 'date_creation' => '2#055', 'author' => '2#122', 'name' => '2#005', 'comment' => '2#120')); |
// Nous demandons des entités HTML pour la convertion des champs EXIF stockés en Unicode |
ini_set('exif.encode_unicode', 'HTML-ENTITIES'); |
$exif = get_exif_data($fichier, array('date_creation' => 'DateTimeOriginal', 'comment' => 'UserComment')); |
// Initialisation et prétraitement des commentaires |
$commentaire = ''; |
$exif['comment'] = trim($exif['comment']); |
$iptc['comment'] = trim($iptc['comment']); |
// Comparaison et ajout des commentaires IPTC et EXIF |
if (!empty($iptc['comment']) || !empty($exif['comment'])) { |
if (!empty($exif['comment'])) { |
// Dans le cas d'un champ de commentaire unicode nous supprimons les caractères NULL |
if ($exif['comment_encodage'] == 'UNICODE') { |
$exif['comment'] = str_replace(chr(0), '', $exif['comment']); |
} |
$commentaire .= "\n".trim($exif['comment']); |
} |
if (!empty($iptc['comment']) && $iptc['comment'] != $exif['comment']) { |
$commentaire .= $iptc['comment']; |
} |
} |
// Récupération des infos |
$images[] = array('filename' => $f, 'titre' => trim($commentaire)); |
array_multisort($images, SORT_ASC, SORT_REGULAR); |
} |
} |
closedir($dh); |
} else { |
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le dossier d'images ne peut pas être ouvert : ".$GLOBALS['_GALERIE_']['dossier']; |
} |
} else { |
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le dossier d'images est introuvable à : ".$GLOBALS['_GALERIE_']['dossier']; |
} |
//trigger_error('<pre>'.print_r($images, true).'</pre>', E_USER_WARNING); |
if($noimage) { |
$GLOBALS['_GALERIE_']['css']['chemin'] = GAL_CHEMIN_STYLES_RELATIF; |
$GLOBALS['_GALERIE_']['css']['largeur'] = $options['largeur']; |
$GLOBALS['_GALERIE_']['script']['chemin'] = GAL_CHEMIN_SCRIPTS_RELATIF; |
$GLOBALS['_GALERIE_']['images'] = array(); |
foreach($images as $image) { |
if ($image['filename'] != '') { |
$aso_img['fichier_nom'] = $image['filename']; |
$aso_img['title'] = $image['titre']; |
$aso_img['url_img'] = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).DS.GAL_CHEMIN_SCRIPTS_RELATIF.'showthumb.php?img='.urlencode(GAL_CHEMIN_RACINE.$options['dossier'].DS.$image['filename']).'&width='.$options['img_largeur'].'&height='.$options['img_hauteur'].'&quality='.$options['img_qualite'].'&centrage=0'; |
$aso_img['url_img_mini'] = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).DS.GAL_CHEMIN_SCRIPTS_RELATIF.'showthumb.php?img='.urlencode(GAL_CHEMIN_RACINE.$options['dossier'].DS.$image['filename']).'&width='.$options['largeur'].'&height='.$options['hauteur'].'&quality='.$options['qualite'].'&centrage=1'; |
$GLOBALS['_GALERIE_']['images'][] = $aso_img; |
} |
} |
} else { |
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le dossier d'images ne contient rien : ".$GLOBALS['_GALERIE_']['dossier']; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// Gestion des squelettes |
// Extrait les variables et les ajoutes à l'espace de noms local |
extract($GLOBALS['_GALERIE_']); |
// Démarre le buffer |
ob_start(); |
// Inclusion du fichier |
include GAL_CHEMIN_SQUELETTE.$options['squelette']; |
// Récupérer le contenu du buffer |
$sortie = ob_get_contents(); |
// Arrête et détruit le buffer |
ob_end_clean(); |
//+----------------------------------------------------------------------------------------------------------------+ |
// Sortie |
echo $sortie; |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log$ |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-pithivier/tools/api/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="api" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>API REST</label> |
<desc>Permet de controler un wikini à distance à l'aide d'une API REST.</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/api/index.php |
---|
New file |
0,0 → 1,7 |
<?php |
// Administration |
// V�rification de s�curit� |
if (!defined("TOOLS_MANAGER")) { |
die ("accès direct interdit"); |
} |
?> |
/branches/v1.0-pithivier/tools/api/rest/framework.php |
---|
New file |
0,0 → 1,7 |
<?php |
// Inclusion du Framework |
// Renomer ce fichier en "framework.php" |
// Indiquer ci-dessous le chemin absolu vers le fichier Framework.php de la bonne version du Framework |
$chemin = '/home/'.$_ENV['USER'].'/web/framework_3/framework/Framework.php'; |
require_once $chemin; |
?> |
/branches/v1.0-pithivier/tools/api/rest/modules/0.5/Exemple.php |
---|
New file |
0,0 → 1,51 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe d'exemple de service web du projet eFlore |
* Source des données : {NOM_DU_PROJET} {ADRESSE_WEB_DONNEES_DU_PROJET} |
* Paramètres du service : |
* - param1 : explication de l'utilisation du param1 |
* - param2 : explication de l'utilisation du param2 |
* Exemple : |
* http://localhost/{CODE_DU_PROJET}/services/0.1/Exemple?param1=val1¶m2=val2 |
* |
* @category php 5.2 |
* @package lion1906 |
* @author {PRENOM} {NOM}<{PRENOM}@tela-botanica.org> |
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id$ |
*/ |
class Exemple extends Service { |
public function consulter($ressources, $parametres) { |
$verifOk = $this->verifierParametres($parametres); |
if ($verifOk) { |
// Débuter ici le code du service |
$retour = $this->formaterEnJson(array('info' => 'OK')); |
//print_r($retour); |
return $retour; |
} else { |
RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
private function verifierParametres($parametres) { |
$ok = true; |
extract($parametres); |
if ($param1 != '' && !preg_match('/^val1$/', $param1)) { |
$message = "La valeur du param1 n'est pas bonne. Seul 'val1' est accepté."; |
$this->ajouterMessage($message); |
$ok = false; |
} |
if ($param1 != '' && !preg_match('/^val1$/', $param2)) { |
$message = "La valeur du param2 n'est pas bonne Seul 'val2' est accepté."; |
$this->ajouterMessage($message); |
$ok = false; |
} |
return $ok; |
} |
} |
?> |
/branches/v1.0-pithivier/tools/api/rest/modules/0.5/Service.php |
---|
New file |
0,0 → 1,38 |
<?php |
abstract class Service extends RestService { |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION de l'ENVOIE au NAVIGATEUR |
protected function formaterEnJsonp($donnees = null, $encodage = 'utf-8') { |
$contenu = $_GET['callback'].'('.json_encode($donnees).');'; |
return $this->preparerEnvoie($contenu, 'text/html', $encodage); |
} |
protected function formaterEnJson($donnees = null, $encodage = 'utf-8') { |
$contenu = json_encode($donnees); |
return $this->preparerEnvoie($contenu, 'application/json', $encodage); |
} |
private function preparerEnvoie($sortie = 'OK', $mime = 'text/html', $encodage = 'utf-8') { |
$this->envoyerEnteteContenu($encodage, $mime); |
return $sortie; |
} |
private function envoyerEnteteContenu($encodage, $mime) { |
if (!is_null($mime) && !is_null($encodage)) { |
header("Content-Type: $mime; charset=$encodage"); |
} else if (!is_null($mime) && is_null($encodage)) { |
header("Content-Type: $mime"); |
} |
} |
protected function envoyerAuth($message_accueil, $message_echec) { |
header('HTTP/1.0 401 Unauthorized'); |
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"'); |
header('Content-type: text/plain; charset=UTF-8'); |
print $message_echec; |
exit(0); |
} |
} |
?> |
/branches/v1.0-pithivier/tools/api/rest/configurations/config.ini |
---|
New file |
0,0 → 1,29 |
; Encodage : UTF-8 |
; +------------------------------------------------------------------------------------------------------+ |
; URLs |
; Le séparateur utilisé par le framework lorsqu'il génère des URL pour séparer les arguments. |
; Pour remettre les valeurs par défaut, utitliser : "php:ini_get('arg_separator.output')" |
url_arg_separateur_sortie = "&" |
; +------------------------------------------------------------------------------------------------------+ |
; Info sur l'application |
info.nom = "Services web de WIKINI (Tela Botanica)" |
; Abréviation de l'application |
info.abr = "WS-WIKINI" |
; Version du Framework nécessaire au fonctionnement de cette application |
info.framework.version = 0.3 |
;Encodage de l'application |
encodage_appli = "UTF-8" |
; +------------------------------------------------------------------------------------------------------+ |
; Débogage |
; Indique si oui ou non on veut afficher le débogage. |
debogage = true |
; Indique si oui ou non on veut lancer le chronométrage |
chronometrage = false |
; +------------------------------------------------------------------------------------------------------+ |
; Spécifique aux services |
serveur.baseURL = "/yeswiki/" |
serveur.baseAlternativeURL = "/yeswiki/api/rest/" |
/branches/v1.0-pithivier/tools/api/rest/configurations/config.defaut.ini |
---|
New file |
0,0 → 1,49 |
; Encodage : UTF-8 |
; +------------------------------------------------------------------------------------------------------+ |
; URLs |
; Le séparateur utilisé par le framework lorsqu'il génère des URL pour séparer les arguments. |
; Pour remettre les valeurs par défaut, utitliser : "php:ini_get('arg_separator.output')" |
url_arg_separateur_sortie = "&" |
; +------------------------------------------------------------------------------------------------------+ |
; Info sur l'application |
info.nom = "Services web des données {NOM_DU_PROJET} (Tela Botanica)" |
; Abréviation de l'application |
info.abr = "WS-{CODE_DU_PROJET}" |
; Version du Framework nécessaire au fonctionnement de cette application |
info.framework.version = 0.3 |
;Encodage de l'application |
encodage_appli = "UTF-8" |
; +------------------------------------------------------------------------------------------------------+ |
; Débogage |
; Indique si oui ou non on veut afficher le débogage. |
debogage = true |
; Indique si oui ou non on veut lancer le chronométrage |
chronometrage = false |
; +------------------------------------------------------------------------------------------------------+ |
; Spécifique aux services |
serveur.baseURL = /{CODE_DU_PROJET}/ |
serveur.baseAlternativeURL = service:eflore:{CODE_DU_PROJET}/ |
+------------------------------------------------------------------------------------------------------+ |
; Paramètrage de la base de données. |
; bdd_abstraction : abstraction de la base de données. |
; bdd_protocole : Protocole de la base de données. |
; bdd_serveur : Nom du serveur de bases de données. |
; bdd_utilisateur : Nom de l'utilisateur de la base de données. |
; bdd_mot_de_passe : Mot de passe de l'utilisateur de la base de données. |
; bdd_nom : Nom de la base de données principale. |
; bdd_encodage : Encodage de la base de données principale. Normalement le même que l'application mais au format base de |
; données : voir ici : http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html |
; et là: http://www.postgresql.org/docs/8.1/static/multibyte.html pour les correspondances |
bdd_abstraction = pdo |
bdd_protocole = mysql |
bdd_serveur = localhost |
bdd_utilisateur = "telabotap" |
bdd_mot_de_passe = "" |
bdd_nom = "tb_eflore" |
bdd_encodage = "utf8" |
/branches/v1.0-pithivier/tools/api/rest/framework.defaut.php |
---|
New file |
0,0 → 1,7 |
<?php |
// Inclusion du Framework |
// Renomer ce fichier en "framework.php" |
// Indiquer ci-dessous le chemin absolu vers le fichier Framework.php de la bonne version du Framework |
$chemin = '/home/'.$_ENV['USER'].'/www/commun/tbframework/0.3/Framework.php'; |
require_once $chemin; |
?> |
/branches/v1.0-pithivier/tools/api/rest/index.php |
---|
New file |
0,0 → 1,49 |
<?php |
// Encodage : UTF-8 |
// Permet d'afficher le temps d'execution du service |
$temps_debut = (isset($_GET['chrono']) && $_GET['chrono'] == 1) ? microtime(true) : ''; |
// +-------------------------------------------------------------------------------------------------------------------+ |
/** |
* Serveur |
* |
* Description : initialise le chargement et l'exécution des services web. |
* |
//Auteur original : |
* @author auteur <aut@tela-botanica.org> |
* @copyright Tela-Botanica 1999-2008 |
* @licence GPL v3 & CeCILL v2 |
* @version $Id$ |
*/ |
// +-------------------------------------------------------------------------------------------------------------------+ |
// Le fichier autoload.inc.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application. |
// Sinon, rien ne sera chargé. |
// Chemin du fichier chargeant le framework requis |
$framework = dirname(__FILE__).DIRECTORY_SEPARATOR.'framework.php'; |
if (!file_exists($framework)) { |
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework"; |
trigger_error($e, E_USER_ERROR); |
} else { |
// Inclusion du Framework |
require_once $framework; |
// Ajout d'information concernant cette application |
Framework::setCheminAppli(__FILE__);// Obligatoire |
Framework::setInfoAppli(Config::get('info')); |
// Transformation de l'url du handler wikini en url pour le serveur REST |
// TODO : améliorer la gestion de l'url entre le wikini et le serveur REST |
$_SERVER['REQUEST_URI'] = Config::get('serveur.baseURL').$_GET['api']; |
$_SERVER['QUERY_STRING'] = $_GET['params'] ? $_GET['params'] : ''; |
// Initialisation et lancement du serveur |
$Serveur = new RestServeur(); |
$Serveur->executer(); |
// Affiche le temps d'execution du service |
if (isset($_GET['chrono']) && $_GET['chrono'] == 1) { |
$temps_fin = microtime(true); |
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4); |
} |
} |
?> |
/branches/v1.0-pithivier/tools/api/handlers/page/api.php |
---|
New file |
0,0 → 1,24 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Handler renvoyant au navigateur le contenu HTML de la page wiki. |
* |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
//Vérification de sécurité |
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) { |
die ("Accés direct interdit"); |
} |
$chemin = dirname(__FILE__).DIRECTORY_SEPARATOR.'../../rest/index.php'; |
if (!file_exists($chemin)) { |
$e = "Veuillez paramétrer l'emplacement de l'api : $chemin"; |
} else { |
include $chemin; |
} |
?> |
/branches/v1.0-pithivier/tools/cms_ppdg_style/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="wkppdg_style" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>Pierre du Pont du Gard - Styles</label> |
<desc>Styles du site de la Pierre du Pont du Gard </desc> |
</plugin> |
/branches/v1.0-pithivier/tools/cms_ppdg_style/index.php |
---|
New file |
0,0 → 1,30 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) |
{ |
die ("accès direct interdit"); |
} |
buffer::str( |
' |
Ajouter les lignes suivantes dans le fichier wakka.css pour personnaliser |
votre menu de navigation : |
<br> |
<code> |
.page_table {margin: 0px; padding: 0px ; border: none; height: 100%;width: 100%;} |
<br> |
.menu_column {background-color: #FFFFCC; vertical-align: top; width: 150px; border: 1px solid #000000;padding:5px;} |
<br> |
.body_column {vertical-align: top; border: none;padding:5px;} |
<br> |
</code> |
' |
); |
?> |
/branches/v1.0-pithivier/tools/cms_ppdg_style/actions/footer__.php |
---|
New file |
0,0 → 1,21 |
<? |
if (!defined("WIKINI_VERSION")) { |
die ("accès direct interdit"); |
} |
$user = $this->GetUser(); |
if (!$user) { |
$plugin_output_new = preg_replace ('/^.*<\/body>/ms', |
'</body>', |
$plugin_output_new); |
} |
$plugin_output_new = preg_replace ('/<\/body>/', |
'<div class="copyright"> |
S.A.R.L. La Pierre du Pont du Gard Authentique - N° SIRET: 339 291 015 00016 - |
Fonctionne avec '.$wikini_site_url."\n". |
'-'.$this->Link("Identification", "", "Administration")."\n". |
'</div> |
</body>', |
$plugin_output_new); |
?> |
/branches/v1.0-pithivier/tools/cms_ppdg_style/actions/header__.php |
---|
New file |
0,0 → 1,80 |
<?php |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
$plugin_output_new = preg_replace ('/<link.*style>/ms', |
'<!-- STYLE_DEBUT --> |
<link rel="stylesheet" type="text/css" media="screen" href="tools/ppdg_style/wakka.basic.css" /> |
<style type="text/css" media="all"> |
<!-- |
@import url(tools/ppdg_style/'.$imported_style.'.css); |
--> |
</style> |
<!-- STYLE_FIN -->', |
$plugin_output_new); |
$user = $this->GetUser(); |
if ($user) { |
$plugin_output_new = preg_replace ('/<!-- STYLE_FIN -->/', |
'<style type="text/css" media="all"> @import "tools/ppdg_style/wakka.admin.css";</style> |
<!-- STYLE_FIN -->', |
$plugin_output_new); |
} |
$plugin_output_new = preg_replace ('/<!-- STYLE_FIN -->/', |
'<link rel="stylesheet" type="text/css" media="print" href="tools/ppdg_style/wakka.print.css" /> |
<!-- STYLE_FIN -->', |
$plugin_output_new); |
$plugin_output_new = preg_replace('/<body (onload="[^"]"|).*$/ms', |
'<body $1'.$body_attr.'> |
<!-- ENTETE_DEBUT --> |
<div id="entete"> |
<div id="logo"> |
<a href="/"><img src="bibliotheque/images/graphisme/logo.jpg" alt="Logo de la Carrière la Pierre du Pont du Gard Authentique."/></a> |
</div> |
<div style="display: none;"><a href="'.$page_addr.'/resetstyle" accesskey="7"></a></div> |
<div id="site_titre"> |
<h1>La pierre du pont du gard authentique</h1> |
</div> |
<!-- PAGE_NOM --> |
<!-- RECHERCHE --> |
<!-- COMMUN --> |
<!-- ENTETE_FIN --> |
<!-- NAVIGATION --> |
<!-- ADMIN -->', |
$plugin_output_new); |
if ($user) { |
$plugin_output_new = preg_replace ('/<!-- PAGE_NOM -->/', |
'<h1 class="page_name"> |
<a href="'.$page_search.'">'.$page_name.'</a> |
</h1>', |
$plugin_output_new); |
} |
$plugin_output_new = preg_replace ('/<!-- RECHERCHE -->/', |
$this->FormOpen('', 'RechercheTexte', 'get'). |
'<p id="moteur_recherche"> |
<input id="phrase" name="phrase" type="text" size="15" value="Rechercher" onclick="javascrip:this.value=\'\';" /> |
<input id="ok" name="ok" type="submit" value="OK" /> |
</p>'. |
$this->FormClose(), |
$plugin_output_new); |
$plugin_output_new = preg_replace ('/<!-- COMMUN -->/', |
'<div id="commun"> |
<p> |
<a href="wakka.php?wiki=PlanDuSite">Plan du Site</a> |
<a id="aller_menu" href="#menu">Aller au menu</a> |
<a id="aller_contenu" href="#corps">Aller au contenu</a> |
</p> |
</div>', |
$plugin_output_new); |
$plugin_output_new = preg_replace ('/<!-- ENTETE_FIN -->/', |
"</div>\n<!-- ENTETE_FIN -->\n", |
$plugin_output_new); |
?> |
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.print.css |
---|
New file |
0,0 → 1,12 |
#navigation, #moteur_recherche, #commun, .copyright { |
display:none; |
} |
#logo { |
position: relative; |
float:left; |
} |
#corps { |
position: relative; |
top:116px; |
left:0; |
} |
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.basic.css |
---|
New file |
0,0 → 1,121 |
/* GENERAL */ |
body { |
background-color: white; |
color: black; |
font-family: Arial, Helvetica, sans-serif, 'Lucida Grande', Verdana, Geneva, Lucida; |
} |
a { |
color: #bca46e; |
font-weight: bold;} |
h1, h2, h3, h4, h5, form { |
margin: 0; |
padding: 0; |
} |
ul, ol { |
margin-top: 0; |
padding-top: 0; |
padding-bottom: 0;} |
tt { |
color: Navy;} |
address{ |
font-size: 1.2em;} |
/* ENTÊTE */ |
.header { |
padding: 10px; |
padding-top: 0;} |
#site_titre h1 { |
font-size:1.6em; |
padding:0; |
margin:0; |
} |
/* PAGE */ |
.page { |
background-color: white; |
padding: 10px;} |
h1 { |
color: white; |
font-size: 1.7em; |
font-weight: bold;} |
h2 { |
margin: 2px 2px 2px 20px; |
color: black; |
font-size: 1.5em; |
font-weight: bold;} |
h3 { |
margin: 2px 2px 2px 40px; |
color: black; |
font-size: 1.3em; |
font-weight: bold;} |
h4 { |
margin: 2px 2px 2px 60px; |
color: black; |
font-size: 1.1em; |
font-style: italic;} |
.page li { |
padding-bottom: 0.8em;} |
/* ADMINISTRATION :*/ |
.edit { |
width: 100%; |
height: 400px;} |
.footer { |
clear: both; |
background-color: #DDDDDD; |
padding: 5px; |
border: 1px inset;} |
.prev_alert { |
background-color: red; |
color: white; |
font-size: 1.7em; |
font-weight: bold; |
margin-bottom: 5px;} |
/* DIVERS */ |
.commentsheader{ |
visibility:hidden;} |
.error { |
color: #CC3333; |
font-weight: bold;} |
.indent { |
margin-left: 40px;} |
.additions { |
color: #008800;} |
.deletions { |
color: #880000;} |
.add { |
font-weight: bold; |
color:#c00; |
text-decoration: underline; } |
.del { |
font-style: italic; |
color:#c00; |
text-decoration: line-through;} |
.code { |
background: #FFFFFF; |
border: solid #888888 2px; |
font-family: "Courier New", Courier; |
color: black; |
font-size: 0.8em; |
width: 100%; |
height: 400px; |
overflow: scroll; |
padding: 3px;} |
.revisioninfo { |
color: #AAAAAA; |
padding-bottom: 20px;} |
.copyright { |
font-size: 0.8em; |
color: #AAAAAA; |
text-align: right;} |
.copyright a { |
color: #AAAAAA;} |
.searchbox { |
background: #FFFFF8; |
border: 0; |
border-bottom: 1px solid #CCCCAA; |
padding: 0; |
margin: 0;} |
.hr_clear{ |
clear:both; |
display:none;} |
.debug { |
font-size: 0.8em; |
color: #888888;} |
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.css |
---|
New file |
0,0 → 1,190 |
/* GENERAL */ |
body { |
background: url(../../bibliotheque/images/graphisme/navigation_fond.jpg) repeat-y top left;} |
body, form{ |
margin: 0; |
padding: 0;} |
ol, ul { |
margin: 0.5em; |
padding: 0;} |
a { |
text-decoration:none; |
border-bottom: 1px dotted black;} |
a:hover { |
text-decoration: underline; |
border-bottom: 0 none; |
font-weight: bold;} |
img { |
display:block; |
margin: 5px 10px; |
border-style: solid; |
border-bottom-color: #333333; |
border-right-color: #555555; |
border-left-color: #BBBBBB; |
border-top-color: #DDDDDD;} |
.missingpage+a { |
display:none;} |
.titre_a_droite { |
text-align: right;} |
/* MENU GAUCHE */ |
#navigation { |
background-color: #eec860;} |
#menu { |
position: absolute; |
top: 116px; |
left: 0; |
width: 150px; |
margin: 5px 5px 0 5px; |
background: url(../../bibliotheque/images/graphisme/menu_contenu.jpg) repeat-y; |
background-color: #f5d58f; |
border: none; |
font-size: small; |
font-weight: bold;} |
#menu br { |
margin:0; |
padding:0;} |
#menu li { |
margin:0; |
padding:5px 0 0 0;} |
#menu ul { |
margin-top:0; |
list-style-type: none;} |
#menu ul ul { |
margin: 0 0 0 5px; |
list-style-type: none;} |
#menu_debut, #menu_fin { |
display: none;} |
#menu .indent{ |
margin-left: 5px;} |
#menu a { |
color: white; |
font-size: 1.1em; |
font-weight: bold;} |
#titre_menu { |
margin:0; |
padding:0; |
background: url(../../bibliotheque/images/graphisme/menu_haut.jpg) no-repeat top left;} |
#titre_contenu { |
height:30px; |
width:150px; |
margin:0; |
padding:0; |
background: url(../../bibliotheque/images/graphisme/menu_bas.jpg) no-repeat bottom left;} |
/* ENTÊTE */ |
#entete { |
position: absolute; |
top: 0; |
left: 0; |
margin: 0; |
padding: 0; |
height: 116px; |
width: 100%; |
background: url(../../bibliotheque/images/graphisme/entete_fond.jpg) repeat-x; |
background-color: #eec860;} |
#logo { |
position: absolute; |
top: 0; |
left: 0; |
height: 88px; |
width: 105px; |
margin: 5px; |
padding: 0;} |
#logo img{ |
margin:0; |
padding:0; |
border:none;} |
#logo a { |
border-bottom: 0 none;} |
#site_titre { |
position: absolute; |
top: 5px; |
left: 178px; |
height: 87px; |
width: 440px; |
padding:0.8em 0 0 0; |
margin:0; |
background: url(../../bibliotheque/images/graphisme/entete_titre_fond.jpg) no-repeat;} |
#site_titre h1 { |
text-align: center; |
text-transform:uppercase; |
color:white; |
font-weight:bold;} |
#commun { |
position: absolute; |
top: 65px; |
right: 5px;} |
#commun a { |
color: black;} |
#aller_menu, #aller_contenu { |
display: none;} |
#moteur_recherche { |
position: absolute; |
top: 35px; |
right: 5px; |
margin: 0;} |
#moteur_recherche input { |
background: #FFFFF8;} |
/* CORPS */ |
#corps { |
position: absolute; |
top: 116px; |
left: 178px; |
margin: 0; |
padding: 0; |
min-height: 332px; |
width:auto; |
min-width:400px; |
background: url(../../bibliotheque/images/graphisme/arche.jpg) no-repeat top left;} |
/* PAGE */ |
.page { |
background-color: transparent; |
height:100%; |
min-height: 332px; |
padding: 1em; |
text-align: justify;} |
.page h1 { |
padding:5px; |
background-color: #bca46e; |
text-align: center; |
text-transform:uppercase;} |
.page h2, #titre_menu, #titre_contenu { |
clear: both; |
text-transform:uppercase;} |
.page h3 { |
clear: both;} |
.page h4 { |
clear: both;} |
/* DIVERS */ |
.commentsheader{ |
display:none;} |
.nettoyeur, .copyright { |
clear:both; |
margin: 0; |
padding: 0;} |
/* CONTRIBUTION ACTION ATTACH */ |
/* - les images */ |
.attach_maj{display:none;} |
/* marge de 0.5 em autour de l'image*/ |
.attach_margin05em { margin: 0.5em;} |
/* marge de 1em autour de l'image*/ |
.attach_margin1em { margin: 1em;} |
/* bloc flotant ? gauche */ |
.attach_left {float: left;} |
/* bloc flotant ? droite */ |
.attach_right {float: right;} |
/* bloc flotant centré */ |
.attach_center {text-align:center;} |
/* pas de bordure */ |
.attach_noborder {border-width: 0;} |
/* aligenement vertical au milieu */ |
.attach_vmiddle {vertical-align: text-bottom;} |
/* CONTRIBUTION ACeditor */ |
.image_left, .flotant_gauche {float: left;} /* bloc flotant ? gauche */ |
.image_right, .flotant_droit {float: right;} /* bloc flotant ? droite */ |
.image_center {text-align:center;} /* bloc centr? */ |
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.admin.css |
---|
New file |
0,0 → 1,100 |
/* GENERAL */ |
.missingpage+a { |
display:inline; |
} |
/* ADMINISTRATION : entête, pieds de page, nom du wiki, nom de la page, formulaire édition */ |
.footer, .header { |
padding: 5px; |
margin: 0; |
background: #cfcfcf; |
border: 1px solid gray; |
font-size: 0.8em; |
text-align: center; |
} |
.footer a, .header a { |
color:black; |
} |
.wiki_name { |
color: white; |
float: left; |
font-size: 1.8em; |
margin: 0px 0px 0px 100px; |
padding: 10px; |
} |
.page_name { |
position: absolute; |
top: 5px; |
right: 5px; |
font-size: 1.4em; |
margin: 0; |
padding: 0; |
} |
.edit { |
width: 100%; |
height: 400px; |
} |
/* CONTRIBUTION ACTION ATTACH */ |
/* - les images */ |
/* - les images */ |
.attach_maj{display:inline;} |
/* - le gestionnaire des uploads */ |
.tableFM {border: thin solid Black; width: 100%; } |
.tableFM thead { background-color: Silver; font-weight: bold; text-align: center; } |
.tableFM tfoot { background-color: Silver; font-weight: bold; text-align: left; } |
.tableFM tbody tr { text-align: center; } |
.tableFMCol1 { background-color: Aqua; } |
.tableFMCol2 { background-color: Yellow; } |
/* CONTRIBUTION ACeditor */ |
#toolbar { |
margin: 0; |
padding: 0; |
height:20px; |
background: #ccc; |
border-top: 1px solid buttonhighlight; |
border-left: 1px solid buttonhighlight; |
border-bottom: 1px solid buttonshadow; |
border-right: 1px solid buttonshadow; |
text-align:left; |
} |
#toolbar img { |
margin:0; |
} |
.buttons { |
background: #ccc; |
border: 1px solid #ccc; |
margin: 1px; |
float:left; |
} |
.raise{ |
border-top: 1px solid buttonhighlight; |
border-left: 1px solid buttonhighlight; |
border-bottom: 1px solid buttonshadow; |
border-right: 1px solid buttonshadow; |
background: #ccc; |
margin:1; |
float:left; |
} |
.press { |
border-top: 1px solid buttonshadow; |
border-left: 1px solid buttonshadow; |
border-bottom: 1px solid buttonhighlight; |
border-right: 1px solid buttonhighlight; |
background: #ccc; |
margin:1; |
float:left; |
} |
.ACsearchbox { |
background: #FFFFF8; |
border: 0; |
border-bottom: 1px solid #CCCCAA; |
padding: 0; |
margin: 0; |
font-size:0.8em; |
} |
.texteChampsImage { |
font-size: 0.8em; |
} |
/branches/v1.0-pithivier/tools/.settings/org.eclipse.php.core.prefs |
---|
New file |
0,0 → 1,3 |
#Wed Aug 11 16:16:43 CEST 2010 |
eclipse.preferences.version=1 |
include_path=0;/wikini_tools |
/branches/v1.0-pithivier/tools/.settings/org.eclipse.core.resources.prefs |
---|
New file |
0,0 → 1,3 |
#Wed Aug 11 16:17:35 CEST 2010 |
eclipse.preferences.version=1 |
encoding/<project>=ISO-8859-1 |
/branches/v1.0-pithivier/tools/templates/actions/barreredaction.php |
---|
New file |
0,0 → 1,79 |
<?php |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
if ($this->HasAccess("write")) { |
// on récupère la page et ses valeurs associées |
$page = $this->GetParameter('page'); |
if (empty($page)) { |
$page = $this->GetPageTag(); |
$time = $this->GetPageTime(); |
$content = $this->page; |
} else { |
$content = $this->LoadPage($page); |
$time = $content["time"]; |
} |
$barreredactionelements['page'] = $page; |
$barreredactionelements['linkpage'] = $this->href("", $page); |
// on choisit le template utilisé |
$template = $this->GetParameter('template'); |
if (empty($template)) { |
$template = 'barreredaction_basic.tpl.html'; |
} |
// on peut ajouter des classes à la classe par défaut .footer |
$barreredactionelements['class'] = ($this->GetParameter('class') ? 'footer '.$this->GetParameter('class') : 'footer'); |
// on ajoute le lien d'édition si l'action est autorisée |
if ( $this->HasAccess("write", $page) ) { |
$barreredactionelements['linkedit'] = $this->href("edit", $page); |
} |
// |
if ( $time ) { |
$barreredactionelements['linkrevisions'] = $this->href("revisions", $page); |
$barreredactionelements['time'] = date(TEMPLATE_DATE_FORMAT, strtotime($time)); |
} |
// if this page exists |
if ( $content ) { |
// if owner is current user |
if ($this->UserIsOwner($page) || $this->UserIsAdmin()) { |
$barreredactionelements['owner'] = TEMPLATE_OWNER." : ".TEMPLATE_YOU.' - '.TEMPLATE_PERMISSIONS; |
$barreredactionelements['linkacls'] = $this->href("acls", $page); |
$barreredactionelements['linkdeletepage'] = $this->href("deletepage", $page); |
} |
else { |
if ($owner = $this->GetPageOwner($page)) { |
$barreredactionelements['owner'] = TEMPLATE_OWNER." : ".$owner; |
if ($this->UserIsAdmin()) { |
$barreredactionelements['linkacls'] = $this->href("acls", $page); |
$barreredactionelements['owner'] .= ' - '.TEMPLATE_PERMISSIONS; |
} |
else { |
//$barreredactionelements['linkacls'] = $this->href('', $owner); |
} |
} |
else { |
$barreredactionelements['owner'] = TEMPLATE_NO_OWNER.($this->GetUser() ? " - ".TEMPLATE_CLAIM : ""); |
if ($this->GetUser()) $barreredactionelements['linkacls'] = $this->href("claim", $page); |
//else $barreredactionelements['linkacls'] = $this->href("claim", $page); |
} |
} |
} |
$barreredactionelements['linkreferrers'] = $this->href("referrers", $page); |
$barreredactionelements['linkdiaporama'] = $this->href("diaporama", $page); |
$barreredactionelements['linkshare'] = $this->href("share", $page); |
include_once('tools/templates/libs/squelettephp.class.php'); |
$barreredactiontemplate = new SquelettePhp('tools/templates/presentation/templates/'.$template); |
$barreredactiontemplate->set($barreredactionelements); |
echo $barreredactiontemplate->analyser(); |
} |
?> |
/branches/v1.0-pithivier/tools/templates/presentation/templates/moteurrecherche_basic.tpl.html |
---|
New file |
0,0 → 1,9 |
<form class="<?php echo $class;?>" method="get" action="<?php echo $url;?>"> |
<div class="btn-group"> |
<div class="input-append"> |
<input type="text" class="search-query has-tooltip" data-placement="bottom" placeholder="<?php echo TEMPLATE_SEARCH_PLACEHOLDER;?>" value="<?php echo $phrase;?>" title="<?php echo TEMPLATE_SEARCH_INPUT_TITLE;?>" accesskey="C" tabindex="1" name="phrase" /> |
<button type="submit" class="btn search-btn<?php echo $btnclass; ?>"><i class="icon-search<?php echo $iconclass; ?>"></i> </button> |
</div> |
</div> |
<input type="hidden" value="RechercheTexte" name="wiki" /> |
</form> |
/branches/v1.0-pithivier/tools/pages/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="nbrepages" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>Nombre de pages</label> |
<desc>Actions affichant le nombre de page du Wikini.</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/pages/index.php |
---|
New file |
0,0 → 1,10 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) |
{ |
die ("accès direct interdit"); |
} |
?> |
/branches/v1.0-pithivier/tools/pages/actions/nbrepages.php |
---|
New file |
0,0 → 1,6 |
<?php |
$res = $this->LoadSingle("SELECT count(distinct tag) as nbrPg FROM ".$this->config["table_prefix"]."pages ;"); |
if ($res) { |
echo $res["nbrPg"]; |
} |
?> |
/branches/v1.0-pithivier/tools/actions/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="actions" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>Actions supplementaires ou de rempalcement</label> |
<desc>Plugin fournissant de nouvelles actions a Wikini.</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/actions/index.php |
---|
New file |
0,0 → 1,10 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) |
{ |
die ("accès direct interdit"); |
} |
?> |
/branches/v1.0-pithivier/tools/actions/actions/usersdeleting.php |
---|
New file |
0,0 → 1,358 |
<?php |
/* |
usersdeleting.php |
Copyright 2002 Patrick PAUL |
Copyright 2003 David DELON |
* Copyright 2013 Jean-Pascal MILCENT |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
// Data managment |
$origineLink = $this->Href(); |
$messages = array(); |
if ($this->UserIsAdmin() === false) { |
$msg = "Il est nécessaire d'être administrateur de ce wikini pour accéder à la gestion des utilisateurs."; |
$messages[] = array('type' => 'warning', 'txt' => $msg); |
} else { |
$msg_accueil = "Zone de sécurité renforcé : identifiez vous avec l'identifiant et le mot de passe de connexion à la base de données de ce Wikini"; |
$msg_echec = "Accès limité aux administrateurs de ce Wikini ayant accès aux paramètres d'installation (identifiant et mot de passe de la base de données).\n". |
"Votre tentative d'identification a échoué.\n". |
"Actualiser la page pour essayer à nouveau si vous avez en votre possession les paramètres nécessaires."; |
$wikiAuthHttp = new WikiAuthHttp($msg_accueil, $msg_echec, $this->config['mysql_user'], $this->config['mysql_password']); |
$wikiAuthHttp->authentifier(); |
$prefix = $this->config['table_prefix']; |
// Data update, insert or delete |
if (isset($_POST['action'])) { |
if ($_POST['action'] == 'deleteUser') { |
if (isset($_POST['users']) === false) { |
$messages[] = array('type' => 'error', 'txt' => 'Veuillez sélectionner au moins un utilisateur.'); |
} else { |
$usersDeleted = array(); |
$usersEscaped = array(); |
foreach ($_POST['users'] as $user_name) { |
$usersDeleted[] = $user_name; |
$usersEscaped[] = "'".mysql_real_escape_string($user_name)."'"; |
} |
$sqlUsersToDelete = implode(',', $usersEscaped); |
} |
$queryDeleteUser = "DELETE FROM {$prefix}users ". |
"WHERE name IN ($sqlUsersToDelete) "; |
$this->Query($queryDeleteUser); |
$usersDeleted = implode(', ', $usersDeleted); |
if (empty($usersDeleted) == false) { |
$msg = "Les utilisateurs suivant ont été supprimés : $usersDeleted."; |
$messages[] = array('type' => 'success', 'txt' => $msg); |
} |
} else if ($_POST['action'] == 'deletePage') { |
$deletedPages = array(); |
if (!empty($_POST['suppr'])) { |
foreach ($_POST['suppr'] as $page) { |
// Effacement de la page en utilisant la méthode DeleteOrphanedPage |
$this->DeleteOrphanedPage($page); |
$deletedPages[] = $page; |
} |
$deletedPages = implode(', ', $deletedPages); |
if (empty($deletedPages) == false) { |
$msg = "Les pages suivantes ont été supprimées : $deletedPages."; |
$messages[] = array('type' => 'success', 'txt' => $msg); |
} |
} |
$restoredPages = array(); |
if (!empty($_POST['rev'])) { |
foreach ($_POST['rev'] as $rev_id) { |
// Sélectionne la révision |
$id = "'".mysql_real_escape_string($rev_id)."'"; |
$query = 'SELECT * '. |
"FROM {$prefix}pages ". |
"WHERE id = $id ". |
'LIMIT 1'; |
$revision = $this->LoadSingle($query); |
// Fait de la dernière version de cette révision une version archivée |
$tag = "'".mysql_real_escape_string($revision['tag'])."'"; |
$queryUpdate = |
"UPDATE {$prefix}pages " . |
"SET latest = 'N' ". |
"WHERE latest = 'Y' " . |
"AND tag = $tag " . |
"LIMIT 1"; |
$this->Query($queryUpdate); |
$restoredPages[] = $revision['tag']; |
// add new revision |
$owner = "'".mysql_real_escape_string($revision['owner'] )."'"; |
$user = "'".mysql_real_escape_string('WikiAdmin')."'"; |
$body = "'".mysql_real_escape_string(chop($revision['body']))."'"; |
$queryInsert = "INSERT INTO {$prefix}pages SET ". |
"tag = $tag, ". |
"time = NOW(), ". |
"owner = $owner, ". |
"user = $user, ". |
"latest = 'Y', ". |
"body = $body"; |
$this->Query($queryInsert); |
} |
} |
$restoredPages = implode(', ', $restoredPages); |
if (empty($restoredPages) == false) { |
$msg = "Les pages suivantes ont été restaurées à une version antérieure: $restoredPages."; |
$messages[] = array('type' => 'success', 'txt' => $msg); |
} |
} |
} |
// Data loading |
$queryAllUsers = 'SELECT name, email, motto, revisioncount, changescount, doubleclickedit, signuptime, show_comments '. |
"FROM {$prefix}users ". |
'ORDER BY signuptime DESC'; |
$users = $this->LoadAll($queryAllUsers); |
$users_infos = array(); |
foreach($users as $user) { |
$user_name = mysql_real_escape_string($user['name']); |
$result = $this->LoadSingle("SELECT COUNT(*) AS pages FROM {$prefix}pages WHERE user = '$user_name'"); |
$user['pages_user'] = $result['pages']; |
$result = $this->LoadSingle("SELECT COUNT(*) AS pages FROM {$prefix}pages WHERE latest = 'Y' AND owner = '$user_name'"); |
$user['pages_owner'] = $result['pages']; |
$user['has_pages'] = ($user['pages_user'] != 0 || $user['pages_owner'] != 0) ? true : false; |
$user['pages_link'] = $this->Href('', '', "action=seeUserPage&user={$user['name']}"); |
$users_infos[] = $user; |
} |
if (count($users_infos) == 0) { |
$msg = "Ce Wikini ne possède pas d'utilisateur"; |
$messages[] = array('type' => 'info', 'txt' => $msg); |
} |
if (isset($_GET['action'])) { |
if ($_GET['action'] == 'seeUserPage' && $_GET['user'] != '') { |
$actionLink = $this->Href('', '', "action=seeUserPage&user={$_GET['user']}"); |
$userPages['name'] = $_GET['user']; |
$userName = "'".mysql_real_escape_string($_GET['user'])."'"; |
$queryAllUserPages = "SELECT tag ". |
"FROM {$prefix}pages ". |
"WHERE owner = $userName OR ". |
" user = $userName ". |
"ORDER BY time DESC "; |
$pages = $this->LoadAll($queryAllUserPages); |
if (count($pages) == 0) { |
$msg = "Cet utilisateur ne possède plus aucune page."; |
$messages[] = array('type' => 'error', 'txt' => $msg); |
} else { |
foreach ($pages as $page) { |
if (! isset($userPages['pages'][$page['tag']])) { |
$pageTag = "'".mysql_real_escape_string($page['tag'])."'"; |
$infos = $this->LoadSingle("SELECT * FROM {$prefix}pages WHERE tag = $pageTag AND latest = 'Y'"); |
$infos['link'] = $this->Href('', $page['tag']); |
$infos['revisions'] = $this->LoadAll("SELECT * FROM {$prefix}pages WHERE tag = $pageTag ORDER BY time DESC"); |
$userPages['pages'][$page['tag']] = $infos; |
} |
} |
} |
} |
} |
} |
// Template HTML |
$html = ''; |
if ($_GET['action'] == 'seeUserPage') { |
$html .= '<ul class="breadcrumb"> |
<li>Retour : </li> |
<li><a href="'.$origineLink.'">Gestion des utilisateurs</a> <span class="divider">></span></li> |
<li class="active">Pages utilisateur '.$userPages['name'].'</li> |
</ul>'; |
} |
$html .= '<h2>Gestion des utilisateurs</h2>'; |
if (count($messages) != 0) { |
foreach ($messages as $msg) { |
$html .= '<p class="alert alert-'.$msg['type'].'">'; |
$html .= $msg['txt'].'<br />'; |
$html .= '</p>'; |
} |
} |
if ($this->UserIsAdmin()) { |
if ($_GET['action'] == 'seeUserPage' && isset($userPages)) { |
if (count($userPages['pages']) > 0) { |
$html .= '<h3 id="user-pages-modal-label">'."Pages de l'utilisateur {$userPages['name']}".'</h3>'. |
'<p class="alert alert-info">Sélectionnez une ou plusieurs pages à supprimer et/ou versions à restaurer puis cliquer sur le bouton en bas de page.</p>'; |
$html .= '<form action="'.$actionLink.'" method="post">'; |
$html .= '<table class="table table-bordered"> |
<thead> |
<tr> |
<th>[supprimer] Page</th> |
<th>Propriétaire</th> |
<th>[restaurer] Version du</th> |
<th>Auteur modification</th> |
</tr> |
</thead>'; |
foreach ($userPages['pages'] as $page) { |
$html .= '<tr class="success">'. |
'<td>'. |
'<span class="has-tooltip" title="Supprimer la page '.$page['tag'].' et toutes ses versions !">'. |
'<input name="suppr[]" value="'.$page['tag'].'" type="checkbox"/>'. |
'</span> '. |
'<a href="'.$page['link'].'">'. |
$page['tag']. |
'</a>'. |
'</td>'. |
'<td>'.$page['owner'].'</td>'. |
'<td>'.$page['time'].'</td>'. |
'<td>'.$page['user'].'</td>'. |
'</tr>'; |
$revisionsNbre = count($page['revisions']); |
if ($revisionsNbre != 0) { |
for ($i = 1; $i < $revisionsNbre; $i++) { |
$revision = $page['revisions'][$i]; |
$html .= '<tr>'. |
'<td> </td>'. |
'<td>'.$revision['owner'].'</td>'. |
'<td>'. |
'<span class="has-tooltip" title="Restaurer la version du '.$revision['time'].' de la page '.$page["tag"].'">'. |
'<input name="rev[]" value="'.$revision['id'].'" type="checkbox"/> '. |
'</span>'. |
$revision['time']. |
'</td>'. |
'<td>'.$revision['user'].'</td>'. |
'</tr>'; |
} |
} |
} |
$html .= '</table> |
<div class="form-actions"> |
<button class="btn btn-danger has-tooltip" type="submit" name="action" value="deletePage" title="Supprime les pages sélectionnés ou restaure des anciennes versions"> |
Supprimer des pages et/ou restaurer des versions |
</button> |
</div> |
</form>'; |
} |
} else { |
$html .= '<form action="'.$origineLink.'" method="post">'; |
$html .= '<p class="alert alert-info">Sélectionnez un ou plusieurs utilisateurs à supprimer puis cliquer sur le bouton supprimer en bas de page.</p> |
<table class="table table-striped table-hover table-bordered table-condensed"> |
<thead> |
<tr> |
<th> </th> |
<th>Nom & Devise</th> |
<th>Courriel</th> |
<th>Inscription</th> |
<th> |
<span class="has-tooltip" title="Nombre de pages (hors archive) dont l\'utilisateur est le propriétaire.">Pages proprio.</span> |
/ |
<span class="has-tooltip" title="Nombre de pages toutes versions confondues modifiées par l\'utilisateur.">Modif.</span> |
</th> |
<th> |
<span class="has-tooltip" title="Nombre de révisions visible par l\'utilisateur">révisions</span> / |
<span class="has-tooltip" title="Nombre de changements visible par l\'utilisateur">changements</span> / |
<span class="has-tooltip" title="L\'utilisateur peut éditer les page en réalisant un double clic.">clic</span> / |
<span class="has-tooltip" title="L\'utilisateur veut voir les commentaires sur la page.">commentaire</span> |
</th> |
</tr> |
</thead> |
<tbody>'; |
if (isset($users_infos)) { |
foreach ($users_infos as $user) { |
$html .= '<tr> |
<td><input type="checkbox" name="users[]" value="'.$user['name'].'"/></td> |
<td>'. |
$user['name']. |
(empty($user['motto']) ? '' : '<br /><em><cite>'.$user['motto'].'</cite></em>'). |
'</td> |
<td><a href="mailto:'.$user['email'].'">'.$user['email'].'</a></td> |
<td>'.$user['signuptime'].'</td> |
<td>'. |
($user['has_pages'] ? '<a href="'.$user['pages_link'].'">' : ''). |
$user['pages_owner'].' / '.$user['pages_user']. |
($user['has_pages'] ? '</a>' : ''). |
'</td> |
<td>'.$user['revisioncount'].' / '.$user['changescount'].' / '.$user['doubleclickedit'].' / '.$user['show_comments'].'</td> |
</tr>'; |
} |
} |
$html .= '</tbody> |
</table> |
<div class="form-actions"> |
<button class="btn btn-danger has-tooltip" type="submit" name="action" value="deleteUser" title="Supprime les utilisateurs sélectionnés de la base de données"> |
Supprimer des utilisateurs |
</button> |
</div> |
</form>'; |
} |
} |
// Sortie |
echo isset($this->config['encoding']) ? mb_convert_encoding($html, $this->config['encoding'], 'iso-8859-15') : $html; |
// Functions & class |
class WikiAuthHttp { |
private $message_accueil; |
private $message_echec; |
private $identifiant; |
private $mot_de_passe; |
public function __construct($message_accueil, $message_echec, $identifiant, $mot_de_passe) { |
$this->message_accueil = $message_accueil; |
$this->message_echec = $message_echec; |
$this->identifiant = $identifiant; |
$this->mot_de_passe = $mot_de_passe; |
} |
public function authentifier() { |
$authentifie = $this->etreAutorise(); |
if ($authentifie === false) { |
$this->envoyerAuth(); |
} |
return $authentifie; |
} |
private function envoyerAuth() { |
header('HTTP/1.0 401 Unauthorized'); |
header('WWW-Authenticate: Basic realm="'.$this->message_accueil.'"'); |
header('Content-type: text/plain; charset=ISO-8859-15'); |
print $this->message_echec; |
exit(0); |
} |
private function etreAutorise() { |
$identifiant = $this->getAuthIdentifiant(); |
$mdp = $this->getAuthMotDePasse(); |
$autorisation = ($identifiant == $this->identifiant && $mdp == $this->mot_de_passe) ? true : false; |
return $autorisation; |
} |
private function getAuthIdentifiant() { |
$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null; |
return $id; |
} |
private function getAuthMotDePasse() { |
$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null; |
return $mdp; |
} |
} |
?> |
/branches/v1.0-pithivier/tools/actions/actions/recentchangesrss.php |
---|
New file |
0,0 → 1,173 |
<?php |
/* |
recentchangesrss.php |
Copyright 2003 David DELON |
Copyright 2005-2007 Didier LOISEAU |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
if ($this->GetMethod() != 'xml') { |
echo 'Pour obtenir le fil RSS des derniers changements, utilisez l\'adresse suivante: '; |
echo $this->Link($this->Href('xml')); |
return; |
} |
if (!function_exists("rssdiff")) { |
function rssdiff($tag,$idfirst,$idlast) { |
require_once 'includes/diff/side.class.php'; |
require_once 'includes/diff/diff.class.php'; |
require_once 'includes/diff/diffformatter.class.php'; |
$output=''; |
global $wiki; |
// TODO : cache ? |
if ($idfirst==$idlast) { |
$previousdiff=$wiki->LoadSingle("select id from ".$wiki->config["table_prefix"]."pages where tag = '".mysql_escape_string($tag)."' and id < $idfirst order by time desc limit 1"); |
if ($previousdiff) { |
$idlast=$previousdiff['id']; |
} |
else { |
return; |
} |
} |
$pageA = $wiki->LoadPageById($idfirst); |
$pageB = $wiki->LoadPageById($idlast); |
$bodyA = explode("\n", $pageA["body"]); |
$bodyB = explode("\n", $pageB["body"]); |
$added = array_diff($bodyA, $bodyB); |
$deleted = array_diff($bodyB, $bodyA); |
if (!isset($output)) $output = ''; |
$output .= "<br />\n"; |
$output .= "<br />\n"; |
$output .= "<b>Comparaison de <a href=\"".$wiki->href("", "", "time=".urlencode($pageA["time"]))."\">".$pageA["time"]."</a> à <a href=\"".$wiki->href("", "", "time=".urlencode($pageB["time"]))."\">".$pageB["time"]."</a></b><br />\n"; |
$wiki->RegisterInclusion($tag); |
if ($added) |
{ |
// remove blank lines |
$output .= "<br />\n<b>Ajouts:</b><br />\n"; |
$output .= "<div class=\"additions\">".(implode("\n", $added))."</div>"; |
} |
if ($deleted) |
{ |
$output .= "<br />\n<b>Suppressions:</b><br />\n"; |
$output .= "<div class=\"deletions\">".(implode("\n", $deleted))."</div>"; |
} |
$wiki->UnregisterLastInclusion(); |
if (!$added && !$deleted) |
{ |
$output .= "<br />\nPas de différences."; |
} |
return $output; |
} |
} |
if (isset($_GET['max']) && is_numeric($_GET['max'])) { |
$max = ($_GET['max'] < 1000) ? $_GET['max'] : 1000; |
} else if ($user = $this->GetUser()) { |
$max = $user["changescount"]; |
} else { |
$max = 50; |
} |
$pages = $this->LoadAll("SELECT id, tag, time, user, owner FROM ".$this->config["table_prefix"]."pages WHERE comment_on = '' ORDER BY time DESC LIMIT $max"); |
$last_users = $this->LoadAll('SELECT name, signuptime, motto FROM '.$this->GetConfigValue('table_prefix').'users ORDER BY signuptime DESC LIMIT '.$max); |
if ($pages || $last_users) { |
if (!($link = $this->GetParameter("link"))) $link=$this->GetConfigValue("root_page"); |
$output = '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n"; |
$output .= "<channel>\n"; |
$output .= "<atom:link href=\"".$this->Href("xml")."\" rel=\"self\" type=\"application/rss+xml\" />\n"; |
$output .= "<title> ". htmlspecialchars($this->GetConfigValue("wakka_name"), ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</title>\n"; |
$output .= "<link>" . $this->Href(false, $link) . "</link>\n"; |
$output .= "<description>$max derniers changements sur " . htmlspecialchars($this->GetConfigValue("wakka_name"), ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</description>\n"; |
$output .= "<language>fr</language>\n"; |
$output .= '<generator>WikiNi ' . WIKINI_VERSION . "</generator>\n"; |
$items = array(); |
if ($pages) { |
foreach ($pages as $page) { |
$page['diff'] = rssdiff($page["tag"], $page["id"], $page["id"]); |
$items[strtotime($page['time'])] = array('type' => 'page', 'content' => $page); |
} |
} |
if ($last_users) { |
foreach ($last_users as $user) { |
$items[strtotime($user['signuptime'])] = array('type' => 'user', 'content' => $user); |
} |
} |
krsort($items); |
foreach ($items as $item) { |
$type = $item['type']; |
if ($type == 'page') { |
$page = $item['content']; |
$output .= "<item>\n"; |
$output .= "<title>" . htmlspecialchars($page["tag"], ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</title>\n"; |
$output .= '<dc:creator>' . htmlspecialchars($page["user"], ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</dc:creator>\n"; |
$output .= '<pubDate>' . gmdate('D, d M Y H:i:s \G\M\T', strtotime($page['time'])) . "</pubDate>\n"; |
$output .= "<description>" . htmlspecialchars( |
'Modification de ' . $this->ComposeLinkToPage($page["tag"]). |
' (' . $this->ComposeLinkToPage($page["tag"], 'revisions', 'historique') . ')'. |
' --- par ' . $page["user"]. |
$page['diff']). |
"</description>\n"; |
$output .= "<dc:format>text/html</dc:format>"; |
$itemurl = $this->href(false, $page["tag"], "time=" . htmlspecialchars(rawurlencode($page["time"]), ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET)); |
$output .= '<guid>' . $itemurl . "</guid>\n"; |
$output .= "</item>\n"; |
} else if ($type == 'user') { |
$user = $item['content']; |
$itemurl = $this->Href('', $user['name']); |
$output .= '<item>'."\n"; |
$output .= '<title>'.'Utilisateur '.htmlspecialchars($user['name']).' - inscription le '.$user['signuptime'].'</title>'."\n"; |
$output .= '<link>'.$itemurl.'</link>'."\n"; |
$output .= '<pubDate>' . gmdate('D, d M Y H:i:s \G\M\T', strtotime($user['signuptime'])) . "</pubDate>\n"; |
$output .= '<description>'.'L\'utilisateur '.htmlspecialchars($user['name']).' s\'est inscrit le '.$user['signuptime']; |
if (!empty($user['motto'])) { |
$output .= ' avec pour devise "'.htmlspecialchars($user['motto']).'"'; |
} |
$output .= '</description>'."\n"; |
$output .= '<guid>'.$itemurl.'</guid>'."\n"; |
$output .= '</item>'."\n"; |
} |
} |
$output .= "</channel>\n"; |
$output .= "</rss>\n"; |
echo $output; |
} |
?> |
/branches/v1.0-pithivier/tools/handlers/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="handlers" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>Handlers supplementaires</label> |
<desc>Plugin fournissant de nouveaux handlers a Wikini.</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/handlers/index.php |
---|
New file |
0,0 → 1,8 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) { |
die ("accès direct interdit"); |
} |
?> |
/branches/v1.0-pithivier/tools/handlers/handlers/page/api.php |
---|
New file |
0,0 → 1,24 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Handler renvoyant au navigateur le contenu HTML de la page wiki. |
* |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
//Vérification de sécurité |
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) { |
die ("Accés direct interdit"); |
} |
$chemin = dirname(__FILE__).DIRECTORY_SEPARATOR.'../../rest/index.php'; |
if (!file_exists($chemin)) { |
$e = "Veuillez paramétrer l'emplacement de l'api : $chemin"; |
} else { |
include $chemin; |
} |
?> |
/branches/v1.0-pithivier/tools/handlers/handlers/page/raw_html_txt.php |
---|
New file |
0,0 → 1,31 |
<?php |
// declare(encoding='ISO-8859-1'); |
/** |
* Handler renvoyant au navigateur le contenu HTML de la page wiki avec un type mime text/plain. |
* |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
//Vérification de sécurité |
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) { |
die ("Accés direct interdit"); |
} |
if ($this->HasAccess('read')) { |
if (!$this->page) { |
return; |
} else { |
header("Content-type: text/plain"); |
echo $this->Format($this->page["body"], "wakka"); |
} |
} else { |
return; |
} |
?> |
/branches/v1.0-pithivier/tools/handlers/handlers/page/raw_html.php |
---|
New file |
0,0 → 1,40 |
<?php |
// declare(encoding='ISO-8859-1'); |
/** |
* Handler renvoyant au navigateur le contenu HTML de la page wiki. |
* |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
//Vérification de sécurité |
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) { |
die ("Accés direct interdit"); |
} |
if ($this->HasAccess("read")) { |
if (!$this->page) { |
return; |
} else { |
header("Content-type: text/html"); |
// Affichage de la page HTML |
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n"; |
$html .= '<html>'."\n"; |
$html .= ' <head>'."\n"; |
$html .= ' <title>'.$this->GetPageTag().'</title>'."\n"; |
$html .= ' </head>'."\n"; |
$html .= ' <body>'."\n"; |
$html .= $this->Format($this->page["body"], "wakka"); |
$html .= ' </body>'."\n"; |
$html .= '</html>'; |
echo $html; |
} |
} else { |
return; |
} |
?> |
/branches/v1.0-pithivier/tools/handlers/handlers/page/deletepage.php |
---|
New file |
0,0 → 1,110 |
<?php |
/* |
$Id: deletepage.php 858 2007-11-22 00:46:30Z nepote $ |
Copyright 2002 David DELON |
Copyright 2003 Eric FELDSTEIN |
Copyright 2004 Jean Christophe ANDRÉ |
Copyright 2006 Didier Loiseau |
Copyright 2007 Charles NÉPOTE |
Copyright 2013 Jean-Pascal MILCENT |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
// Vérification de sécurité |
if (!defined('WIKINI_VERSION')) |
{ |
die ('Accès direct interdit'); |
} |
print_r($_POST); |
if ($this->UserIsOwner() || $this->UserIsAdmin()) |
{ |
$deletePage = false; |
$tag = $this->GetPageTag(); |
if ($this->IsOrphanedPage($this->GetPageTag())) |
{ |
if ($_POST['confirme'] == 'Oui') { |
$deletePage = true; |
} |
else |
{ |
$pageLink = $this->Link($tag); |
$actionLink = $this->Href('deletepage'); |
$cancelLink = $this->Href(); |
$msg .= '<form action="'.$actionLink.'" method="post" style="display: inline">'."\n". |
'<p class="alert alert-warning">Voulez-vous supprimer définitivement la page '.$pageLink.' ?<br/>'."\n". |
'<button class="btn btn-danger" name="confirme" value="Oui" type="submit">Oui</button>'."\n". |
'<a class="btn" href="'.$cancelLink.'">Non</a>'."\n". |
'</p>'."\n". |
'</form>'."\n"; |
} |
} |
else |
{ |
if ($_POST['confirme'] == 'Oui') { |
$deletePage = true; |
} |
else |
{ |
$pageTag = $this->GetPageTag(); |
$tablePrefix = $this->config["table_prefix"]; |
$query = "SELECT DISTINCT from_tag ". |
"FROM {$tablePrefix}links ". |
"WHERE to_tag = '$pageTag'"; |
$linkedFrom = $this->LoadAll($query); |
$pageLink = $this->ComposeLinkToPage($this->tag, "", "", 0); |
$msg = '<p><em>Cette page n\'est pas orpheline.</em></p>'."\n". |
'<p>Pages ayant un lien vers '.$pageLink.' :</p>'."\n". |
'<ul>'."\n"; |
foreach ($linkedFrom as $page) |
{ |
$currentPageLink = $this->ComposeLinkToPage($page['from_tag'], '', '', 0); |
$msg .= '<li>'.$currentPageLink.'</li>'."\n"; |
} |
$msg .= '</ul>'."\n"; |
if ($this->UserIsAdmin()) { |
$actionLink = $this->Href('deletepage'); |
$cancelLink = $this->Href(); |
$msg .= '<form action="'.$actionLink.'" method="post" style="display: inline">'."\n". |
'<p class="alert alert-warning">En tant qu\'administrateur, vous pouvez supprimer malgré tout la page.<br/>'. |
'Cela laissera des liens de type "page à créer" dans les pages listées ci-dessus.<br/>'. |
'Voulez-vous supprimer définitivement la page '.$pageLink.' ?<br/>'."\n". |
'<button class="btn btn-danger" name="confirme" value="Oui" type="submit">Oui</button>'."\n". |
'<a class="btn" href="'.$cancelLink.'">Non</a>'."\n". |
'</p>'."\n". |
'</form>'."\n"; |
} |
} |
} |
if ($deletePage == true) { |
$this->DeleteOrphanedPage($tag); |
$this->LogAdministrativeAction($this->GetUserName(), "Suppression de la page ->\"\"" . $tag . "\"\""); |
$msg = '<p class="alert alert-info">'."La page ${tag} a été définitivement supprimée.".'</p>'; |
} |
} |
else |
{ |
$msg = '<p class="alert alert-warning"><em>'."Vous n'êtes pas le propriétaire de cette page.".'</em></p>'."\n"; |
} |
echo $this->Header(); |
echo '<div class="page">'."\n"; |
echo $msg; |
echo '</div>'."\n"; |
echo $this->Footer(); |
?> |
/branches/v1.0-pithivier/tools/cms_navigation/actions/header__.php |
---|
New file |
0,0 → 1,45 |
<?php |
if (!defined("WIKINI_VERSION")) { |
die ("accès direct interdit"); |
} |
if (version_compare(phpversion(), '5.0') < 0) { |
eval(' |
if (!function_exists("clone")) { |
function clone($object) { |
return $object; |
} |
} |
'); |
} |
$user = $this->GetUser(); |
$menu_page = $this->config["menu_page"]; |
$menu_page_admin = $this->config["menu_page_admin"]; |
if (isset($menu_page) and ($menu_page!="")) { |
// Ajout Menu de Navigation |
$wikiMenu = clone($this); |
$wikiMenu->tag = $menu_page; |
$wikiMenu->tag_admin = $menu_page_admin; |
$wikiMenu->SetPage($wikiMenu->LoadPage($wikiMenu->tag)); |
$menu_normal = $wikiMenu->Format($wikiMenu->page['body'], 'wakka'); |
$menu_admin = ''; |
if ($user) { |
$wikiMenu->tag = $menu_page_admin; |
$wikiMenu->SetPage($wikiMenu->LoadPage($wikiMenu->tag)); |
$menu_admin = $wikiMenu->Format($wikiMenu->page['body'], 'wakka'); |
} |
$plugin_output_new = preg_replace ('/<!-- NAVIGATION -->/', |
'<div id="navigation">'. |
' <div id="menu">'."\n". |
' <h2 id="titre_menu"><span id="menu_debut"> Menu </span></h2>'."\n". |
$menu_normal.$menu_admin. |
"\n".' <h2 id="titre_contenu"><span id="menu_fin"> Contenu </span></h2>'. |
"\n".' </div>'."\n". |
"\n".'</div>'."\n". |
'<div id="corps">'."\n", |
$plugin_output_new); |
} |
?> |
/branches/v1.0-pithivier/tools/cms_navigation/actions/footer__.php |
---|
New file |
0,0 → 1,12 |
<? |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
$menu_page=$this->config["menu_page"]; |
if (isset($menu_page) and ($menu_page!="")) { |
$plugin_output_new = preg_replace ('/<\/body>/','</div><!-- Fermeture du div corps -->'."\n".'</body>', $plugin_output_new); |
} |
?> |
/branches/v1.0-pithivier/tools/cms_navigation/wiki.php |
---|
New file |
0,0 → 1,24 |
<?php |
// Partie publique |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
$wakkaConfig['menu_page'] = 'PageMenu'; |
$wakkaConfig['menu_page_admin'] = 'PageMenuAdmin'; |
$wakkaConfig['banniere_page'] = 'PageBanniere'; |
// Surcharge fonction LoadRecentlyChanged : suppression remplissage cache car affecte le rendu de la navigation. |
$wikiClasses [] = 'Navigation'; |
$wikiClassesContent [] = ' |
function LoadRecentlyChanged($limit=50) |
{ |
$limit= (int) $limit; |
if ($pages = $this->LoadAll("select id, tag, time, user, owner from ".$this->config["table_prefix"]."pages where latest = \'Y\' and comment_on = \'\' order by time desc limit $limit")) |
{ |
return $pages; |
} |
} |
'; |
?> |
/branches/v1.0-pithivier/tools/cms_navigation/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="wknavigation" version="0.1" active="1"> |
<author>Philippe Drouot</author> |
<label>Navigation</label> |
<desc>Menu de navigation pour Wikini</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/cms_navigation/index.php |
---|
New file |
0,0 → 1,30 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) |
{ |
die ("accès direct interdit"); |
} |
buffer::str( |
' |
Ajouter les lignes suivantes dans le fichier wakka.css pour personnaliser |
votre menu de navigation : |
<br> |
<code> |
.page_table {margin: 0px; padding: 0px ; border: none; height: 100%;width: 100%;} |
<br> |
.menu_column {background-color: #FFFFCC; vertical-align: top; width: 150px; border: 1px solid #000000;padding:5px;} |
<br> |
.body_column {vertical-align: top; border: none;padding:5px;} |
<br> |
</code> |
' |
); |
?> |
/branches/v1.0-pithivier/tools/cms/desc.xml |
---|
New file |
0,0 → 1,6 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<plugin name="wkzcms" version="0.1" active="1"> |
<author>Jean-Pascal MILCENT</author> |
<label>Actions pour transformer Wikini en CMS</label> |
<desc>Deux actions permettant de transformer un Wikini en CMS.</desc> |
</plugin> |
/branches/v1.0-pithivier/tools/cms/index.php |
---|
New file |
0,0 → 1,10 |
<?php |
// Administration |
// Vérification de sécurité |
if (!defined("TOOLS_MANAGER")) |
{ |
die ("accès direct interdit"); |
} |
?> |
/branches/v1.0-pithivier/tools/cms/actions/identification.php |
---|
New file |
0,0 → 1,203 |
<?php |
if ($_REQUEST["action"] == "logout") { |
echo 'ici'; |
$this->LogoutUser(); |
$this->SetMessage("Vous êtes maintenant déconnecté !"); |
$this->Redirect($this->href()); |
} else if ($user = $this->GetUser()) { |
// is user trying to update? |
if ($_REQUEST["action"] == "update") |
{ |
$this->Query("update ".$this->config["table_prefix"]."users set ". |
"email = '".mysql_escape_string($_POST["email"])."', ". |
"doubleclickedit = '".mysql_escape_string($_POST["doubleclickedit"])."', ". |
"show_comments = '".mysql_escape_string($_POST["show_comments"])."', ". |
"revisioncount = '".mysql_escape_string($_POST["revisioncount"])."', ". |
"changescount = '".mysql_escape_string($_POST["changescount"])."', ". |
"motto = '".mysql_escape_string($_POST["motto"])."' ". |
"where name = '".$user["name"]."' limit 1"); |
$this->SetUser($this->LoadUser($user["name"])); |
// forward |
$this->SetMessage("Paramètres sauvegardés !"); |
$this->Redirect($this->href()); |
} |
if ($_REQUEST["action"] == "changepass") |
{ |
// check password |
$password = $_POST["password"]; |
if (preg_match("/ /", $password)) $error = "Les espaces ne sont pas permis dans les mots de passe."; |
else if (strlen($password) < 5) $error = "Password too short."; |
else if ($user["password"] != md5($_POST["oldpass"])) $error = "Mauvais mot de passe."; |
else |
{ |
$this->Query("update ".$this->config["table_prefix"]."users set "."password = md5('".mysql_escape_string($password)."') "."where name = '".$user["name"]."'"); |
$this->SetMessage("Mot de passe changé !"); |
$user["password"]=md5($password); |
$this->SetUser($user); |
$this->Redirect($this->href()); |
} |
} |
// user is logged in; display config form |
print($this->FormOpen()); |
?> |
<input type="hidden" name="action" value="update" /> |
<table> |
<tr> |
<td align="right"></td> |
<td>Hello, <?php echo $this->Link($user["name"]) ?>!</td> |
</tr> |
<tr> |
<td align="right">Votre adresse e-mail :</td> |
<td><input name="email" value="<?php echo htmlentities($user["email"]) ?>" size="40" /></td> |
</tr> |
<tr> |
<td align="right">Edition en Doublecliquant :</td> |
<td><input type="hidden" name="doubleclickedit" value="N" /><input type="checkbox" name="doubleclickedit" value="Y" <?php echo $user["doubleclickedit"] == "Y" ? "checked=\"checked\"" : "" ?> /></td> |
</tr> |
<tr> |
<td align="right">Montrer les commentaires par default :</td> |
<td><input type="hidden" name="show_comments" value="N" /><input type="checkbox" name="show_comments" value="Y" <?php echo $user["show_comments"] == "Y" ? "checked\"checked\"" : "" ?> /></td> |
</tr> |
<tr> |
<td align="right">Nombre maximum de derniers commentaires :</td> |
<td><input name="changescount" value="<?php echo htmlentities($user["changescount"]) ?>" size="40" /></td> |
</tr> |
<tr> |
<td align="right">Nombre maximum de versions :</td> |
<td><input name="revisioncount" value="<?php echo htmlentities($user["revisioncount"]) ?>" size="40" /></td> |
</tr> |
<tr> |
<td align="right">Votre devise :</td> |
<td><input name="motto" value="<?php echo htmlentities($user["motto"]) ?>" size="40" /></td> |
</tr> |
<tr> |
<td></td> |
<td><input type="submit" value="Mise à jour" /> <input type="button" value="Déconnection" onClick="document.location='<?php echo $this->href("", "", "action=logout"); ?>'" /></td> |
</tr> |
<?php |
print($this->FormClose()); |
print($this->FormOpen()); |
?> |
<input type="hidden" name="action" value="changepass" /> |
<tr> |
<td> </td> |
<td> </td> |
</tr> |
<tr> |
<td align="right"></td> |
<td><?php echo $this->Format("Changement de mot de passe"); ?></td> |
</tr> |
<?php |
if ($error) |
{ |
print("<tr><td></td><td><div class=\"error\">".$this->Format($error)."</div></td></tr>\n"); |
} |
?> |
<tr> |
<td align="right">Votre ancien mot de passe :</td> |
<td><input type="password" name="oldpass" size="40" /></td> |
</tr> |
<tr> |
<td align="right">Nouveau mot de passe :</td> |
<td><input type="password" name="password" size="40" /></td> |
</tr> |
<tr> |
<td></td> |
<td><input type="submit" value="Changer" size="40" /></td> |
</tr> |
</table> |
<?php |
print($this->FormClose()); |
} else { |
// user is not logged in |
// is user trying to log in or register? |
if ($_REQUEST["action"] == "login") |
{ |
// if user name already exists, check password |
if ($existingUser = $this->LoadUser($_POST["name"])) |
{ |
// check password |
if ($existingUser["password"] == md5($_POST["password"])) |
{ |
$this->SetUser($existingUser, $_POST["remember"]); |
$this->Redirect($this->href()); |
} |
else |
{ |
$error = "Mauvais mot de passe !"; |
} |
} |
// otherwise, create new account |
else |
{ |
$name = trim($_POST["name"]); |
$email = trim($_POST["email"]); |
$password = $_POST["password"]; |
$confpassword = $_POST["confpassword"]; |
// check if name is WikkiName style |
if (!$this->IsWikiName($name)) $error = "Votre nom d'utilisateur dois être formaté en NomWiki."; |
else if (!$email) $error = "Vous devez spécifier une adresse e-mail."; |
else if (!preg_match("/^.+?\@.+?\..+$/", $email)) $error = "Ceci ne ressemble pas à une adresse e-mail."; |
else if ($confpassword != $password) $error = "Les mots de passe n'étaient pas identiques"; |
else if (preg_match("/ /", $password)) $error = "Les espaces ne sont pas permis dans un mot de passe."; |
else if (strlen($password) < 5) $error = "Mot de passe trop court. Un mot de passe doit contenir au minimum 5 caractères alphanumériques."; |
else |
{ |
$this->Query("insert into ".$this->config["table_prefix"]."users set ". |
"signuptime = now(), ". |
"name = '".mysql_escape_string($name)."', ". |
"email = '".mysql_escape_string($email)."', ". |
"password = md5('".mysql_escape_string($_POST["password"])."')"); |
// log in |
$this->SetUser($this->LoadUser($name)); |
// forward |
$this->Redirect($this->href()); |
} |
} |
} |
print($this->FormOpen()); |
?> |
<input type="hidden" name="action" value="login" /> |
<table> |
<tr> |
<td align="right"></td> |
<td><?php echo $this->Format("Si vous êtes déjà enregistré, identifiez-vous ici"); ?></td> |
</tr> |
<?php |
if ($error) |
{ |
print("<tr><td></td><td><div class=\"error\">".$this->Format($error)."</div></td></tr>\n"); |
} |
?> |
<tr> |
<td align="right">Votre NomWiki :</td> |
<td><input name="name" size="40" value="<?php echo $name ?>" /></td> |
</tr> |
<tr> |
<td align="right">Mot de passe (5 caractères minimum) :</td> |
<td><input type="password" name="password" size="40" /> |
<input type="hidden" name="remember" value="0" /><input type="checkbox" name="remember" value="1" /> <?php echo $this->Format("Se souvenir de moi.") ?> </td> |
</tr> |
<tr> |
<td></td> |
<td><input type="submit" value="Identification" size="40" /></td> |
</tr> |
</table> |
<?php |
print($this->FormClose()); |
} |
?> |
/branches/v1.0-pithivier/tools/cms/actions/textsearch.php |
---|
New file |
0,0 → 1,111 |
<?php |
/* |
textsearch.php |
Copyright (c) 2002, Hendrik Mans <hendrik@mans.de> |
Copyright 2002, 2003 David DELON |
Copyright 2002 Patrick PAUL |
Copyright 2004 Jean Christophe ANDRÉ |
All rights reserved. |
Redistribution and use in source and binary forms, with or without |
modification, are permitted provided that the following conditions |
are met: |
1. Redistributions of source code must retain the above copyright |
notice, this list of conditions and the following disclaimer. |
2. Redistributions in binary form must reproduce the above copyright |
notice, this list of conditions and the following disclaimer in the |
documentation and/or other materials provided with the distribution. |
3. The name of the author may not be used to endorse or promote products |
derived from this software without specific prior written permission. |
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
// Contient les pages pouvant être affiché |
$tab_pages_ok = array('Accueil', 'Historique', 'Pierres', 'Materiaux', 'ProduitsSemiFinis', 'ProduitsFinis', 'Contacts', 'Telechargement'); |
// label à afficher devant la zone de saisie |
$label = $this->GetParameter('label', 'Ce que vous souhaitez chercher : '); |
// largeur de la zone de saisie |
$size = $this->GetParameter('size', '40'); |
// texte du bouton |
$button = $this->GetParameter('button', 'Chercher'); |
// texte à chercher |
$phrase = $this->GetParameter('phrase', false); |
// séparateur entre les éléments trouvés |
$separator = $this->GetParameter('separator', false); |
// se souvenir si c'était un paramètre de l'action ou du CGI |
$paramPhrase = $phrase; |
// récupérer le paramètre du CGI le cas échéant |
if (!$phrase) $phrase = $_REQUEST['phrase']; |
// s'il y a un paramètre d'action "phrase", on affiche uniquement le résultat |
// dans le cas contraire, présenter une zone de saisie |
if (!$paramPhrase) |
{ |
echo $this->FormOpen('', '', 'get'); |
if ($label) |
{ |
echo $this->Format($label), ' '; |
} |
echo '<input name="phrase" size="', htmlspecialchars($size), '" value="', htmlentities($phrase), '" />'; |
if ($button) |
{ |
echo ' <input type="submit" value="', htmlspecialchars($button), '" />'; |
} |
echo "\n", $this->FormClose(); |
} |
if ($phrase) { |
if ($results = $this->FullTextSearch($phrase)) { |
if ($separator) { |
$separator = htmlspecialchars($separator); |
if (!$paramPhrase) { |
echo '<p>Résultat(s) de la recherche de "', htmlspecialchars($phrase), '" : '; |
} |
foreach ($results as $i => $page) { |
if ($i > 0) echo $separator; |
echo $this->ComposeLinkToPage($page['tag']); |
} |
if (!$paramPhrase) { |
echo '</p>', "\n"; |
} |
} else { |
$ok = false; |
foreach ($results as $i => $page) { |
foreach ($tab_pages_ok as $tag) { |
if ($page["tag"] == $tag) { |
$ok = true; |
} |
} |
} |
if ($ok) { |
echo '<p><strong>Résultat(s) de la recherche de "', htmlspecialchars($phrase), '" :</strong></p>', "\n", |
'<ol>', "\n"; |
foreach ($results as $i => $page) { |
foreach ($tab_pages_ok as $tag) { |
if ($page["tag"] == $tag) { |
echo "<li>", $this->ComposeLinkToPage($page["tag"]), "</li>\n"; |
} |
} |
} |
echo "</ol>\n"; |
} |
} |
} else { |
if (!$paramPhrase) |
{ |
echo "<p>Aucun résultat pour \"", htmlspecialchars($phrase), "\". :-(</p>"; |
} |
} |
} |
?> |
/branches/v1.0-pithivier/tools/cms/actions/ajoutadmin.php |
---|
New file |
0,0 → 1,70 |
<?php |
// is user trying to log in or register? |
if ($_REQUEST["action"] == "ajout") { |
$name = trim($_POST["name"]); |
$email = trim($_POST["email"]); |
$password = $_POST["password"]; |
$confpassword = $_POST["confpassword"]; |
// check if name is WikkiName style |
if (! $this->IsWikiName($name) ) $error = "Votre nom d'utilisateur dois être formaté en NomWiki."; |
else if (!$email) $error = "Vous devez spécifier une adresse e-mail."; |
else if (!preg_match("/^.+?\@.+?\..+$/", $email)) $error = "Ceci ne ressemble pas à une adresse e-mail."; |
else if ($confpassword != $password) $error = "Les mots de passe n'étaient pas identiques"; |
else if (preg_match("/ /", $password)) $error = "Les espaces ne sont pas permis dans un mot de passe."; |
else if (strlen($password) < 5) $error = "Mot de passe trop court. Un mot de passe doit contenir au minimum 5 caractères alphanumériques."; |
else { |
$reussite = "L'administrateur a bien été ajouté !"; |
$this->Query( "insert into ".$this->config["table_prefix"]."users set ". |
"signuptime = now(), ". |
"name = '".mysql_escape_string($name)."', ". |
"email = '".mysql_escape_string($email)."', ". |
"password = md5('".mysql_escape_string($_POST["password"])."')"); |
// log in |
//$this->SetUser($this->LoadUser($name)); |
// forward |
//$this->Redirect($this->href()); |
} |
} |
print($this->FormOpen()); |
?> |
<input type="hidden" name="action" value="ajout" /> |
<table> |
<tr> |
<td align="left" colspan="2"><?php echo $this->Format("Pour ajouter un administrateur renseigner les champs ci-dessous:"); ?></td> |
</tr> |
<?php |
if ($error) { |
print('<tr><td></td><td><div class="error">'.$this->Format($error)."</div></td></tr>\n"); |
} |
if ($reussite) { |
echo('<tr><td></td><td><div class="reussite">'.$this->Format($reussite)."</div></td></tr>\n"); |
} |
?> |
<tr> |
<td align="right">Votre NomWiki :</td> |
<td><input name="name" size="40" value="<?php echo $name ?>" /></td> |
</tr> |
<tr> |
<td align="right">Mot de passe (5 caractères minimum) :</td> |
<td><input type="password" name="password" size="40" /></td> |
</tr> |
<tr> |
<td align="right">Confirmation du mot de passe :</td> |
<td><input type="password" name="confpassword" size="40" /></td> |
</tr> |
<tr> |
<td align="right">Adresse e-mail :</td> |
<td><input name="email" size="40" value="<?php echo $email ?>" /></td> |
</tr> |
<tr> |
<td></td> |
<td><input type="submit" value="Nouveau compte" size="40" /></td> |
</tr> |
</table> |
<?php |
print($this->FormClose()); |
?> |
/branches/v1.0-pithivier/tools/cms/actions/header__.php |
---|
New file |
0,0 → 1,23 |
<?php |
if (!defined("WIKINI_VERSION")) |
{ |
die ("accès direct interdit"); |
} |
$user = $this->GetUser(); |
$root_page = $this->ComposeLinkToPage($this->config["root_page"]); |
$navigation_links = $this->config["navigation_links"] ? $this->Format($this->config["navigation_links"]) : ""; |
$user_name = $this->Format($this->GetUserName()); |
$disconnect_link = $this->GetUser() ? '(<a href="' . $this->href('', 'Identification', 'action=logout') . "\">Déconnexion</a>)\n" : ''; |
if ($user) { |
$plugin_output_new = preg_replace ('/<!-- ADMIN -->/', |
'<div class="header">'. |
$root_page.' :: '.$navigation_links.' :: '.'Vous êtes '.$user_name.' '.$disconnect_link. |
'</div> |
<div class="page"', |
$plugin_output_new); |
} |
?> |
/branches/v1.0-pithivier/tools/. |
---|
New file |
Property changes: |
Added: svn:ignore |
+.buildpath |
+.project |