/branches/v1.0-pithivier/CHANGELOG |
---|
New file |
0,0 → 1,3 |
[2015-05-28] création branche 1.0-pithivier |
* premier branchement du trunk sans trop regarder |
* introduit la compatibilité avec smart-form |
/branches/v1.0-pithivier/api/scripts/modules/migration_smart_flore/MigrationSmartFlore.php |
---|
New file |
0,0 → 1,109 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* |
* @category wiki/smart'Flore |
* @package Scripts |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2015 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class MigrationSmartFlore extends Script { |
protected $mode_verbeux = false; |
// Paramêtres autorisées lors de l'appel au script en ligne de commande |
protected $parametres_autorises = array( |
'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter')); |
public function executer() { |
// L'obligation de mettre un paramètre -a donnée par le framework |
// n'a pas de sens, ça ne doit pas être obligatoire !!! |
$cmd = $this->getParametre('a'); |
$this->mode_verbeux = $this->getParametre('v'); |
switch($cmd) { |
case 'tous' : |
$this->migrerFormatSmartFlore(); |
break; |
default: |
} |
} |
protected function migrerFormatSmartFlore() { |
$sections = array("Fiche simplifiée Smart'flore", "Introduction","Comment la reconnaître ?","Son histoire","Ses usages","Écologie & habitat","Ce qu'il faut savoir...","Sources"); |
$nouvelles_sections = array( |
"Description" => array("Introduction","Comment la reconnaître ?","Son histoire"), |
"Usages" => array("Ses usages", "Ce qu'il faut savoir..."), |
"Écologie & habitat" => array("Écologie & habitat"), |
"Sources" => array("Sources") |
); |
$where_section = 'body NOT LIKE "'; |
$nouvelles_sections_k = array_keys($nouvelles_sections); |
foreach($nouvelles_sections_k as $nouvelle_section_k) { |
// Encore et toujours de l'iso (d'ailleurs si on ne fait pas de conversion la requete se comporte |
// très bizarrement et renvoie des résultats en trop une fois le script déjà exécuté) |
$where_section .= '%'.addslashes(ManipulationPage::convertirTexteAppliVersEncodageWiki($nouvelle_section_k)).'%'; |
} |
$where_section = $where_section.'"'; |
$this->wiki = Registre::get('wikiApi'); |
$requete = 'SELECT * FROM '.$this->wiki->GetConfigValue('table_prefix').'pages WHERE latest = "Y" '. |
'AND tag LIKE "SmartFlore%nt%" '. |
'AND '.$where_section; |
$pages = $this->wiki->LoadAll($requete); |
$pages_fmt = array(); |
echo "Nombre de pages à migrer : ".count($pages)."\n"; |
if(!empty($pages)) { |
$manipulation = new ManipulationPage($this->wiki, $pages[0]); |
echo "Migration en cours... \n"; |
foreach($pages as &$page) { |
$page_fmt = array(); |
// On capte l'entête de la page situé avant la première section pour le recopier |
// dans les nouvelles pages (il contient les backlinks et les noms) |
$delim_entete = strpos($page["body"], "==== Introduction ===="); |
if($delim_entete === false) { |
$delim_entete = strpos($page["body"], "====Introduction===="); |
} |
// Attention l'entete est en iso, il faut le convertir manuellement |
$entete = $manipulation->convertirTexteWikiVersEncodageAppli(substr($page["body"], 0, $delim_entete)); |
// Par contre ici consulterPageSectionsFormatees est gentil et fait la conversion vers l'encodage de l'appli pour nous |
$manipulation->consulterPageSectionsFormatees($page, implode(',', $sections)); |
// Fusion des anciennes sections dans les nouvelles |
foreach($nouvelles_sections as $nom_nouvelle_section => $sections_a_fusionner) { |
$page_fmt[$nom_nouvelle_section] = '===='.$nom_nouvelle_section.'===='; |
foreach($sections_a_fusionner as $section_a_fusionner) { |
if(isset($page['sections'][$section_a_fusionner])) { |
$page_fmt[$nom_nouvelle_section] .= $page['sections'][$section_a_fusionner]; |
} |
} |
} |
$corps = $entete."\n".implode("\n", $page_fmt); |
$manipulation->ecrirePage($page["tag"], $corps); |
} |
} |
echo "Migration effectuée \n"; |
// Le exit est là pour empecher l'affichage d'être pollué par les erreurs |
// dûes à certaines antédiluviennités de wikini |
exit; |
} |
// http://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php |
protected function endsWith($haystack, $needle) { |
// search forward starting from end minus needle length characters |
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE); |
} |
} |
/branches/v1.0-pithivier/api/scripts/configurations/config.defaut.ini |
---|
New file |
0,0 → 1,2 |
encodage_appli = "UTF-8" |
encodage_wiki = "ISO-8859-15" |
/branches/v1.0-pithivier/api/scripts/configurations |
---|
New file |
Property changes: |
Added: svn:ignore |
+config.ini |
/branches/v1.0-pithivier/api/scripts/framework.defaut.php |
---|
New file |
0,0 → 1,6 |
<?php |
// Inclusion du Framework |
// Renomer ce fichier en "framework.php" |
// Indiquer ci-dessous le chemin absolu vers le fichier autoload.inc.php de la bonne version du Framework |
require_once '/home/www/commun/framework/0.3/Framework.php'; |
?> |
/branches/v1.0-pithivier/api/scripts/bibliotheque/ManipulationPage.php |
---|
New file |
0,0 → 1,191 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Librairie de consultation d'une page wiki |
* |
* @category php 5.2 |
* @package wapi |
* @author Aurélien Peronnet < aurelien@tela-botanica.org> |
* @copyright Copyright (c) 2015, 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 ManipulationPage { |
// C'est dommage cette classe fait doublon avec la classe contenue dans le dossier rest |
// il faudrait faire une factorisation de tout ça |
private $wiki = null; |
private $pageNom = null; |
private $section = null; |
private $creerPage = false; |
private $templateDefaut = null; |
public function __construct($wiki, $pageNom) { |
// Cette construction bizarre sert à éviter des bugs issus du comportement de wikini |
$this->wiki = $wiki; |
global $wiki; |
$wiki = $this->wiki; |
$this->pageNom = $pageNom; |
$this->wiki->setPageCourante($this->pageNom); |
} |
public function consulterPage($page, $section = null) { |
$page = $this->wiki->LoadPage($page); |
if ($page != null) { |
$this->consulterPageSectionsFormatees($page, $section); |
} |
return $page; |
} |
public function consulterPageSectionsFormatees(&$page, $section) { |
// attention les wikis sont souvent en ISO ! |
$page["body"] = $this->convertirTexteWikiVersEncodageAppli($page['body']); |
if($section != null) { |
$sections_tab = explode(',', $section); |
if(count($sections_tab) > 1) { |
foreach($sections_tab as $section_t) { |
$page["sections"][$section_t] = $this->decouperPageSection($page["body"], $section_t); |
} |
} else { |
$page["body"] = $this->decouperPageSection($page["body"], $section); |
} |
} |
} |
public function decouperPageSection($contenu_page, $section) { |
$section_retour = ''; |
if (is_numeric($section)) { |
$section_retour = $this->getSectionParNumero($contenu_page, $section); |
} else { |
$section_retour = $this->getSectionParTitre($contenu_page, $section, false); |
} |
return $section_retour; |
} |
public function getSectionParNumero($page, $num) { |
preg_match_all('/(=[=]+[ ]*)(.[.^=]*)+[ ]*=[=]+[.]*/i', $page, $sections, PREG_OFFSET_CAPTURE); |
$sectionTxt = ''; |
$debut_section = 0; |
$lg_page = strlen($page); |
$fin_section = $lg_page; |
if ($num <= count($sections[1]) && $num > 0) { |
$debut_section = $sections[1][$num - 1][1]; |
$separateur = trim($sections[1][$num - 1][0]); |
$separateur_trouve = false; |
for ($i = $num; $i < count($sections[1]); $i++) { |
$fin_section = $sections[1][$i][1]; |
if($separateur == trim($sections[1][$i][0])) { |
$separateur_trouve = true; |
break; |
} |
} |
$fin_section = $separateur_trouve ? $fin_section : $lg_page; |
$sectionTxt = substr($page, $debut_section, $fin_section - $debut_section); |
} else { |
$sectionTxt = ''; |
} |
return $sectionTxt; |
} |
public function getSectionParTitre($page, $titre, $inclure_titre = false) { |
$section = ''; |
$reg_exp = '/((=[=]+)[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+)[.]*/i'; |
$match = preg_split($reg_exp, $page, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); |
if (count($match) > 3) { |
$section = explode(trim($match[2]), $match[3], 2); |
$section = $section[0]; |
$section = ($inclure_titre) ? $match[1].$section : $section; |
} elseif (count($match) == 3) { |
$section = explode(trim($match[1]), $match[2], 2); |
$section = $section[0]; |
$section = ($inclure_titre) ? $match[0].$section : $section; |
} else { |
$section = ""; |
} |
return $section; |
} |
private function creerPageAPartirTemplate($tag_page_a_creer, $tag_template) { |
$page_template = $this->consulterPage($tag_template); |
$corps_nouvelle_page = ($page_template != null) ? $page_template['body'] : ''; |
// si le template n'existe pas, la page créée sera vide |
$ecriture = $this->ecrirePage($tag_page_a_creer, $corps_nouvelle_page); |
return $ecriture; |
} |
/** |
* |
* Si la section demandée existe dans la page, renvoie un tableau contenant le numéro de caractère de |
* début de la section, après son titre, ainsi que la longeur du titre |
* @param string $titre de la section |
* @param string $page contenu de la page wiki |
* @return tableau associatif tel que décrit ici |
*/ |
private function getInformationsPositionSection($titre, $page) { |
preg_match_all('/(=[=]+[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+[.]*)/i', $page, $sections, PREG_OFFSET_CAPTURE); |
$longueur_titre = 0; |
$debut_section_apres_titre = 0; |
if (count($sections) > 0 && is_array($sections[0]) && count($sections[0][0]) >= 2) { |
$longueur_titre = mb_strlen($sections[0][0][0]); |
$debut_section_apres_titre = $sections[0][0][1] + $longueur_titre; |
} |
// ATTENTION : début contient le numéro du caractere de début de la section, après le titre |
$infos = array('debut' => $debut_section_apres_titre, |
'longueur_titre' => $longueur_titre |
); |
return $infos; |
} |
private function remplacerSection($titre_section, $section_remplacement, $corps) { |
// insertion d'un saut de ligne pour empêcher de casser le titre, lorsque le titre |
// suivant vient directement après la section, sans saut de ligne ni espace |
$section_remplacement = "\n".$section_remplacement."\n"; |
$section_page_originale = $this->getSectionParTitre($corps, $titre_section, true); |
$infos_section = $this->getInformationsPositionSection($titre_section, $corps); |
$nb_caracteres_a_remplacer = mb_strlen($section_page_originale) - $infos_section['longueur_titre']; |
$nouveau_contenu = substr_replace($corps, $section_remplacement, $infos_section['debut'], $nb_caracteres_a_remplacer); |
return $nouveau_contenu; |
} |
public function ecrirePage($nom_page, $contenu) { |
$texte_encode = $this->convertirTexteAppliVersEncodageWiki($contenu); |
$ecriture = $this->wiki->SavePage($nom_page, $texte_encode, "", true); |
return $ecriture; |
} |
public static function convertirTexteWikiVersEncodageAppli($texte) { |
if (Config::get('encodage_appli') != Config::get('encodage_wiki')) { |
$texte = mb_convert_encoding($texte,Config::get('encodage_appli'),Config::get('encodage_wiki')); |
} |
return $texte; |
} |
public static function convertirTexteAppliVersEncodageWiki($texte) { |
if (Config::get('encodage_appli') != Config::get('encodage_wiki')) { |
$texte = mb_convert_encoding($texte,Config::get('encodage_wiki'),Config::get('encodage_appli')); |
} |
return $texte; |
} |
} |
?> |
/branches/v1.0-pithivier/api/scripts/bibliotheque/WikiApi.php |
---|
New file |
0,0 → 1,54 |
<?php |
class WikiApi { |
private $page = null; |
private $wikiObjet = null; |
private $cheminWiki = null; |
private $cheminApi = null; |
public function __construct($cheminWiki, $cheminApi) { |
$this->cheminWiki = $cheminWiki; |
$this->cheminApi = $cheminApi; |
$this->initialiser(); |
} |
private function initialiser() { |
if ($this->page != null) { |
$_REQUEST['wiki'] = $this->page; |
} |
ini_set('include_path',ini_get('include_path').':'.$this->cheminWiki.':'); |
chdir($this->cheminWiki); |
include 'api.php'; |
$this->wikiObjet = $wiki; |
chdir($this->cheminApi); |
} |
public function setPageCourante($page) { |
$this->page = $page; |
} |
public function chargerClasseWiki($classe) { |
$chemins = array($this->cheminWiki.'/tools/', $this->cheminWiki.'/formatters/'); |
foreach ($chemins as $chemin) { |
$chemin = $chemin.$classe.'.php'; |
if (file_exists($chemin)) { |
require_once $chemin; |
$classeTrouvee = true; |
} |
} |
} |
public function __call($methodeNom, $arguments) { |
if ($this->wikiObjet == null) { |
$this->initialiser(); |
} |
chdir($this->cheminWiki); |
$retour = call_user_func_array(array($this->wikiObjet, $methodeNom), $arguments); |
chdir($this->cheminApi); |
return $retour; |
} |
} |
?> |
/branches/v1.0-pithivier/api/scripts/cli.php |
---|
New file |
0,0 → 1,44 |
<?php |
// Encodage : UTF-8 |
// +-------------------------------------------------------------------------------------------------------------------+ |
/** |
* Initialise le chargement et l'exécution des scripts |
* |
* Lancer ce fichier en ligne de commande avec : |
* <code>/opt/lampp/bin/php cli.php mon_script -a test</code> |
* |
* @category CEL |
* @package Scripts |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
// Le fichier Framework.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')); |
// Création de l'objet Wiki qui sera transmis au service via le Registre |
Registre::set('cheminApi', getcwd()); |
Registre::set('cheminWiki', realpath(dirname(__FILE__).DS.'..'.DS.'..'.DS).DS); |
//require_once(getcwd().DS.'bibliotheque'.DS.'WikiApi.php'); |
$wikiApi = new WikiApi(Registre::get('cheminWiki'), Registre::get('cheminApi')); |
Registre::set('wikiApi', $wikiApi); |
// Initialisation et lancement du script appelé en ligne de commande |
Cli::executer(); |
} |
/branches/v1.0-pithivier/api/scripts |
---|
New file |
Property changes: |
Added: svn:ignore |
+framework.php |
/branches/v1.0-pithivier/api/rest/configurations/config.defaut.ini |
---|
New file |
0,0 → 1,36 |
; 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" |
encodage_wiki = "ISO-8859-15" |
; +------------------------------------------------------------------------------------------------------+ |
; Débogage |
; Indique si oui ou non on veut afficher le débogage. |
debogage = true |
; Indique sous quelle forme les méssages de débogage doivent s'afficher : |
; - "php:Debug::MODE_ECHO" : le message est affiché en utilisant echo |
; - "php:Debug::MODE_NOTICE" : le message est affiché en utilisant une erreur de type notice |
; - "php:Debug::MODE_ENTETE_HTTP" : les messages sont envoyés dans un entête HTTP "X_REST_DEBOGAGE". |
; - "Autre valeur" : les messages sont formatés puis retournés par la méthode de débogage utilisée. |
debogage_mode = "php:Debug::MODE_ENTETE_HTTP" |
; Indique si oui ou non on veut lancer le chronométrage |
chronometrage = false |
; +------------------------------------------------------------------------------------------------------+ |
; Spécifique aux services |
serveur.baseURL = "/yeswiki/api/rest/" |
serveur.baseAlternativeURL = "/yeswiki/api/rest/" |
/branches/v1.0-pithivier/api/rest/configurations |
---|
New file |
Property changes: |
Added: svn:ignore |
+config.ini |
/branches/v1.0-pithivier/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/api/rest/.htaccess |
---|
New file |
0,0 → 1,9 |
<files *.ini> |
order deny,allow |
deny from all |
</files> |
RewriteEngine On |
RewriteCond %{REQUEST_FILENAME} !-d |
RewriteCond %{REQUEST_FILENAME} !-f |
RewriteRule ^.*$ index.php/ |
/branches/v1.0-pithivier/api/rest/bibliotheque/WikiApi.php |
---|
New file |
0,0 → 1,41 |
<?php |
class WikiApi { |
private $page = null; |
private $wikiObjet = null; |
private $cheminWiki = null; |
private $cheminApi = null; |
public function __construct($cheminWiki, $cheminApi) { |
$this->cheminWiki = $cheminWiki; |
$this->cheminApi = $cheminApi; |
} |
private function initialiser() { |
if ($this->page != null) { |
$_REQUEST['wiki'] = $this->page; |
} |
ini_set('include_path',ini_get('include_path').':'.$this->cheminWiki.':'); |
chdir($this->cheminWiki); |
include 'api.php'; |
$this->wikiObjet = $wiki; |
chdir($this->cheminApi); |
} |
public function setPageCourante($page) { |
$this->page = $page; |
} |
public function __call($methodeNom, $arguments) { |
if ($this->wikiObjet == null) { |
$this->initialiser(); |
} |
chdir($this->cheminWiki); |
$retour = call_user_func_array(array($this->wikiObjet, $methodeNom), $arguments); |
chdir($this->cheminApi); |
return $retour; |
} |
} |
?> |
/branches/v1.0-pithivier/api/rest/index.php |
---|
New file |
0,0 → 1,52 |
<?php |
// Permet d'afficher le temps d'execution du service |
$temps_debut = (isset($_GET['chrono']) && $_GET['chrono'] == 1) ? microtime(true) : ''; |
// +-------------------------------------------------------------------------------------------------------------------+ |
/** |
* Serveur REST Wikini |
* |
* Initialise le chargement et l'exécution des services web. |
* Encodage : UTF-8 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Tela-Botanica 1999-2008 |
* @licence GPL v3 & CeCILL v2 |
*/ |
// 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'] : ''; |
// Création de l'objet Wiki qui sera transmis au service via le Registre |
Registre::set('cheminApi', getcwd()); |
Registre::set('cheminWiki', realpath(dirname(__FILE__).DS.'..'.DS.'..'.DS).DS); |
$wikiApi = new WikiApi(Registre::get('cheminWiki'), Registre::get('cheminApi')); |
Registre::set('wikiApi', $wikiApi); |
// 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/api/rest/modules/0.5/Pages.php |
---|
New file |
0,0 → 1,371 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Web service de consultation d'un page wiki |
* |
* @category php 5.2 |
* @package wapi |
* @author Aurélien Peronnet < aurelien@tela-botanica.org> |
* @author Jean-Pascal Milcent < jpm@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 Pages extends Service { |
private $wiki = null; |
private $pageNom = null; |
private $section = null; |
private $creerPage = false; |
private $templateDefaut = null; |
private $retour = 'txt'; |
private $formats_retour = array('text/plain','text/html'); |
private $format_texte; |
const MIME_JSON = 'application/json'; |
const MIME_HTML = 'text/html'; |
const MIME_TEXT = 'text/plain'; |
public function consulter($ressources, $parametres) { |
try { |
$this->definirValeurParDefautDesParametres(); |
$this->verifierParametres($parametres); |
$this->analyserParametres($ressources, $parametres); |
$page = $this->consulterPage($this->pageNom, $this->section); |
if($page == null && $this->creerPage) { |
$this->creerPageAPartirTemplate($this->pageNom, $this->templateDefaut); |
$page = $this->consulterPage($this->pageNom, $this->section); |
} |
$retour = $this->formaterRetour($page); |
$this->envoyerContenuJson($retour); |
} catch (Exception $e) { |
$this->envoyerErreur($e); |
} |
} |
private function definirValeurParDefautDesParametres() { |
if (isset($this->parametres['txt_format']) == false) { |
$this->parametres['txt_format'] = 'text/plain'; |
} |
} |
private function verifierParametres($parametres) { |
$erreurs = array(); |
if (isset($parametres['txt_format'])) { |
if(!in_array($parametres['txt_format'], $this->formats_retour)) { |
$message = "La valeur du paramètre 'txt.format' peut seulement prendre les valeurs : text/plain et text/html."; |
$erreurs[] = $message; |
} |
} |
if (isset($parametres['txt_section_position']) && !is_numeric($parametres['txt_section_position'])) { |
$message = "La valeur du paramètre 'txt.section.position' peut seulement prendre des valeurs numeriques"; |
$erreurs[] = $message; |
} |
if (isset($parametres['txt_section_titre']) && trim($parametres['txt_section_titre']) == '') { |
$message = "La valeur du paramètre 'txt.section.titre' ne peut pas être vide si celui-ci est présent"; |
$erreurs[] = $message; |
} |
if (isset($parametres['txt_section_titre']) && trim($parametres['txt_section_titre']) == '') { |
$message = "La valeur du paramètre 'txt.section.titre' ne peut pas être vide si celui-ci est présent"; |
$erreurs[] = $message; |
} |
if (isset($parametres['txt_template']) && trim($parametres['txt_template']) == '') { |
$message = "La valeur du paramètre 'txt_template' ne peut pas être vide si celui-ci est présent"; |
$erreurs[] = $message; |
} |
if (count($erreurs) > 0) { |
$message = implode('<br />', $erreurs); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
} |
private function analyserParametres($ressources, $parametres) { |
$this->pageNom = $ressources[0]; |
if (isset($parametres['txt_section_titre'])) { |
$this->section = $parametres['txt_section_titre']; |
} |
if (isset($parametres['txt_section_position'])) { |
$this->section = $parametres['txt_section_position']; |
} |
if (isset($parametres['txt_format'])) { |
$this->retour = $parametres['txt_format']; |
} |
if (isset($parametres['txt_template'])) { |
$this->creerPage = true; |
$this->templateDefaut = $parametres['txt_template']; |
} |
} |
private function consulterPage($page, $section = null) { |
$this->wiki = Registre::get('wikiApi'); |
// La variable globale wiki est déclarée par les wiki et leurs plugins |
// un bug lié à certains plugin impose de la redéclarer et la réaffecter |
global $wiki; |
$wiki = $this->wiki; |
$this->wiki->setPageCourante($this->pageNom); |
$page = $this->wiki->LoadPage($page); |
if ($page != null) { |
// attention les wikis sont souvent en ISO ! |
$page["body"] = $this->convertirTexteWikiVersEncodageAppli($page['body']); |
if($section != null) { |
$sections_tab = explode(',', $section); |
if(count($sections_tab) > 1) { |
foreach($sections_tab as $section_t) { |
$page["sections"][$section_t] = $this->decouperPageSection($page["body"], $section_t); |
} |
} else { |
$page["body"] = $this->decouperPageSection($page["body"], $section); |
} |
} |
} |
return $page; |
} |
private function decouperPageSection($contenu_page, $section) { |
$section_retour = ''; |
if (is_numeric($section)) { |
$section_retour = $this->getSectionParNumero($contenu_page, $section); |
} else { |
$section_retour = $this->getSectionParTitre($contenu_page, $section, false); |
} |
return $section_retour; |
} |
public function getSectionParNumero($page, $num) { |
preg_match_all('/(=[=]+[ ]*)(.[.^=]*)+[ ]*=[=]+[.]*/i', $page, $sections, PREG_OFFSET_CAPTURE); |
$sectionTxt = ''; |
$debut_section = 0; |
$lg_page = strlen($page); |
$fin_section = $lg_page; |
if ($num <= count($sections[1]) && $num > 0) { |
$debut_section = $sections[1][$num - 1][1]; |
$separateur = trim($sections[1][$num - 1][0]); |
$separateur_trouve = false; |
for ($i = $num; $i < count($sections[1]); $i++) { |
$fin_section = $sections[1][$i][1]; |
if($separateur == trim($sections[1][$i][0])) { |
$separateur_trouve = true; |
break; |
} |
} |
$fin_section = $separateur_trouve ? $fin_section : $lg_page; |
$sectionTxt = substr($page, $debut_section, $fin_section - $debut_section); |
} else { |
$sectionTxt = ''; |
} |
return $sectionTxt; |
} |
public function getSectionParTitre($page, $titre, $inclure_titre = false) { |
$section = ''; |
$reg_exp = '/((=[=]+)[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+)[.]*/i'; |
$match = preg_split($reg_exp, $page, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); |
if (count($match) > 3) { |
$section = explode(trim($match[2]), $match[3], 2); |
$section = $section[0]; |
$section = ($inclure_titre) ? $match[1].$section : $section; |
} elseif (count($match) == 3) { |
$section = explode(trim($match[1]), $match[2], 2); |
$section = $section[0]; |
$section = ($inclure_titre) ? $match[0].$section : $section; |
} else { |
$section = ""; |
} |
return $section; |
} |
private function formaterRetour($page) { |
$mime = null; |
$texte = ''; |
switch ($this->retour) { |
case self::MIME_HTML: |
$texte = $this->wiki->Format($page["body"], "wakka"); |
if(!empty($page["sections"])) { |
foreach($page["sections"] as &$page_section) { |
$page_section = $this->wiki->Format($page_section, "wakka"); |
} |
} |
$mime = self::MIME_HTML; |
break; |
default: |
$texte = $page["body"]; |
$mime = self::MIME_TEXT; |
} |
$url = $this->wiki->Href("", $this->pageNom); |
$retour = array('id' => $this->pageNom, |
'titre' => $this->pageNom, |
'mime' => $mime, |
'texte' => $texte, |
'sections' => $page["sections"], |
'href' => $url); |
return $retour; |
} |
private function creerPageAPartirTemplate($tag_page_a_creer, $tag_template) { |
$page_template = $this->consulterPage($tag_template); |
$corps_nouvelle_page = ($page_template != null) ? $page_template['body'] : ''; |
// si le template n'existe pas, la page créée sera vide |
$ecriture = $this->ecrirePage($tag_page_a_creer, $corps_nouvelle_page); |
return $ecriture; |
} |
public function ajouter($ressources, $requeteDonnees) { |
return $this->modifier($ressources, $requeteDonnees); |
} |
public function modifier($ressources, $requeteDonnees) { |
$requeteDonnees['pageTag'] = $ressources[0]; |
$this->verifierParametresEcriture($requeteDonnees); |
$this->analyserParametresEcriture($requeteDonnees); |
$this->wiki = Registre::get('wikiApi'); |
$this->wiki->setPageCourante($this->pageNom); |
$texte = $requeteDonnees['pageContenu']; |
$page = $this->consulterPage($this->pageNom); |
if ($page != null) { |
$corps = ($this->section != null) ? $this->remplacerSection($this->section, $texte, $page['body']) : $texte; |
} else { |
$corps = $texte; |
} |
$ecriture = $this->ecrirePage($this->pageNom, $corps); |
if ($ecriture) { |
$this->envoyerCreationEffectuee(); |
} else { |
$message = 'Impossible de créer ou modifier la page'; |
$code = RestServeur::HTTP_CODE_ERREUR; |
throw new Exception($message, $code); |
} |
return $ecriture; |
} |
/** |
* |
* Si la section demandée existe dans la page, renvoie un tableau contenant le numéro de caractère de |
* début de la section, après son titre, ainsi que la longeur du titre |
* @param string $titre de la section |
* @param string $page contenu de la page wiki |
* @return tableau associatif tel que décrit ici |
*/ |
private function getInformationsPositionSection($titre, $page) { |
preg_match_all('/(=[=]+[ ]*'.preg_quote(trim($titre), '/').'[ ]*=[=]+[.]*)/i', $page, $sections, PREG_OFFSET_CAPTURE); |
$longueur_titre = 0; |
$debut_section_apres_titre = 0; |
if (count($sections) > 0 && is_array($sections[0]) && count($sections[0][0]) >= 2) { |
$longueur_titre = mb_strlen($sections[0][0][0]); |
$debut_section_apres_titre = $sections[0][0][1] + $longueur_titre; |
} |
// ATTENTION : début contient le numéro du caractere de début de la section, après le titre |
$infos = array('debut' => $debut_section_apres_titre, |
'longueur_titre' => $longueur_titre |
); |
return $infos; |
} |
private function remplacerSection($titre_section, $section_remplacement, $corps) { |
// insertion d'un saut de ligne pour empêcher de casser le titre, lorsque le titre |
// suivant vient directement après la section, sans saut de ligne ni espace |
$section_remplacement = "\n".$section_remplacement."\n"; |
$section_page_originale = $this->getSectionParTitre($corps, $titre_section, true); |
$infos_section = $this->getInformationsPositionSection($titre_section, $corps); |
$nb_caracteres_a_remplacer = mb_strlen($section_page_originale) - $infos_section['longueur_titre']; |
$nouveau_contenu = substr_replace($corps, $section_remplacement, $infos_section['debut'], $nb_caracteres_a_remplacer); |
return $nouveau_contenu; |
} |
private function ecrirePage($nom_page, $contenu) { |
$texte_encode = $this->convertirTexteAppliVersEncodageWiki($contenu); |
$ecriture = $this->wiki->SavePage($nom_page, $texte_encode, "", true); |
return $ecriture; |
} |
private function analyserParametresEcriture($parametres) { |
$this->pageNom = $parametres['pageTag']; |
$this->section = isset($parametres['pageSectionTitre']) ? $parametres['pageSectionTitre'] : null; |
} |
private function verifierParametresEcriture($parametres) { |
$erreurs = array(); |
if (!isset($parametres['pageContenu'])) { |
$message = "Le paramètre pageContenu est obligatoire"; |
$erreurs[] = $message; |
} |
if (!isset($parametres['pageTag']) || trim($parametres['pageTag']) == '') { |
$message = "Le paramètre pageTag est obligatoire"; |
$erreurs[] = $message; |
} |
if (isset($parametres['pageSectionTitre']) && $parametres['pageSectionTitre'] == '') { |
$message = "Le paramètre pageSectionTitre ne doit pas être vide s'il est présent"; |
$erreurs[] = $message; |
} |
if (count($erreurs) > 0) { |
$message = implode('<br />', $erreurs); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
} |
private function convertirTexteWikiVersEncodageAppli($texte) { |
if (Config::get('encodage_appli') != Config::get('encodage_wiki')) { |
$texte = mb_convert_encoding($texte,Config::get('encodage_appli'),Config::get('encodage_wiki')); |
} |
return $texte; |
} |
private function convertirTexteAppliVersEncodageWiki($texte) { |
if (Config::get('encodage_appli') != Config::get('encodage_wiki')) { |
$texte = mb_convert_encoding($texte,Config::get('encodage_wiki'),Config::get('encodage_appli')); |
} |
return $texte; |
} |
} |
?> |
/branches/v1.0-pithivier/api/rest/modules/0.5/Service.php |
---|
New file |
0,0 → 1,45 |
<?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 $contenu; |
} |
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"); |
} |
} |
public function envoyerContenuJson($donnees = null, $encodage = 'utf-8') { |
$contenu = json_encode($donnees); |
$this->envoyerEnteteContenu($encodage, 'application/json'); |
echo $contenu; |
exit; |
} |
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); |
} |
protected function envoyerErreur($e) { |
RestServeur::envoyerEnteteStatutHttp($e->getCode()); |
echo $e->getMessage(); |
} |
protected function envoyerCreationEffectuee() { |
header('HTTP/1.1 201 Created'); |
echo "OK"; |
} |
} |
?> |
/branches/v1.0-pithivier/api/rest |
---|
New file |
Property changes: |
Added: svn:ignore |
+framework.php |
/branches/v1.0-pithivier/api.php |
---|
New file |
0,0 → 1,1748 |
<?php |
/* |
$Id: wakka.php 864 2007-11-28 12:44:52Z nepote $ |
Copyright (c) 2002, Hendrik Mans <hendrik@mans.de> |
Copyright 2003 Carlo Zottmann |
Copyright 2002, 2003, 2005 David DELON |
Copyright 2002, 2003, 2004, 2006 Charles N?POTE |
Copyright 2002, 2003 Patrick PAUL |
Copyright 2003 Eric DELORD |
Copyright 2003 Eric FELDSTEIN |
Copyright 2004-2006 Jean-Christophe ANDR? |
Copyright 2005-2006 Didier LOISEAU |
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. |
*/ |
/* |
Yes, most of the formatting used in this file is HORRIBLY BAD STYLE. However, |
most of the action happens outside of this file, and I really wanted the code |
to look as small as what it does. Basically. Oh, I just suck. :) |
*/ |
// do not change this line, you fool. In fact, don't change anything! Ever! |
define("WAKKA_VERSION", "0.1.1"); |
define("WIKINI_VERSION", "0.5.0"); |
require 'includes/constants.php'; |
include 'includes/urlutils.inc.php'; |
// start the compute time |
list($g_usec, $g_sec) = explode(" ",microtime()); |
define ("t_start", (float)$g_usec + (float)$g_sec); |
$t_SQL=0; |
class Wiki |
{ |
var $dblink; |
var $page; |
var $tag; |
var $parameter = array(); |
var $queryLog = array(); |
var $interWiki = array(); |
var $VERSION; |
var $CookiePath = '/'; |
var $inclusions = array(); |
/** |
* an array containing all the actions that are implemented by an object |
* @access private |
*/ |
var $actionObjects; |
// LinkTrackink |
var $isTrackingLinks = false; |
var $linktable = array(); |
var $pageCache = array(); |
var $_groupsCache = array(); |
var $_actionsAclsCache = array(); |
// constructor |
function Wiki($config) |
{ |
$this->config = $config; |
// some host do not allow mysql_pconnect |
$this->dblink = @mysql_connect ( |
$this->config["mysql_host"], |
$this->config["mysql_user"], |
$this->config["mysql_password"]); |
if ($this->dblink) |
{ |
if (!@mysql_select_db($this->config["mysql_database"], $this->dblink)) |
{ |
@mysql_close($this->dblink); |
$this->dblink = false; |
} |
} |
$this->VERSION = WAKKA_VERSION; |
// determine le chemin pour les cookies |
$a = parse_url($this->GetConfigValue('base_url')); |
$this->CookiePath = dirname($a['path']); |
// Fixe la gestion des cookie sous les OS utilisant le \ comme s?parteur de chemin |
$this->CookiePath = str_replace("\\","/",$this->CookiePath); |
// ajoute un '/' terminal sauf si on est ? la racine web |
if ($this->CookiePath != '/') $this->CookiePath .= '/'; |
} |
// DATABASE |
function Query($query) |
{ |
if($this->GetConfigValue("debug")) $start = $this->GetMicroTime(); |
if (!$result = mysql_query($query, $this->dblink)) |
{ |
ob_end_clean(); |
die("Query failed: ".$query." (".mysql_error().")"); |
} |
if($this->GetConfigValue("debug")) |
{ |
$time = $this->GetMicroTime() - $start; |
$this->queryLog[] = array( |
"query" => $query, |
"time" => $time); |
} |
return $result; |
} |
function LoadSingle($query) { |
if ($data = $this->LoadAll($query)) return $data[0]; |
return null; |
} |
function LoadAll($query) |
{ |
$data=array(); |
if ($r = $this->Query($query)) |
{ |
while ($row = mysql_fetch_assoc($r)) $data[] = $row; |
mysql_free_result($r); |
} |
return $data; |
} |
// MISC |
function GetMicroTime() |
{ |
list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); |
} |
function IncludeBuffered($filename, $notfoundText = "", $vars = "", $path = "") |
{ |
if ($path) $dirs = explode(":", $path); |
else $dirs = array(""); |
foreach($dirs as $dir) |
{ |
if ($dir) $dir .= "/"; |
$fullfilename = $dir.$filename; |
if (file_exists($fullfilename)) |
{ |
if (is_array($vars)) extract($vars); |
ob_start(); |
include($fullfilename); |
$output = ob_get_contents(); |
ob_end_clean(); |
return $output; |
} |
} |
if ($notfoundText) return $notfoundText; |
else return false; |
} |
// VARIABLES |
function GetPageTag() { return $this->tag; } |
function GetPageTime() { return $this->page["time"]; } |
function GetMethod() { return $this->method; } |
function GetConfigValue($name) { return isset($this->config[$name]) ? trim($this->config[$name]) : ''; } |
function GetWakkaName() { return $this->GetConfigValue("wakka_name"); } |
function GetWakkaVersion() { return $this->VERSION; } |
function GetWikiNiVersion() { return WIKINI_VERSION; } |
/** |
* Retrieves all the triples that match some criteria. |
* This allows to search triples by their approximate resource or property names. |
* The allowed operators are the sql LIKE and the sql = |
* @param string $resource The resource of the triples |
* @param string $property The property of the triple to retrieve or null |
* @param string $res_op The operator of comparison between the effective resource and $resource (default: 'LIKE') |
* @param string $prop_op The operator of comparison between the effective property and $property (default: '=') |
* @return array The list of all the triples that match the asked criteria |
*/ |
function GetMatchingTriples($resource, $property = null, $res_op = 'LIKE', $prop_op = '=') |
{ |
static $operators = array('=', 'LIKE'); // we might want to add other operators later |
$res_op = strtoupper($res_op); |
if (!in_array($res_op, $operators)) $res_op = '='; |
$sql = 'SELECT * FROM ' . $this->GetConfigValue('table_prefix') . 'triples ' |
. 'WHERE resource ' . $res_op . ' "' . addslashes($resource) . '"'; |
if ($property !== null) |
{ |
$prop_op = strtoupper($prop_op); |
if (!in_array($prop_op, $operators)) $prop_op = '='; |
$sql .= ' AND property ' . $prop_op . ' "' . addslashes($property) . '"'; |
} |
return $this->LoadAll($sql); |
} |
/** |
* Retrieves all the values for a given couple (resource, property) |
* @param string $resource The resource of the triples |
* @param string $property The property of the triple to retrieve |
* @param string $re_prefix The prefix to add to $resource (defaults to THISWIKI_PREFIX) |
* @param string $prop_prefix The prefix to add to $property (defaults to WIKINI_VOC_PREFIX) |
* @return array An array of the retrieved values, in the form |
* array( |
* 0 => array(id = 7 , 'value' => $value1), |
* 1 => array(id = 34, 'value' => $value2), |
* ... |
* ) |
*/ |
function GetAllTriplesValues($resource, $property, $re_prefix = THISWIKI_PREFIX, $prop_prefix = WIKINI_VOC_PREFIX) |
{ |
$sql = 'SELECT id, value FROM ' . $this->GetConfigValue('table_prefix') . 'triples ' |
. 'WHERE resource = "' . addslashes($re_prefix . $resource) . '" ' |
. 'AND property = "' . addslashes($prop_prefix . $property) . '" '; |
return $this->LoadAll($sql); |
} |
/** |
* Retrieves a single value for a given couple (resource, property) |
* @param string $resource The resource of the triples |
* @param string $property The property of the triple to retrieve |
* @param string $re_prefix The prefix to add to $resource (defaults to <tt>THISWIKI_PREFIX</tt>) |
* @param string $prop_prefix The prefix to add to $property (defaults to <tt>WIKINI_VOC_PREFIX</tt>) |
* @return string The value corresponding to ($resource, $property) or null if |
* there is no such couple in the triples table. |
*/ |
function GetTripleValue($resource, $property, $re_prefix = THISWIKI_PREFIX, $prop_prefix = WIKINI_VOC_PREFIX) |
{ |
$res = $this->GetAllTriplesValues($resource, $property, $re_prefix, $prop_prefix); |
if ($res) return $res[0]['value']; |
return null; |
} |
/** |
* Checks whether a triple exists or not |
* @param string $resource The resource of the triple to find |
* @param string $property The property of the triple to find |
* @param string $value The value of the triple to find |
* @param string $re_prefix The prefix to add to $resource (defaults to <tt>THISWIKI_PREFIX</tt>) |
* @param string $prop_prefix The prefix to add to $property (defaults to <tt>WIKINI_VOC_PREFIX</tt>) |
* @param int The id of the found triple or 0 if there is no such triple. |
*/ |
function TripleExists($resource, $property, $value, $re_prefix = THISWIKI_PREFIX, $prop_prefix = WIKINI_VOC_PREFIX) |
{ |
$sql = 'SELECT id FROM ' . $this->GetConfigValue('table_prefix') . 'triples ' |
. 'WHERE resource = "' . addslashes($re_prefix . $resource) . '" ' |
. 'AND property = "' . addslashes($prop_prefix . $property) . '" ' |
. 'AND value = "' . addslashes($value) . '"'; |
$res = $this->LoadSingle($sql); |
if (!$res) return 0; |
return $res['id']; |
} |
/** |
* Inserts a new triple ($resource, $property, $value) in the triples' table |
* @param string $resource The resource of the triple to insert |
* @param string $property The property of the triple to insert |
* @param string $value The value of the triple to insert |
* @param string $re_prefix The prefix to add to $resource (defaults to <tt>THISWIKI_PREFIX</tt>) |
* @param string $prop_prefix The prefix to add to $property (defaults to <tt>WIKINI_VOC_PREFIX</tt>) |
* @return int An error code: 0 (success), 1 (failure) or 3 (already exists) |
*/ |
function InsertTriple($resource, $property, $value, $re_prefix = THISWIKI_PREFIX, $prop_prefix = WIKINI_VOC_PREFIX) |
{ |
if ($this->TripleExists($resource, $property, $value, $re_prefix, $prop_prefix)) |
{ |
return 3; |
} |
$sql = 'INSERT INTO ' . $this->GetConfigValue('table_prefix') . 'triples (resource, property, value)' |
. 'VALUES ("' . addslashes($re_prefix . $resource) . '", "' |
. addslashes($prop_prefix . $property) . '", "' |
. addslashes($value) . '")'; |
return $this->Query($sql) ? 0 : 1; |
} |
/** |
* Updates a triple ($resource, $property, $value) in the triples' table |
* @param string $resource The resource of the triple to update |
* @param string $property The property of the triple to update |
* @param string $oldvalue The old value of the triple to update |
* @param string $newvalue The new value of the triple to update |
* @param string $re_prefix The prefix to add to $resource (defaults to <tt>THISWIKI_PREFIX</tt>) |
* @param string $prop_prefix The prefix to add to $property (defaults to <tt>WIKINI_VOC_PREFIX</tt>) |
* @return int An error code: 0 (succ?s), 1 (?chec), |
* 2 ($resource, $property, $oldvalue does not exist) |
* or 3 ($resource, $property, $newvalue already exists) |
*/ |
function UpdateTriple($resource, $property, $oldvalue, $newvalue, $re_prefix = THISWIKI_PREFIX, $prop_prefix = WIKINI_VOC_PREFIX) |
{ |
$id = $this->TripleExists($resource, $property, $oldvalue, $re_prefix, $prop_prefix); |
if (!$id) return 2; |
if ($this->TripleExists($resource, $property, $newvalue, $re_prefix, $prop_prefix)) |
{ |
return 3; |
} |
$sql = 'UPDATE ' . $this->GetConfigValue('table_prefix') . 'triples ' |
. 'SET value = "' . addslashes($newvalue) . '" ' |
. 'WHERE id = ' . $id; |
return $this->Query($sql) ? 0 : 1; |
} |
/** |
* Deletes a triple ($resource, $property, $value) from the triples' table |
* @param string $resource The resource of the triple to delete |
* @param string $property The property of the triple to delete |
* @param string $value The value of the triple to delete. If set to <tt>null</tt>, |
* deletes all the triples corresponding to ($resource, $property). (defaults to <tt>null</tt>) |
* @param string $re_prefix The prefix to add to $resource (defaults to <tt>THISWIKI_PREFIX</tt>) |
* @param string $prop_prefix The prefix to add to $property (defaults to <tt>WIKINI_VOC_PREFIX</tt>) |
*/ |
function DeleteTriple($resource, $property, $value = null, $re_prefix = THISWIKI_PREFIX, $prop_prefix = WIKINI_VOC_PREFIX) |
{ |
$sql = 'DELETE FROM ' . $this->GetConfigValue('table_prefix') . 'triples ' |
. 'WHERE resource = "' . addslashes($re_prefix . $resource) . '" ' |
. 'AND property = "' . addslashes($prop_prefix . $property) . '" '; |
if ($value !== null) $sql .= 'AND value = "' . addslashes($value) . '"'; |
$this->Query($sql); |
} |
// inclusions |
/** |
* Enr?gistre une nouvelle inclusion dans la pile d'inclusions. |
* |
* @param string $pageTag Le nom de la page qui va ?tre inclue |
* @return int Le nombre d'?l?ments dans la pile |
*/ |
function RegisterInclusion($pageTag) |
{ |
return array_unshift($this->inclusions, strtolower(trim($pageTag))); |
} |
/** |
* Retire le dernier ?l?ment de la pile d'inclusions. |
* |
* @return string Le nom de la page dont l'inclusion devrait se terminer. |
* null s'il n'y a plus d'inclusion dans la pile. |
*/ |
function UnregisterLastInclusion() |
{ |
return array_shift($this->inclusions); |
} |
/** |
* Renvoie le nom de la page en cours d'inclusion. |
* |
* @example // dans le cas d'une action comme l'ActionEcrivezMoi |
* if($inc = $this->CurrentInclusion() && strtolower($this->GetPageTag()) != $inc) |
* echo 'Cette action ne peut ?tre appel?e depuis une page inclue'; |
* @return string Le nom (tag) de la page (en minuscules) |
* false si la pile est vide. |
*/ |
function GetCurrentInclusion() |
{ |
return isset($this->inclusions[0]) ? $this->inclusions[0]: false ; |
} |
/** |
* V?rifie si on est ? l'int?rieur d'une inclusion par $pageTag (sans tenir compte de la casse) |
* |
* @param string $pageTag Le nom de la page ? v?rifier |
* @return bool True si on est ? l'int?rieur d'une inclusion par $pageTag (false sinon) |
*/ |
function IsIncludedBy($pageTag) |
{ |
return in_array(strtolower($pageTag), $this->inclusions); |
} |
/** |
* |
* @return array La pile d'inclusions |
* L'?l?ment 0 sera la derni?re inclusion, l'?l?ment 1 sera son parent et ainsi de suite. |
*/ |
function GetAllInclusions() |
{ |
return $this->inclusions; |
} |
/** |
* Remplace la pile des inclusions par une nouvelle pile (par d?faut une pile vide) |
* Permet de formatter une page sans tenir compte des inclusions pr?c?dentes. |
* |
* @param array $ La nouvelle pile d'inclusions. |
* L'?l?ment 0 doit repr?senter la derni?re inclusion, l'?l?ment 1 son parent et ainsi de suite. |
* @return array L'ancienne pile d'inclusions, avec les noms des pages en minuscules. |
*/ |
function SetInclusions($pile = array()) |
{ |
$temp = $this->inclusions; |
$this->inclusions = $pile; |
return $temp; |
} |
// PAGES |
function LoadPage($tag, $time = "", $cache = 1) |
{ |
// retrieve from cache |
if (!$time && $cache && (($cachedPage = $this->GetCachedPage($tag)) !== false)) |
{ |
$page = $cachedPage; |
} |
else // load page |
{ |
$sql = "SELECT * FROM ".$this->config["table_prefix"]."pages" |
. " WHERE tag = '".mysql_real_escape_string($tag)."' AND " |
. ($time ? "time = '".mysql_real_escape_string($time)."'" : "latest = 'Y'") . " LIMIT 1"; |
$page = $this->LoadSingle($sql); |
// cache result |
if (!$time) $this->CachePage($page, $tag); |
} |
return $page; |
} |
/** |
* Retrieves the cached version of a page. |
* |
* Notice that this method null or false, use |
* $this->GetCachedPage($tag) === false |
* to check if a page is not in the cache. |
* @return mixed The cached version of a page: |
* - the page DB line if the page exists and is in cache |
* - null if the cache knows that the page does not exists |
* - false is the cache does not know the page |
*/ |
function GetCachedPage($tag) {return (array_key_exists($tag, $this->pageCache) ? $this->pageCache[$tag] : false); } |
/** |
* Caches a page's DB line. |
* |
* @param array $page The page (full) DB line or null if the page does not exists |
* @param string $pageTag The tag of the page to cache. Defaults to $page['tag'] but is mendatory when $page === null |
*/ |
function CachePage($page, $pageTag = null) { |
if ($pageTag === null) |
{ |
$pageTag = $page["tag"]; |
} |
$this->pageCache[$pageTag] = $page; |
} |
function SetPage($page) { $this->page = $page; if ($this->page["tag"]) $this->tag = $this->page["tag"]; } |
function LoadPageById($id) { return $this->LoadSingle("select * from ".$this->config["table_prefix"]."pages where id = '".mysql_real_escape_string($id)."' limit 1"); } |
function LoadRevisions($page) { return $this->LoadAll("select * from ".$this->config["table_prefix"]."pages where tag = '".mysql_real_escape_string($page)."' order by time desc"); } |
function LoadPagesLinkingTo($tag) { return $this->LoadAll("select from_tag as tag from ".$this->config["table_prefix"]."links where to_tag = '".mysql_real_escape_string($tag)."' order by tag"); } |
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")) |
{ |
foreach ($pages as $page) |
{ |
$this->CachePage($page); |
} |
return $pages; |
} |
} |
function LoadAllPages() { return $this->LoadAll("select * from ".$this->config["table_prefix"]."pages where latest = 'Y' order by tag"); } |
function FullTextSearch($phrase) { return $this->LoadAll("select * from ".$this->config["table_prefix"]."pages where latest = 'Y' and match(tag, body) against('".mysql_real_escape_string($phrase)."')"); } |
function LoadWantedPages() { |
$p = $this->config["table_prefix"]; |
$r = "SELECT ${p}links.to_tag AS tag, COUNT(${p}links.from_tag) AS count " |
. "FROM ${p}links LEFT JOIN ${p}pages ON ${p}links.to_tag = ${p}pages.tag " |
. "WHERE ${p}pages.tag IS NULL GROUP BY ${p}links.to_tag ORDER BY count DESC, tag ASC"; |
return $this->LoadAll($r); |
} |
function LoadOrphanedPages() { return $this->LoadAll("select distinct tag from ".$this->config["table_prefix"]."pages as p left join ".$this->config["table_prefix"]."links as l on p.tag = l.to_tag where l.to_tag is NULL and p.comment_on = '' and p.latest = 'Y' order by tag"); } |
function IsOrphanedPage($tag) { return $this->LoadAll("select distinct tag from ".$this->config['table_prefix']."pages as p left join ".$this->config['table_prefix']."links as l on p.tag = l.to_tag where l.to_tag is NULL and p.latest = 'Y' and tag = '".mysql_real_escape_string($tag)."'"); } |
function DeleteOrphanedPage($tag) { |
$p = $this->config["table_prefix"]; |
$this->Query("DELETE FROM ${p}pages WHERE tag='".mysql_real_escape_string($tag)."' OR comment_on='".mysql_real_escape_string($tag)."'"); |
$this->Query("DELETE FROM ${p}links WHERE from_tag='".mysql_real_escape_string($tag)."' "); |
$this->Query("DELETE FROM ${p}acls WHERE page_tag='".mysql_real_escape_string($tag)."' "); |
$this->Query("DELETE FROM ${p}referrers WHERE page_tag='".mysql_real_escape_string($tag)."' "); |
} |
/** |
* SavePage |
* Sauvegarde un contenu dans une page donn?e |
* |
* @param string $body Contenu ? sauvegarder dans la page |
* @param string $tag Nom de la page |
* @param string $comment_on Indication si c'est un commentaire |
* @param boolean $bypass_acls Indication si on bypasse les droits d'?criture |
* @return int Code d'erreur : 0 (succ?s), 1 (l'utilisateur n'a pas les droits) |
*/ |
function SavePage($tag, $body, $comment_on = "", $bypass_acls = false) |
{ |
// get current user |
$user = $this->GetUserName(); |
// check bypass of rights or write privilege |
$rights = $bypass_acls || ($comment_on ? $this->HasAccess("comment", $comment_on) : $this->HasAccess("write", $tag)); |
if ($rights) |
{ |
// is page new? |
if (!$oldPage = $this->LoadPage($tag)) |
{ |
// create default write acl. store empty write ACL for comments. |
$this->SaveAcl($tag, "write", ($comment_on ? $user : $this->GetConfigValue("default_write_acl"))); |
// create default read acl |
$this->SaveAcl($tag, "read", $this->GetConfigValue("default_read_acl")); |
// create default comment acl. |
$this->SaveAcl($tag, "comment", ($comment_on ? "" : $this->GetConfigValue("default_comment_acl"))); |
// current user is owner; if user is logged in! otherwise, no owner. |
if ($this->GetUser()) $owner = $user; |
else $owner = ''; |
} |
else |
{ |
// aha! page isn't new. keep owner! |
$owner = $oldPage["owner"]; |
// ...and comment_on, eventualy? |
if ($comment_on == '') $comment_on = $oldPage['comment_on']; |
} |
// set all other revisions to old |
$this->Query("update ".$this->config["table_prefix"]."pages set latest = 'N' where tag = '".mysql_real_escape_string($tag)."'"); |
// add new revision |
$this->Query("insert into ".$this->config["table_prefix"]."pages set ". |
"tag = '".mysql_real_escape_string($tag)."', ". |
($comment_on ? "comment_on = '".mysql_real_escape_string($comment_on)."', " : ""). |
"time = now(), ". |
"owner = '".mysql_real_escape_string($owner)."', ". |
"user = '".mysql_real_escape_string($user)."', ". |
"latest = 'Y', ". |
"body = '".mysql_real_escape_string(chop($body))."'"); |
unset($this->pageCache[$tag]); |
return 0; |
} |
else return 1; |
} |
/** |
* AppendContentToPage |
* Ajoute du contenu ? la fin d'une page |
* |
* @param string $content Contenu ? ajouter ? la page |
* @param string $page Nom de la page |
* @param boolean $bypass_acls Boul?en pour savoir s'il faut bypasser les ACLs |
* @return int Code d'erreur : 0 (succ?s), 1 (pas de contenu sp?cifi?) |
*/ |
function AppendContentToPage($content, $page, $bypass_acls = false) |
{ |
// Si un contenu est sp?cifi? |
if (isset($content)) |
{ |
// -- D?termine quelle est la page : |
// -- pass?e en param?tre (que se passe-t'il si elle n'existe pas ?) |
// -- ou la page en cours par d?faut |
$page = isset($page) ? $page : $this->GetPageTag(); |
// -- Chargement de la page |
$result = $this->LoadPage($page); |
$body = $result['body']; |
// -- Ajout du contenu ? la fin de la page |
$body .= $content; |
// -- Sauvegarde de la page |
// TODO : que se passe-t-il si la page est pleine ou si l'utilisateur n'a pas les droits ? |
$this->SavePage($page, $body, "", $bypass_acls); |
// now we render it internally so we can write the updated link table. |
$this->ClearLinkTable(); |
$this->StartLinkTracking(); |
$temp = $this->SetInclusions(); |
$this->RegisterInclusion($this->GetPageTag()); // on simule totalement un affichage normal |
$this->Format($body); |
$this->SetInclusions($temp); |
if($user = $this->GetUser()) |
{ |
$this->TrackLinkTo($user['name']); |
} |
if($owner = $this->GetPageOwner()) |
{ |
$this->TrackLinkTo($owner); |
} |
$this->StopLinkTracking(); |
$this->WriteLinkTable(); |
$this->ClearLinkTable();/**/ |
// Retourne 0 seulement si tout c'est bien pass? |
return 0; |
} |
else return 1; |
} |
/** |
* LogAdministrativeAction($user, $content, $page = "") |
* |
* @param string $user Utilisateur |
* @param string $content Contenu de l'enregistrement |
* @param string $page Page de log |
* |
* @return int Code d'erreur : 0 (succ?s), 1 (pas de contenu sp?cifi?) |
*/ |
function LogAdministrativeAction($user, $content, $page = "") |
{ |
$order = array("\r\n", "\n", "\r"); |
$replace = '\\n'; |
$content = str_replace($order, $replace, $content); |
$contentToAppend = "\n" . date("Y-m-d H:i:s") . " . . . . " . $user . " . . . . " . $content . "\n"; |
$page = $page ? $page : "LogDesActionsAdministratives" . date("Ymd"); |
return $this->AppendContentToPage($contentToAppend, $page, true); |
} |
/** |
* Make the purge of page versions that are older than the last version older than 3 "pages_purge_time" |
* This method permits to allways keep a version that is older than that period. |
*/ |
function PurgePages() { |
if ($days = $this->GetConfigValue("pages_purge_time")) { // is purge active ? |
// let's search which pages versions we have to remove |
// this is necessary beacause even MySQL does not handel multi-tables deletes before version 4.0 |
$wnPages = $this->GetConfigValue('table_prefix') . 'pages'; |
$sql = 'SELECT DISTINCT a.id FROM ' . $wnPages . ' a,' . $wnPages . ' b WHERE a.latest = \'N\' AND a.time < date_sub(now(), INTERVAL \'' . addslashes($days) . '\' DAY) AND a.tag = b.tag AND a.time < b.time AND b.time < date_sub(now(), INTERVAL \'' . addslashes($days) . '\' DAY)'; |
$ids = $this->LoadAll($sql); |
if (count($ids)) { // there are some versions to remove from DB |
// let's build one big request, that's better... |
$sql = 'DELETE FROM ' . $wnPages . ' WHERE id IN ('; |
foreach($ids as $key => $line){ |
$sql .= ($key ? ', ':'') . $line['id']; // NB.: id is an int, no need of quotes |
} |
$sql .= ')'; |
// ... and send it ! |
$this->Query($sql); |
} |
} |
} |
// COOKIES |
function SetSessionCookie($name, $value) |
{ |
SetCookie($name, $value, 0, $this->CookiePath); |
$_COOKIE[$name] = $value; |
} |
function SetPersistentCookie($name, $value, $remember = 0) |
{ |
SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60), $this->CookiePath); |
$_COOKIE[$name] = $value; |
} |
function DeleteCookie($name) |
{ |
SetCookie($name, "", 1, $this->CookiePath); |
$_COOKIE[$name] = ""; |
} |
function GetCookie($name) { return $_COOKIE[$name]; } |
// HTTP/REQUEST/LINK RELATED |
function SetMessage($message) { $_SESSION["message"] = $message; } |
function GetMessage() |
{ |
if (isset($_SESSION["message"])) $message = $_SESSION["message"]; |
else $message = ""; |
$_SESSION["message"] = ""; |
return $message; |
} |
function Redirect($url) |
{ |
header("Location: $url"); |
exit; |
} |
// returns just PageName[/method]. |
function MiniHref($method = "", $tag = "") |
{ |
if (!$tag = trim($tag)) $tag = $this->tag; |
return $tag.($method ? "/".$method : ""); |
} |
// returns the full url to a page/method. |
function Href($method = "", $tag = "", $params = "", $htmlspchars = true) |
{ |
$href = $this->config["base_url"].$this->MiniHref($method, $tag); |
if ($params) |
{ |
$href .= ($this->config["rewrite_mode"] ? "?" : ($htmlspchars ? "&" : '&')).$params; |
} |
return $href; |
} |
function Link($tag, $method = "", $text = "", $track = 1) |
{ |
$displayText = $text ? $text : $tag; |
// is this an interwiki link? |
if (preg_match('/^' . WN_INTERWIKI_CAPTURE . '$/', $tag, $matches)) |
{ |
if ($tagInterWiki = $this->GetInterWikiUrl($matches[1], $matches[2])) { |
return '<a href="'.htmlspecialchars($tagInterWiki).'">' |
.htmlspecialchars($displayText).' (interwiki)</a>'; |
} |
else return '<a href="'.htmlspecialchars($tag).'">' |
.htmlspecialchars($displayText).' (interwiki inconnu)</a>'; |
} |
// is this a full link? ie, does it contain non alpha-numeric characters? |
// Note : [:alnum:] is equivalent [0-9A-Za-z] |
// [^[:alnum:]] means : some caracters other than [0-9A-Za-z] |
// For example : "www.adress.com", "mailto:adress@domain.com", "http://www.adress.com" |
else if (preg_match("/[^[:alnum:]]/", $tag)) |
{ |
// check for various modifications to perform on $tag |
if (preg_match("/^[\w.-]+\@[\w.-]+$/", $tag)) |
{ // email addresses |
$tag = 'mailto:'.$tag; |
} |
// Note : in Perl regexp, (?: ... ) is a non-catching cluster |
else if (preg_match('/^[[:alnum:]][[:alnum:].-]*(?:\/|$)/', $tag)) |
{ // protocol-less URLs |
$tag = 'http://'.$tag; |
} |
// Finally, block script schemes (see RFC 3986 about |
// schemes) and allow relative link & protocol-full URLs |
else if (preg_match('/^[a-z0-9.+-]*script[a-z0-9.+-]*:/i', $tag) |
|| !(preg_match('/^\.?\.?\//', $tag) |
|| preg_match('/^[a-z0-9.+-]+:\/\//i', $tag))) |
{ |
// If does't fit, we can't qualify $tag as an URL. |
// There is a high risk that $tag is just XSS (bad |
// javascript: code) or anything nasty. So we must not |
// produce any link at all. |
return htmlspecialchars($tag.($text ? ' '.$text : '')); |
} |
// Important: Here, we know that $tag is not something bad |
// and that we must produce a link with it |
// An inline image? (text!=tag and url ends by png,gif,jpeg) |
if ($text and preg_match("/\.(gif|jpeg|png|jpg)$/i",$tag)) |
{ |
return '<img src="'.htmlspecialchars($tag) |
.'" alt="'.htmlspecialchars($displayText).'"/>'; |
} |
else |
{ |
// Even if we know $tag is harmless, we MUST encode it |
// in HTML with htmlspecialchars() before echoing it. |
// This is not about being paranoiac. This is about |
// being compliant to the HTML standard. |
return '<a href="'.htmlspecialchars($tag).'">' |
.htmlspecialchars($displayText).'</a>'; |
} |
} |
else |
{ |
// it's a Wiki link! |
if (!empty($track)) $this->TrackLinkTo($tag); |
if ($this->LoadPage($tag)) |
return '<a href="'.htmlspecialchars($this->href($method, $tag)).'">' |
.htmlspecialchars($displayText).'</a>'; |
else |
return '<span class="missingpage">'.htmlspecialchars($displayText) |
.'</span><a href="'.htmlspecialchars($this->href("edit", $tag)).'">?</a>'; |
} |
} |
function ComposeLinkToPage($tag, $method = "", $text = "", $track = 1) { |
if (!$text) $text = $tag; |
$text = htmlspecialchars($text); |
if ($track) |
$this->TrackLinkTo($tag); |
return '<a href="'.$this->href($method, $tag).'">'.$text.'</a>'; |
} |
function IsWikiName($text) { |
return preg_match('/^' . WN_CAMEL_CASE . '$/', $text); |
} |
// LinkTracking management |
/** |
* Tracks the link to a given page (only if the LinkTracking is activated) |
* @param string $tag The tag (name) of the page to track a link to. |
*/ |
function TrackLinkTo($tag) { |
if ($this->LinkTracking()) $this->linktable[] = $tag; |
} |
/** |
* @return array The current link tracking table |
*/ |
function GetLinkTable() { return $this->linktable; } |
/** |
* Clears the link tracking table |
*/ |
function ClearLinkTable() { $this->linktable = array(); } |
/** |
* Starts the LinkTracking |
* @return bool The previous state of the link tracking |
*/ |
function StartLinkTracking() { |
return $this->LinkTracking(true); |
} |
/** |
* Stops the LinkTracking |
* @return bool The previous state of the link tracking |
*/ |
function StopLinkTracking() { |
return $this->LinkTracking(false); |
} |
/** |
* Sets and/or retrieve the state of the LinkTracking |
* @param bool $newStatus The new status of the LinkTracking |
* (defaults to <tt>null</tt> which lets it unchanged) |
* @return bool The previous state of the link tracking |
*/ |
function LinkTracking($newStatus = null) |
{ |
$old = $this->isTrackingLinks; |
if ($newStatus !== null) $this->isTrackingLinks = $newStatus; |
return $old; |
} |
function WriteLinkTable() { |
// delete old link table |
$this->Query("delete from ".$this->config["table_prefix"]."links where from_tag = '".mysql_real_escape_string($this->GetPageTag())."'"); |
if ($linktable = $this->GetLinkTable()) |
{ |
$from_tag = mysql_real_escape_string($this->GetPageTag()); |
foreach ($linktable as $to_tag) |
{ |
$lower_to_tag = strtolower($to_tag); |
if (!isset($written[$lower_to_tag])) |
{ |
$this->Query("insert into ".$this->config["table_prefix"]."links set from_tag = '".$from_tag."', to_tag = '".mysql_real_escape_string($to_tag)."'"); |
$written[$lower_to_tag] = 1; |
} |
} |
} |
} |
function Header() { |
$action = $this->GetConfigValue("header_action"); |
if (($actionObj = &$this->GetActionObject($action)) && is_object($actionObj)) |
{ |
return $actionObj->GenerateHeader(); |
} |
return $this->Action($action, 1); |
} |
function Footer() { |
$action = $this->GetConfigValue("footer_action"); |
if (($actionObj = &$this->GetActionObject($action)) && is_object($actionObj)) |
{ |
return $actionObj->GenerateFooter(); |
} |
return $this->Action($action, 1); |
} |
// FORMS |
function FormOpen($method = "", $tag = "", $formMethod = "post") { |
$result = "<form action=\"".$this->href($method, $tag)."\" method=\"".$formMethod."\">\n"; |
if (!$this->config["rewrite_mode"]) $result .= "<input type=\"hidden\" name=\"wiki\" value=\"".$this->MiniHref($method, $tag)."\" />\n"; |
return $result; |
} |
function FormClose() { |
return "</form>\n"; |
} |
// INTERWIKI STUFF |
function ReadInterWikiConfig() { |
if ($lines = file("interwiki.conf")) |
{ |
foreach ($lines as $line) |
{ |
if ($line = trim($line)) |
{ |
list($wikiName, $wikiUrl) = explode(" ", trim($line)); |
$this->AddInterWiki($wikiName, $wikiUrl); |
} |
} |
} |
} |
function AddInterWiki($name, $url) { |
$this->interWiki[strtolower($name)] = $url; |
} |
function GetInterWikiUrl($name, $tag) |
{ |
if (isset($this->interWiki[strtolower($name)])) return $this->interWiki[strtolower($name)].$tag; |
else return FALSE; |
} |
// REFERRERS |
function LogReferrer($tag = "", $referrer = "") { |
// fill values |
if (!$tag = trim($tag)) $tag = $this->GetPageTag(); |
if (!$referrer = trim($referrer) AND isset($_SERVER["HTTP_REFERER"])) $referrer = $_SERVER["HTTP_REFERER"]; |
// check if it's coming from another site |
if ($referrer && !preg_match("/^".preg_quote($this->GetConfigValue("base_url"), "/")."/", $referrer)) |
{ |
// avoid XSS (with urls like "javascript:alert()" and co) |
// by forcing http/https prefix |
// NB.: this does NOT exempt to htmlspecialchars() the collected URIs ! |
if (!preg_match('`^https?://`', $referrer)) return; |
$this->Query("insert into ".$this->config["table_prefix"]."referrers set ". |
"page_tag = '".mysql_real_escape_string($tag)."', ". |
"referrer = '".mysql_real_escape_string($referrer)."', ". |
"time = now()"); |
} |
} |
function LoadReferrers($tag = "") { |
return $this->LoadAll("select referrer, count(referrer) as num from ".$this->config["table_prefix"]."referrers ".($tag = trim($tag) ? "where page_tag = '".mysql_real_escape_string($tag)."'" : "")." group by referrer order by num desc"); |
} |
function PurgeReferrers() { |
if ($days = $this->GetConfigValue("referrers_purge_time")) { |
$this->Query("delete from ".$this->config["table_prefix"]."referrers where time < date_sub(now(), interval '".mysql_real_escape_string($days)."' day)"); |
} |
} |
// PLUGINS |
/** |
* Exacutes an "action" module and returns the generated output |
* @param string $action The name of the action and its eventual parameters, |
* as it appears in the page between "{{" and "}}" |
* @param boolean $forceLinkTracking By default, the link tracking will be disabled |
* during the call of an action. Set this value to <code>true</code> to allow it. |
* @param array $vars An array of additionnal parameters to give to the action, in the form |
* array( 'param' => 'value'). |
* This allows you to call Action() internally, setting $action to the name of the action |
* you want to call and it's parameters in an array, wich is more efficient than |
* the pattern-matching algorithm used to extract the parameters from $action. |
* @return The output generated by the action. |
*/ |
function Action($action, $forceLinkTracking = 0, $vars = array()) |
{ |
$cmd = trim($action); |
// extract $action and $vars_temp ("raw" attributes) |
if (!preg_match("/^([a-zA-Z-0-9]+)\/?(.*)$/", $cmd, $matches)) |
{ |
return '<i>Action invalide "' . htmlspecialchars($cmd) . '"</i>'; |
} |
list(, $action, $vars_temp) = $matches; |
$vars[$vars_temp] = $vars_temp; // usefull for {{action/vars_temp}} |
// now that we have the action's name, we can check if the user satisfies the ACLs |
if (!$this->CheckModuleACL($action, 'action')) |
{ |
return 'Erreur: vous n\'avez pas accès à l\'action ' . $action . '.'; |
} |
// match all attributes (key and value) |
// prepare an array for extract() to work with (in $this->IncludeBuffered()) |
if (preg_match_all("/([a-zA-Z0-9]*)=\"(.*)\"/U", $vars_temp, $matches)) |
{ |
for ($a = 0; $a < count($matches[1]); $a++) |
{ |
$vars[$matches[1][$a]] = $matches[2][$a]; |
} |
} |
if (!$forceLinkTracking) $this->StopLinkTracking(); |
if ($actionObj = &$this->GetActionObject($action)) |
{ |
if (is_object($actionObj)) |
{ |
$result = $actionObj->PerformAction($vars, $cmd); |
} |
else // $actionObj is an error message |
{ |
$result = $actionObj; |
} |
} |
else // $actionObj == null (not found, no error message) |
{ |
$this->parameter = &$vars; |
$result = $this->IncludeBuffered(strtolower($action).".php", "<i>Action inconnue "$action"</i>", $vars, $this->config["action_path"]); |
unset($this->parameter); |
} |
$this->StartLinkTracking(); // shouldn't we restore the previous status ? |
return $result; |
} |
/** |
* Finds the object corresponding to an action, if it exists. |
* @param string $name The name of an action (should be alphanumeric) |
* @return mixed |
* - null if the corresponding file was not found or the corresponding class didn't exist after inclusion |
* - an error string if the corresponding file was found but an error append while loading it |
* - the object corresponding to this action if no problem happend |
* To check the result, you should use is_object() on it. |
* You should always assign the result of this method by referrence |
* to avoid copying the object, which is the default beheviour in PHP4. |
* @example |
* $var = &$wiki->GetActionObject('actionname'); |
* if (is_object($var)) |
* { |
* // normal behaviour |
* } |
* elseif ($var) // $var is not an object but an error string |
* { |
* // threat error |
* } |
* else // action was not found |
* { |
* // rescue from inexising action or sth |
* } |
*/ |
function &GetActionObject($name) |
{ |
$name = strtolower($name); |
$actionObj = null; // the generated object |
if (!preg_match('/^[a-z0-9]+$/', $name)) // paranoiac |
{ |
return $actionObj; |
} |
// already tried to load this object ? (may be null) |
if (isset($this->actionObjects[$name])) |
{ |
return $this->actionObjects[$name]; |
} |
// object not loaded, try to load it |
$filename = $name . '.class.php'; |
// load parent class for all action objects (only once) |
require_once 'includes/action.class.php'; |
// include the action file, this should return an empty string |
$result = $this->IncludeBuffered($filename, null, null, $this->GetConfigValue('action_path')); |
if ($result) // the result was not an empty string, certainly an error message |
{ |
$actionObj = $result; |
} |
elseif ($result !== false) // the result was empty but the file was found |
{ |
$class = 'Action' . ucfirst($name); |
if (class_exists($class)) |
{ |
$actionObj = new $class($this); |
if (!is_a($actionObj, 'WikiniAction')) |
{ |
die("Action invalide '$name': classe incorrecte"); |
} |
} |
} |
$this->actionObjects[$name] = &$actionObj; |
return $actionObj; |
} |
/** |
* Retrieves the list of existing actions |
* @return array An unordered array of all the available actions. |
*/ |
function GetActionsList() |
{ |
$action_path = $this->GetConfigValue('action_path'); |
$list = array(); |
if ($dh = opendir($action_path)) |
{ |
while (($file = readdir($dh)) !== false) |
{ |
if (preg_match('/^([a-zA-Z-0-9]+)(.class)?.php$/', $file, $matches)) |
{ |
$list[] = $matches[1]; |
} |
} |
} |
return $list; |
} |
/** |
* Retrieves the list of existing handlers |
* @return array An unordered array of all the available handlers. |
*/ |
function GetHandlersList() |
{ |
$handler_path = $this->GetConfigValue('handler_path') . '/page/'; |
$list = array(); |
if ($dh = opendir($handler_path)) |
{ |
while (($file = readdir($dh)) !== false) |
{ |
if (preg_match('/^([a-zA-Z-0-9]+)(.class)?.php$/', $file, $matches)) |
{ |
$list[] = $matches[1]; |
} |
} |
} |
return $list; |
} |
function Method($method) { |
if (!$handler = $this->page["handler"]) $handler = "page"; |
$methodLocation = $handler."/".$method.".php"; |
return $this->IncludeBuffered($methodLocation, "<i>Méthode inconnue \"$methodLocation\"</i>", "", $this->config["handler_path"]); |
} |
function Format($text, $formatter = "wakka") { |
return $this->IncludeBuffered("formatters/".$formatter.".php", "<i>Impossible de trouver le formateur \"$formatter\"</i>", compact("text")); |
} |
// USERS |
function LoadUser($name, $password = 0) { return $this->LoadSingle("select * from ".$this->config["table_prefix"]."users where name = '".mysql_real_escape_string($name)."' ".($password === 0 ? "" : "and password = '".mysql_real_escape_string($password)."'")." limit 1"); } |
function LoadUsers() { return $this->LoadAll("select * from ".$this->config["table_prefix"]."users order by name"); } |
function GetUserName() { if ($user = $this->GetUser()) $name = $user["name"]; else if (!$name = gethostbyaddr($_SERVER["REMOTE_ADDR"])) $name = $_SERVER["REMOTE_ADDR"]; return $name; } |
function GetUser() { return (isset($_SESSION["user"]) ? $_SESSION["user"] : '');} |
function SetUser($user, $remember=0) { $_SESSION["user"] = $user; $this->SetPersistentCookie("name", $user["name"], $remember); $this->SetPersistentCookie("password", $user["password"], $remember); $this->SetPersistentCookie("remember", $remember, $remember); } |
function LogoutUser() { $_SESSION["user"] = ""; $this->DeleteCookie("name"); $this->DeleteCookie("password"); } |
function UserWantsComments() { if (!$user = $this->GetUser()) return false; return ($user["show_comments"] == "Y"); } |
function GetParameter($parameter, $default = '') { return (isset($this->parameter[$parameter]) ? $this->parameter[$parameter] : $default); } |
// COMMENTS |
/** |
* Charge les commentaires relatifs ? une page. |
* |
* @param string $tag Nom de la page. Ex : "PagePrincipale" |
* @return array Tableau contenant tous les commentaires et leurs |
* propri?t?s correspondantes. |
*/ |
function LoadComments($tag) |
{ |
return $this->LoadAll( |
"select * " . |
"from ".$this->config["table_prefix"]."pages " . |
"where comment_on = '".mysql_real_escape_string($tag)."' " . |
"and latest = 'Y' " . |
"order by substring(tag, 8) + 0"); |
} |
/** |
* Charge les derniers commentaires de toutes les pages. |
* |
* @param int $limit Nombre de commentaires charg?s. |
* 0 par d?faut (ie tous les commentaires). |
* @return array Tableau contenant chaque commentaire et ses |
* propri?t?s associ?es. |
* @todo Ajouter le param?tre $start pour permettre une pagination |
* des commentaires : ->LoadRecentComments(10, 10) |
*/ |
function LoadRecentComments($limit = 0) |
{ |
// The part of the query which limit the number of comments |
if(is_numeric($limit) && $limit > 0) $lim = " limit ".$limit; |
else $lim = ""; |
// Query |
return $this->LoadAll( |
"select * " . |
"from " . $this->config["table_prefix"] . "pages " . |
"where comment_on != '' " . |
"and latest = 'Y' " . |
"order by time desc " . |
$lim); |
} |
function LoadRecentlyCommented($limit = 50) |
{ |
$pages = array(); |
// NOTE: this is really stupid. Maybe my SQL-Fu is too weak, but apparently there is no easier way to simply select |
// all comment pages sorted by their first revision's (!) time. ugh! |
// load ids of the first revisions of latest comments. err, huh? |
if ($ids = $this->LoadAll("select min(id) as id from ".$this->config["table_prefix"]."pages where comment_on != '' group by tag order by id desc")) |
{ |
// load complete comments |
$num=0; |
foreach ($ids as $id) |
{ |
$comment = $this->LoadSingle("select * from ".$this->config["table_prefix"]."pages where id = '".$id["id"]."' limit 1"); |
if (!isset($comments[$comment["comment_on"]]) && $num < $limit) |
{ |
$comments[$comment["comment_on"]] = $comment; |
$num++; |
} |
} |
// now load pages |
if ($comments) |
{ |
// now using these ids, load the actual pages |
foreach ($comments as $comment) |
{ |
$page = $this->LoadPage($comment["comment_on"]); |
$page["comment_user"] = $comment["user"]; |
$page["comment_time"] = $comment["time"]; |
$page["comment_tag"] = $comment["tag"]; |
$pages[] = $page; |
} |
} |
} |
// load tags of pages |
//return $this->LoadAll("select comment_on as tag, max(time) as time, tag as comment_tag, user from ".$this->config["table_prefix"]."pages where comment_on != '' group by comment_on order by time desc"); |
return $pages; |
} |
// ACCESS CONTROL |
// returns true if logged in user is owner of current page, or page specified in $tag |
function UserIsOwner($tag = "") { |
// check if user is logged in |
if (!$this->GetUser()) return false; |
// set default tag |
if (!$tag = trim($tag)) $tag = $this->GetPageTag(); |
// check if user is owner |
if ($this->GetPageOwner($tag) == $this->GetUserName()) return true; |
} |
/** |
* @param string $group The name of a group |
* @return string the ACL associated with the group $gname |
* @see UserIsInGroup to check if a user belongs to some group |
*/ |
function GetGroupACL($group) |
{ |
if (array_key_exists($group, $this->_groupsCache)) |
{ |
return $this->_groupsCache[$group]; |
} |
return $this->_groupsCache[$group] = $this->GetTripleValue($group, WIKINI_VOC_ACLS, GROUP_PREFIX); |
} |
/** |
* Checks if a new group acl is not defined recursively |
* (this method expects that groups that are already defined are not themselves defined recursively...) |
* @param string $gname The name of the group |
* @param string $acl The new acl for that group |
* @return boolean True iff the new acl defines the group recursively |
*/ |
function MakesGroupRecursive($gname, $acl, $origin = null, $checked = array()) |
{ |
$gname = strtolower($gname); |
if ($origin === null) |
{ |
$origin = $gname; |
} |
elseif ($gname === $origin) |
{ |
return true; |
} |
foreach (explode("\n", $acl) as $line) |
{ |
if (!$line) continue; |
if ($line[0] == '!') |
{ |
$line = substr($line, 1); |
} |
if (!$line) continue; |
if ($line[0] == '@') |
{ |
$line = substr($line, 1); |
if (!in_array($line, $checked)) |
{ |
if ($this->MakesGroupRecursive($line, $this->GetGroupACL($line), $origin, $checked)) |
{ |
return true; |
} |
} |
} |
} |
$checked[] = $gname; |
return false; |
} |
/** |
* Sets a new ACL to a given group |
* @param string $gname The name of a group |
* @param string $acl The new ACL to associate with the group $gname |
* @return int 0 if successful, a triple error code or a specific error code: |
* 1000 if the new value would define the group recursively |
* 1001 if $gname is not named with alphanumeric chars |
* @see GetGroupACL |
*/ |
function SetGroupACL($gname, $acl) |
{ |
if (preg_match('/[^A-Za-z0-9]/', $gname)) |
{ |
return 1001; |
} |
$old = $this->GetGroupACL($gname); |
if ($this->MakesGroupRecursive($gname, $acl)) |
{ |
return 1000; |
} |
$this->_groupsCache[$gname] = $acl; |
if ($old === null) |
{ |
return $this->InsertTriple($gname, WIKINI_VOC_ACLS, $acl, GROUP_PREFIX); |
} |
elseif ($old === $acl) |
{ |
return 0; // nothing has changed |
} |
else |
{ |
return $this->UpdateTriple($gname, WIKINI_VOC_ACLS, $old, $acl, GROUP_PREFIX); |
} |
} |
/** |
* @return array The list of all group names |
*/ |
function GetGroupsList() |
{ |
$res = $this->GetMatchingTriples(GROUP_PREFIX . '%', WIKINI_VOC_ACLS_URI); |
$prefix_len = strlen(GROUP_PREFIX); |
$list = array(); |
foreach ($res as $line) |
{ |
$list[] = substr($line['resource'], $prefix_len); |
} |
return $list; |
} |
/** |
* @param string $group The name of a group |
* @return boolean true iff the user is in the given $group |
*/ |
function UserIsInGroup($group, $user = null, $admincheck = true) |
{ |
return $this->CheckACL($this->GetGroupACL($group), $user, $admincheck); |
} |
/** |
* Checks if a given user is andministrator |
* @param string $user The name of the user (defaults to the current user if not given) |
* @return boolean true iff the user is an administrator |
*/ |
function UserIsAdmin($user = null) |
{ |
return $this->UserIsInGroup(ADMIN_GROUP, $user, false); |
} |
function GetPageOwner($tag = "", $time = "") { if (!$tag = trim($tag)) $tag = $this->GetPageTag(); if ($page = $this->LoadPage($tag, $time)) return $page["owner"]; } |
function SetPageOwner($tag, $user) { |
// check if user exists |
if (!$this->LoadUser($user)) return; |
// updated latest revision with new owner |
$this->Query("update ".$this->config["table_prefix"]."pages set owner = '".mysql_real_escape_string($user)."' where tag = '".mysql_real_escape_string($tag)."' and latest = 'Y' limit 1"); |
} |
function LoadAcl($tag, $privilege, $useDefaults = 1) { |
if ((!$acl = $this->LoadSingle("select * from ".$this->config["table_prefix"]."acls where page_tag = '".mysql_real_escape_string($tag)."' and privilege = '".mysql_real_escape_string($privilege)."' limit 1")) && $useDefaults) |
{ |
$acl = array("page_tag" => $tag, "privilege" => $privilege, "list" => $this->GetConfigValue("default_".$privilege."_acl")); |
} |
return $acl; |
} |
function SaveAcl($tag, $privilege, $list) { |
if ($this->LoadAcl($tag, $privilege, 0)) $this->Query("update ".$this->config["table_prefix"]."acls set list = '".mysql_real_escape_string(trim(str_replace("\r", "", $list)))."' where page_tag = '".mysql_real_escape_string($tag)."' and privilege = '".mysql_real_escape_string($privilege)."' limit 1"); |
else $this->Query("insert into ".$this->config["table_prefix"]."acls set list = '".mysql_real_escape_string(trim(str_replace("\r", "", $list)))."', page_tag = '".mysql_real_escape_string($tag)."', privilege = '".mysql_real_escape_string($privilege)."'"); |
} |
// returns true if $user (defaults to current user) has access to $privilege on $page_tag (defaults to current page) |
function HasAccess($privilege, $tag = "", $user = "") { |
// set defaults |
if (!$tag = trim($tag)) $tag = $this->GetPageTag(); |
if (!$user) |
{ |
// if current user is owner, return true. owner can do anything! |
if ($this->UserIsOwner($tag)) return true; |
$user = $this->GetUserName(); |
} |
// TODO: we might want to check if a given $user (other than the current user) |
// has access to a given page. If the $user is the owner of that page, |
// this method might give a wrong result (because we can't check that) |
// load acl |
$acl = $this->LoadAcl($tag, $privilege); |
// fine fine... now go through acl |
return $this->CheckACL($acl["list"], $user); |
} |
/** |
* Checks if some $user satisfies the given $acl |
* @param string $acl The acl to check, in the same format than for pages ACL's |
* @param string $user The name of the user that must satisfy the ACL. By default |
* the current remote user. |
* @return bool True if the $user satisfies the $acl, false otherwise |
*/ |
function CheckACL($acl, $user = null, $admincheck = true) |
{ |
if (!$user) |
{ |
$user = $this->GetUserName(); |
} |
if ($admincheck && $this->UserIsAdmin($user)) |
{ |
return true; |
} |
foreach (explode("\n", $acl) as $line) |
{ |
$line = trim($line); |
// check for inversion character "!" |
if (preg_match("/^[!](.*)$/", $line, $matches)) |
{ |
$negate = 1; |
$line = $matches[1]; |
} |
else |
{ |
$negate = 0; |
} |
// if there's still anything left... lines with just a "!" don't count! |
if ($line) |
{ |
switch ($line[0]) |
{ |
case "#": // comments |
break; |
case "*": // everyone |
return !$negate; |
case "+": // registered users |
if (!$this->LoadUser($user)) |
{ |
return $negate; |
} |
else |
{ |
return !$negate; |
} |
case '@': // groups |
$gname = substr($line, 1); |
// paranoiac: avoid line = '@' |
if ($gname && $this->UserIsInGroup($gname, $user, false /* we have allready checked if user was an admin */)) |
{ |
return !$negate; |
} |
break; |
default: // simple user entry |
if ($line == $user) |
{ |
return !$negate; |
} |
} |
} |
} |
// tough luck. |
return false; |
} |
/** |
* Loads the module ACL for a certain module |
* @param string $module The name of the module |
* @param string $module_type The type of module: 'action' or 'handler' |
* @return mixed The ACL for the given module or <tt>null</tt> if no such |
* ACL was found (which should probably be interpreted as '*'). |
*/ |
function GetModuleACL($module, $module_type) |
{ |
$module = strtolower($module); |
switch ($module_type) |
{ |
case 'action': |
if (array_key_exists($module, $this->_actionsAclsCache)) |
{ |
$acl = $this->_actionsAclsCache[$module]; |
break; |
} |
$this->_actionsAclsCache[$module] = $acl = $this->GetTripleValue($module, WIKINI_VOC_ACLS, WIKINI_VOC_ACTIONS_PREFIX); |
if ($acl === null) |
{ |
$action = &$this->GetActionObject($module); |
if (is_object($action)) |
{ |
return $this->_actionsAclsCache[$module] = $action->GetDefaultACL(); |
} |
} |
break; |
case 'handler': |
$acl = $this->GetTripleValue($module, WIKINI_VOC_ACLS, WIKINI_VOC_HANDLERS_PREFIX); |
break; |
default: |
return null; // TODO error msg ? |
} |
return $acl === null ? '*' : $acl; |
} |
/** |
* Sets the $acl for a given $module |
* @param string $module The name of the module |
* @param string $module_type The type of module ('action' or 'handler') |
* @param string $acl The new ACL for that module |
* @return 0 on success, > 0 on error (see InsertTriple and UpdateTriple) |
*/ |
function SetModuleACL($module, $module_type, $acl) |
{ |
$module = strtolower($module); |
$voc_prefix = $module_type == 'action' ? WIKINI_VOC_ACTIONS_PREFIX : WIKINI_VOC_HANDLERS_PREFIX; |
$old = $this->GetTripleValue($module, WIKINI_VOC_ACLS, $voc_prefix); |
if ($module_type == 'action') |
{ |
$this->_actionsAclsCache[$module] = $acl; |
} |
if ($old === null) |
{ |
return $this->InsertTriple($module, WIKINI_VOC_ACLS, $acl, $voc_prefix); |
} |
elseif ($old === $acl) |
{ |
return 0; // nothing has changed |
} |
else |
{ |
return $this->UpdateTriple($module, WIKINI_VOC_ACLS, $old, $acl, $voc_prefix); |
} |
} |
/** |
* Checks if a $user satisfies the ACL to access a certain $module |
* @param string $module The name of the module to access |
* @param string $module_type The type of the module ('action' or 'handler') |
* @param string $user The name of the user. By default |
* the current remote user. |
* @return bool True if the $user has access to the given $module, false otherwise. |
*/ |
function CheckModuleACL($module, $module_type, $user = null) |
{ |
$acl = $this->GetModuleACL($module, $module_type); |
if ($acl === null) return true; // undefined ACL means everybody has access |
return $this->CheckACL($acl, $user); |
} |
// MAINTENANCE |
function Maintenance() { |
// purge referrers |
$this->PurgeReferrers(); |
// purge old page revisions |
$this->PurgePages(); |
} |
// THE BIG EVIL NASTY ONE! |
function Run($tag, $method = "") { |
if(!($this->GetMicroTime()%9)) $this->Maintenance(); |
$this->ReadInterWikiConfig(); |
// do our stuff! |
if (!$this->method = trim($method)) $this->method = "show"; |
if (!$this->tag = trim($tag)) $this->Redirect($this->href("", $this->config["root_page"])); |
if ((!$this->GetUser() && isset($_COOKIE["name"])) && ($user = $this->LoadUser($_COOKIE["name"], $_COOKIE["password"]))) $this->SetUser($user, $_COOKIE["remember"]); |
$this->SetPage($this->LoadPage($tag, (isset($_REQUEST["time"]) ? $_REQUEST["time"] :''))); |
$this->LogReferrer(); |
//correction pour un support plus facile de nouveaux handlers |
if ($this->CheckModuleACL($this->method, 'handler')) |
{ |
echo $this->Method($this->method); |
} |
else |
{ |
echo 'Vous ne pouvez pas accéder à cette page par le handler spécifié.'; |
} |
// action redirect: aucune redirection n'a eu lieu, effacer la liste des redirections pr?c?dentes |
if(!empty($_SESSION['redirects'])) session_unregister('redirects'); |
} |
} |
// stupid version check |
if (!isset($_REQUEST)) die('$_REQUEST[] not found. Wakka requires PHP 4.1.0 or higher!'); |
// workaround for the amazingly annoying magic quotes. |
function magicQuotesSuck(&$a) |
{ |
if (is_array($a)) |
{ |
foreach ($a as $k => $v) |
{ |
if (is_array($v)) |
magicQuotesSuck($a[$k]); |
else |
$a[$k] = stripslashes($v); |
} |
} |
} |
if (get_magic_quotes_runtime()) |
{ |
// Deactivate |
set_magic_quotes_runtime(false); |
} |
if (get_magic_quotes_gpc()) |
{ |
magicQuotesSuck($_POST); |
magicQuotesSuck($_GET); |
magicQuotesSuck($_COOKIE); |
} |
// default configuration values |
$wakkaConfig= array(); |
$_rewrite_mode = detectRewriteMode(); |
$wakkaDefaultConfig = array( |
'wakka_version' => '', |
'wikini_version' => '', |
'debug' => 'no', |
"mysql_host" => "localhost", |
"mysql_database" => "wikini", |
"mysql_user" => "wikini", |
"mysql_password" => '', |
"table_prefix" => "wikini_", |
"root_page" => "PagePrincipale", |
"wakka_name" => "MonSiteWikiNi", |
"base_url" => computeBaseURL($_rewrite_mode), |
"rewrite_mode" => $_rewrite_mode, |
'meta_keywords' => '', |
'meta_description' => '', |
"action_path" => "actions", |
"handler_path" => "handlers", |
"header_action" => "header", |
"footer_action" => "footer", |
"navigation_links" => "DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur", |
"referrers_purge_time" => 24, |
"pages_purge_time" => 90, |
"default_write_acl" => "*", |
"default_read_acl" => "*", |
"default_comment_acl" => "*", |
"preview_before_save" => 0, |
'allow_raw_html' => false); |
unset($_rewrite_mode); |
// load config |
if (!$configfile = GetEnv("WAKKA_CONFIG")) $configfile = "wakka.config.php"; |
if (file_exists($configfile)) include($configfile); |
$wakkaConfigLocation = $configfile; |
$wakkaConfig = array_merge($wakkaDefaultConfig, $wakkaConfig); |
// check for locking |
if (file_exists("locked")) { |
// read password from lockfile |
$lines = file("locked"); |
$lockpw = trim($lines[0]); |
// is authentification given? |
if (isset($_SERVER["PHP_AUTH_USER"])) { |
if (!(($_SERVER["PHP_AUTH_USER"] == "admin") && ($_SERVER["PHP_AUTH_PW"] == $lockpw))) { |
$ask = 1; |
} |
} else { |
$ask = 1; |
} |
if ($ask) { |
header("WWW-Authenticate: Basic realm=\"".$wakkaConfig["wakka_name"]." Install/Upgrade Interface\""); |
header("HTTP/1.0 401 Unauthorized"); |
echo "Ce site est en cours de mise à jour. Veuillez essayer plus tard." ; |
exit; |
} |
} |
// compare versions, start installer if necessary |
if ($wakkaConfig["wakka_version"] && (!$wakkaConfig["wikini_version"])) { $wakkaConfig["wikini_version"]=$wakkaConfig["wakka_version"]; } |
if (($wakkaConfig["wakka_version"] != WAKKA_VERSION) || ($wakkaConfig["wikini_version"] != WIKINI_VERSION)) { |
// start installer |
if (!isset($_REQUEST["installAction"]) OR !$installAction = trim($_REQUEST["installAction"])) $installAction = "default"; |
include("setup/header.php"); |
if (file_exists("setup/".$installAction.".php")) include("setup/".$installAction.".php"); else echo "<i>Invalid action</i>" ; |
include("setup/footer.php"); |
exit; |
} |
// Check if the server is configured to automatically compress the output |
if (!ini_get('zlib.output_compression') && !ini_get('zlib.output_handler')) |
{ |
// Check if we can use ob_gzhandler (requires the zlib extension) |
if (function_exists('ob_gzhandler')) |
{ |
// let ob_gzhandler do the dirty job |
// NB.: this must be done BEFORE session_start() when session.use_trans_sid is on |
ob_start('ob_gzhandler'); |
} |
// else lets do the dirty job by ourselves... |
elseif (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode')) |
{ |
ob_start ('gzencode'); |
// Tell the browser the content is compressed with gzip |
header ("Content-Encoding: gzip"); |
} |
} |
// configuration du cookie de session |
// determine le chemin pour les cookies |
$a = parse_url($wakkaConfig['base_url']); |
$CookiePath = dirname($a['path']); |
// Fixe la gestion des cookie sous les OS utilisant le \ comme s?parteur de chemin |
$CookiePath = str_replace("\\","/",$CookiePath); |
// ajoute un '/' terminal sauf si on est ? la racine web |
if ($CookiePath != '/') $CookiePath .= '/'; |
$a = session_get_cookie_params(); |
session_set_cookie_params($a['lifetime'],$CookiePath); |
unset($a); |
unset($CookiePath); |
// start session |
session_start(); |
// create wiki object |
$wiki = new Wiki($wakkaConfig); |
// check for database access |
if (!$wiki->dblink) |
{ |
echo "<p>Pour des raisons indépendantes de notre volonté, ". |
"le contenu de ce Wiki est temporairement inaccessible. Veuillez ". |
"réessayer ultérieurement, merci de votre ". |
"compréhension.</p>"; |
// Log error (useful to find the buggy server in a load balancing platform) |
trigger_error("WikiNi : DB connection failed"); |
exit; |
} |
// go! |
if (!isset($method)) $method=''; |
// Security (quick hack) : Check method syntax |
if (!(preg_match('#^[A-Za-z0-9_]*$#',$method))) { |
$method=''; |
} |
include('tools/prepend.php');//$wiki->Run($page, $method); |
?> |
/branches/v1.0-pithivier/setup/doc/PageArchive.txt |
---|
New file |
0,0 → 1,7 |
** Retour : ** [[PagePrincipale Page principale]] > [[TableauDeBord Tableau de bord]] |
---- |
====== Les pages archivées de ce Wikini ====== |
Pour archiver une page dans ce wikini, supprimer les liens qui mènent vers elle puis rajouter le tag "PageArchive" dans son contenu. |
{{TextSearch phrase="PageArchive"}} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/setup/doc/PageMenu.txt |
---|
New file |
0,0 → 1,8 |
- ""<a href="wakka.php?wiki=""{{configuration param="root_page"}}""" title="Aller sur la page d'accueil">Accueil</a>"" |
---- |
- === Pages utiles === |
- ""<a href="wakka.php?wiki=PageMenu/edit">Éditer ce menu</a>"" |
- [[ReglesDeFormatage Règles de formatage]] |
- [[PageArchive Archives de ce wikini]] |
- [[PageARetravailler Page à revoir, à completer, à supprimer...]] |
- [[BacASable Bac à sable]] |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/setup/doc/TableauDeBordDeCeWiki.txt |
---|
New file |
0,0 → 1,21 |
** Retour : ** [[PagePrincipale page principale ]] |
---- |
====== Tableau de bord ====== |
Ce tableau de bord regroupe toutes les pages utiles à l'analyse et à l'animation de ce site. |
- DerniersChangements et DerniersCommentaires |
- PlanDuSite à partir de la racine |
- IndexDesPages, IndexDesPagesBis |
- PagesOrphelines |
- PagesACreer |
- PageArchive |
- PageARetravailler |
- ParametresUtilisateur |
- EditionDesGroupes |
- GestionDesUtilisateursDeCeWiki |
---- |
==== 8 derniers comptes utilisateurs ==== |
{{Listusers last="8"}} |
==== 8 dernières pages modifiées ==== |
{{recentchanges max="8"}} |
==== 5 dernières pages commentées ==== |
{{RecentlyCommented max="5"}} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/setup/doc/PageMenuHaut.txt |
---|
New file |
0,0 → 1,0 |
""<ul class="nav"><li>""{{button nobtn="1" icon="home" link="PagePrincipale"}}""</li><li>""[[AidE Aide]]""</li><li>""[[TableauDeBordDeCeWiki Tableau de bord]]""</li><li class="has-tooltip" title=" Résumé des syntaxes Wikini permettant la mise en forme du texte." data-placement="bottom">""[[ReglesDeFormatage Règles de formatage]]""</li><li>""[[DerniersChangements Derniers changements]]""</li></ul><div class="btn-toolbar pull-right">""{{moteurrecherche class="navbar-search"}} {{login template="dropdown.tpl.html"}}""<a href="wakka.php?wiki=DerniersChangementsRss/xml" class="btn" title="S'abonner au flux RSS des derniers changements"><img src="tools/templates/presentation/images/rss-icon12-black.png" alt="rss" /></a></div>"" |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/setup/doc/GestionDesUtilisateursDeCeWiki.txt |
---|
New file |
0,0 → 1,3 |
** Retour : ** [[PagePrincipale page principale]] > [[TableauDeBordDeCeWiki Tableau de bord]] |
---- |
{{usersdeleting}} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/setup/doc/PageARetravailler.txt |
---|
New file |
0,0 → 1,13 |
** Retour : ** [[PagePrincipale Page principale]] > [[TableauDeBord Tableau de bord]] |
---- |
====== Les pages à revoir et à compléter de ce Wikini ====== |
Nous utilisons cette page pour lister les pages à retravailler. Le développement d'un wiki est si facile et si rapide qu'on peut aisément oublier des pages en friche, demandant à être complétées, réorganisées ou légèrement retravaillées. |
Cette page se propose de centraliser toutes les pages nécessitant un travail ultérieur. |
Pour cela l'éditeur aura soin de mentionner un des termes présent dans la liste ci-dessous dans la page qu'il édite. |
Les page à retravailler seront automatiquement recensées par cette page. |
{{TextSearch phrase="Asupprimer"}} |
{{TextSearch phrase="Arevoir"}} |
{{TextSearch phrase="Acompleter"}} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/setup/doc/EditionDesGroupes.txt |
---|
New file |
0,0 → 1,3 |
** Retour : ** [[PagePrincipale page principale]] > [[TableauDeBordDeCeWiki Tableau de bord]] |
---- |
{{editgroups}} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/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/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/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-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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/.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/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/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/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/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/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/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/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/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_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/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/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/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 |
---|
New file |
Property changes: |
Added: svn:ignore |
+.buildpath |
+.project |
/branches/v1.0-pithivier/doc/readme.txt |
---|
New file |
0,0 → 1,12 |
## Pour installer l'api wiki |
1/ copiez le dossier api de ce projet dans le répertoire monwikini/tools/api de wikini (ou bien monwikini/api) |
2/ configurez l'emplacement du framework en renommant le fichier framework.defaut.php en framework.php (attention, framework |
version 0.3 nécessaire) |
3/ renommez le fichier config.defaut.ini du dossier api/rest/configurations en config.ini et en modifiant les variables |
de configuration décrites dans le fichier. |
4/ copier le fichier wakka.php et renommez la copie en api.php à la racine du wiki. Prenez soin de commenter la dernière |
ligne appelant la méthode run du wiki. |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.0-pithivier/themes/bootstrap/squelettes/2cols-left-tb.tpl.html |
---|
New file |
0,0 → 1,80 |
<!doctype html> |
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{{configuration param="lang"}}"> <![endif]--> |
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="{{configuration param="lang"}}"> <![endif]--> |
<!--[if IE 8]> <html class="no-js lt-ie9" lang="{{configuration param="lang"}}"> <![endif]--> |
<!--[if gt IE 8]><!--> |
<html class="no-js" lang="{{configuration param="lang"}}"> <!--<![endif]--> |
<head lang="fr"> |
<!-- HTML Metas --> |
<meta charset="{{configuration param="charset"}}"> |
{{metarobots}} |
<meta name="keywords" content="{{configuration param="meta_keywords"}}" /> |
<meta name="description" content="{{configuration param="meta_description"}}" /> |
<meta name="viewport" content="width=device-width" /> |
<!-- Title of the page --> |
<title>{{configuration param="wakka_name"}} : {{currentpage}}</title> |
<!-- Favicons --> |
<link rel="shortcut icon" type="image/x-icon" href="{{configuration param="theme_path"}}images/favicon.ico" /> |
<link rel="apple-touch-icon" href="{{configuration param="theme_path"}}images/apple-touch-icon.png" /> |
<link rel="icon" type="image/png" href="{{configuration param="theme_path"}}images/favicon.png" /> |
{{linkstyle othercss="bootstrap/bootstrap-responsive.min.css"}} |
{{linkrss}} |
</head> |
<body {{parambody}}> |
<div class="navbar navbar-fixed-top"> |
<div class="navbar-inner"> |
<div class="container-fluid"> |
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> |
<span class="icon-bar"></span> |
<span class="icon-bar"></span> |
<span class="icon-bar"></span> |
</a> |
<a class="brand" rel="tooltip" data-placement="right" href="/" title="Retour à l'accueil du site."> |
<img src="{{configuration param="theme_path"}}images/favicon.png" alt="Logo Tela Botanica" /> |
</a> |
<a class="brand" href="{{configuration param="base_url"}}{{configuration param="root_page"}}" rel="tooltip" data-placement="right" title="Retour à la page principale de ce Wikini."> |
{{configuration param="wakka_name"}} |
</a> |
<nav class="nav-collapse"> |
{{include page="PageMenuHaut" class="topnavpage" doubleclic="1" actif="1"}} |
<div class="clear"></div> |
</nav><!--/.nav-collapse --> |
</div> |
</div> |
</div> |
<div class="container-fluid main-body" role="main"> |
<div class="row-fluid"> |
<div class="span3"> |
<nav class="well sidebar-nav"> |
{{include page="PageMenu" doubleclic="1" actif="1"}} |
</nav><!--/.well --> |
</div><!--/span--> |
<div class="span9" {{doubleclic}}> |
{WIKINI_PAGE} |
</div><!--/span--> |
</div><!--/row--> |
<div class="row-fluid"> |
<div class="span3"><!-- Bizare, ne devrait pas être nécessaire --></div> |
<div class="offset3 span9"> |
{{barreredaction class="form-actions"}} |
</div> |
</div> |
<footer> |
{{include page="PageFooter" doubleclic="1"}} |
</footer><!-- end of footer --> |
</div><!--/.fluid-container--> |
{{linkjavascript}} |
<script type="text/javascript"> |
$(document).ready(function() { |
$('a[rel="tooltip"], .has-tooltip').tooltip(); |
}); |
</script> |
</body> |
</html> |
/branches/v1.0-pithivier/themes/bootstrap/squelettes/2cols-left-tb-flore.tpl.html |
---|
New file |
0,0 → 1,82 |
<!doctype html> |
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{{configuration param="lang"}}"> <![endif]--> |
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="{{configuration param="lang"}}"> <![endif]--> |
<!--[if IE 8]> <html class="no-js lt-ie9" lang="{{configuration param="lang"}}"> <![endif]--> |
<!--[if gt IE 8]><!--> |
<html class="no-js" lang="{{configuration param="lang"}}"> <!--<![endif]--> |
<head lang="fr"> |
<!-- HTML Metas --> |
<meta charset="{{configuration param="charset"}}"> |
{{metarobots}} |
<meta name="keywords" content="{{configuration param="meta_keywords"}}" /> |
<meta name="description" content="{{configuration param="meta_description"}}" /> |
<meta name="viewport" content="width=device-width" /> |
<!-- Title of the page --> |
<title>{{configuration param="wakka_name"}} : {{currentpage}}</title> |
<!-- Favicons --> |
<link rel="shortcut icon" type="image/x-icon" href="{{configuration param="theme_path"}}images/favicon.ico" /> |
<link rel="apple-touch-icon" href="{{configuration param="theme_path"}}images/apple-touch-icon.png" /> |
<link rel="icon" type="image/png" href="{{configuration param="theme_path"}}images/favicon.png" /> |
{{linkstyle othercss="bootstrap/bootstrap-responsive.min.css"}} |
<link rel="stylesheet" href="{{configuration param="theme_path"}}styles/flore.css" /> |
{{linkrss}} |
</head> |
<body {{parambody}}> |
<div class="navbar navbar-fixed-top"> |
<div class="navbar-inner"> |
<div class="container-fluid"> |
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> |
<span class="icon-bar"></span> |
<span class="icon-bar"></span> |
<span class="icon-bar"></span> |
</a> |
<a class="brand" rel="tooltip" data-placement="right" href="/" title="Retour à l'accueil du site."> |
<img src="{{configuration param="theme_path"}}images/favicon.png" alt="Logo Tela Botanica" /> |
</a> |
<a class="brand" href="{{configuration param="base_url"}}{{configuration param="root_page"}}" rel="tooltip" data-placement="right" title="Retour à la page principale de ce Wikini."> |
{{configuration param="wakka_name"}} |
</a> |
<nav class="nav-collapse"> |
{{include page="PageMenuHaut" class="topnavpage" doubleclic="1" actif="1"}} |
<div class="clear"></div> |
</nav><!--/.nav-collapse --> |
</div> |
</div> |
</div> |
<div class="container-fluid main-body" role="main"> |
<div class="row-fluid"> |
<div class="span3"> |
<nav class="well sidebar-nav"> |
{{include page="PageMenu" doubleclic="1" actif="1"}} |
</nav><!--/.well --> |
</div><!--/span--> |
<div class="span9" {{doubleclic}}> |
{WIKINI_PAGE} |
</div><!--/span--> |
</div><!--/row--> |
<div class="row-fluid"> |
<div class="span3"><!-- Bizare, ne devrait pas être nécessaire --></div> |
<div class="offset3 span9"> |
{{barreredaction class="form-actions"}} |
</div> |
</div> |
<footer> |
{{include page="PageFooter" doubleclic="1"}} |
</footer><!-- end of footer --> |
</div><!--/.fluid-container--> |
{{linkjavascript}} |
<script type="text/javascript"> |
$(document).ready(function() { |
$('a[rel="tooltip"], .has-tooltip').tooltip(); |
}); |
</script> |
</body> |
</html> |
/branches/v1.0-pithivier/themes/bootstrap/styles/bootstrap/telabotanica/bootstrap.min.css |
---|
New file |
0,0 → 1,858 |
/* generated by BootTheme (http://www.boottheme.com) */ |
.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} |
.clearfix:after{clear:both;} |
.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} |
.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} |
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} |
audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} |
audio:not([controls]){display:none;} |
html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} |
a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} |
a:hover,a:active{outline:0;} |
sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} |
sup{top:-0.5em;} |
sub{bottom:-0.25em;} |
img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} |
#map_canvas img,.google-maps img{max-width:none;} |
button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} |
button,input{*overflow:visible;line-height:normal;} |
button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} |
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} |
label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} |
input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;} |
input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} |
textarea{overflow:auto;vertical-align:top;} |
@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important;} a,a:visited{text-decoration:underline;} a[href]:after{content:" (" attr(href) ")";} abbr[title]:after{content:" (" attr(title) ")";} .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:"";} pre,blockquote{border:1px solid #999;page-break-inside:avoid;} thead{display:table-header-group;} tr,img{page-break-inside:avoid;} img{max-width:100% !important;} @page {margin:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;} |
a{color:#598000;text-decoration:none;} |
a:hover,a:focus{color:#faab3c;text-decoration:underline;} |
.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} |
.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} |
.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} |
.row:after{clear:both;} |
[class*="span"]{float:left;min-height:1px;margin-left:20px;} |
.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} |
.span12{width:940px;} |
.span11{width:860px;} |
.span10{width:780px;} |
.span9{width:700px;} |
.span8{width:620px;} |
.span7{width:540px;} |
.span6{width:460px;} |
.span5{width:380px;} |
.span4{width:300px;} |
.span3{width:220px;} |
.span2{width:140px;} |
.span1{width:60px;} |
.offset12{margin-left:980px;} |
.offset11{margin-left:900px;} |
.offset10{margin-left:820px;} |
.offset9{margin-left:740px;} |
.offset8{margin-left:660px;} |
.offset7{margin-left:580px;} |
.offset6{margin-left:500px;} |
.offset5{margin-left:420px;} |
.offset4{margin-left:340px;} |
.offset3{margin-left:260px;} |
.offset2{margin-left:180px;} |
.offset1{margin-left:100px;} |
.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} |
.row-fluid:after{clear:both;} |
.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} |
.row-fluid [class*="span"]:first-child{margin-left:0;} |
.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} |
.row-fluid .span12{width:100%;*width:99.94680851063829%;} |
.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} |
.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} |
.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} |
.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} |
.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} |
.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} |
.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} |
.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} |
.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} |
.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} |
.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} |
.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} |
.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} |
.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} |
.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} |
.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} |
.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} |
.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} |
.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} |
.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} |
.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} |
.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} |
.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} |
.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} |
.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} |
.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} |
.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} |
.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} |
.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} |
.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} |
.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} |
.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} |
.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} |
.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} |
.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} |
[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} |
[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} |
.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} |
.container:after{clear:both;} |
.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} |
.container-fluid:after{clear:both;} |
p{margin:0 0 10px;} |
.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;} |
small{font-size:85%;} |
strong{font-weight:bold;} |
em{font-style:italic;} |
cite{font-style:normal;} |
.muted{color:#999999;} |
a.muted:hover,a.muted:focus{color:#808080;} |
.text-warning{color:#c09853;} |
a.text-warning:hover,a.text-warning:focus{color:#a47e3c;} |
.text-error{color:#b94a48;} |
a.text-error:hover,a.text-error:focus{color:#953b39;} |
.text-info{color:#3a87ad;} |
a.text-info:hover,a.text-info:focus{color:#2d6987;} |
.text-success{color:#468847;} |
a.text-success:hover,a.text-success:focus{color:#356635;} |
.text-left{text-align:left;} |
.text-right{text-align:right;} |
.text-center{text-align:center;} |
h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} |
h1,h2,h3{line-height:40px;} |
h1{font-size:38.5px;} |
h2{font-size:31.5px;} |
h3{font-size:24.5px;} |
h4{font-size:17.5px;} |
h5{font-size:14px;} |
h6{font-size:11.9px;} |
h1 small{font-size:24.5px;} |
h2 small{font-size:17.5px;} |
h3 small{font-size:14px;} |
h4 small{font-size:14px;} |
.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} |
ul,ol{padding:0;margin:0 0 10px 25px;} |
ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} |
li{line-height:20px;} |
ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} |
ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px;} |
dl{margin-bottom:20px;} |
dt,dd{line-height:20px;} |
dt{font-weight:bold;} |
dd{margin-left:10px;} |
.dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} |
.dl-horizontal:after{clear:both;} |
.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} |
.dl-horizontal dd{margin-left:180px;} |
hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} |
abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} |
abbr.initialism{font-size:90%;text-transform:uppercase;} |
blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25;} |
blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} |
blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} |
blockquote.pull-right small:before{content:'';} |
blockquote.pull-right small:after{content:'\00A0 \2014';} |
q:before,q:after,blockquote:before,blockquote:after{content:"";} |
address{display:block;margin-bottom:20px;font-style:normal;line-height:20px;} |
code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap;} |
pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;} |
pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0;} |
.pre-scrollable{max-height:340px;overflow-y:scroll;} |
form{margin:0 0 20px;} |
fieldset{padding:0;margin:0;border:0;} |
legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} |
label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;} |
input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} |
label{display:block;margin-bottom:5px;} |
select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} |
input,textarea,.uneditable-input{width:206px;} |
textarea{height:auto;} |
textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} |
input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} |
input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} |
select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} |
select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} |
select[multiple],select[size]{height:auto;} |
select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} |
.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} |
.uneditable-input{overflow:hidden;white-space:nowrap;} |
.uneditable-textarea{width:auto;height:auto;} |
input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} |
input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} |
input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} |
.radio,.checkbox{min-height:20px;padding-left:20px;} |
.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} |
.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} |
.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} |
.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} |
.input-mini{width:60px;} |
.input-small{width:90px;} |
.input-medium{width:150px;} |
.input-large{width:210px;} |
.input-xlarge{width:270px;} |
.input-xxlarge{width:530px;} |
input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} |
.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} |
input,textarea,.uneditable-input{margin-left:0;} |
.controls-row [class*="span"]+[class*="span"]{margin-left:20px;} |
input.span12,textarea.span12,.uneditable-input.span12{width:926px;} |
input.span11,textarea.span11,.uneditable-input.span11{width:846px;} |
input.span10,textarea.span10,.uneditable-input.span10{width:766px;} |
input.span9,textarea.span9,.uneditable-input.span9{width:686px;} |
input.span8,textarea.span8,.uneditable-input.span8{width:606px;} |
input.span7,textarea.span7,.uneditable-input.span7{width:526px;} |
input.span6,textarea.span6,.uneditable-input.span6{width:446px;} |
input.span5,textarea.span5,.uneditable-input.span5{width:366px;} |
input.span4,textarea.span4,.uneditable-input.span4{width:286px;} |
input.span3,textarea.span3,.uneditable-input.span3{width:206px;} |
input.span2,textarea.span2,.uneditable-input.span2{width:126px;} |
input.span1,textarea.span1,.uneditable-input.span1{width:46px;} |
.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} |
.controls-row:after{clear:both;} |
.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} |
.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} |
input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} |
input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} |
.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} |
.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} |
.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;} |
.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} |
.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} |
.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} |
.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;} |
.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} |
.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} |
.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} |
.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;} |
.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} |
.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} |
.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} |
.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} |
.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} |
input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} |
.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} |
.form-actions:after{clear:both;} |
.help-block,.help-inline{color:#595959;} |
.help-block{display:block;margin-bottom:10px;} |
.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} |
.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px;} |
.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} |
.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} |
.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} |
.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} |
.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} |
.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} |
.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} |
.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
.input-prepend.input-append .btn-group:first-child{margin-left:0;} |
input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} |
.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} |
.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} |
.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} |
.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} |
.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} |
.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} |
.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} |
.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} |
.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} |
.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} |
.control-group{margin-bottom:10px;} |
legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} |
.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} |
.form-horizontal .control-group:after{clear:both;} |
.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} |
.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} |
.form-horizontal .help-block{margin-bottom:0;} |
.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} |
.form-horizontal .form-actions{padding-left:180px;} |
table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} |
.table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} |
.table th{font-weight:bold;} |
.table thead th{vertical-align:bottom;} |
.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} |
.table tbody+tbody{border-top:2px solid #dddddd;} |
.table .table{background-color:#ffffff;} |
.table-condensed th,.table-condensed td{padding:4px 5px;} |
.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} |
.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} |
.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} |
.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} |
.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} |
.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} |
.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} |
.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} |
.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} |
.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9;} |
.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5;} |
table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} |
.table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} |
.table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} |
.table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} |
.table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} |
.table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} |
.table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} |
.table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} |
.table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} |
.table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} |
.table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} |
.table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} |
.table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} |
.table tbody tr.success>td{background-color:#dff0d8;} |
.table tbody tr.error>td{background-color:#f2dede;} |
.table tbody tr.warning>td{background-color:#fcf8e3;} |
.table tbody tr.info>td{background-color:#d9edf7;} |
.table-hover tbody tr.success:hover>td{background-color:#d0e9c6;} |
.table-hover tbody tr.error:hover>td{background-color:#ebcccc;} |
.table-hover tbody tr.warning:hover>td{background-color:#faf2cc;} |
.table-hover tbody tr.info:hover>td{background-color:#c4e3f3;} |
[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../../../images/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;} |
.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../../../images/glyphicons-halflings-white.png");} |
.icon-glass{background-position:0 0;} |
.icon-music{background-position:-24px 0;} |
.icon-search{background-position:-48px 0;} |
.icon-envelope{background-position:-72px 0;} |
.icon-heart{background-position:-96px 0;} |
.icon-star{background-position:-120px 0;} |
.icon-star-empty{background-position:-144px 0;} |
.icon-user{background-position:-168px 0;} |
.icon-film{background-position:-192px 0;} |
.icon-th-large{background-position:-216px 0;} |
.icon-th{background-position:-240px 0;} |
.icon-th-list{background-position:-264px 0;} |
.icon-ok{background-position:-288px 0;} |
.icon-remove{background-position:-312px 0;} |
.icon-zoom-in{background-position:-336px 0;} |
.icon-zoom-out{background-position:-360px 0;} |
.icon-off{background-position:-384px 0;} |
.icon-signal{background-position:-408px 0;} |
.icon-cog{background-position:-432px 0;} |
.icon-trash{background-position:-456px 0;} |
.icon-home{background-position:0 -24px;} |
.icon-file{background-position:-24px -24px;} |
.icon-time{background-position:-48px -24px;} |
.icon-road{background-position:-72px -24px;} |
.icon-download-alt{background-position:-96px -24px;} |
.icon-download{background-position:-120px -24px;} |
.icon-upload{background-position:-144px -24px;} |
.icon-inbox{background-position:-168px -24px;} |
.icon-play-circle{background-position:-192px -24px;} |
.icon-repeat{background-position:-216px -24px;} |
.icon-refresh{background-position:-240px -24px;} |
.icon-list-alt{background-position:-264px -24px;} |
.icon-lock{background-position:-287px -24px;} |
.icon-flag{background-position:-312px -24px;} |
.icon-headphones{background-position:-336px -24px;} |
.icon-volume-off{background-position:-360px -24px;} |
.icon-volume-down{background-position:-384px -24px;} |
.icon-volume-up{background-position:-408px -24px;} |
.icon-qrcode{background-position:-432px -24px;} |
.icon-barcode{background-position:-456px -24px;} |
.icon-tag{background-position:0 -48px;} |
.icon-tags{background-position:-25px -48px;} |
.icon-book{background-position:-48px -48px;} |
.icon-bookmark{background-position:-72px -48px;} |
.icon-print{background-position:-96px -48px;} |
.icon-camera{background-position:-120px -48px;} |
.icon-font{background-position:-144px -48px;} |
.icon-bold{background-position:-167px -48px;} |
.icon-italic{background-position:-192px -48px;} |
.icon-text-height{background-position:-216px -48px;} |
.icon-text-width{background-position:-240px -48px;} |
.icon-align-left{background-position:-264px -48px;} |
.icon-align-center{background-position:-288px -48px;} |
.icon-align-right{background-position:-312px -48px;} |
.icon-align-justify{background-position:-336px -48px;} |
.icon-list{background-position:-360px -48px;} |
.icon-indent-left{background-position:-384px -48px;} |
.icon-indent-right{background-position:-408px -48px;} |
.icon-facetime-video{background-position:-432px -48px;} |
.icon-picture{background-position:-456px -48px;} |
.icon-pencil{background-position:0 -72px;} |
.icon-map-marker{background-position:-24px -72px;} |
.icon-adjust{background-position:-48px -72px;} |
.icon-tint{background-position:-72px -72px;} |
.icon-edit{background-position:-96px -72px;} |
.icon-share{background-position:-120px -72px;} |
.icon-check{background-position:-144px -72px;} |
.icon-move{background-position:-168px -72px;} |
.icon-step-backward{background-position:-192px -72px;} |
.icon-fast-backward{background-position:-216px -72px;} |
.icon-backward{background-position:-240px -72px;} |
.icon-play{background-position:-264px -72px;} |
.icon-pause{background-position:-288px -72px;} |
.icon-stop{background-position:-312px -72px;} |
.icon-forward{background-position:-336px -72px;} |
.icon-fast-forward{background-position:-360px -72px;} |
.icon-step-forward{background-position:-384px -72px;} |
.icon-eject{background-position:-408px -72px;} |
.icon-chevron-left{background-position:-432px -72px;} |
.icon-chevron-right{background-position:-456px -72px;} |
.icon-plus-sign{background-position:0 -96px;} |
.icon-minus-sign{background-position:-24px -96px;} |
.icon-remove-sign{background-position:-48px -96px;} |
.icon-ok-sign{background-position:-72px -96px;} |
.icon-question-sign{background-position:-96px -96px;} |
.icon-info-sign{background-position:-120px -96px;} |
.icon-screenshot{background-position:-144px -96px;} |
.icon-remove-circle{background-position:-168px -96px;} |
.icon-ok-circle{background-position:-192px -96px;} |
.icon-ban-circle{background-position:-216px -96px;} |
.icon-arrow-left{background-position:-240px -96px;} |
.icon-arrow-right{background-position:-264px -96px;} |
.icon-arrow-up{background-position:-289px -96px;} |
.icon-arrow-down{background-position:-312px -96px;} |
.icon-share-alt{background-position:-336px -96px;} |
.icon-resize-full{background-position:-360px -96px;} |
.icon-resize-small{background-position:-384px -96px;} |
.icon-plus{background-position:-408px -96px;} |
.icon-minus{background-position:-433px -96px;} |
.icon-asterisk{background-position:-456px -96px;} |
.icon-exclamation-sign{background-position:0 -120px;} |
.icon-gift{background-position:-24px -120px;} |
.icon-leaf{background-position:-48px -120px;} |
.icon-fire{background-position:-72px -120px;} |
.icon-eye-open{background-position:-96px -120px;} |
.icon-eye-close{background-position:-120px -120px;} |
.icon-warning-sign{background-position:-144px -120px;} |
.icon-plane{background-position:-168px -120px;} |
.icon-calendar{background-position:-192px -120px;} |
.icon-random{background-position:-216px -120px;width:16px;} |
.icon-comment{background-position:-240px -120px;} |
.icon-magnet{background-position:-264px -120px;} |
.icon-chevron-up{background-position:-288px -120px;} |
.icon-chevron-down{background-position:-313px -119px;} |
.icon-retweet{background-position:-336px -120px;} |
.icon-shopping-cart{background-position:-360px -120px;} |
.icon-folder-close{background-position:-384px -120px;width:16px;} |
.icon-folder-open{background-position:-408px -120px;width:16px;} |
.icon-resize-vertical{background-position:-432px -119px;} |
.icon-resize-horizontal{background-position:-456px -118px;} |
.icon-hdd{background-position:0 -144px;} |
.icon-bullhorn{background-position:-24px -144px;} |
.icon-bell{background-position:-48px -144px;} |
.icon-certificate{background-position:-72px -144px;} |
.icon-thumbs-up{background-position:-96px -144px;} |
.icon-thumbs-down{background-position:-120px -144px;} |
.icon-hand-right{background-position:-144px -144px;} |
.icon-hand-left{background-position:-168px -144px;} |
.icon-hand-up{background-position:-192px -144px;} |
.icon-hand-down{background-position:-216px -144px;} |
.icon-circle-arrow-right{background-position:-240px -144px;} |
.icon-circle-arrow-left{background-position:-264px -144px;} |
.icon-circle-arrow-up{background-position:-288px -144px;} |
.icon-circle-arrow-down{background-position:-312px -144px;} |
.icon-globe{background-position:-336px -144px;} |
.icon-wrench{background-position:-360px -144px;} |
.icon-tasks{background-position:-384px -144px;} |
.icon-filter{background-position:-408px -144px;} |
.icon-briefcase{background-position:-432px -144px;} |
.icon-fullscreen{background-position:-456px -144px;} |
.dropup,.dropdown{position:relative;} |
.dropdown-toggle{*margin-bottom:-3px;} |
.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} |
.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} |
.dropdown .caret{margin-top:8px;margin-left:2px;} |
.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} |
.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} |
.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333333;white-space:nowrap;} |
.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#ffffff;background-color:#527600;background-image:-moz-linear-gradient(top, #598000, #476700);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#598000), to(#476700));background-image:-webkit-linear-gradient(top, #598000, #476700);background-image:-o-linear-gradient(top, #598000, #476700);background-image:linear-gradient(to bottom, #598000, #476700);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff598000', endColorstr='#ff476700', GradientType=0);} |
.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#527600;background-image:-moz-linear-gradient(top, #598000, #476700);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#598000), to(#476700));background-image:-webkit-linear-gradient(top, #598000, #476700);background-image:-o-linear-gradient(top, #598000, #476700);background-image:linear-gradient(to bottom, #598000, #476700);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff598000', endColorstr='#ff476700', GradientType=0);} |
.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999;} |
.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} |
.open{*z-index:1000;}.open>.dropdown-menu{display:block;} |
.pull-right>.dropdown-menu{right:0;left:auto;} |
.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} |
.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} |
.dropdown-submenu{position:relative;} |
.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} |
.dropdown-submenu:hover>.dropdown-menu{display:block;} |
.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} |
.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} |
.dropdown-submenu:hover>a:after{border-left-color:#ffffff;} |
.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} |
.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} |
.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} |
.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} |
.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} |
.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} |
button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} |
.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #cccccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} |
.btn:active,.btn.active{background-color:#cccccc \9;} |
.btn:first-child{*margin-left:0;} |
.btn:hover,.btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} |
.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} |
.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} |
.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} |
.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} |
.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} |
.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} |
.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} |
.btn-block+.btn-block{margin-top:5px;} |
input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} |
.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} |
.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#488000;background-image:-moz-linear-gradient(top, #598000, #2e8000);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#598000), to(#2e8000));background-image:-webkit-linear-gradient(top, #598000, #2e8000);background-image:-o-linear-gradient(top, #598000, #2e8000);background-image:linear-gradient(to bottom, #598000, #2e8000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff598000', endColorstr='#ff2e8000', GradientType=0);border-color:#2e8000 #2e8000 #133400;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2e8000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#2e8000;*background-color:#256700;} |
.btn-primary:active,.btn-primary.active{background-color:#1c4d00 \9;} |
.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} |
.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} |
.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} |
.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} |
.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} |
.btn-success:active,.btn-success.active{background-color:#408140 \9;} |
.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} |
.btn-info:active,.btn-info.active{background-color:#24748c \9;} |
.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} |
.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} |
button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} |
button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} |
button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} |
button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} |
.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} |
.btn-link{border-color:transparent;cursor:pointer;color:#598000;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.btn-link:hover,.btn-link:focus{color:#faab3c;text-decoration:underline;background-color:transparent;} |
.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333333;text-decoration:none;} |
.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} |
.btn-group+.btn-group{margin-left:5px;} |
.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} |
.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.btn-group>.btn+.btn{margin-left:-1px;} |
.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;} |
.btn-group>.btn-mini{font-size:10.5px;} |
.btn-group>.btn-small{font-size:11.9px;} |
.btn-group>.btn-large{font-size:17.5px;} |
.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} |
.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} |
.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} |
.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} |
.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} |
.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} |
.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} |
.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} |
.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} |
.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} |
.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} |
.btn-group.open .btn-primary.dropdown-toggle{background-color:#2e8000;} |
.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} |
.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} |
.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} |
.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} |
.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} |
.btn .caret{margin-top:8px;margin-left:0;} |
.btn-large .caret{margin-top:6px;} |
.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} |
.btn-mini .caret,.btn-small .caret{margin-top:8px;} |
.dropup .btn-large .caret{border-bottom-width:5px;} |
.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} |
.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} |
.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} |
.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} |
.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} |
.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} |
.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
.alert,.alert h4{color:#c09853;} |
.alert h4{margin:0;} |
.alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} |
.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} |
.alert-success h4{color:#468847;} |
.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} |
.alert-danger h4,.alert-error h4{color:#b94a48;} |
.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} |
.alert-info h4{color:#3a87ad;} |
.alert-block{padding-top:14px;padding-bottom:14px;} |
.alert-block>p,.alert-block>ul{margin-bottom:0;} |
.alert-block p+p{margin-top:5px;} |
.nav{margin-left:0;margin-bottom:20px;list-style:none;} |
.nav>li>a{display:block;} |
.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee;} |
.nav>li>a>img{max-width:none;} |
.nav>.pull-right{float:right;} |
.nav-header{display:block;padding:3px 15px;font-size:13px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} |
.nav li+.nav-header{margin-top:9px;} |
.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} |
.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} |
.nav-list>li>a{padding:3px 15px;} |
.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#598000;} |
.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} |
.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} |
.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} |
.nav-tabs:after,.nav-pills:after{clear:both;} |
.nav-tabs>li,.nav-pills>li{float:left;} |
.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} |
.nav-tabs{border-bottom:1px solid #ddd;} |
.nav-tabs>li{margin-bottom:-1px;} |
.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #dddddd;} |
.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} |
.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} |
.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#ffffff;background-color:#598000;} |
.nav-stacked>li{float:none;} |
.nav-stacked>li>a{margin-right:0;} |
.nav-tabs.nav-stacked{border-bottom:0;} |
.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} |
.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2;} |
.nav-pills.nav-stacked>li>a{margin-bottom:3px;} |
.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} |
.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} |
.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
.nav .dropdown-toggle .caret{border-top-color:#598000;border-bottom-color:#598000;margin-top:6px;} |
.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#faab3c;border-bottom-color:#faab3c;} |
.nav-tabs .dropdown-toggle .caret{margin-top:8px;} |
.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} |
.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} |
.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer;} |
.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#ffffff;background-color:#999999;border-color:#999999;} |
.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} |
.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999999;} |
.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} |
.tabbable:after{clear:both;} |
.tab-content{overflow:auto;} |
.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} |
.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} |
.tab-content>.active,.pill-content>.active{display:block;} |
.tabs-below>.nav-tabs{border-top:1px solid #ddd;} |
.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} |
.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd;} |
.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd;} |
.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} |
.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} |
.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} |
.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} |
.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} |
.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} |
.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} |
.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} |
.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} |
.nav>.disabled>a{color:#999999;} |
.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default;} |
.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} |
.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#94bd3e;background-image:-moz-linear-gradient(top, #9ac342, #8cb339);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#9ac342), to(#8cb339));background-image:-webkit-linear-gradient(top, #9ac342, #8cb339);background-image:-o-linear-gradient(top, #9ac342, #8cb339);background-image:linear-gradient(to bottom, #9ac342, #8cb339);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff9ac342', endColorstr='#ff8cb339', GradientType=0);border:1px solid #68842a;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} |
.navbar-inner:after{clear:both;} |
.navbar .container{width:auto;} |
.nav-collapse.collapse{height:auto;overflow:visible;} |
.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#ffffff;text-shadow:0 1px 0 #9ac342;}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none;} |
.navbar-text{margin-bottom:0;line-height:40px;color:#5c5950;} |
.navbar-link{color:#ffffff;}.navbar-link:hover,.navbar-link:focus{color:#333333;} |
.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #8cb339;border-right:1px solid #9ac342;} |
.navbar .btn,.navbar .btn-group{margin-top:5px;} |
.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0;} |
.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} |
.navbar-form:after{clear:both;} |
.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} |
.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} |
.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} |
.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} |
.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} |
.navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} |
.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} |
.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} |
.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} |
.navbar-fixed-top{top:0;} |
.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} |
.navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} |
.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} |
.navbar .nav.pull-right{float:right;margin-right:0;} |
.navbar .nav>li{float:left;} |
.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#ffffff;text-decoration:none;text-shadow:0 1px 0 #9ac342;} |
.navbar .nav .dropdown-toggle .caret{margin-top:8px;} |
.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} |
.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#7d9f33;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} |
.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#86ab36;background-image:-moz-linear-gradient(top, #8cb339, #7d9f33);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#8cb339), to(#7d9f33));background-image:-webkit-linear-gradient(top, #8cb339, #7d9f33);background-image:-o-linear-gradient(top, #8cb339, #7d9f33);background-image:linear-gradient(to bottom, #8cb339, #7d9f33);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8cb339', endColorstr='#ff7d9f33', GradientType=0);border-color:#7d9f33 #7d9f33 #4f6520;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#7d9f33;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#7d9f33;*background-color:#6e8c2c;} |
.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#5f7926 \9;} |
.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} |
.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} |
.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} |
.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} |
.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} |
.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} |
.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333333;border-bottom-color:#333333;} |
.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#7d9f33;color:#555555;} |
.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} |
.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} |
.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} |
.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} |
.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} |
.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#ffffff;} |
.navbar-inverse .brand{color:#999999;} |
.navbar-inverse .navbar-text{color:#999999;} |
.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} |
.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} |
.navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#ffffff;} |
.navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} |
.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} |
.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} |
.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
.navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} |
.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} |
.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} |
.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} |
.navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} |
.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} |
.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} |
.breadcrumb>.active{color:#999999;} |
.pagination{margin:20px 0;} |
.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} |
.pagination ul>li{display:inline;} |
.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} |
.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} |
.pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} |
.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999999;background-color:transparent;cursor:default;} |
.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} |
.pagination-centered{text-align:center;} |
.pagination-right{text-align:right;} |
.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px;} |
.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} |
.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} |
.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} |
.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} |
.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px;} |
.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px;} |
.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} |
.pager:after{clear:both;} |
.pager li{display:inline;} |
.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} |
.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5;} |
.pager .next>a,.pager .next>span{float:right;} |
.pager .previous>a,.pager .previous>span{float:left;} |
.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;background-color:#fff;cursor:default;} |
.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} |
.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} |
.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} |
.modal.fade.in{top:50%;} |
.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} |
.modal-header h3{margin:0;line-height:30px;} |
.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} |
.modal-form{margin-bottom:0;} |
.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} |
.modal-footer:after{clear:both;} |
.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} |
.modal-footer .btn-group .btn+.btn{margin-left:-1px;} |
.modal-footer .btn-block+.btn-block{margin-left:0;} |
.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} |
.tooltip.top{margin-top:-3px;padding:5px 0;} |
.tooltip.right{margin-left:3px;padding:0 5px;} |
.tooltip.bottom{margin-top:3px;padding:5px 0;} |
.tooltip.left{margin-left:-3px;padding:0 5px;} |
.tooltip-inner{max-width:200px;padding:8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;} |
.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000;} |
.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} |
.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} |
.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} |
.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} |
.popover.right{margin-left:10px;} |
.popover.bottom{margin-top:10px;} |
.popover.left{margin-left:-10px;} |
.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}.popover-title:empty{display:none;} |
.popover-content{padding:9px 14px;} |
.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;} |
.popover .arrow{border-width:11px;} |
.popover .arrow:after{border-width:10px;content:"";} |
.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} |
.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} |
.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} |
.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} |
.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} |
.thumbnails:after{clear:both;} |
.row-fluid .thumbnails{margin-left:0;} |
.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} |
.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} |
a.thumbnail:hover,a.thumbnail:focus{border-color:#598000;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} |
.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} |
.thumbnail .caption{padding:9px;color:#555555;} |
.media,.media-body{overflow:hidden;*overflow:visible;zoom:1;} |
.media,.media .media{margin-top:15px;} |
.media:first-child{margin-top:0;} |
.media-object{display:block;} |
.media-heading{margin:0 0 5px;} |
.media>.pull-left{margin-right:10px;} |
.media>.pull-right{margin-left:10px;} |
.media-list{margin-left:0;list-style:none;} |
.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} |
.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} |
.label:empty,.badge:empty{display:none;} |
a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer;} |
.label-important,.badge-important{background-color:#b94a48;} |
.label-important[href],.badge-important[href]{background-color:#953b39;} |
.label-warning,.badge-warning{background-color:#f89406;} |
.label-warning[href],.badge-warning[href]{background-color:#c67605;} |
.label-success,.badge-success{background-color:#468847;} |
.label-success[href],.badge-success[href]{background-color:#356635;} |
.label-info,.badge-info{background-color:#3a87ad;} |
.label-info[href],.badge-info[href]{background-color:#2d6987;} |
.label-inverse,.badge-inverse{background-color:#333333;} |
.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} |
.btn .label,.btn .badge{position:relative;top:-1px;} |
.btn-mini .label,.btn-mini .badge{top:0;} |
@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-o-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
.progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} |
.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} |
.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} |
.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} |
.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} |
.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} |
.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} |
.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} |
.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
.accordion{margin-bottom:20px;} |
.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
.accordion-heading{border-bottom:0;} |
.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} |
.accordion-toggle{cursor:pointer;} |
.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} |
.carousel{position:relative;margin-bottom:20px;line-height:1;} |
.carousel-inner{overflow:hidden;width:100%;position:relative;} |
.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1;} |
.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block;} |
.carousel-inner>.active{left:0;} |
.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%;} |
.carousel-inner>.next{left:100%;} |
.carousel-inner>.prev{left:-100%;} |
.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0;} |
.carousel-inner>.active.left{left:-100%;} |
.carousel-inner>.active.right{left:100%;} |
.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} |
.carousel-control:hover,.carousel-control:focus{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} |
.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none;}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255, 255, 255, 0.25);border-radius:5px;} |
.carousel-indicators .active{background-color:#fff;} |
.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} |
.carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} |
.carousel-caption h4{margin:0 0 5px;} |
.carousel-caption p{margin-bottom:0;} |
.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} |
.hero-unit li{line-height:30px;} |
.pull-right{float:right;} |
.pull-left{float:left;} |
.hide{display:none;} |
.show{display:block;} |
.invisible{visibility:hidden;} |
.affix{position:fixed;} |
/branches/v1.0-pithivier/themes/bootstrap/styles/telabotanica.css |
---|
New file |
0,0 → 1,63 |
@import url('bootstrap/telabotanica/bootstrap.min.css'); |
.main-body { |
padding-top: 65px; |
} |
.navbar nav li ul { |
display: none; |
} |
.topnavpage { |
width:100%; |
} |
.footer a { |
margin: 0 8px; |
} |
@media (max-width:767px) { |
.main-body { |
padding-top:0; |
} |
} |
@media (min-width: 768px) and (max-width: 980px) { |
.main-body { |
padding-top:0; |
} |
} |
@media (min-width: 980px) { |
.modal { |
width:800px; |
margin-left:-400px; |
} |
} |
.navbar-search .btn-group { |
margin-top:0; |
margin-right:10px; |
} |
.nav-header{ |
text-transform:none; |
} |
.nav li + .nav-header { |
margin-top:0; |
} |
.sidebar-nav { |
padding: 5px; |
} |
.sidebar-nav .active-link { |
background-color: rgb(238,238,238); |
color: rgb(250,171,60); |
} |
.toc.well { |
margin: 45px 2px; |
padding: 5px; |
top: 5px; |
} |
.toc.well .toc-title{ |
margin: 2px; |
} |
/branches/v1.0-pithivier/themes/bootstrap/styles/flore.css |
---|
New file |
0,0 → 1,84 |
*[lang]:after { |
content:" ("attr(lang)")"; |
color:#888; |
background-color:inherit; |
font-style:italic; |
size:80%;} |
strong[class]:hover,em[class]:hover,abr[class]:hover,span:hover{ |
background-color:white; |
display:block-inline; |
cursor:crosshair; |
font-style:normal !important;} |
strong[class]:hover:before,em[class]:hover:before,abr[class]:hover:before,span:hover:before{ |
content:"["; |
font-weight:bold;} |
strong[class]:hover:after,em[class]:hover:after,abr[class]:hover:after,span:hover:after{ |
content:"]->"attr(class); |
font-weight:bold; |
font-style:normal !important; |
color:black;} |
/* Mise en forme similaire au texte d'origine */ |
.petite-majuscule{ |
font-variant:small-caps;} |
/* Zones d'informations générales */ |
.txt-original{ |
width:350px; |
text-align:justify; |
white-space:pre-wrap; |
line-height:1.6em; |
font-size:1em;} |
.txt-original:before{ |
content:"Texte original : ";} |
.source:before{ |
content:"Source : ";} |
/* TODO : trouver des correspondances avec les ontologies du TDWG */ |
.nn{ |
font-weight:bold;} |
.nom-vernaculaire{ |
background-color:#d9ffb2; |
border:0.1em solid #d9ffb2;} |
.utilisation{ |
background-color:#d9b2ff; |
border:0.1em solid #d9b2ff;} |
.floraison{ |
background-color:#b2e3ff; |
border:0.1em solid #b2e3ff;} |
/* TaxonName Ontologie TDWG */ |
.taxonName{ |
background-color:#ffecb2; |
border:0.1em solid #ffecb2;} |
.uninomial, .genusPart, .infragenericEpithet, .specificEpithet, .infraspecificEpithet { |
font-style:italic;} |
.taxonName .publicationCitation{ |
border:0.1em dotted #ffecb2;} |
/* SPMInfoItems Ontologie TDWG */ |
.description{ |
background-color:#ffcfb2; |
border:0.1em solid #ffcfb2;} |
.habitat{ |
background-color:#f5b2ff; |
border:0.1em solid #f5b2ff;} |
.distribution{ |
background-color:#ccf; |
border:0.1em solid #ccf;} |
/* PublicationCitation Ontologie TDWG */ |
.publicationCitation{ |
background-color:#f6ffb2; |
border:0.1em solid #f6ffb2;} |
/* PublicationCitation : autorship */ |
.publicationCitation .authorship{ |
} |
/* PublicationCitation : short title */ |
.publicationCitation .shortTitle{ |
font-style:italic;} |
/* PublicationCitation : pages */ |
.publicationCitation .pages{ |
} |
/branches/v1.0-pithivier/themes/bootstrap/images/favicon.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-pithivier/themes/bootstrap/images/favicon.ico |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-pithivier/themes/bootstrap/images/favicon.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
/branches/v1.0-pithivier/themes/bootstrap/images/favicon.png |
---|
New file |
Property changes: |
Added: svn:mime-type |
+image/png |
\ No newline at end of property |
/branches/v1.0-pithivier/themes/bootstrap/images/apple-touch-icon.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
/branches/v1.0-pithivier/themes/bootstrap/images/apple-touch-icon.png |
---|
New file |
Property changes: |
Added: svn:mime-type |
+image/png |
\ No newline at end of property |
/branches/v1.0-pithivier |
---|
New file |
Property changes: |
Added: svn:ignore |
+.buildpath |
+.project |
+.settings |